Version 2.14.0-134.0.dev

Merge commit '88021fd67a668180609fffb2daabcee6053741ef' into 'dev'
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index b5ac7eb..7773b42 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,7 @@
     "constraint, update this by running tools/generate_package_config.dart."
   ],
   "configVersion": 2,
-  "generated": "2021-05-19T20:22:15.931476",
+  "generated": "2021-05-20T07:53:18.817456",
   "generator": "tools/generate_package_config.dart",
   "packages": [
     {
@@ -318,6 +318,12 @@
       "languageVersion": "2.7"
     },
     {
+      "name": "frontend_server_client",
+      "rootUri": "../third_party/pkg/webdev/frontend_server_client",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    },
+    {
       "name": "glob",
       "rootUri": "../third_party/pkg/glob",
       "packageUri": "lib/",
diff --git a/DEPS b/DEPS
index cfd9878..fac5e34 100644
--- a/DEPS
+++ b/DEPS
@@ -174,6 +174,7 @@
   "web_components_rev": "8f57dac273412a7172c8ade6f361b407e2e4ed02",
   "web_socket_channel_rev": "6448ce532445a8a458fa191d9346df071ae0acad",
   "WebCore_rev": "fb11e887f77919450e497344da570d780e078bc8",
+  "webdev_rev": "b0aae7b6944d484722e6af164abedd864a2a0afa",
   "webkit_inspection_protocol_rev": "6b15729292d030f2e5c5861022da4c5a4c11961c",
   "yaml_rev": "b4c4411631bda556ce9a45af1ab0eecaf9f3ac53",
   "zlib_rev": "bf44340d1b6be1af8950bbdf664fec0cf5a831cc",
@@ -481,6 +482,8 @@
   Var("dart_root") + "/third_party/pkg/web_components":
       Var("dart_git") + "web-components.git" +
       "@" + Var("web_components_rev"),
+  Var("dart_root") + "/third_party/pkg/webdev":
+      Var("dart_git") + "webdev.git" + "@" + Var("webdev_rev"),
   Var("dart_root") + "/third_party/pkg/webdriver":
       Var("dart_git") + "external/github.com/google/webdriver.dart.git" +
       "@" + Var("webdriver_rev"),
diff --git a/pkg/_fe_analyzer_shared/lib/src/base/errors.dart b/pkg/_fe_analyzer_shared/lib/src/base/errors.dart
index 27bd02b..1390395 100644
--- a/pkg/_fe_analyzer_shared/lib/src/base/errors.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/base/errors.dart
@@ -47,7 +47,7 @@
     required String message,
     required this.name,
     required this.uniqueName,
-  })   : _correction = correction,
+  })  : _correction = correction,
         _message = message,
         // ignore: unnecessary_null_comparison
         assert(hasPublishedDocs != null),
@@ -104,7 +104,7 @@
    */
   String? get url {
     if (hasPublishedDocs) {
-      return 'https://dart.dev/tools/diagnostic-messages#${name.toLowerCase()}';
+      return 'https://dart.dev/diagnostics/${name.toLowerCase()}';
     }
     return null;
   }
diff --git a/pkg/analysis_server/test/protocol_server_test.dart b/pkg/analysis_server/test/protocol_server_test.dart
index f844d14..2151ba7 100644
--- a/pkg/analysis_server/test/protocol_server_test.dart
+++ b/pkg/analysis_server/test/protocol_server_test.dart
@@ -86,7 +86,7 @@
       },
       MESSAGE: 'my message',
       CODE: 'ambiguous_export',
-      URL: 'https://dart.dev/tools/diagnostic-messages#ambiguous_export',
+      URL: 'https://dart.dev/diagnostics/ambiguous_export',
       CONTEXT_MESSAGES: [
         {
           MESSAGE: 'context',
@@ -130,7 +130,7 @@
       MESSAGE: 'my message',
       CORRECTION: 'my correction',
       CODE: 'ambiguous_export',
-      URL: 'https://dart.dev/tools/diagnostic-messages#ambiguous_export',
+      URL: 'https://dart.dev/diagnostics/ambiguous_export',
       HAS_FIX: false
     });
   }
@@ -214,7 +214,7 @@
       },
       MESSAGE: 'my message',
       CODE: 'ambiguous_export',
-      URL: 'https://dart.dev/tools/diagnostic-messages#ambiguous_export',
+      URL: 'https://dart.dev/diagnostics/ambiguous_export',
       HAS_FIX: false
     });
   }
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 5db427d..351b628 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -428,11 +428,11 @@
 
   /// A list containing all of the mixins that are applied to the class being
   /// extended in order to derive the superclass of this class.
-  List<InterfaceType> _mixins = _Sentinel.interfaceType;
+  List<InterfaceType> _mixins = const [];
 
   /// A list containing all of the interfaces that are implemented by this
   /// class.
-  List<InterfaceType> _interfaces = _Sentinel.interfaceType;
+  List<InterfaceType> _interfaces = const [];
 
   /// For classes which are not mixin applications, a list containing all of the
   /// constructors contained in this class, or `null` if the list of
@@ -448,7 +448,7 @@
   bool hasBeenInferred = false;
 
   /// This callback is set during mixins inference to handle reentrant calls.
-  List<InterfaceType>? Function(ClassElementImpl)? linkedMixinInferenceCallback;
+  List<InterfaceType>? Function(ClassElementImpl)? mixinInferenceCallback;
 
   /// TODO(scheglov) implement as modifier
   bool _isSimplyBounded = true;
@@ -459,17 +459,6 @@
   /// given [offset] in the file that contains the declaration of this element.
   ClassElementImpl(String name, int offset) : super(name, offset);
 
-  ClassElementImpl.forLinkedNode(CompilationUnitElementImpl enclosing,
-      Reference reference, AstNode linkedNode)
-      : super.forLinkedNode(enclosing, reference, linkedNode) {
-    if (linkedNode is ClassDeclarationImpl) {
-      linkedNode.name.staticElement = this;
-    } else if (linkedNode is ClassTypeAliasImpl) {
-      linkedNode.name.staticElement = this;
-    }
-    hasBeenInferred = !linkedContext!.isLinking;
-  }
-
   @override
   List<PropertyAccessorElement> get accessors {
     if (!identical(_accessors, _Sentinel.propertyAccessorElement)) {
@@ -613,31 +602,11 @@
 
   List<InterfaceType> get interfacesInternal {
     linkedData?.read(this);
-    if (!identical(_interfaces, _Sentinel.interfaceType)) {
-      return _interfaces;
-    }
-
-    if (linkedNode != null) {
-      var context = enclosingUnit.linkedContext!;
-      var implementsClause = context.getImplementsClause(linkedNode!);
-      if (implementsClause != null) {
-        return _interfaces = implementsClause.interfaces
-            .map((node) => node.type)
-            .whereType<InterfaceType>()
-            .where(_isInterfaceTypeInterface)
-            .toList();
-      } else {
-        return _interfaces = const [];
-      }
-    }
     return _interfaces;
   }
 
   @override
   bool get isAbstract {
-    if (linkedNode != null) {
-      return enclosingUnit.linkedContext!.isAbstract(linkedNode!);
-    }
     return hasModifier(Modifier.ABSTRACT);
   }
 
@@ -651,9 +620,6 @@
 
   @override
   bool get isMixinApplication {
-    if (linkedNode != null) {
-      return linkedNode is ClassTypeAlias;
-    }
     return hasModifier(Modifier.MIXIN_APPLICATION);
   }
 
@@ -722,32 +688,14 @@
 
   @override
   List<InterfaceType> get mixins {
-    if (linkedMixinInferenceCallback != null) {
-      var mixins = linkedMixinInferenceCallback!(this);
+    if (mixinInferenceCallback != null) {
+      var mixins = mixinInferenceCallback!(this);
       if (mixins != null) {
         return _mixins = mixins;
       }
     }
 
     linkedData?.read(this);
-    if (!identical(_mixins, _Sentinel.interfaceType)) {
-      return _mixins;
-    }
-
-    if (linkedNode != null) {
-      var context = enclosingUnit.linkedContext!;
-      var withClause = context.getWithClause(linkedNode!);
-      if (withClause != null) {
-        return _mixins = withClause.mixinTypes
-            .map((node) => node.type)
-            .whereType<InterfaceType>()
-            .where(_isInterfaceTypeInterface)
-            .toList();
-      } else {
-        return _mixins = const [];
-      }
-    }
-
     return _mixins;
   }
 
@@ -757,25 +705,9 @@
 
   @override
   String get name {
-    final linkedData = this.linkedData;
-    if (linkedData != null) {
-      return linkedData.reference.name;
-    }
-
-    if (linkedNode != null) {
-      return reference!.name;
-    }
     return super.name!;
   }
 
-  @override
-  int get nameOffset {
-    if (linkedNode != null) {
-      return enclosingUnit.linkedContext!.getNameOffset(linkedNode!);
-    }
-    return super.nameOffset;
-  }
-
   /// Names of methods, getters, setters, and operators that this mixin
   /// declaration super-invokes.  For setters this includes the trailing "=".
   /// The list will be empty if this class is not a mixin declaration.
@@ -790,17 +722,6 @@
       return null;
     }
 
-    if (linkedNode != null) {
-      var type = linkedContext!.getSuperclass(linkedNode!)?.type;
-      if (_isInterfaceTypeClass(type)) {
-        return _supertype = type as InterfaceType;
-      }
-      if (library.isDartCore && name == 'Object') {
-        setModifier(Modifier.DART_CORE_OBJECT, true);
-        return null;
-      }
-      return _supertype = library.typeProvider.objectType;
-    }
     return _supertype;
   }
 
@@ -842,11 +763,6 @@
   ConstructorElement? getNamedConstructor(String name) =>
       getNamedConstructorFromList(name, constructors);
 
-  void resetAfterMixinInference() {
-    linkedMixinInferenceCallback = null;
-    _mixins = _Sentinel.interfaceType;
-  }
-
   void setLinkedData(Reference reference, ElementLinkedData linkedData) {
     this.reference = reference;
     reference.element = this;
@@ -1000,43 +916,6 @@
     }).toList(growable: false);
   }
 
-  /// Return `true` if the given [type] is an [InterfaceType] that can be used
-  /// as a class.
-  bool _isInterfaceTypeClass(DartType? type) {
-    if (type is InterfaceType) {
-      var element = type.element;
-      if (element.isEnum || element.isMixin) {
-        return false;
-      }
-      if (type.isDartCoreFunction || type.isDartCoreNull) {
-        return false;
-      }
-      if (type.nullabilitySuffix == NullabilitySuffix.question) {
-        return false;
-      }
-      return true;
-    }
-    return false;
-  }
-
-  /// Return `true` if the given [type] is an [InterfaceType] that can be used
-  /// as an interface or a mixin.
-  bool _isInterfaceTypeInterface(DartType type) {
-    if (type is InterfaceType) {
-      if (type.element.isEnum) {
-        return false;
-      }
-      if (type.isDartCoreFunction || type.isDartCoreNull) {
-        return false;
-      }
-      if (type.nullabilitySuffix == NullabilitySuffix.question) {
-        return false;
-      }
-      return true;
-    }
-    return false;
-  }
-
   static ConstructorElement? getNamedConstructorFromList(
       String name, List<ConstructorElement> constructors) {
     for (ConstructorElement element in constructors) {
@@ -1085,7 +964,7 @@
   List<FunctionElement> _functions = const [];
 
   /// A list containing all of the mixins contained in this compilation unit.
-  List<ClassElement> _mixins = _Sentinel.classElement;
+  List<ClassElement> _mixins = const [];
 
   /// A list containing all of the function type aliases contained in this
   /// compilation unit.
@@ -1098,7 +977,7 @@
   List<TypeAliasElement> _typeAliases = _Sentinel.typeAliasElement;
 
   /// A list containing all of the classes contained in this compilation unit.
-  List<ClassElement> _types = _Sentinel.classElement;
+  List<ClassElement> _types = const [];
 
   /// A list containing all of the variables contained in this compilation unit.
   List<TopLevelVariableElement> _variables = const [];
@@ -1252,23 +1131,6 @@
 
   @override
   List<ClassElement> get mixins {
-    if (!identical(_mixins, _Sentinel.classElement)) {
-      return _mixins;
-    }
-
-    if (linkedNode != null) {
-      var containerRef = reference!.getChild('@mixin');
-      var declarations = _linkedUnitDeclarations;
-      return _mixins =
-          declarations.whereType<MixinDeclarationImpl>().map((node) {
-        var name = node.name.name;
-        var reference = containerRef.getChild(name);
-        var element = node.declaredElement as MixinElementImpl?;
-        element ??= MixinElementImpl.forLinkedNode(this, reference, node);
-        return element;
-      }).toList();
-    }
-
     return _mixins;
   }
 
@@ -1340,32 +1202,6 @@
 
   @override
   List<ClassElement> get types {
-    if (!identical(_types, _Sentinel.classElement)) {
-      return _types;
-    }
-
-    if (linkedNode != null) {
-      var containerRef = reference!.getChild('@class');
-      _types = <ClassElement>[];
-      var declarations = _linkedUnitDeclarations;
-      for (var node in declarations) {
-        if (node is ClassDeclaration) {
-          var name = node.name.name;
-          var reference = containerRef.getChild(name);
-          var element = node.declaredElement;
-          element ??= ClassElementImpl.forLinkedNode(this, reference, node);
-          _types.add(element);
-        } else if (node is ClassTypeAlias) {
-          var name = node.name.name;
-          var reference = containerRef.getChild(name);
-          var element = node.declaredElement;
-          element ??= ClassElementImpl.forLinkedNode(this, reference, node);
-          _types.add(element);
-        }
-      }
-      return _types;
-    }
-
     return _types;
   }
 
@@ -4575,7 +4411,7 @@
 
   /// A list containing all of the superclass constraints that are defined for
   /// the mixin.
-  List<InterfaceType> _superclassConstraints = _Sentinel.interfaceType;
+  List<InterfaceType> _superclassConstraints = const [];
 
   @override
   late List<String> superInvokedNames;
@@ -4584,12 +4420,6 @@
   /// given [offset] in the file that contains the declaration of this element.
   MixinElementImpl(String name, int offset) : super(name, offset);
 
-  MixinElementImpl.forLinkedNode(CompilationUnitElementImpl enclosing,
-      Reference reference, MixinDeclarationImpl linkedNode)
-      : super.forLinkedNode(enclosing, reference, linkedNode) {
-    linkedNode.name.staticElement = this;
-  }
-
   @override
   bool get isAbstract => true;
 
@@ -4602,27 +4432,6 @@
   @override
   List<InterfaceType> get superclassConstraints {
     linkedData?.read(this);
-    if (!identical(_superclassConstraints, _Sentinel.interfaceType)) {
-      return _superclassConstraints;
-    }
-
-    final linkedNode = this.linkedNode;
-    if (linkedNode is MixinDeclaration) {
-      List<InterfaceType>? constraints;
-      var onClause = linkedNode.onClause;
-      if (onClause != null) {
-        constraints = onClause.superclassConstraints
-            .map((node) => node.type)
-            .whereType<InterfaceType>()
-            .where(_isInterfaceTypeInterface)
-            .toList();
-      }
-      if (constraints == null || constraints.isEmpty) {
-        constraints = [library.typeProvider.objectType];
-      }
-      return _superclassConstraints = constraints;
-    }
-
     return _superclassConstraints;
   }
 
@@ -6319,7 +6128,6 @@
 /// Instances of [List]s that are used as "not yet computed" values, they
 /// must be not `null`, and not identical to `const <T>[]`.
 class _Sentinel {
-  static final List<ClassElement> classElement = List.unmodifiable([]);
   static final List<ConstructorElement> constructorElement =
       List.unmodifiable([]);
   static final List<ElementAnnotation> elementAnnotation =
@@ -6331,7 +6139,6 @@
   static final List<FunctionTypeAliasElement> functionTypeAliasElement =
       List.unmodifiable([]);
   static final List<ImportElement> importElement = List.unmodifiable([]);
-  static final List<InterfaceType> interfaceType = List.unmodifiable([]);
   static final List<MethodElement> methodElement = List.unmodifiable([]);
   static final List<PropertyAccessorElement> propertyAccessorElement =
       List.unmodifiable([]);
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index edfbc7b..0aefca2 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -2480,7 +2480,7 @@
   final ErrorReporter errorReporter;
 
   /// The scope used to resolve identifiers.
-  late Scope nameScope;
+  Scope nameScope;
 
   /// The scope used to resolve unlabeled `break` and `continue` statements.
   ImplicitLabelScope _implicitLabelScope = ImplicitLabelScope.ROOT;
@@ -2518,13 +2518,8 @@
           errorListener,
           source,
           isNonNullableByDefault: definingLibrary.isNonNullableByDefault,
-        ) {
-    if (nameScope == null) {
-      this.nameScope = LibraryScope(definingLibrary);
-    } else {
-      this.nameScope = nameScope;
-    }
-  }
+        ),
+        nameScope = nameScope ?? LibraryScope(definingLibrary);
 
   /// Return the implicit label scope in which the current node is being
   /// resolved.
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 3784428..453957c 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -40,9 +40,11 @@
     _unitElement.accessors = _enclosingContext.propertyAccessors;
     _unitElement.enums = _enclosingContext.enums;
     _unitElement.functions = _enclosingContext.functions;
+    _unitElement.mixins = _enclosingContext.mixins;
     _unitElement.topLevelVariables = _enclosingContext.properties
         .whereType<TopLevelVariableElementImpl>()
         .toList();
+    _unitElement.types = _enclosingContext.classes;
   }
 
   /// This method should be invoked after visiting directive nodes, it
@@ -63,8 +65,30 @@
   }
 
   @override
-  void visitClassDeclaration(ClassDeclaration node) {
-    node.typeParameters?.accept(this);
+  void visitClassDeclaration(covariant ClassDeclarationImpl node) {
+    var nameNode = node.name;
+    var name = nameNode.name;
+
+    var element = ClassElementImpl(name, nameNode.offset);
+    element.isAbstract = node.isAbstract;
+    element.metadata = _buildAnnotations(node.metadata);
+    _setCodeRange(element, node);
+
+    nameNode.staticElement = element;
+    _linker.elementNodes[element] = node;
+
+    var reference = _enclosingContext.addClass(name, element);
+    _libraryBuilder.localScope.declare(name, reference);
+
+    var holder = _EnclosingContext(reference, element);
+    _withEnclosing(holder, () {
+      var typeParameters = node.typeParameters;
+      if (typeParameters != null) {
+        typeParameters.accept(this);
+        element.typeParameters = holder.typeParameters;
+      }
+    });
+
     node.extendsClause?.accept(this);
     node.withClause?.accept(this);
     node.implementsClause?.accept(this);
@@ -72,8 +96,31 @@
   }
 
   @override
-  void visitClassTypeAlias(ClassTypeAlias node) {
-    node.typeParameters?.accept(this);
+  void visitClassTypeAlias(covariant ClassTypeAliasImpl node) {
+    var nameNode = node.name;
+    var name = nameNode.name;
+
+    var element = ClassElementImpl(name, nameNode.offset);
+    element.isAbstract = node.isAbstract;
+    element.isMixinApplication = true;
+    element.metadata = _buildAnnotations(node.metadata);
+    _setCodeRange(element, node);
+
+    nameNode.staticElement = element;
+    _linker.elementNodes[element] = node;
+
+    var reference = _enclosingContext.addClass(name, element);
+    _libraryBuilder.localScope.declare(name, reference);
+
+    var holder = _EnclosingContext(reference, element);
+    _withEnclosing(holder, () {
+      var typeParameters = node.typeParameters;
+      if (typeParameters != null) {
+        typeParameters.accept(this);
+        element.typeParameters = holder.typeParameters;
+      }
+    });
+
     node.superclass.accept(this);
     node.withClause.accept(this);
     node.implementsClause?.accept(this);
@@ -531,8 +578,29 @@
   }
 
   @override
-  void visitMixinDeclaration(MixinDeclaration node) {
-    node.typeParameters?.accept(this);
+  void visitMixinDeclaration(covariant MixinDeclarationImpl node) {
+    var nameNode = node.name;
+    var name = nameNode.name;
+
+    var element = MixinElementImpl(name, nameNode.offset);
+    element.metadata = _buildAnnotations(node.metadata);
+    _setCodeRange(element, node);
+
+    nameNode.staticElement = element;
+    _linker.elementNodes[element] = node;
+
+    var reference = _enclosingContext.addMixin(name, element);
+    _libraryBuilder.localScope.declare(name, reference);
+
+    var holder = _EnclosingContext(reference, element);
+    _withEnclosing(holder, () {
+      var typeParameters = node.typeParameters;
+      if (typeParameters != null) {
+        typeParameters.accept(this);
+        element.typeParameters = holder.typeParameters;
+      }
+    });
+
     node.onClause?.accept(this);
     node.implementsClause?.accept(this);
     _buildClassOrMixin(node);
@@ -943,10 +1011,12 @@
 class _EnclosingContext {
   final Reference reference;
   final ElementImpl element;
+  final List<ClassElementImpl> classes = [];
   final List<ConstructorElementImpl> constructors = [];
   final List<EnumElementImpl> enums = [];
   final List<FunctionElementImpl> functions = [];
   final List<MethodElementImpl> methods = [];
+  final List<MixinElementImpl> mixins = [];
   final List<ParameterElementImpl> parameters = [];
   final List<PropertyInducingElementImpl> properties = [];
   final List<PropertyAccessorElementImpl> propertyAccessors = [];
@@ -959,6 +1029,11 @@
     this.hasConstConstructor = false,
   });
 
+  Reference addClass(String name, ClassElementImpl element) {
+    classes.add(element);
+    return _bindReference('@class', name, element);
+  }
+
   Reference addConstructor(String name, ConstructorElementImpl element) {
     constructors.add(element);
     return _bindReference('@constructor', name, element);
@@ -989,6 +1064,11 @@
     return _bindReference('@method', name, element);
   }
 
+  Reference addMixin(String name, MixinElementImpl element) {
+    mixins.add(element);
+    return _bindReference('@mixin', name, element);
+  }
+
   Reference? addParameter(String? name, ParameterElementImpl element) {
     parameters.add(element);
     if (name != null) {
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index 3b9c95d..be39cb7 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -85,32 +85,14 @@
   void addLocalDeclarations() {
     for (var linkingUnit in context.units) {
       var unitRef = reference.getChild('@unit').getChild(linkingUnit.uriStr);
-      var classRef = unitRef.getChild('@class');
       var extensionRef = unitRef.getChild('@extension');
-      var mixinRef = unitRef.getChild('@mixin');
       var typeAliasRef = unitRef.getChild('@typeAlias');
       var nextUnnamedExtensionId = 0;
       for (var node in linkingUnit.unit.declarations) {
         if (node is ast.ClassDeclaration) {
-          var name = node.name.name;
-          var reference = classRef.getChild(name);
-          reference.node ??= node;
-          localScope.declare(name, reference);
-
-          ClassElementImpl.forLinkedNode(
-              linkingUnit.reference.element as CompilationUnitElementImpl,
-              reference,
-              node);
+          // Handled in ElementBuilder.
         } else if (node is ast.ClassTypeAlias) {
-          var name = node.name.name;
-          var reference = classRef.getChild(name);
-          reference.node ??= node;
-          localScope.declare(name, reference);
-
-          ClassElementImpl.forLinkedNode(
-              linkingUnit.reference.element as CompilationUnitElementImpl,
-              reference,
-              node);
+          // Handled in ElementBuilder.
         } else if (node is ast.EnumDeclarationImpl) {
           // Handled in ElementBuilder.
         } else if (node is ast.ExtensionDeclarationImpl) {
@@ -153,15 +135,7 @@
               reference,
               node);
         } else if (node is ast.MixinDeclarationImpl) {
-          var name = node.name.name;
-          var reference = mixinRef.getChild(name);
-          reference.node ??= node;
-          localScope.declare(name, reference);
-
-          MixinElementImpl.forLinkedNode(
-              linkingUnit.reference.element as CompilationUnitElementImpl,
-              reference,
-              node);
+          // Handled in ElementBuilder.
         } else if (node is ast.TopLevelVariableDeclaration) {
           // Handled in ElementBuilder.
         } else {
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index c4835f4..8987d12 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -217,7 +217,7 @@
       library.resolveTypes(nodesToBuildType);
     }
     VarianceBuilder().perform(this);
-    computeSimplyBounded(builders.values);
+    computeSimplyBounded(this);
     TypeAliasSelfReferenceFinder().perform(this);
     TypesBuilder(this).build(nodesToBuildType);
   }
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index ed8df04..150ac8d 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -63,7 +63,6 @@
     element.constructors; // create elements
     element.methods; // create elements
 
-    _createTypeParameterElements(element, node.typeParameters);
     scope = TypeParameterScope(scope, element.typeParameters);
 
     node.typeParameters?.accept(this);
@@ -86,7 +85,6 @@
 
     var element = node.declaredElement as ClassElementImpl;
 
-    _createTypeParameterElements(element, node.typeParameters);
     scope = TypeParameterScope(scope, element.typeParameters);
     LinkingNodeContext(node, scope);
 
@@ -328,7 +326,6 @@
     element.constructors; // create elements
     element.methods; // create elements
 
-    _createTypeParameterElements(element, node.typeParameters);
     scope = TypeParameterScope(scope, element.typeParameters);
 
     node.typeParameters?.accept(this);
diff --git a/pkg/analyzer/lib/src/summary2/simply_bounded.dart b/pkg/analyzer/lib/src/summary2/simply_bounded.dart
index 45a0336..538f5d7 100644
--- a/pkg/analyzer/lib/src/summary2/simply_bounded.dart
+++ b/pkg/analyzer/lib/src/summary2/simply_bounded.dart
@@ -7,17 +7,15 @@
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/summary/link.dart' as graph
     show DependencyWalker, Node;
-import 'package:analyzer/src/summary2/library_builder.dart';
+import 'package:analyzer/src/summary2/link.dart';
 
 /// Compute simple-boundedness for all classes and generic types aliases in
-/// the source [libraryBuilders].  There might be dependencies between them,
-/// so they all should be processed simultaneously.
-void computeSimplyBounded(
-  Iterable<LibraryBuilder> libraryBuilders,
-) {
-  var walker = SimplyBoundedDependencyWalker();
+/// the [linker]. There might be dependencies between them, so they all should
+/// be processed simultaneously.
+void computeSimplyBounded(Linker linker) {
+  var walker = SimplyBoundedDependencyWalker(linker);
   var nodes = <SimplyBoundedNode>[];
-  for (var libraryBuilder in libraryBuilders) {
+  for (var libraryBuilder in linker.builders.values) {
     for (var unit in libraryBuilder.element.units) {
       for (var element in unit.typeAliases) {
         var node = walker.getNode(element);
@@ -60,8 +58,11 @@
 /// The graph walker for evaluating whether types are simply bounded.
 class SimplyBoundedDependencyWalker
     extends graph.DependencyWalker<SimplyBoundedNode> {
+  final Linker linker;
   final Map<Element, SimplyBoundedNode> nodeMap = Map.identity();
 
+  SimplyBoundedDependencyWalker(this.linker);
+
   @override
   void evaluate(SimplyBoundedNode v) {
     v._evaluate();
@@ -77,7 +78,7 @@
   SimplyBoundedNode getNode(Element element) {
     var graphNode = nodeMap[element];
     if (graphNode == null) {
-      var node = (element as ElementImpl).linkedNode;
+      var node = linker.getLinkingNode(element);
       if (node is ClassDeclaration) {
         var parameters = node.typeParameters?.typeParameters;
         graphNode = SimplyBoundedNode(
diff --git a/pkg/analyzer/lib/src/summary2/top_level_inference.dart b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
index 158f28a..7fd8d02 100644
--- a/pkg/analyzer/lib/src/summary2/top_level_inference.dart
+++ b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
@@ -21,10 +21,6 @@
 import 'package:analyzer/src/task/strong_mode.dart';
 import 'package:collection/collection.dart';
 
-AstNode _getLinkedNode(Element element) {
-  return (element as ElementImpl).linkedNode!;
-}
-
 /// Resolver for typed constant top-level variables and fields initializers.
 ///
 /// Initializers of untyped variables are resolved during [TopLevelInference].
@@ -57,7 +53,7 @@
     _enclosingClassHasConstConstructor =
         class_.constructors.any((c) => c.isConst);
 
-    var node = _getLinkedNode(class_);
+    var node = linker.getLinkingNode(class_)!;
     _scope = LinkingNodeContext.get(node).scope;
     for (var element in class_.fields) {
       _resolveVariable(element);
@@ -66,7 +62,7 @@
   }
 
   void _resolveExtensionFields(ExtensionElement extension_) {
-    var node = _getLinkedNode(extension_);
+    var node = linker.getLinkingNode(extension_)!;
     _scope = LinkingNodeContext.get(node).scope;
     for (var element in extension_.fields) {
       _resolveVariable(element);
@@ -296,7 +292,7 @@
   }
 
   void _addClassElementFields(ClassElement class_) {
-    var node = _getLinkedNode(class_);
+    var node = _linker.getLinkingNode(class_)!;
     _scope = LinkingNodeContext.get(node).scope;
     for (var element in class_.fields) {
       _addVariableNode(element);
@@ -304,7 +300,7 @@
   }
 
   void _addExtensionElementFields(ExtensionElement extension_) {
-    var node = _getLinkedNode(extension_);
+    var node = _linker.getLinkingNode(extension_)!;
     _scope = LinkingNodeContext.get(node).scope;
     for (var element in extension_.fields) {
       _addVariableNode(element);
diff --git a/pkg/analyzer/lib/src/summary2/type_alias.dart b/pkg/analyzer/lib/src/summary2/type_alias.dart
index da7f48e..4ff3555 100644
--- a/pkg/analyzer/lib/src/summary2/type_alias.dart
+++ b/pkg/analyzer/lib/src/summary2/type_alias.dart
@@ -13,12 +13,12 @@
       for (var unitContext in builder.context.units) {
         for (var node in unitContext.unit.declarations) {
           if (node is FunctionTypeAlias) {
-            var finder = _Finder(node);
+            var finder = _Finder(linker, node);
             finder.functionTypeAlias(node);
             var element = node.declaredElement as TypeAliasElementImpl;
             element.hasSelfReference = finder.hasSelfReference;
           } else if (node is GenericTypeAlias) {
-            var finder = _Finder(node);
+            var finder = _Finder(linker, node);
             finder.genericTypeAlias(node);
             var element = node.declaredElement as TypeAliasElementImpl;
             element.hasSelfReference = finder.hasSelfReference;
@@ -30,11 +30,12 @@
 }
 
 class _Finder {
+  final Linker linker;
   final AstNode self;
   final Set<AstNode> visited = Set.identity();
   bool hasSelfReference = false;
 
-  _Finder(this.self);
+  _Finder(this.linker, this.self);
 
   void functionTypeAlias(FunctionTypeAlias node) {
     _typeParameterList(node.typeParameters);
@@ -86,12 +87,12 @@
 
     if (node is TypeName) {
       var element = node.name.staticElement;
-      // TODO(scheglov) We have `linkedContext` only during linking.
-      if (element is ElementImpl &&
-          element.enclosingElement != null &&
-          element.linkedContext != null &&
-          element.linkedContext!.isLinking) {
-        var typeNode = element.linkedNode;
+      if (element is! ElementImpl) {
+        return;
+      }
+
+      var typeNode = linker.getLinkingNode(element);
+      if (typeNode != null) {
         if (typeNode == self) {
           hasSelfReference = true;
           return;
diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart
index b3446f2..6023f77 100644
--- a/pkg/analyzer/lib/src/summary2/types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/types_builder.dart
@@ -18,6 +18,39 @@
 import 'package:analyzer/src/summary2/link.dart';
 import 'package:analyzer/src/summary2/type_builder.dart';
 
+/// Return `true` if [type] can be used as a class.
+bool _isInterfaceTypeClass(InterfaceType type) {
+  if (type.element.isMixin) {
+    return false;
+  }
+  return _isInterfaceTypeInterface(type);
+}
+
+/// Return `true` if [type] can be used as an interface or a mixin.
+bool _isInterfaceTypeInterface(InterfaceType type) {
+  if (type.element.isEnum) {
+    return false;
+  }
+  if (type.isDartCoreFunction || type.isDartCoreNull) {
+    return false;
+  }
+  if (type.nullabilitySuffix == NullabilitySuffix.question) {
+    return false;
+  }
+  return true;
+}
+
+List<InterfaceType> _toInterfaceTypeList(List<TypeName>? nodeList) {
+  if (nodeList != null) {
+    return nodeList
+        .map((e) => e.type)
+        .whereType<InterfaceType>()
+        .where(_isInterfaceTypeInterface)
+        .toList();
+  }
+  return const [];
+}
+
 class NodesToBuildType {
   final List<AstNode> declarations = [];
   final List<TypeBuilder> typeBuilders = [];
@@ -63,7 +96,7 @@
       }
     });
 
-    _MixinsInference().perform(nodes.declarations);
+    _MixinsInference(_linker).perform(nodes.declarations);
   }
 
   FunctionType _buildFunctionType(
@@ -84,9 +117,50 @@
     );
   }
 
-  void _classDeclaration(ClassDeclaration node) {}
+  void _classDeclaration(ClassDeclaration node) {
+    var element = node.declaredElement as ClassElementImpl;
 
-  void _classTypeAlias(ClassTypeAlias node) {}
+    var extendsClause = node.extendsClause;
+    if (extendsClause != null) {
+      var type = extendsClause.superclass.type;
+      if (type is InterfaceType && _isInterfaceTypeClass(type)) {
+        element.supertype = type;
+      } else {
+        element.supertype = _objectType(element);
+      }
+    } else if (element.library.isDartCore && element.name == 'Object') {
+      element.setModifier(Modifier.DART_CORE_OBJECT, true);
+    } else {
+      element.supertype = _objectType(element);
+    }
+
+    element.mixins = _toInterfaceTypeList(
+      node.withClause?.mixinTypes,
+    );
+
+    element.interfaces = _toInterfaceTypeList(
+      node.implementsClause?.interfaces,
+    );
+  }
+
+  void _classTypeAlias(ClassTypeAlias node) {
+    var element = node.declaredElement as ClassElementImpl;
+
+    var superType = node.superclass.type;
+    if (superType is InterfaceType && _isInterfaceTypeInterface(superType)) {
+      element.supertype = superType;
+    } else {
+      element.supertype = _objectType(element);
+    }
+
+    element.mixins = _toInterfaceTypeList(
+      node.withClause.mixinTypes,
+    );
+
+    element.interfaces = _toInterfaceTypeList(
+      node.implementsClause?.interfaces,
+    );
+  }
 
   void _declaration(AstNode node) {
     if (node is ClassDeclaration) {
@@ -128,7 +202,7 @@
       var element = node.declaredElement as ExecutableElementImpl;
       element.returnType = returnType;
     } else if (node is MixinDeclaration) {
-      // TODO(scheglov) ???
+      _mixinDeclaration(node);
     } else if (node is SimpleFormalParameter) {
       var element = node.declaredElement as ParameterElementImpl;
       element.type = node.type?.type ?? _dynamicType;
@@ -191,6 +265,22 @@
     return unit!.featureSet.isEnabled(Feature.non_nullable);
   }
 
+  void _mixinDeclaration(MixinDeclaration node) {
+    var element = node.declaredElement as MixinElementImpl;
+
+    var constraints = _toInterfaceTypeList(
+      node.onClause?.superclassConstraints,
+    );
+    if (constraints.isEmpty) {
+      constraints = [_objectType(element)];
+    }
+    element.superclassConstraints = constraints;
+
+    element.interfaces = _toInterfaceTypeList(
+      node.implementsClause?.interfaces,
+    );
+  }
+
   NullabilitySuffix _nullability(AstNode node, bool hasQuestion) {
     if (_isNonNullableByDefault(node)) {
       if (hasQuestion) {
@@ -212,6 +302,10 @@
         .map<TypeParameterElement>((p) => p.declaredElement!)
         .toList();
   }
+
+  static InterfaceType _objectType(ClassElementImpl element) {
+    return element.library.typeProvider.objectType;
+  }
 }
 
 /// Performs mixins inference in a [ClassDeclaration].
@@ -334,7 +428,7 @@
   }
 
   InterfaceType _interfaceType(DartType type) {
-    if (type is InterfaceType && !type.element.isEnum) {
+    if (type is InterfaceType && _isInterfaceTypeInterface(type)) {
       return type;
     }
     return typeSystem.typeProvider.objectType;
@@ -343,11 +437,15 @@
 
 /// Performs mixin inference for all declarations.
 class _MixinsInference {
+  final Linker _linker;
+
+  _MixinsInference(this._linker);
+
   void perform(List<AstNode> declarations) {
     for (var node in declarations) {
       if (node is ClassDeclaration || node is ClassTypeAlias) {
         var element = (node as Declaration).declaredElement as ClassElementImpl;
-        element.linkedMixinInferenceCallback = _callbackWhenRecursion;
+        element.mixinInferenceCallback = _callbackWhenRecursion;
       }
     }
 
@@ -363,26 +461,33 @@
   ///
   /// This is an error. So, we return the empty list, and break the loop.
   List<InterfaceType> _callbackWhenLoop(ClassElementImpl element) {
-    element.linkedMixinInferenceCallback = null;
+    element.mixinInferenceCallback = null;
     return <InterfaceType>[];
   }
 
   /// This method is invoked when mixins are asked from the [element], and
   /// we are not inferring the [element] now, i.e. there is no loop.
   List<InterfaceType>? _callbackWhenRecursion(ClassElementImpl element) {
-    _inferDeclaration(element.linkedNode!);
+    var node = _linker.getLinkingNode(element);
+    if (node != null) {
+      _inferDeclaration(node);
+    }
     // The inference was successful, let the element return actual mixins.
     return null;
   }
 
   void _infer(ClassElementImpl element, WithClause? withClause) {
-    element.linkedMixinInferenceCallback = _callbackWhenLoop;
-    try {
-      var featureSet = _unitFeatureSet(element);
-      _MixinInference(element, featureSet).perform(withClause);
-    } finally {
-      element.linkedMixinInferenceCallback = null;
-      element.resetAfterMixinInference();
+    if (withClause != null) {
+      element.mixinInferenceCallback = _callbackWhenLoop;
+      try {
+        var featureSet = element.library.featureSet;
+        _MixinInference(element, featureSet).perform(withClause);
+      } finally {
+        element.mixinInferenceCallback = null;
+        element.mixins = _toInterfaceTypeList(
+          withClause.mixinTypes,
+        );
+      }
     }
   }
 
@@ -409,9 +514,4 @@
       }
     }
   }
-
-  static FeatureSet _unitFeatureSet(ClassElementImpl element) {
-    var unit = element.linkedNode!.parent as CompilationUnit;
-    return unit.featureSet;
-  }
 }
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 925dec6..66dfa4d 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -12749,8 +12749,6 @@
 part 'test.dart';
 class B {
 }
-class B {
-}
 ''');
   }
 
diff --git a/pkg/dartdev/test/commands/analyze_test.dart b/pkg/dartdev/test/commands/analyze_test.dart
index fdd5bac..d098f53 100644
--- a/pkg/dartdev/test/commands/analyze_test.dart
+++ b/pkg/dartdev/test/commands/analyze_test.dart
@@ -273,8 +273,7 @@
       'correction':
           "Try moving the declaration to before the first use, or renaming the local variable so that it doesn't hide a name from an enclosing scope.",
       'code': 'referenced_before_declaration',
-      'url':
-          'https:://dart.dev/tools/diagnostic-messages#referenced_before_declaration',
+      'url': 'https:://dart.dev/diagnostics/referenced_before_declaration',
       'contextMessages': [
         {
           'message': "The declaration of 's' is on line 3.",
@@ -343,7 +342,7 @@
             '"column":7},"end":{"offset":30,"line":null,"column":null}}},'
             '"message":"The declaration of \'s\' is on line 3."}],'
             '"documentation":'
-            '"https:://dart.dev/tools/diagnostic-messages#referenced_before_declaration"}]}');
+            '"https:://dart.dev/diagnostics/referenced_before_declaration"}]}');
       });
     });
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/transform_collections.dart b/pkg/front_end/lib/src/fasta/kernel/transform_collections.dart
index 58aa856..a04c1ae 100644
--- a/pkg/front_end/lib/src/fasta/kernel/transform_collections.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/transform_collections.dart
@@ -596,22 +596,23 @@
     VariableDeclaration variable;
     Statement loopBody;
     if (!typeMatches) {
-      variable = _createForInVariable(
-          entry.fileOffset,
-          new InterfaceType(_mapEntryClass, _currentLibrary.nonNullable,
-              <DartType>[const DynamicType(), const DynamicType()]));
+      final InterfaceType variableType = new InterfaceType(
+          _mapEntryClass,
+          _currentLibrary.nonNullable,
+          <DartType>[const DynamicType(), const DynamicType()]);
+      variable = _createForInVariable(entry.fileOffset, variableType);
       VariableDeclaration keyVar = _createVariable(
           _createImplicitAs(
               entry.expression.fileOffset,
               _createGetKey(entry.expression.fileOffset,
-                  _createVariableGet(variable), entryType),
+                  _createVariableGet(variable), variableType),
               keyType),
           keyType);
       VariableDeclaration valueVar = _createVariable(
           _createImplicitAs(
               entry.expression.fileOffset,
               _createGetValue(entry.expression.fileOffset,
-                  _createVariableGet(variable), entryType),
+                  _createVariableGet(variable), variableType),
               valueType),
           valueType);
       loopBody = _createBlock(<Statement>[
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.expect b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.expect
index 09282c5..3f856cd 100644
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.expect
+++ b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.expect
@@ -7,8 +7,8 @@
 
 static method main() → dynamic {
   core::List<dynamic> list = <dynamic>[];
-  if(list.{core::Iterable::isNotEmpty}) {
-    new mai::Class::•().{mai::Class::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::Enum);
+  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
+    new mai::Class::•().{mai::Class::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::Enum){(mai::Enum) → core::int};
   }
 }
 
@@ -25,14 +25,14 @@
     : mai::Enum::index = index, mai::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{mai::Enum::_name};
+    return this.{mai::Enum::_name}{core::String};
 }
 class Class extends core::Object {
   synthetic constructor •() → mai::Class
     : super core::Object::•()
     ;
   method method(mai::Enum e) → core::int
-    return e.{mai::Enum::index};
+    return e.{mai::Enum::index}{core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.transformed.expect b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.transformed.expect
index 24d6d3b..4306d18 100644
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
 
 static method main() → dynamic {
   core::List<dynamic> list = core::_GrowableList::•<dynamic>(0);
-  if(list.{core::Iterable::isNotEmpty}) {
+  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
     let dynamic #t1 = new mai::Class::•() in let dynamic #t2 = _in::unsafeCast<dynamic>(null) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::Enum in throw "Attempt to execute code removed by Dart AOT compiler (TFA)";
   }
 }
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.expect b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.expect
index d3516e5..de7f194 100644
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.expect
+++ b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.expect
@@ -7,8 +7,8 @@
 
 static method main() → dynamic {
   core::List<dynamic> list = <dynamic>[];
-  if(list.{core::Iterable::isNotEmpty}) {
-    new mai::Class::•().{mai::Class::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::Enum);
+  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
+    new mai::Class::•().{mai::Class::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::Enum){(mai::Enum) → core::int};
   }
 }
 
@@ -25,14 +25,14 @@
     : mai::Enum::index = index, mai::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{mai::Enum::_name};
+    return this.{mai::Enum::_name}{core::String};
 }
 class Class extends core::Object {
   synthetic constructor •() → mai::Class
     : super core::Object::•()
     ;
   method method(mai::Enum e) → core::int
-    return e.{mai::Enum::index};
+    return e.{mai::Enum::index}{core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.outline.expect b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.outline.expect
index 5574f01..21ae4a4 100644
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.outline.expect
@@ -19,7 +19,7 @@
     : self2::Enum::index = index, self2::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self2::Enum::_name};
+    return this.{self2::Enum::_name}{core::String};
 }
 class Class extends core::Object {
   synthetic constructor •() → self2::Class
diff --git a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.transformed.expect b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.transformed.expect
index 040adbc..e779a8d 100644
--- a/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/aot/enum_from_lib_used_as_type/main.dart.weak.transformed.expect
@@ -8,8 +8,8 @@
 
 static method main() → dynamic {
   core::List<dynamic> list = core::_GrowableList::•<dynamic>(0);
-  if(list.{core::Iterable::isNotEmpty}) {
-    new mai::Class::•().{mai::Class::method}(_in::unsafeCast<mai::Enum>(_in::unsafeCast<dynamic>(null)));
+  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
+    new mai::Class::•().{mai::Class::method}(_in::unsafeCast<mai::Enum>(_in::unsafeCast<dynamic>(null))){(mai::Enum) → core::int};
   }
 }
 
@@ -25,7 +25,7 @@
     : super core::Object::•()
     ;
   method method(mai::Enum e) → core::int
-    return e.{mai::Enum::index};
+    return e.{mai::Enum::index}{core::int};
 }
 
 
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.expect b/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.expect
index 57eb8a2..be139bc 100644
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.expect
+++ b/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.expect
@@ -15,7 +15,7 @@
     : self::UnusedEnum::index = index, self::UnusedEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::UnusedEnum::_name};
+    return this.{self::UnusedEnum::_name}{core::String};
 }
 class UsedEnum extends core::Object /*isEnum*/  {
   final field core::int index;
@@ -27,7 +27,7 @@
     : self::UsedEnum::index = index, self::UsedEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::UsedEnum::_name};
+    return this.{self::UsedEnum::_name}{core::String};
 }
 class UnusedInterface extends core::Object {
   field core::int? usedInterfaceField;
@@ -49,17 +49,17 @@
     ;
 }
 static method usedMethod(self::UnusedInterface c) → dynamic {
-  c.{self::UnusedInterface::usedInterfaceField} = c.{self::UnusedInterface::usedInterfaceField};
+  c.{self::UnusedInterface::usedInterfaceField} = c.{self::UnusedInterface::usedInterfaceField}{core::int?};
 }
 static method unusedMethod() → dynamic {}
 static method main() → dynamic {
   self::usedMethod(let final self::UsedClass #t1 = new self::UsedClass::•() in block {
-    #t1.{self::UsedClass::usedField};
+    #t1.{self::UsedClass::usedField}{core::int?};
   } =>#t1);
   #C11;
   core::List<self::UnusedEnum> list = <self::UnusedEnum>[];
-  if(list.{core::Iterable::isNotEmpty}) {
-    new mai::ConstClass::•().{mai::ConstClass::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::ConstEnum);
+  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
+    new mai::ConstClass::•().{mai::ConstClass::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::ConstEnum){(mai::ConstEnum) → core::int};
   }
 }
 
@@ -76,14 +76,14 @@
     : mai::ConstEnum::index = index, mai::ConstEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{mai::ConstEnum::_name};
+    return this.{mai::ConstEnum::_name}{core::String};
 }
 class ConstClass extends core::Object {
   synthetic constructor •() → mai::ConstClass
     : super core::Object::•()
     ;
   method method(mai::ConstEnum e) → core::int
-    return e.{mai::ConstEnum::index};
+    return e.{mai::ConstEnum::index}{core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.transformed.expect b/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.transformed.expect
index 23b7ce8..bc950b3 100644
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/aot/tree_shake/main.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
   final field core::int index;
   final field core::String _name;
   method toString() → core::String
-    return this.{self::UsedEnum::_name};
+    return this.{self::UsedEnum::_name}{core::String};
 }
 abstract class UnusedInterface extends core::Object {
   abstract get /*isLegacy*/ usedInterfaceField() → core::int?;
@@ -26,15 +26,15 @@
     ;
 }
 static method usedMethod(self::UnusedInterface c) → dynamic {
-  c.{self::UnusedInterface::usedInterfaceField} = c.{self::UnusedInterface::usedInterfaceField};
+  c.{self::UnusedInterface::usedInterfaceField} = c.{self::UnusedInterface::usedInterfaceField}{core::int?};
 }
 static method main() → dynamic {
   self::usedMethod(let final self::UsedClass #t1 = new self::UsedClass::•() in block {
-    #t1.{self::UsedClass::usedField};
+    #t1.{self::UsedClass::usedField}{core::int?};
   } =>#t1);
   #C3;
   core::List<self::UnusedEnum> list = core::_GrowableList::•<self::UnusedEnum>(0);
-  if(list.{core::Iterable::isNotEmpty}) {
+  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
     let dynamic #t2 = new mai::ConstClass::•() in let dynamic #t3 = _in::unsafeCast<dynamic>(null) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::ConstEnum in throw "Attempt to execute code removed by Dart AOT compiler (TFA)";
   }
 }
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.expect b/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.expect
index 55eeff3..9b15013 100644
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.expect
+++ b/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.expect
@@ -15,7 +15,7 @@
     : self::UnusedEnum::index = index, self::UnusedEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::UnusedEnum::_name};
+    return this.{self::UnusedEnum::_name}{core::String};
 }
 class UsedEnum extends core::Object /*isEnum*/  {
   final field core::int index;
@@ -27,7 +27,7 @@
     : self::UsedEnum::index = index, self::UsedEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::UsedEnum::_name};
+    return this.{self::UsedEnum::_name}{core::String};
 }
 class UnusedInterface extends core::Object {
   field core::int? usedInterfaceField;
@@ -49,17 +49,17 @@
     ;
 }
 static method usedMethod(self::UnusedInterface c) → dynamic {
-  c.{self::UnusedInterface::usedInterfaceField} = c.{self::UnusedInterface::usedInterfaceField};
+  c.{self::UnusedInterface::usedInterfaceField} = c.{self::UnusedInterface::usedInterfaceField}{core::int?};
 }
 static method unusedMethod() → dynamic {}
 static method main() → dynamic {
   self::usedMethod(let final self::UsedClass #t1 = new self::UsedClass::•() in block {
-    #t1.{self::UsedClass::usedField};
+    #t1.{self::UsedClass::usedField}{core::int?};
   } =>#t1);
   #C11;
   core::List<self::UnusedEnum> list = <self::UnusedEnum>[];
-  if(list.{core::Iterable::isNotEmpty}) {
-    new mai::ConstClass::•().{mai::ConstClass::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::ConstEnum);
+  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
+    new mai::ConstClass::•().{mai::ConstClass::method}((null as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} mai::ConstEnum){(mai::ConstEnum) → core::int};
   }
 }
 
@@ -76,14 +76,14 @@
     : mai::ConstEnum::index = index, mai::ConstEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{mai::ConstEnum::_name};
+    return this.{mai::ConstEnum::_name}{core::String};
 }
 class ConstClass extends core::Object {
   synthetic constructor •() → mai::ConstClass
     : super core::Object::•()
     ;
   method method(mai::ConstEnum e) → core::int
-    return e.{mai::ConstEnum::index};
+    return e.{mai::ConstEnum::index}{core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.outline.expect b/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.outline.expect
index 43c42d9..4e85b30 100644
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.outline.expect
@@ -14,7 +14,7 @@
     : self::UnusedEnum::index = index, self::UnusedEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::UnusedEnum::_name};
+    return this.{self::UnusedEnum::_name}{core::String};
 }
 class UsedEnum extends core::Object /*isEnum*/  {
   final field core::int index;
@@ -26,7 +26,7 @@
     : self::UsedEnum::index = index, self::UsedEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::UsedEnum::_name};
+    return this.{self::UsedEnum::_name}{core::String};
 }
 class UnusedInterface extends core::Object {
   field core::int? usedInterfaceField;
@@ -64,7 +64,7 @@
     : self2::ConstEnum::index = index, self2::ConstEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self2::ConstEnum::_name};
+    return this.{self2::ConstEnum::_name}{core::String};
 }
 class ConstClass extends core::Object {
   synthetic constructor •() → self2::ConstClass
diff --git a/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.transformed.expect b/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.transformed.expect
index 80c0d6a..0ab2aae 100644
--- a/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/aot/tree_shake/main.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
   final field core::int index;
   final field core::String _name;
   method toString() → core::String
-    return this.{self::UsedEnum::_name};
+    return this.{self::UsedEnum::_name}{core::String};
 }
 abstract class UnusedInterface extends core::Object {
   abstract get /*isLegacy*/ usedInterfaceField() → core::int?;
@@ -26,16 +26,16 @@
     ;
 }
 static method usedMethod(self::UnusedInterface c) → dynamic {
-  c.{self::UnusedInterface::usedInterfaceField} = c.{self::UnusedInterface::usedInterfaceField};
+  c.{self::UnusedInterface::usedInterfaceField} = c.{self::UnusedInterface::usedInterfaceField}{core::int?};
 }
 static method main() → dynamic {
   self::usedMethod(let final self::UsedClass #t1 = new self::UsedClass::•() in block {
-    #t1.{self::UsedClass::usedField};
+    #t1.{self::UsedClass::usedField}{core::int?};
   } =>#t1);
   #C3;
   core::List<self::UnusedEnum> list = core::_GrowableList::•<self::UnusedEnum>(0);
-  if(list.{core::Iterable::isNotEmpty}) {
-    new mai::ConstClass::•().{mai::ConstClass::method}(_in::unsafeCast<mai::ConstEnum>(_in::unsafeCast<dynamic>(null)));
+  if(list.{core::Iterable::isNotEmpty}{core::bool}) {
+    new mai::ConstClass::•().{mai::ConstClass::method}(_in::unsafeCast<mai::ConstEnum>(_in::unsafeCast<dynamic>(null))){(mai::ConstEnum) → core::int};
   }
 }
 
@@ -51,7 +51,7 @@
     : super core::Object::•()
     ;
   method method(mai::ConstEnum e) → core::int
-    return e.{mai::ConstEnum::index};
+    return e.{mai::ConstEnum::index}{core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.expect b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.expect
index fce2045..b5c21df 100644
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.expect
+++ b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.expect
@@ -14,8 +14,8 @@
     ;
 }
 static method method(mai::Interface i) → void {
-  i.{mai::Interface::field2} = i.{mai::Interface::field1};
-  i.{mai::Interface::field3} = i.{mai::Interface::field3};
+  i.{mai::Interface::field2} = i.{mai::Interface::field1}{core::int?};
+  i.{mai::Interface::field3} = i.{mai::Interface::field3}{core::int?};
 }
 static method main() → dynamic {
   self::method(new self::Class::•());
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.transformed.expect b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.transformed.expect
index 9a18bdf..4f86a02 100644
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.strong.transformed.expect
@@ -14,8 +14,8 @@
   set /*isLegacy*/ field2(core::int? value) → void;
 }
 static method method(mai::Interface i) → void {
-  i.{mai::Interface::field2} = i.{mai::Interface::field1};
-  i.{mai::Interface::field3} = i.{mai::Interface::field3};
+  i.{mai::Interface::field2} = i.{mai::Interface::field1}{core::int?};
+  i.{mai::Interface::field3} = i.{mai::Interface::field3}{core::int?};
 }
 static method main() → dynamic {
   self::method(new self::Class::•());
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.expect b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.expect
index fce2045..b5c21df 100644
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.expect
+++ b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.expect
@@ -14,8 +14,8 @@
     ;
 }
 static method method(mai::Interface i) → void {
-  i.{mai::Interface::field2} = i.{mai::Interface::field1};
-  i.{mai::Interface::field3} = i.{mai::Interface::field3};
+  i.{mai::Interface::field2} = i.{mai::Interface::field1}{core::int?};
+  i.{mai::Interface::field3} = i.{mai::Interface::field3}{core::int?};
 }
 static method main() → dynamic {
   self::method(new self::Class::•());
diff --git a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.transformed.expect b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.transformed.expect
index 9a18bdf..4f86a02 100644
--- a/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/aot/tree_shake_field_from_lib/main.dart.weak.transformed.expect
@@ -14,8 +14,8 @@
   set /*isLegacy*/ field2(core::int? value) → void;
 }
 static method method(mai::Interface i) → void {
-  i.{mai::Interface::field2} = i.{mai::Interface::field1};
-  i.{mai::Interface::field3} = i.{mai::Interface::field3};
+  i.{mai::Interface::field2} = i.{mai::Interface::field1}{core::int?};
+  i.{mai::Interface::field3} = i.{mai::Interface::field3}{core::int?};
 }
 static method main() → dynamic {
   self::method(new self::Class::•());
diff --git a/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.strong.expect
index 6f5f7b1..89d51078 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.strong.expect
@@ -9,15 +9,15 @@
 static const field core::int var2 = #C1;
 static method fn() → core::int {
   core::int x = 0;
-  assert(x.{core::num::==}(0), "fail");
+  assert(x =={core::num::==}{(core::Object) → core::bool} 0, "fail");
   return x;
 }
 static method fn2() → core::int {
   core::int x = 0;
   assert((() → core::bool {
-    core::int y = x.{core::num::+}(1);
-    return y.{core::num::==}(1);
-  }).call());
+    core::int y = x.{core::num::+}(1){(core::num) → core::int};
+    return y =={core::num::==}{(core::Object) → core::bool} 1;
+  })(){() → core::bool});
   return x;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.strong.transformed.expect
index 6f5f7b1..89d51078 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.strong.transformed.expect
@@ -9,15 +9,15 @@
 static const field core::int var2 = #C1;
 static method fn() → core::int {
   core::int x = 0;
-  assert(x.{core::num::==}(0), "fail");
+  assert(x =={core::num::==}{(core::Object) → core::bool} 0, "fail");
   return x;
 }
 static method fn2() → core::int {
   core::int x = 0;
   assert((() → core::bool {
-    core::int y = x.{core::num::+}(1);
-    return y.{core::num::==}(1);
-  }).call());
+    core::int y = x.{core::num::+}(1){(core::num) → core::int};
+    return y =={core::num::==}{(core::Object) → core::bool} 1;
+  })(){() → core::bool});
   return x;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.weak.expect
index 6f5f7b1..89d51078 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.weak.expect
@@ -9,15 +9,15 @@
 static const field core::int var2 = #C1;
 static method fn() → core::int {
   core::int x = 0;
-  assert(x.{core::num::==}(0), "fail");
+  assert(x =={core::num::==}{(core::Object) → core::bool} 0, "fail");
   return x;
 }
 static method fn2() → core::int {
   core::int x = 0;
   assert((() → core::bool {
-    core::int y = x.{core::num::+}(1);
-    return y.{core::num::==}(1);
-  }).call());
+    core::int y = x.{core::num::+}(1){(core::num) → core::int};
+    return y =={core::num::==}{(core::Object) → core::bool} 1;
+  })(){() → core::bool});
   return x;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.weak.transformed.expect
index 6f5f7b1..89d51078 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.weak.transformed.expect
@@ -9,15 +9,15 @@
 static const field core::int var2 = #C1;
 static method fn() → core::int {
   core::int x = 0;
-  assert(x.{core::num::==}(0), "fail");
+  assert(x =={core::num::==}{(core::Object) → core::bool} 0, "fail");
   return x;
 }
 static method fn2() → core::int {
   core::int x = 0;
   assert((() → core::bool {
-    core::int y = x.{core::num::+}(1);
-    return y.{core::num::==}(1);
-  }).call());
+    core::int y = x.{core::num::+}(1){(core::num) → core::int};
+    return y =={core::num::==}{(core::Object) → core::bool} 1;
+  })(){() → core::bool});
   return x;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_closures.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_closures.dart.strong.expect
index 64a08b6..a1bc565 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_closures.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_closures.dart.strong.expect
@@ -16,29 +16,29 @@
   () → () → core::int f = () → () → core::int {
     core::int count = 0;
     function baz() → core::int {
-      count = count.{core::num::+}(1);
+      count = count.{core::num::+}(1){(core::num) → core::int};
       return count;
     }
     return baz;
   };
-  () → core::int c1 = f.call();
-  () → core::int c2 = f.call();
-  core::int c1_val1 = c1.call();
-  assert(c1_val1.{core::num::==}(1));
-  core::int c1_val2 = c1.call();
-  assert(c1_val2.{core::num::==}(2));
-  core::int c1_val3 = c1.call();
-  assert(c1_val3.{core::num::==}(3));
-  core::int c2_val1 = c2.call();
-  assert(c1_val1.{core::num::==}(1));
-  core::int c2_val2 = c2.call();
-  assert(c1_val2.{core::num::==}(2));
-  core::int c2_val3 = c2.call();
-  assert(c1_val3.{core::num::==}(3));
+  () → core::int c1 = f(){() → () → core::int};
+  () → core::int c2 = f(){() → () → core::int};
+  core::int c1_val1 = c1(){() → core::int};
+  assert(c1_val1 =={core::num::==}{(core::Object) → core::bool} 1);
+  core::int c1_val2 = c1(){() → core::int};
+  assert(c1_val2 =={core::num::==}{(core::Object) → core::bool} 2);
+  core::int c1_val3 = c1(){() → core::int};
+  assert(c1_val3 =={core::num::==}{(core::Object) → core::bool} 3);
+  core::int c2_val1 = c2(){() → core::int};
+  assert(c1_val1 =={core::num::==}{(core::Object) → core::bool} 1);
+  core::int c2_val2 = c2(){() → core::int};
+  assert(c1_val2 =={core::num::==}{(core::Object) → core::bool} 2);
+  core::int c2_val3 = c2(){() → core::int};
+  assert(c1_val3 =={core::num::==}{(core::Object) → core::bool} 3);
   return 0;
 }
 static method fn() → core::int {
-  return (() → core::int => 0).call();
+  return (() → core::int => 0)(){() → core::int};
 }
 static method fn3() → core::int {
   core::int y = 2;
@@ -49,25 +49,25 @@
   function innerFn() → core::int {
     return x;
   }
-  return innerFn.call();
+  return innerFn(){() → core::int};
 }
 static method fn5(core::int a) → core::int {
   function recurse(core::int b) → core::int {
-    if(b.{core::num::==}(1))
+    if(b =={core::num::==}{(core::Object) → core::bool} 1)
       return 1;
-    core::int result = recurse.call(b.{core::num::-}(1));
-    return b.{core::num::*}(result);
+    core::int result = recurse(b.{core::num::-}(1){(core::num) → core::int}){(core::int) → core::int};
+    return b.{core::num::*}(result){(core::num) → core::int};
   }
-  return recurse.call(a);
+  return recurse(a){(core::int) → core::int};
 }
 static method fn6(core::int a) → core::int {
   function recurse() → core::int {
-    a = a.{core::num::-}(1);
-    if(a.{core::num::==}(1))
+    a = a.{core::num::-}(1){(core::num) → core::int};
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
       return 1;
-    return a.{core::num::*}(recurse.call());
+    return a.{core::num::*}(recurse(){() → core::int}){(core::num) → core::int};
   }
-  return recurse.call();
+  return recurse(){() → core::int};
 }
 static method main() → void {
   exp::Expect::equals(#C1, 0);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_closures.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_closures.dart.strong.transformed.expect
index 64a08b6..a1bc565 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_closures.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_closures.dart.strong.transformed.expect
@@ -16,29 +16,29 @@
   () → () → core::int f = () → () → core::int {
     core::int count = 0;
     function baz() → core::int {
-      count = count.{core::num::+}(1);
+      count = count.{core::num::+}(1){(core::num) → core::int};
       return count;
     }
     return baz;
   };
-  () → core::int c1 = f.call();
-  () → core::int c2 = f.call();
-  core::int c1_val1 = c1.call();
-  assert(c1_val1.{core::num::==}(1));
-  core::int c1_val2 = c1.call();
-  assert(c1_val2.{core::num::==}(2));
-  core::int c1_val3 = c1.call();
-  assert(c1_val3.{core::num::==}(3));
-  core::int c2_val1 = c2.call();
-  assert(c1_val1.{core::num::==}(1));
-  core::int c2_val2 = c2.call();
-  assert(c1_val2.{core::num::==}(2));
-  core::int c2_val3 = c2.call();
-  assert(c1_val3.{core::num::==}(3));
+  () → core::int c1 = f(){() → () → core::int};
+  () → core::int c2 = f(){() → () → core::int};
+  core::int c1_val1 = c1(){() → core::int};
+  assert(c1_val1 =={core::num::==}{(core::Object) → core::bool} 1);
+  core::int c1_val2 = c1(){() → core::int};
+  assert(c1_val2 =={core::num::==}{(core::Object) → core::bool} 2);
+  core::int c1_val3 = c1(){() → core::int};
+  assert(c1_val3 =={core::num::==}{(core::Object) → core::bool} 3);
+  core::int c2_val1 = c2(){() → core::int};
+  assert(c1_val1 =={core::num::==}{(core::Object) → core::bool} 1);
+  core::int c2_val2 = c2(){() → core::int};
+  assert(c1_val2 =={core::num::==}{(core::Object) → core::bool} 2);
+  core::int c2_val3 = c2(){() → core::int};
+  assert(c1_val3 =={core::num::==}{(core::Object) → core::bool} 3);
   return 0;
 }
 static method fn() → core::int {
-  return (() → core::int => 0).call();
+  return (() → core::int => 0)(){() → core::int};
 }
 static method fn3() → core::int {
   core::int y = 2;
@@ -49,25 +49,25 @@
   function innerFn() → core::int {
     return x;
   }
-  return innerFn.call();
+  return innerFn(){() → core::int};
 }
 static method fn5(core::int a) → core::int {
   function recurse(core::int b) → core::int {
-    if(b.{core::num::==}(1))
+    if(b =={core::num::==}{(core::Object) → core::bool} 1)
       return 1;
-    core::int result = recurse.call(b.{core::num::-}(1));
-    return b.{core::num::*}(result);
+    core::int result = recurse(b.{core::num::-}(1){(core::num) → core::int}){(core::int) → core::int};
+    return b.{core::num::*}(result){(core::num) → core::int};
   }
-  return recurse.call(a);
+  return recurse(a){(core::int) → core::int};
 }
 static method fn6(core::int a) → core::int {
   function recurse() → core::int {
-    a = a.{core::num::-}(1);
-    if(a.{core::num::==}(1))
+    a = a.{core::num::-}(1){(core::num) → core::int};
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
       return 1;
-    return a.{core::num::*}(recurse.call());
+    return a.{core::num::*}(recurse(){() → core::int}){(core::num) → core::int};
   }
-  return recurse.call();
+  return recurse(){() → core::int};
 }
 static method main() → void {
   exp::Expect::equals(#C1, 0);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_closures.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_closures.dart.weak.expect
index 64a08b6..a1bc565 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_closures.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_closures.dart.weak.expect
@@ -16,29 +16,29 @@
   () → () → core::int f = () → () → core::int {
     core::int count = 0;
     function baz() → core::int {
-      count = count.{core::num::+}(1);
+      count = count.{core::num::+}(1){(core::num) → core::int};
       return count;
     }
     return baz;
   };
-  () → core::int c1 = f.call();
-  () → core::int c2 = f.call();
-  core::int c1_val1 = c1.call();
-  assert(c1_val1.{core::num::==}(1));
-  core::int c1_val2 = c1.call();
-  assert(c1_val2.{core::num::==}(2));
-  core::int c1_val3 = c1.call();
-  assert(c1_val3.{core::num::==}(3));
-  core::int c2_val1 = c2.call();
-  assert(c1_val1.{core::num::==}(1));
-  core::int c2_val2 = c2.call();
-  assert(c1_val2.{core::num::==}(2));
-  core::int c2_val3 = c2.call();
-  assert(c1_val3.{core::num::==}(3));
+  () → core::int c1 = f(){() → () → core::int};
+  () → core::int c2 = f(){() → () → core::int};
+  core::int c1_val1 = c1(){() → core::int};
+  assert(c1_val1 =={core::num::==}{(core::Object) → core::bool} 1);
+  core::int c1_val2 = c1(){() → core::int};
+  assert(c1_val2 =={core::num::==}{(core::Object) → core::bool} 2);
+  core::int c1_val3 = c1(){() → core::int};
+  assert(c1_val3 =={core::num::==}{(core::Object) → core::bool} 3);
+  core::int c2_val1 = c2(){() → core::int};
+  assert(c1_val1 =={core::num::==}{(core::Object) → core::bool} 1);
+  core::int c2_val2 = c2(){() → core::int};
+  assert(c1_val2 =={core::num::==}{(core::Object) → core::bool} 2);
+  core::int c2_val3 = c2(){() → core::int};
+  assert(c1_val3 =={core::num::==}{(core::Object) → core::bool} 3);
   return 0;
 }
 static method fn() → core::int {
-  return (() → core::int => 0).call();
+  return (() → core::int => 0)(){() → core::int};
 }
 static method fn3() → core::int {
   core::int y = 2;
@@ -49,25 +49,25 @@
   function innerFn() → core::int {
     return x;
   }
-  return innerFn.call();
+  return innerFn(){() → core::int};
 }
 static method fn5(core::int a) → core::int {
   function recurse(core::int b) → core::int {
-    if(b.{core::num::==}(1))
+    if(b =={core::num::==}{(core::Object) → core::bool} 1)
       return 1;
-    core::int result = recurse.call(b.{core::num::-}(1));
-    return b.{core::num::*}(result);
+    core::int result = recurse(b.{core::num::-}(1){(core::num) → core::int}){(core::int) → core::int};
+    return b.{core::num::*}(result){(core::num) → core::int};
   }
-  return recurse.call(a);
+  return recurse(a){(core::int) → core::int};
 }
 static method fn6(core::int a) → core::int {
   function recurse() → core::int {
-    a = a.{core::num::-}(1);
-    if(a.{core::num::==}(1))
+    a = a.{core::num::-}(1){(core::num) → core::int};
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
       return 1;
-    return a.{core::num::*}(recurse.call());
+    return a.{core::num::*}(recurse(){() → core::int}){(core::num) → core::int};
   }
-  return recurse.call();
+  return recurse(){() → core::int};
 }
 static method main() → void {
   exp::Expect::equals(#C1, 0);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_closures.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_closures.dart.weak.transformed.expect
index 64a08b6..a1bc565 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_closures.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_closures.dart.weak.transformed.expect
@@ -16,29 +16,29 @@
   () → () → core::int f = () → () → core::int {
     core::int count = 0;
     function baz() → core::int {
-      count = count.{core::num::+}(1);
+      count = count.{core::num::+}(1){(core::num) → core::int};
       return count;
     }
     return baz;
   };
-  () → core::int c1 = f.call();
-  () → core::int c2 = f.call();
-  core::int c1_val1 = c1.call();
-  assert(c1_val1.{core::num::==}(1));
-  core::int c1_val2 = c1.call();
-  assert(c1_val2.{core::num::==}(2));
-  core::int c1_val3 = c1.call();
-  assert(c1_val3.{core::num::==}(3));
-  core::int c2_val1 = c2.call();
-  assert(c1_val1.{core::num::==}(1));
-  core::int c2_val2 = c2.call();
-  assert(c1_val2.{core::num::==}(2));
-  core::int c2_val3 = c2.call();
-  assert(c1_val3.{core::num::==}(3));
+  () → core::int c1 = f(){() → () → core::int};
+  () → core::int c2 = f(){() → () → core::int};
+  core::int c1_val1 = c1(){() → core::int};
+  assert(c1_val1 =={core::num::==}{(core::Object) → core::bool} 1);
+  core::int c1_val2 = c1(){() → core::int};
+  assert(c1_val2 =={core::num::==}{(core::Object) → core::bool} 2);
+  core::int c1_val3 = c1(){() → core::int};
+  assert(c1_val3 =={core::num::==}{(core::Object) → core::bool} 3);
+  core::int c2_val1 = c2(){() → core::int};
+  assert(c1_val1 =={core::num::==}{(core::Object) → core::bool} 1);
+  core::int c2_val2 = c2(){() → core::int};
+  assert(c1_val2 =={core::num::==}{(core::Object) → core::bool} 2);
+  core::int c2_val3 = c2(){() → core::int};
+  assert(c1_val3 =={core::num::==}{(core::Object) → core::bool} 3);
   return 0;
 }
 static method fn() → core::int {
-  return (() → core::int => 0).call();
+  return (() → core::int => 0)(){() → core::int};
 }
 static method fn3() → core::int {
   core::int y = 2;
@@ -49,25 +49,25 @@
   function innerFn() → core::int {
     return x;
   }
-  return innerFn.call();
+  return innerFn(){() → core::int};
 }
 static method fn5(core::int a) → core::int {
   function recurse(core::int b) → core::int {
-    if(b.{core::num::==}(1))
+    if(b =={core::num::==}{(core::Object) → core::bool} 1)
       return 1;
-    core::int result = recurse.call(b.{core::num::-}(1));
-    return b.{core::num::*}(result);
+    core::int result = recurse(b.{core::num::-}(1){(core::num) → core::int}){(core::int) → core::int};
+    return b.{core::num::*}(result){(core::num) → core::int};
   }
-  return recurse.call(a);
+  return recurse(a){(core::int) → core::int};
 }
 static method fn6(core::int a) → core::int {
   function recurse() → core::int {
-    a = a.{core::num::-}(1);
-    if(a.{core::num::==}(1))
+    a = a.{core::num::-}(1){(core::num) → core::int};
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
       return 1;
-    return a.{core::num::*}(recurse.call());
+    return a.{core::num::*}(recurse(){() → core::int}){(core::num) → core::int};
   }
-  return recurse.call();
+  return recurse(){() → core::int};
 }
 static method main() → void {
   exp::Expect::equals(#C1, 0);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.strong.expect
index d85a9e2..e55cf4a 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.strong.expect
@@ -9,7 +9,7 @@
   final field core::String name;
   const constructor •(core::String name) → self::Simple
     : self::Simple::name = name, super core::Object::•() {
-    assert(this.{self::Simple::name}.{core::String::==}(#C1));
+    assert(this.{self::Simple::name}{core::String} =={core::String::==}{(core::Object) → core::bool} (#C1));
   }
 }
 class A extends core::Object /*hasConstConstructor*/  {
@@ -25,7 +25,7 @@
 static method fn() → self::A
   return new self::A::•();
 static method main() → void {
-  exp::Expect::equals((#C2).{self::Simple::name}, #C1);
+  exp::Expect::equals((#C2).{self::Simple::name}{core::String}, #C1);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.strong.transformed.expect
index d85a9e2..e55cf4a 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.strong.transformed.expect
@@ -9,7 +9,7 @@
   final field core::String name;
   const constructor •(core::String name) → self::Simple
     : self::Simple::name = name, super core::Object::•() {
-    assert(this.{self::Simple::name}.{core::String::==}(#C1));
+    assert(this.{self::Simple::name}{core::String} =={core::String::==}{(core::Object) → core::bool} (#C1));
   }
 }
 class A extends core::Object /*hasConstConstructor*/  {
@@ -25,7 +25,7 @@
 static method fn() → self::A
   return new self::A::•();
 static method main() → void {
-  exp::Expect::equals((#C2).{self::Simple::name}, #C1);
+  exp::Expect::equals((#C2).{self::Simple::name}{core::String}, #C1);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.weak.expect
index d85a9e2..e55cf4a 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.weak.expect
@@ -9,7 +9,7 @@
   final field core::String name;
   const constructor •(core::String name) → self::Simple
     : self::Simple::name = name, super core::Object::•() {
-    assert(this.{self::Simple::name}.{core::String::==}(#C1));
+    assert(this.{self::Simple::name}{core::String} =={core::String::==}{(core::Object) → core::bool} (#C1));
   }
 }
 class A extends core::Object /*hasConstConstructor*/  {
@@ -25,7 +25,7 @@
 static method fn() → self::A
   return new self::A::•();
 static method main() → void {
-  exp::Expect::equals((#C2).{self::Simple::name}, #C1);
+  exp::Expect::equals((#C2).{self::Simple::name}{core::String}, #C1);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.weak.transformed.expect
index d85a9e2..e55cf4a 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
   final field core::String name;
   const constructor •(core::String name) → self::Simple
     : self::Simple::name = name, super core::Object::•() {
-    assert(this.{self::Simple::name}.{core::String::==}(#C1));
+    assert(this.{self::Simple::name}{core::String} =={core::String::==}{(core::Object) → core::bool} (#C1));
   }
 }
 class A extends core::Object /*hasConstConstructor*/  {
@@ -25,7 +25,7 @@
 static method fn() → self::A
   return new self::A::•();
 static method main() → void {
-  exp::Expect::equals((#C2).{self::Simple::name}, #C1);
+  exp::Expect::equals((#C2).{self::Simple::name}{core::String}, #C1);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.expect
index 8f500e2..539ee45 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.expect
@@ -41,7 +41,7 @@
   final field core::String name;
   const constructor •(core::String name) → self::Simple
     : self::Simple::name = name, super core::Object::•() {
-    assert(!this.{self::Simple::name}.{core::String::==}(#C1));
+    assert(!(this.{self::Simple::name}{core::String} =={core::String::==}{(core::Object) → core::bool} (#C1)));
   }
 }
 class Simple2 extends core::Object /*hasConstConstructor*/  {
@@ -57,7 +57,7 @@
 class A extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::A
     : super core::Object::•() {
-    assert(1.{core::num::==}(2));
+    assert(1 =={core::num::==}{(core::Object) → core::bool} 2);
   }
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.transformed.expect
index 1aea02c..1fd70dc 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.strong.transformed.expect
@@ -41,7 +41,7 @@
   final field core::String name;
   const constructor •(core::String name) → self::Simple
     : self::Simple::name = name, super core::Object::•() {
-    assert(!this.{self::Simple::name}.{core::String::==}(#C1));
+    assert(!(this.{self::Simple::name}{core::String} =={core::String::==}{(core::Object) → core::bool} (#C1)));
   }
 }
 class Simple2 extends core::Object /*hasConstConstructor*/  {
@@ -57,7 +57,7 @@
 class A extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::A
     : super core::Object::•() {
-    assert(1.{core::num::==}(2));
+    assert(1 =={core::num::==}{(core::Object) → core::bool} 2);
   }
 }
 class B extends self::A /*hasConstConstructor*/  {
@@ -89,7 +89,7 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_const_ctor_error.dart:33:14 -> BoolConstant(false)
+Evaluated: EqualsCall @ org-dartlang-testcase:///const_functions_const_ctor_error.dart:33:14 -> BoolConstant(false)
 Extra constant evaluation: evaluated: 7, effectively constant: 1
 
 
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.expect
index 8f500e2..539ee45 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.expect
@@ -41,7 +41,7 @@
   final field core::String name;
   const constructor •(core::String name) → self::Simple
     : self::Simple::name = name, super core::Object::•() {
-    assert(!this.{self::Simple::name}.{core::String::==}(#C1));
+    assert(!(this.{self::Simple::name}{core::String} =={core::String::==}{(core::Object) → core::bool} (#C1)));
   }
 }
 class Simple2 extends core::Object /*hasConstConstructor*/  {
@@ -57,7 +57,7 @@
 class A extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::A
     : super core::Object::•() {
-    assert(1.{core::num::==}(2));
+    assert(1 =={core::num::==}{(core::Object) → core::bool} 2);
   }
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.transformed.expect
index 1aea02c..1fd70dc 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.transformed.expect
@@ -41,7 +41,7 @@
   final field core::String name;
   const constructor •(core::String name) → self::Simple
     : self::Simple::name = name, super core::Object::•() {
-    assert(!this.{self::Simple::name}.{core::String::==}(#C1));
+    assert(!(this.{self::Simple::name}{core::String} =={core::String::==}{(core::Object) → core::bool} (#C1)));
   }
 }
 class Simple2 extends core::Object /*hasConstConstructor*/  {
@@ -57,7 +57,7 @@
 class A extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::A
     : super core::Object::•() {
-    assert(1.{core::num::==}(2));
+    assert(1 =={core::num::==}{(core::Object) → core::bool} 2);
   }
 }
 class B extends self::A /*hasConstConstructor*/  {
@@ -89,7 +89,7 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_const_ctor_error.dart:33:14 -> BoolConstant(false)
+Evaluated: EqualsCall @ org-dartlang-testcase:///const_functions_const_ctor_error.dart:33:14 -> BoolConstant(false)
 Extra constant evaluation: evaluated: 7, effectively constant: 1
 
 
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.expect
index c9674e9..b9d7932 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.expect
@@ -13,7 +13,7 @@
     : self::MessageType::name = name, super core::Object::•()
     ;
   static factory parse(core::String name) → self::MessageType {
-    if(name.{core::String::==}("print")) {
+    if(name =={core::String::==}{(core::Object) → core::bool} "print") {
       return #C2;
     }
     return #C4;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.transformed.expect
index c9674e9..b9d7932 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.transformed.expect
@@ -13,7 +13,7 @@
     : self::MessageType::name = name, super core::Object::•()
     ;
   static factory parse(core::String name) → self::MessageType {
-    if(name.{core::String::==}("print")) {
+    if(name =={core::String::==}{(core::Object) → core::bool} "print") {
       return #C2;
     }
     return #C4;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.weak.expect
index c9674e9..b9d7932 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.weak.expect
@@ -13,7 +13,7 @@
     : self::MessageType::name = name, super core::Object::•()
     ;
   static factory parse(core::String name) → self::MessageType {
-    if(name.{core::String::==}("print")) {
+    if(name =={core::String::==}{(core::Object) → core::bool} "print") {
       return #C2;
     }
     return #C4;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.weak.transformed.expect
index c9674e9..b9d7932 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
     : self::MessageType::name = name, super core::Object::•()
     ;
   static factory parse(core::String name) → self::MessageType {
-    if(name.{core::String::==}("print")) {
+    if(name =={core::String::==}{(core::Object) → core::bool} "print") {
       return #C2;
     }
     return #C4;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.expect
index 1737f7b..4442626 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.expect
@@ -12,9 +12,9 @@
 static method fn() → core::int {
   core::int x = 0;
   do {
-    x = x.{core::num::+}(1);
+    x = x.{core::num::+}(1){(core::num) → core::int};
   }
-  while (x.{core::num::<}(2))
+  while (x.{core::num::<}(2){(core::num) → core::bool})
   return x;
 }
 static method fn2(core::int a) → core::int {
@@ -22,12 +22,12 @@
   core::int b = 0;
   #L1:
   do {
-    if(x.{core::num::>}(5))
+    if(x.{core::num::>}(5){(core::num) → core::bool})
       break #L1;
-    x = x.{core::num::+}(a);
-    b = b.{core::num::+}(1);
+    x = x.{core::num::+}(a){(core::num) → core::int};
+    b = b.{core::num::+}(1){(core::num) → core::int};
   }
-  while (b.{core::num::<}(2))
+  while (b.{core::num::<}(2){(core::num) → core::bool})
   return x;
 }
 static method fn3() → core::int {
@@ -36,12 +36,12 @@
   do
     #L2:
     {
-      x = x.{core::num::+}(1);
-      if(x.{core::num::%}(2).{core::num::==}(1))
+      x = x.{core::num::+}(1){(core::num) → core::int};
+      if(x.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1)
         break #L2;
-      b = b.{core::num::+}(x);
+      b = b.{core::num::+}(x){(core::num) → core::int};
     }
-  while (x.{core::num::<}(5))
+  while (x.{core::num::<}(5){(core::num) → core::bool})
   return b;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.transformed.expect
index 1737f7b..4442626 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.transformed.expect
@@ -12,9 +12,9 @@
 static method fn() → core::int {
   core::int x = 0;
   do {
-    x = x.{core::num::+}(1);
+    x = x.{core::num::+}(1){(core::num) → core::int};
   }
-  while (x.{core::num::<}(2))
+  while (x.{core::num::<}(2){(core::num) → core::bool})
   return x;
 }
 static method fn2(core::int a) → core::int {
@@ -22,12 +22,12 @@
   core::int b = 0;
   #L1:
   do {
-    if(x.{core::num::>}(5))
+    if(x.{core::num::>}(5){(core::num) → core::bool})
       break #L1;
-    x = x.{core::num::+}(a);
-    b = b.{core::num::+}(1);
+    x = x.{core::num::+}(a){(core::num) → core::int};
+    b = b.{core::num::+}(1){(core::num) → core::int};
   }
-  while (b.{core::num::<}(2))
+  while (b.{core::num::<}(2){(core::num) → core::bool})
   return x;
 }
 static method fn3() → core::int {
@@ -36,12 +36,12 @@
   do
     #L2:
     {
-      x = x.{core::num::+}(1);
-      if(x.{core::num::%}(2).{core::num::==}(1))
+      x = x.{core::num::+}(1){(core::num) → core::int};
+      if(x.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1)
         break #L2;
-      b = b.{core::num::+}(x);
+      b = b.{core::num::+}(x){(core::num) → core::int};
     }
-  while (x.{core::num::<}(5))
+  while (x.{core::num::<}(5){(core::num) → core::bool})
   return b;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.expect
index 1737f7b..4442626 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.expect
@@ -12,9 +12,9 @@
 static method fn() → core::int {
   core::int x = 0;
   do {
-    x = x.{core::num::+}(1);
+    x = x.{core::num::+}(1){(core::num) → core::int};
   }
-  while (x.{core::num::<}(2))
+  while (x.{core::num::<}(2){(core::num) → core::bool})
   return x;
 }
 static method fn2(core::int a) → core::int {
@@ -22,12 +22,12 @@
   core::int b = 0;
   #L1:
   do {
-    if(x.{core::num::>}(5))
+    if(x.{core::num::>}(5){(core::num) → core::bool})
       break #L1;
-    x = x.{core::num::+}(a);
-    b = b.{core::num::+}(1);
+    x = x.{core::num::+}(a){(core::num) → core::int};
+    b = b.{core::num::+}(1){(core::num) → core::int};
   }
-  while (b.{core::num::<}(2))
+  while (b.{core::num::<}(2){(core::num) → core::bool})
   return x;
 }
 static method fn3() → core::int {
@@ -36,12 +36,12 @@
   do
     #L2:
     {
-      x = x.{core::num::+}(1);
-      if(x.{core::num::%}(2).{core::num::==}(1))
+      x = x.{core::num::+}(1){(core::num) → core::int};
+      if(x.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1)
         break #L2;
-      b = b.{core::num::+}(x);
+      b = b.{core::num::+}(x){(core::num) → core::int};
     }
-  while (x.{core::num::<}(5))
+  while (x.{core::num::<}(5){(core::num) → core::bool})
   return b;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.transformed.expect
index 1737f7b..4442626 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.transformed.expect
@@ -12,9 +12,9 @@
 static method fn() → core::int {
   core::int x = 0;
   do {
-    x = x.{core::num::+}(1);
+    x = x.{core::num::+}(1){(core::num) → core::int};
   }
-  while (x.{core::num::<}(2))
+  while (x.{core::num::<}(2){(core::num) → core::bool})
   return x;
 }
 static method fn2(core::int a) → core::int {
@@ -22,12 +22,12 @@
   core::int b = 0;
   #L1:
   do {
-    if(x.{core::num::>}(5))
+    if(x.{core::num::>}(5){(core::num) → core::bool})
       break #L1;
-    x = x.{core::num::+}(a);
-    b = b.{core::num::+}(1);
+    x = x.{core::num::+}(a){(core::num) → core::int};
+    b = b.{core::num::+}(1){(core::num) → core::int};
   }
-  while (b.{core::num::<}(2))
+  while (b.{core::num::<}(2){(core::num) → core::bool})
   return x;
 }
 static method fn3() → core::int {
@@ -36,12 +36,12 @@
   do
     #L2:
     {
-      x = x.{core::num::+}(1);
-      if(x.{core::num::%}(2).{core::num::==}(1))
+      x = x.{core::num::+}(1){(core::num) → core::int};
+      if(x.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1)
         break #L2;
-      b = b.{core::num::+}(x);
+      b = b.{core::num::+}(x){(core::num) → core::int};
     }
-  while (x.{core::num::<}(5))
+  while (x.{core::num::<}(5){(core::num) → core::bool})
   return b;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.strong.expect
index b8210ed..f4906f3 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.strong.expect
@@ -17,44 +17,44 @@
 static const field core::int var10 = #C8;
 static method fn(core::int a) → core::int {
   core::int b = a;
-  for (core::int i = 0; i.{core::num::<}(2); i = i.{core::num::+}(1)) {
-    b = b.{core::num::+}(a);
+  for (core::int i = 0; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
   }
   return b;
 }
 static method fn1(core::int a) → core::int {
   core::int b = a;
-  for (core::int i = 0; ; i = i.{core::num::+}(1)) {
-    b = b.{core::num::*}(3);
-    if(b.{core::num::>}(10))
+  for (core::int i = 0; ; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    b = b.{core::num::*}(3){(core::num) → core::int};
+    if(b.{core::num::>}(10){(core::num) → core::bool})
       return b;
   }
 }
 static method fn2() → core::int {
-  for (core::int i = 0, core::int j = 2; ; i = i.{core::num::+}(2), j = j.{core::num::+}(1)) {
-    if(i.{core::num::+}(j).{core::num::>}(10)) {
-      return i.{core::num::+}(j);
+  for (core::int i = 0, core::int j = 2; ; i = i.{core::num::+}(2){(core::num) → core::int}, j = j.{core::num::+}(1){(core::num) → core::int}) {
+    if(i.{core::num::+}(j){(core::num) → core::int}.{core::num::>}(10){(core::num) → core::bool}) {
+      return i.{core::num::+}(j){(core::num) → core::int};
     }
   }
 }
 static method fnContinue() → core::int {
   core::int a = 0;
-  for (core::int i = 0; i.{core::num::<}(5); i = i.{core::num::+}(1))
+  for (core::int i = 0; i.{core::num::<}(5){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
     #L1:
     {
-      if(i.{core::num::%}(2).{core::num::==}(1))
+      if(i.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1)
         break #L1;
-      a = a.{core::num::+}(i);
+      a = a.{core::num::+}(i){(core::num) → core::int};
     }
   return a;
 }
 static method fnBreak(core::int a) → core::int {
   core::int b = a;
   #L2:
-  for (core::int i = 0; i.{core::num::<}(2); i = i.{core::num::+}(1)) {
-    if(b.{core::num::==}(2))
+  for (core::int i = 0; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(b =={core::num::==}{(core::Object) → core::bool} 2)
       break #L2;
-    b = b.{core::num::+}(a);
+    b = b.{core::num::+}(a){(core::num) → core::int};
   }
   return b;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.strong.transformed.expect
index b8210ed..f4906f3 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.strong.transformed.expect
@@ -17,44 +17,44 @@
 static const field core::int var10 = #C8;
 static method fn(core::int a) → core::int {
   core::int b = a;
-  for (core::int i = 0; i.{core::num::<}(2); i = i.{core::num::+}(1)) {
-    b = b.{core::num::+}(a);
+  for (core::int i = 0; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
   }
   return b;
 }
 static method fn1(core::int a) → core::int {
   core::int b = a;
-  for (core::int i = 0; ; i = i.{core::num::+}(1)) {
-    b = b.{core::num::*}(3);
-    if(b.{core::num::>}(10))
+  for (core::int i = 0; ; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    b = b.{core::num::*}(3){(core::num) → core::int};
+    if(b.{core::num::>}(10){(core::num) → core::bool})
       return b;
   }
 }
 static method fn2() → core::int {
-  for (core::int i = 0, core::int j = 2; ; i = i.{core::num::+}(2), j = j.{core::num::+}(1)) {
-    if(i.{core::num::+}(j).{core::num::>}(10)) {
-      return i.{core::num::+}(j);
+  for (core::int i = 0, core::int j = 2; ; i = i.{core::num::+}(2){(core::num) → core::int}, j = j.{core::num::+}(1){(core::num) → core::int}) {
+    if(i.{core::num::+}(j){(core::num) → core::int}.{core::num::>}(10){(core::num) → core::bool}) {
+      return i.{core::num::+}(j){(core::num) → core::int};
     }
   }
 }
 static method fnContinue() → core::int {
   core::int a = 0;
-  for (core::int i = 0; i.{core::num::<}(5); i = i.{core::num::+}(1))
+  for (core::int i = 0; i.{core::num::<}(5){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
     #L1:
     {
-      if(i.{core::num::%}(2).{core::num::==}(1))
+      if(i.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1)
         break #L1;
-      a = a.{core::num::+}(i);
+      a = a.{core::num::+}(i){(core::num) → core::int};
     }
   return a;
 }
 static method fnBreak(core::int a) → core::int {
   core::int b = a;
   #L2:
-  for (core::int i = 0; i.{core::num::<}(2); i = i.{core::num::+}(1)) {
-    if(b.{core::num::==}(2))
+  for (core::int i = 0; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(b =={core::num::==}{(core::Object) → core::bool} 2)
       break #L2;
-    b = b.{core::num::+}(a);
+    b = b.{core::num::+}(a){(core::num) → core::int};
   }
   return b;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.weak.expect
index b8210ed..f4906f3 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.weak.expect
@@ -17,44 +17,44 @@
 static const field core::int var10 = #C8;
 static method fn(core::int a) → core::int {
   core::int b = a;
-  for (core::int i = 0; i.{core::num::<}(2); i = i.{core::num::+}(1)) {
-    b = b.{core::num::+}(a);
+  for (core::int i = 0; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
   }
   return b;
 }
 static method fn1(core::int a) → core::int {
   core::int b = a;
-  for (core::int i = 0; ; i = i.{core::num::+}(1)) {
-    b = b.{core::num::*}(3);
-    if(b.{core::num::>}(10))
+  for (core::int i = 0; ; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    b = b.{core::num::*}(3){(core::num) → core::int};
+    if(b.{core::num::>}(10){(core::num) → core::bool})
       return b;
   }
 }
 static method fn2() → core::int {
-  for (core::int i = 0, core::int j = 2; ; i = i.{core::num::+}(2), j = j.{core::num::+}(1)) {
-    if(i.{core::num::+}(j).{core::num::>}(10)) {
-      return i.{core::num::+}(j);
+  for (core::int i = 0, core::int j = 2; ; i = i.{core::num::+}(2){(core::num) → core::int}, j = j.{core::num::+}(1){(core::num) → core::int}) {
+    if(i.{core::num::+}(j){(core::num) → core::int}.{core::num::>}(10){(core::num) → core::bool}) {
+      return i.{core::num::+}(j){(core::num) → core::int};
     }
   }
 }
 static method fnContinue() → core::int {
   core::int a = 0;
-  for (core::int i = 0; i.{core::num::<}(5); i = i.{core::num::+}(1))
+  for (core::int i = 0; i.{core::num::<}(5){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
     #L1:
     {
-      if(i.{core::num::%}(2).{core::num::==}(1))
+      if(i.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1)
         break #L1;
-      a = a.{core::num::+}(i);
+      a = a.{core::num::+}(i){(core::num) → core::int};
     }
   return a;
 }
 static method fnBreak(core::int a) → core::int {
   core::int b = a;
   #L2:
-  for (core::int i = 0; i.{core::num::<}(2); i = i.{core::num::+}(1)) {
-    if(b.{core::num::==}(2))
+  for (core::int i = 0; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(b =={core::num::==}{(core::Object) → core::bool} 2)
       break #L2;
-    b = b.{core::num::+}(a);
+    b = b.{core::num::+}(a){(core::num) → core::int};
   }
   return b;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.weak.transformed.expect
index b8210ed..f4906f3 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.weak.transformed.expect
@@ -17,44 +17,44 @@
 static const field core::int var10 = #C8;
 static method fn(core::int a) → core::int {
   core::int b = a;
-  for (core::int i = 0; i.{core::num::<}(2); i = i.{core::num::+}(1)) {
-    b = b.{core::num::+}(a);
+  for (core::int i = 0; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
   }
   return b;
 }
 static method fn1(core::int a) → core::int {
   core::int b = a;
-  for (core::int i = 0; ; i = i.{core::num::+}(1)) {
-    b = b.{core::num::*}(3);
-    if(b.{core::num::>}(10))
+  for (core::int i = 0; ; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    b = b.{core::num::*}(3){(core::num) → core::int};
+    if(b.{core::num::>}(10){(core::num) → core::bool})
       return b;
   }
 }
 static method fn2() → core::int {
-  for (core::int i = 0, core::int j = 2; ; i = i.{core::num::+}(2), j = j.{core::num::+}(1)) {
-    if(i.{core::num::+}(j).{core::num::>}(10)) {
-      return i.{core::num::+}(j);
+  for (core::int i = 0, core::int j = 2; ; i = i.{core::num::+}(2){(core::num) → core::int}, j = j.{core::num::+}(1){(core::num) → core::int}) {
+    if(i.{core::num::+}(j){(core::num) → core::int}.{core::num::>}(10){(core::num) → core::bool}) {
+      return i.{core::num::+}(j){(core::num) → core::int};
     }
   }
 }
 static method fnContinue() → core::int {
   core::int a = 0;
-  for (core::int i = 0; i.{core::num::<}(5); i = i.{core::num::+}(1))
+  for (core::int i = 0; i.{core::num::<}(5){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
     #L1:
     {
-      if(i.{core::num::%}(2).{core::num::==}(1))
+      if(i.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1)
         break #L1;
-      a = a.{core::num::+}(i);
+      a = a.{core::num::+}(i){(core::num) → core::int};
     }
   return a;
 }
 static method fnBreak(core::int a) → core::int {
   core::int b = a;
   #L2:
-  for (core::int i = 0; i.{core::num::<}(2); i = i.{core::num::+}(1)) {
-    if(b.{core::num::==}(2))
+  for (core::int i = 0; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(b =={core::num::==}{(core::Object) → core::bool} 2)
       break #L2;
-    b = b.{core::num::+}(a);
+    b = b.{core::num::+}(a){(core::num) → core::int};
   }
   return b;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.strong.expect
index 8d0f813..81d7277 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.strong.expect
@@ -17,11 +17,11 @@
 static const field core::int var7 = #C5;
 static const field core::int var8 = #C6;
 static method ifTest(core::int a) → core::int {
-  if(a.{core::num::==}(1)) {
+  if(a =={core::num::==}{(core::Object) → core::bool} 1) {
     return 100;
   }
   else
-    if(a.{core::num::==}(2)) {
+    if(a =={core::num::==}{(core::Object) → core::bool} 2) {
       return 200;
     }
     else {
@@ -29,7 +29,7 @@
     }
 }
 static method ifTest2(core::int a) → core::int {
-  if(a.{core::num::==}(#C4)) {
+  if(a =={core::num::==}{(core::Object) → core::bool} (#C4)) {
     return 100;
   }
   else {
@@ -37,8 +37,8 @@
   }
 }
 static method ifTest3(core::int a) → core::int {
-  if(a.{core::num::>}(0)) {
-    if(a.{core::num::==}(1))
+  if(a.{core::num::>}(0){(core::num) → core::bool}) {
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
       return 100;
     return 200;
   }
@@ -46,15 +46,15 @@
 }
 static method ifTest4(core::int a) → core::int {
   core::int b = a;
-  if(a.{core::num::==}(1)) {
-    b = b.{core::num::+}(a);
-    if(a.{core::num::%}(2).{core::num::==}(1)) {
-      b = b.{core::num::+}(a);
+  if(a =={core::num::==}{(core::Object) → core::bool} 1) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    if(a.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1) {
+      b = b.{core::num::+}(a){(core::num) → core::int};
     }
   }
   else
-    if(a.{core::num::==}(2)) {
-      b = b.{core::num::-}(a);
+    if(a =={core::num::==}{(core::Object) → core::bool} 2) {
+      b = b.{core::num::-}(a){(core::num) → core::int};
     }
   return b;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.strong.transformed.expect
index 8d0f813..81d7277 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.strong.transformed.expect
@@ -17,11 +17,11 @@
 static const field core::int var7 = #C5;
 static const field core::int var8 = #C6;
 static method ifTest(core::int a) → core::int {
-  if(a.{core::num::==}(1)) {
+  if(a =={core::num::==}{(core::Object) → core::bool} 1) {
     return 100;
   }
   else
-    if(a.{core::num::==}(2)) {
+    if(a =={core::num::==}{(core::Object) → core::bool} 2) {
       return 200;
     }
     else {
@@ -29,7 +29,7 @@
     }
 }
 static method ifTest2(core::int a) → core::int {
-  if(a.{core::num::==}(#C4)) {
+  if(a =={core::num::==}{(core::Object) → core::bool} (#C4)) {
     return 100;
   }
   else {
@@ -37,8 +37,8 @@
   }
 }
 static method ifTest3(core::int a) → core::int {
-  if(a.{core::num::>}(0)) {
-    if(a.{core::num::==}(1))
+  if(a.{core::num::>}(0){(core::num) → core::bool}) {
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
       return 100;
     return 200;
   }
@@ -46,15 +46,15 @@
 }
 static method ifTest4(core::int a) → core::int {
   core::int b = a;
-  if(a.{core::num::==}(1)) {
-    b = b.{core::num::+}(a);
-    if(a.{core::num::%}(2).{core::num::==}(1)) {
-      b = b.{core::num::+}(a);
+  if(a =={core::num::==}{(core::Object) → core::bool} 1) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    if(a.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1) {
+      b = b.{core::num::+}(a){(core::num) → core::int};
     }
   }
   else
-    if(a.{core::num::==}(2)) {
-      b = b.{core::num::-}(a);
+    if(a =={core::num::==}{(core::Object) → core::bool} 2) {
+      b = b.{core::num::-}(a){(core::num) → core::int};
     }
   return b;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.weak.expect
index 8d0f813..81d7277 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.weak.expect
@@ -17,11 +17,11 @@
 static const field core::int var7 = #C5;
 static const field core::int var8 = #C6;
 static method ifTest(core::int a) → core::int {
-  if(a.{core::num::==}(1)) {
+  if(a =={core::num::==}{(core::Object) → core::bool} 1) {
     return 100;
   }
   else
-    if(a.{core::num::==}(2)) {
+    if(a =={core::num::==}{(core::Object) → core::bool} 2) {
       return 200;
     }
     else {
@@ -29,7 +29,7 @@
     }
 }
 static method ifTest2(core::int a) → core::int {
-  if(a.{core::num::==}(#C4)) {
+  if(a =={core::num::==}{(core::Object) → core::bool} (#C4)) {
     return 100;
   }
   else {
@@ -37,8 +37,8 @@
   }
 }
 static method ifTest3(core::int a) → core::int {
-  if(a.{core::num::>}(0)) {
-    if(a.{core::num::==}(1))
+  if(a.{core::num::>}(0){(core::num) → core::bool}) {
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
       return 100;
     return 200;
   }
@@ -46,15 +46,15 @@
 }
 static method ifTest4(core::int a) → core::int {
   core::int b = a;
-  if(a.{core::num::==}(1)) {
-    b = b.{core::num::+}(a);
-    if(a.{core::num::%}(2).{core::num::==}(1)) {
-      b = b.{core::num::+}(a);
+  if(a =={core::num::==}{(core::Object) → core::bool} 1) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    if(a.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1) {
+      b = b.{core::num::+}(a){(core::num) → core::int};
     }
   }
   else
-    if(a.{core::num::==}(2)) {
-      b = b.{core::num::-}(a);
+    if(a =={core::num::==}{(core::Object) → core::bool} 2) {
+      b = b.{core::num::-}(a){(core::num) → core::int};
     }
   return b;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.weak.transformed.expect
index 8d0f813..81d7277 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.weak.transformed.expect
@@ -17,11 +17,11 @@
 static const field core::int var7 = #C5;
 static const field core::int var8 = #C6;
 static method ifTest(core::int a) → core::int {
-  if(a.{core::num::==}(1)) {
+  if(a =={core::num::==}{(core::Object) → core::bool} 1) {
     return 100;
   }
   else
-    if(a.{core::num::==}(2)) {
+    if(a =={core::num::==}{(core::Object) → core::bool} 2) {
       return 200;
     }
     else {
@@ -29,7 +29,7 @@
     }
 }
 static method ifTest2(core::int a) → core::int {
-  if(a.{core::num::==}(#C4)) {
+  if(a =={core::num::==}{(core::Object) → core::bool} (#C4)) {
     return 100;
   }
   else {
@@ -37,8 +37,8 @@
   }
 }
 static method ifTest3(core::int a) → core::int {
-  if(a.{core::num::>}(0)) {
-    if(a.{core::num::==}(1))
+  if(a.{core::num::>}(0){(core::num) → core::bool}) {
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
       return 100;
     return 200;
   }
@@ -46,15 +46,15 @@
 }
 static method ifTest4(core::int a) → core::int {
   core::int b = a;
-  if(a.{core::num::==}(1)) {
-    b = b.{core::num::+}(a);
-    if(a.{core::num::%}(2).{core::num::==}(1)) {
-      b = b.{core::num::+}(a);
+  if(a =={core::num::==}{(core::Object) → core::bool} 1) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    if(a.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1) {
+      b = b.{core::num::+}(a){(core::num) → core::int};
     }
   }
   else
-    if(a.{core::num::==}(2)) {
-      b = b.{core::num::-}(a);
+    if(a =={core::num::==}{(core::Object) → core::bool} 2) {
+      b = b.{core::num::-}(a){(core::num) → core::int};
     }
   return b;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.strong.expect
index 265d81d..82b3cb4 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.strong.expect
@@ -29,15 +29,15 @@
 static const field core::int var4 = #C2;
 static const field core::int var5 = #C3;
 static method fn() → core::int
-  return (#C4).{self::A::y};
+  return (#C4).{self::A::y}{core::int};
 static method fn2() → core::int {
   self::A x = #C4;
-  return x.{self::A::y};
+  return x.{self::A::y}{core::int};
 }
 static method fn4() → core::int
-  return (#C5).{self::A::y};
+  return (#C5).{self::A::y}{core::int};
 static method fn5() → core::int
-  return (#C7).{self::C::y};
+  return (#C7).{self::C::y}{core::int};
 static method main() → void {
   exp::Expect::equals(#C2, 1);
   exp::Expect::equals(#C2, 1);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.strong.transformed.expect
index 265d81d..82b3cb4 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.strong.transformed.expect
@@ -29,15 +29,15 @@
 static const field core::int var4 = #C2;
 static const field core::int var5 = #C3;
 static method fn() → core::int
-  return (#C4).{self::A::y};
+  return (#C4).{self::A::y}{core::int};
 static method fn2() → core::int {
   self::A x = #C4;
-  return x.{self::A::y};
+  return x.{self::A::y}{core::int};
 }
 static method fn4() → core::int
-  return (#C5).{self::A::y};
+  return (#C5).{self::A::y}{core::int};
 static method fn5() → core::int
-  return (#C7).{self::C::y};
+  return (#C7).{self::C::y}{core::int};
 static method main() → void {
   exp::Expect::equals(#C2, 1);
   exp::Expect::equals(#C2, 1);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.expect
index 265d81d..82b3cb4 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.expect
@@ -29,15 +29,15 @@
 static const field core::int var4 = #C2;
 static const field core::int var5 = #C3;
 static method fn() → core::int
-  return (#C4).{self::A::y};
+  return (#C4).{self::A::y}{core::int};
 static method fn2() → core::int {
   self::A x = #C4;
-  return x.{self::A::y};
+  return x.{self::A::y}{core::int};
 }
 static method fn4() → core::int
-  return (#C5).{self::A::y};
+  return (#C5).{self::A::y}{core::int};
 static method fn5() → core::int
-  return (#C7).{self::C::y};
+  return (#C7).{self::C::y}{core::int};
 static method main() → void {
   exp::Expect::equals(#C2, 1);
   exp::Expect::equals(#C2, 1);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.outline.expect
index 4d35f82..ed43e55 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.outline.expect
@@ -24,7 +24,7 @@
 }
 static const field core::int var1 = self::fn();
 static const field core::int var2 = self::fn2();
-static const field core::int var3 = const self::A::•(1).{self::A::y};
+static const field core::int var3 = const self::A::•(1).{self::A::y}{core::int};
 static const field core::int var4 = self::fn4();
 static const field core::int var5 = self::fn5();
 static method fn() → core::int
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.transformed.expect
index 265d81d..82b3cb4 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.transformed.expect
@@ -29,15 +29,15 @@
 static const field core::int var4 = #C2;
 static const field core::int var5 = #C3;
 static method fn() → core::int
-  return (#C4).{self::A::y};
+  return (#C4).{self::A::y}{core::int};
 static method fn2() → core::int {
   self::A x = #C4;
-  return x.{self::A::y};
+  return x.{self::A::y}{core::int};
 }
 static method fn4() → core::int
-  return (#C5).{self::A::y};
+  return (#C5).{self::A::y}{core::int};
 static method fn5() → core::int
-  return (#C7).{self::C::y};
+  return (#C7).{self::C::y}{core::int};
 static method main() → void {
   exp::Expect::equals(#C2, 1);
   exp::Expect::equals(#C2, 1);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.expect
index 0eb686e..4c328e0 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.expect
@@ -24,7 +24,7 @@
     : self::C::y = y, super core::Object::•()
     ;
   method fn() → core::int {
-    if(this.{self::C::y}.{core::num::==}(1))
+    if(this.{self::C::y}{core::int} =={core::num::==}{(core::Object) → core::bool} 1)
       return 100;
     return 200;
   }
@@ -71,26 +71,26 @@
 static const field core::String var8 = #C7;
 static const field core::String fnVal6 = #C7;
 static method fn() → core::String
-  return (#C8).{core::Object::toString}();
+  return (#C8).{core::Object::toString}(){() → core::String};
 static method fn2() → core::String
-  return (#C9).{self::B::toString}();
+  return (#C9).{self::B::toString}(){() → core::String};
 static method fn3() → core::int
-  return (#C11).{self::C::fn}();
+  return (#C11).{self::C::fn}(){() → core::int};
 static method fn4() → core::int
-  return (#C13).{self::C::fn}();
+  return (#C13).{self::C::fn}(){() → core::int};
 static method fn5() → core::int
-  return (#C14).{self::D::fn}();
+  return (#C14).{self::D::fn}(){() → core::int};
 static method fn6() → core::int
-  return (#C15).{self::C::fn}();
+  return (#C15).{self::C::fn}(){() → core::int};
 static method fn7() → core::String
-  return (#C16).{self::F::fn}("string");
+  return (#C16).{self::F::fn}("string"){(core::String) → core::String};
 static method fn8() → core::String
-  return (#C17).{self::F::fn}("string");
+  return (#C17).{self::F::fn}("string"){(core::String) → core::String};
 static method main() → void {
-  exp::Expect::equals(#C2, (#C8).{core::Object::toString}());
-  exp::Expect::equals(#C2, (#C8).{core::Object::toString}());
-  exp::Expect::equals(#C3, (#C9).{self::B::toString}());
-  exp::Expect::equals(#C3, (#C9).{self::B::toString}());
+  exp::Expect::equals(#C2, (#C8).{core::Object::toString}(){() → core::String});
+  exp::Expect::equals(#C2, (#C8).{core::Object::toString}(){() → core::String});
+  exp::Expect::equals(#C3, (#C9).{self::B::toString}(){() → core::String});
+  exp::Expect::equals(#C3, (#C9).{self::B::toString}(){() → core::String});
   exp::Expect::equals(#C4, 200);
   exp::Expect::equals(#C5, 100);
   exp::Expect::equals(#C4, 200);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.transformed.expect
index 0eb686e..4c328e0 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.transformed.expect
@@ -24,7 +24,7 @@
     : self::C::y = y, super core::Object::•()
     ;
   method fn() → core::int {
-    if(this.{self::C::y}.{core::num::==}(1))
+    if(this.{self::C::y}{core::int} =={core::num::==}{(core::Object) → core::bool} 1)
       return 100;
     return 200;
   }
@@ -71,26 +71,26 @@
 static const field core::String var8 = #C7;
 static const field core::String fnVal6 = #C7;
 static method fn() → core::String
-  return (#C8).{core::Object::toString}();
+  return (#C8).{core::Object::toString}(){() → core::String};
 static method fn2() → core::String
-  return (#C9).{self::B::toString}();
+  return (#C9).{self::B::toString}(){() → core::String};
 static method fn3() → core::int
-  return (#C11).{self::C::fn}();
+  return (#C11).{self::C::fn}(){() → core::int};
 static method fn4() → core::int
-  return (#C13).{self::C::fn}();
+  return (#C13).{self::C::fn}(){() → core::int};
 static method fn5() → core::int
-  return (#C14).{self::D::fn}();
+  return (#C14).{self::D::fn}(){() → core::int};
 static method fn6() → core::int
-  return (#C15).{self::C::fn}();
+  return (#C15).{self::C::fn}(){() → core::int};
 static method fn7() → core::String
-  return (#C16).{self::F::fn}("string");
+  return (#C16).{self::F::fn}("string"){(core::String) → core::String};
 static method fn8() → core::String
-  return (#C17).{self::F::fn}("string");
+  return (#C17).{self::F::fn}("string"){(core::String) → core::String};
 static method main() → void {
-  exp::Expect::equals(#C2, (#C8).{core::Object::toString}());
-  exp::Expect::equals(#C2, (#C8).{core::Object::toString}());
-  exp::Expect::equals(#C3, (#C9).{self::B::toString}());
-  exp::Expect::equals(#C3, (#C9).{self::B::toString}());
+  exp::Expect::equals(#C2, (#C8).{core::Object::toString}(){() → core::String});
+  exp::Expect::equals(#C2, (#C8).{core::Object::toString}(){() → core::String});
+  exp::Expect::equals(#C3, (#C9).{self::B::toString}(){() → core::String});
+  exp::Expect::equals(#C3, (#C9).{self::B::toString}(){() → core::String});
   exp::Expect::equals(#C4, 200);
   exp::Expect::equals(#C5, 100);
   exp::Expect::equals(#C4, 200);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.expect
index 00d54b0..4ef96e2 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.expect
@@ -24,7 +24,7 @@
     : self::C::y = y, super core::Object::•()
     ;
   method fn() → core::int {
-    if(this.{self::C::y}.{core::num::==}(1))
+    if(this.{self::C::y}{core::int} =={core::num::==}{(core::Object) → core::bool} 1)
       return 100;
     return 200;
   }
@@ -71,26 +71,26 @@
 static const field core::String var8 = #C7;
 static const field core::String fnVal6 = #C7;
 static method fn() → core::String
-  return (#C8).{core::Object::toString}();
+  return (#C8).{core::Object::toString}(){() → core::String};
 static method fn2() → core::String
-  return (#C9).{self::B::toString}();
+  return (#C9).{self::B::toString}(){() → core::String};
 static method fn3() → core::int
-  return (#C11).{self::C::fn}();
+  return (#C11).{self::C::fn}(){() → core::int};
 static method fn4() → core::int
-  return (#C13).{self::C::fn}();
+  return (#C13).{self::C::fn}(){() → core::int};
 static method fn5() → core::int
-  return (#C14).{self::D::fn}();
+  return (#C14).{self::D::fn}(){() → core::int};
 static method fn6() → core::int
-  return (#C15).{self::C::fn}();
+  return (#C15).{self::C::fn}(){() → core::int};
 static method fn7() → core::String
-  return (#C16).{self::F::fn}("string");
+  return (#C16).{self::F::fn}("string"){(core::String) → core::String};
 static method fn8() → core::String
-  return (#C17).{self::F::fn}("string");
+  return (#C17).{self::F::fn}("string"){(core::String) → core::String};
 static method main() → void {
-  exp::Expect::equals(#C2, (#C8).{core::Object::toString}());
-  exp::Expect::equals(#C2, (#C8).{core::Object::toString}());
-  exp::Expect::equals(#C3, (#C9).{self::B::toString}());
-  exp::Expect::equals(#C3, (#C9).{self::B::toString}());
+  exp::Expect::equals(#C2, (#C8).{core::Object::toString}(){() → core::String});
+  exp::Expect::equals(#C2, (#C8).{core::Object::toString}(){() → core::String});
+  exp::Expect::equals(#C3, (#C9).{self::B::toString}(){() → core::String});
+  exp::Expect::equals(#C3, (#C9).{self::B::toString}(){() → core::String});
   exp::Expect::equals(#C4, 200);
   exp::Expect::equals(#C5, 100);
   exp::Expect::equals(#C4, 200);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.outline.expect
index 05abaed..4443d89 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.outline.expect
@@ -51,21 +51,21 @@
     ;
 }
 static const field core::String var1 = self::fn();
-static const field core::String toString1 = const self::A::•().{core::Object::toString}();
+static const field core::String toString1 = const self::A::•().{core::Object::toString}(){() → core::String};
 static const field core::String var2 = self::fn2();
-static const field core::String toString2 = const self::B::•().{self::B::toString}();
+static const field core::String toString2 = const self::B::•().{self::B::toString}(){() → core::String};
 static const field core::int var3 = self::fn3();
 static const field core::int var4 = self::fn4();
-static const field core::int fnVal1 = const self::C::•(0).{self::C::fn}();
-static const field core::int fnVal2 = const self::C::•(1).{self::C::fn}();
+static const field core::int fnVal1 = const self::C::•(0).{self::C::fn}(){() → core::int};
+static const field core::int fnVal2 = const self::C::•(1).{self::C::fn}(){() → core::int};
 static const field core::int var5 = self::fn5();
-static const field core::int fnVal3 = const self::D::•(1).{self::D::fn}();
+static const field core::int fnVal3 = const self::D::•(1).{self::D::fn}(){() → core::int};
 static const field core::int var6 = self::fn6();
-static const field core::int fnVal4 = const self::E::•(0).{self::C::fn}();
+static const field core::int fnVal4 = const self::E::•(0).{self::C::fn}(){() → core::int};
 static const field core::String var7 = self::fn7();
-static const field core::String fnVal5 = const self::F::•<core::int, core::String, core::num>().{self::F::fn}("string");
+static const field core::String fnVal5 = const self::F::•<core::int, core::String, core::num>().{self::F::fn}("string"){(core::String) → core::String};
 static const field core::String var8 = self::fn8();
-static const field core::String fnVal6 = const self::G::•<core::int>().{self::F::fn}("string");
+static const field core::String fnVal6 = const self::G::•<core::int>().{self::F::fn}("string"){(core::String) → core::String};
 static method fn() → core::String
   ;
 static method fn2() → core::String
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.transformed.expect
index 00d54b0..4ef96e2 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
     : self::C::y = y, super core::Object::•()
     ;
   method fn() → core::int {
-    if(this.{self::C::y}.{core::num::==}(1))
+    if(this.{self::C::y}{core::int} =={core::num::==}{(core::Object) → core::bool} 1)
       return 100;
     return 200;
   }
@@ -71,26 +71,26 @@
 static const field core::String var8 = #C7;
 static const field core::String fnVal6 = #C7;
 static method fn() → core::String
-  return (#C8).{core::Object::toString}();
+  return (#C8).{core::Object::toString}(){() → core::String};
 static method fn2() → core::String
-  return (#C9).{self::B::toString}();
+  return (#C9).{self::B::toString}(){() → core::String};
 static method fn3() → core::int
-  return (#C11).{self::C::fn}();
+  return (#C11).{self::C::fn}(){() → core::int};
 static method fn4() → core::int
-  return (#C13).{self::C::fn}();
+  return (#C13).{self::C::fn}(){() → core::int};
 static method fn5() → core::int
-  return (#C14).{self::D::fn}();
+  return (#C14).{self::D::fn}(){() → core::int};
 static method fn6() → core::int
-  return (#C15).{self::C::fn}();
+  return (#C15).{self::C::fn}(){() → core::int};
 static method fn7() → core::String
-  return (#C16).{self::F::fn}("string");
+  return (#C16).{self::F::fn}("string"){(core::String) → core::String};
 static method fn8() → core::String
-  return (#C17).{self::F::fn}("string");
+  return (#C17).{self::F::fn}("string"){(core::String) → core::String};
 static method main() → void {
-  exp::Expect::equals(#C2, (#C8).{core::Object::toString}());
-  exp::Expect::equals(#C2, (#C8).{core::Object::toString}());
-  exp::Expect::equals(#C3, (#C9).{self::B::toString}());
-  exp::Expect::equals(#C3, (#C9).{self::B::toString}());
+  exp::Expect::equals(#C2, (#C8).{core::Object::toString}(){() → core::String});
+  exp::Expect::equals(#C2, (#C8).{core::Object::toString}(){() → core::String});
+  exp::Expect::equals(#C3, (#C9).{self::B::toString}(){() → core::String});
+  exp::Expect::equals(#C3, (#C9).{self::B::toString}(){() → core::String});
   exp::Expect::equals(#C4, 200);
   exp::Expect::equals(#C5, 100);
   exp::Expect::equals(#C4, 200);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.expect
index b69cf08..d172063 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.expect
@@ -20,11 +20,11 @@
 static const field core::List<core::int> mutableListVar = #C6;
 static const field core::List<core::int> mutableListAddVar = #C8;
 static method firstFn() → core::int {
-  return (#C6).{core::Iterable::first};
+  return (#C6).{core::Iterable::first}{core::int};
 }
 static method firstCatchFn() → core::int {
   try {
-    core::int v = (#C9).{core::Iterable::first};
+    core::int v = (#C9).{core::Iterable::first}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -32,17 +32,17 @@
   return 1;
 }
 static method isEmptyFn() → core::bool {
-  return (#C6).{core::Iterable::isEmpty};
+  return (#C6).{core::Iterable::isEmpty}{core::bool};
 }
 static method isNotEmptyFn() → core::bool {
-  return (#C6).{core::Iterable::isNotEmpty};
+  return (#C6).{core::Iterable::isNotEmpty}{core::bool};
 }
 static method lastFn() → core::int {
-  return (#C6).{core::Iterable::last};
+  return (#C6).{core::Iterable::last}{core::int};
 }
 static method lastCatchFn() → core::int {
   try {
-    core::int v = (#C9).{core::Iterable::last};
+    core::int v = (#C9).{core::Iterable::last}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -50,14 +50,14 @@
   return 1;
 }
 static method lengthFn() → core::int {
-  return (#C6).{core::List::length};
+  return (#C6).{core::List::length}{core::int};
 }
 static method singleFn() → core::int {
-  return (#C10).{core::Iterable::single};
+  return (#C10).{core::Iterable::single}{core::int};
 }
 static method singleCatchFn() → core::int {
   try {
-    core::int v = (#C9).{core::Iterable::single};
+    core::int v = (#C9).{core::Iterable::single}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -66,7 +66,7 @@
 }
 static method singleCatchFn2() → core::int {
   try {
-    core::int v = (#C6).{core::Iterable::single};
+    core::int v = (#C6).{core::Iterable::single}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -74,11 +74,11 @@
   return 1;
 }
 static method getWithIndexFn() → core::int {
-  return (#C10).{core::List::[]}(0);
+  return (#C10).{core::List::[]}(0){(core::int) → core::int};
 }
 static method rangeErrorCatchFn() → core::int {
   try {
-    core::int v = (#C10).{core::List::[]}(1);
+    core::int v = (#C10).{core::List::[]}(1){(core::int) → core::int};
   }
   on core::RangeError catch(no-exception-var) {
     return 0;
@@ -91,7 +91,7 @@
 }
 static method mutableListAdd() → core::List<core::int> {
   core::List<core::int> x = <core::int>[1, 2];
-  x.{core::List::add}(3);
+  x.{core::List::add}(3){(core::int) → void};
   return x;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.transformed.expect
index 3a3adca..02621b8 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart.strong.transformed.expect
@@ -20,11 +20,11 @@
 static const field core::List<core::int> mutableListVar = #C6;
 static const field core::List<core::int> mutableListAddVar = #C8;
 static method firstFn() → core::int {
-  return (#C6).{core::Iterable::first};
+  return (#C6).{core::Iterable::first}{core::int};
 }
 static method firstCatchFn() → core::int {
   try {
-    core::int v = (#C9).{core::Iterable::first};
+    core::int v = (#C9).{core::Iterable::first}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -32,17 +32,17 @@
   return 1;
 }
 static method isEmptyFn() → core::bool {
-  return (#C6).{core::Iterable::isEmpty};
+  return (#C6).{core::Iterable::isEmpty}{core::bool};
 }
 static method isNotEmptyFn() → core::bool {
-  return (#C6).{core::Iterable::isNotEmpty};
+  return (#C6).{core::Iterable::isNotEmpty}{core::bool};
 }
 static method lastFn() → core::int {
-  return (#C6).{core::Iterable::last};
+  return (#C6).{core::Iterable::last}{core::int};
 }
 static method lastCatchFn() → core::int {
   try {
-    core::int v = (#C9).{core::Iterable::last};
+    core::int v = (#C9).{core::Iterable::last}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -50,14 +50,14 @@
   return 1;
 }
 static method lengthFn() → core::int {
-  return (#C6).{core::List::length};
+  return (#C6).{core::List::length}{core::int};
 }
 static method singleFn() → core::int {
-  return (#C10).{core::Iterable::single};
+  return (#C10).{core::Iterable::single}{core::int};
 }
 static method singleCatchFn() → core::int {
   try {
-    core::int v = (#C9).{core::Iterable::single};
+    core::int v = (#C9).{core::Iterable::single}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -66,7 +66,7 @@
 }
 static method singleCatchFn2() → core::int {
   try {
-    core::int v = (#C6).{core::Iterable::single};
+    core::int v = (#C6).{core::Iterable::single}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -74,11 +74,11 @@
   return 1;
 }
 static method getWithIndexFn() → core::int {
-  return (#C10).{core::List::[]}(0);
+  return (#C10).{core::List::[]}(0){(core::int) → core::int};
 }
 static method rangeErrorCatchFn() → core::int {
   try {
-    core::int v = (#C10).{core::List::[]}(1);
+    core::int v = (#C10).{core::List::[]}(1){(core::int) → core::int};
   }
   on core::RangeError catch(no-exception-var) {
     return 0;
@@ -91,7 +91,7 @@
 }
 static method mutableListAdd() → core::List<core::int> {
   core::List<core::int> x = core::_GrowableList::_literal2<core::int>(1, 2);
-  x.{core::List::add}(3);
+  x.{core::List::add}(3){(core::int) → void};
   return x;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.expect
index bcc8e63..db792b6 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.expect
@@ -20,11 +20,11 @@
 static const field core::List<core::int> mutableListVar = #C6;
 static const field core::List<core::int> mutableListAddVar = #C8;
 static method firstFn() → core::int {
-  return (#C6).{core::Iterable::first};
+  return (#C6).{core::Iterable::first}{core::int};
 }
 static method firstCatchFn() → core::int {
   try {
-    core::int v = (#C9).{core::Iterable::first};
+    core::int v = (#C9).{core::Iterable::first}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -32,17 +32,17 @@
   return 1;
 }
 static method isEmptyFn() → core::bool {
-  return (#C6).{core::Iterable::isEmpty};
+  return (#C6).{core::Iterable::isEmpty}{core::bool};
 }
 static method isNotEmptyFn() → core::bool {
-  return (#C6).{core::Iterable::isNotEmpty};
+  return (#C6).{core::Iterable::isNotEmpty}{core::bool};
 }
 static method lastFn() → core::int {
-  return (#C6).{core::Iterable::last};
+  return (#C6).{core::Iterable::last}{core::int};
 }
 static method lastCatchFn() → core::int {
   try {
-    core::int v = (#C9).{core::Iterable::last};
+    core::int v = (#C9).{core::Iterable::last}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -50,14 +50,14 @@
   return 1;
 }
 static method lengthFn() → core::int {
-  return (#C6).{core::List::length};
+  return (#C6).{core::List::length}{core::int};
 }
 static method singleFn() → core::int {
-  return (#C10).{core::Iterable::single};
+  return (#C10).{core::Iterable::single}{core::int};
 }
 static method singleCatchFn() → core::int {
   try {
-    core::int v = (#C9).{core::Iterable::single};
+    core::int v = (#C9).{core::Iterable::single}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -66,7 +66,7 @@
 }
 static method singleCatchFn2() → core::int {
   try {
-    core::int v = (#C6).{core::Iterable::single};
+    core::int v = (#C6).{core::Iterable::single}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -74,11 +74,11 @@
   return 1;
 }
 static method getWithIndexFn() → core::int {
-  return (#C10).{core::List::[]}(0);
+  return (#C10).{core::List::[]}(0){(core::int) → core::int};
 }
 static method rangeErrorCatchFn() → core::int {
   try {
-    core::int v = (#C10).{core::List::[]}(1);
+    core::int v = (#C10).{core::List::[]}(1){(core::int) → core::int};
   }
   on core::RangeError catch(no-exception-var) {
     return 0;
@@ -91,7 +91,7 @@
 }
 static method mutableListAdd() → core::List<core::int> {
   core::List<core::int> x = <core::int>[1, 2];
-  x.{core::List::add}(3);
+  x.{core::List::add}(3){(core::int) → void};
   return x;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.transformed.expect
index fd2c81a..88c7fa4 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.transformed.expect
@@ -20,11 +20,11 @@
 static const field core::List<core::int> mutableListVar = #C6;
 static const field core::List<core::int> mutableListAddVar = #C8;
 static method firstFn() → core::int {
-  return (#C6).{core::Iterable::first};
+  return (#C6).{core::Iterable::first}{core::int};
 }
 static method firstCatchFn() → core::int {
   try {
-    core::int v = (#C9).{core::Iterable::first};
+    core::int v = (#C9).{core::Iterable::first}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -32,17 +32,17 @@
   return 1;
 }
 static method isEmptyFn() → core::bool {
-  return (#C6).{core::Iterable::isEmpty};
+  return (#C6).{core::Iterable::isEmpty}{core::bool};
 }
 static method isNotEmptyFn() → core::bool {
-  return (#C6).{core::Iterable::isNotEmpty};
+  return (#C6).{core::Iterable::isNotEmpty}{core::bool};
 }
 static method lastFn() → core::int {
-  return (#C6).{core::Iterable::last};
+  return (#C6).{core::Iterable::last}{core::int};
 }
 static method lastCatchFn() → core::int {
   try {
-    core::int v = (#C9).{core::Iterable::last};
+    core::int v = (#C9).{core::Iterable::last}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -50,14 +50,14 @@
   return 1;
 }
 static method lengthFn() → core::int {
-  return (#C6).{core::List::length};
+  return (#C6).{core::List::length}{core::int};
 }
 static method singleFn() → core::int {
-  return (#C10).{core::Iterable::single};
+  return (#C10).{core::Iterable::single}{core::int};
 }
 static method singleCatchFn() → core::int {
   try {
-    core::int v = (#C9).{core::Iterable::single};
+    core::int v = (#C9).{core::Iterable::single}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -66,7 +66,7 @@
 }
 static method singleCatchFn2() → core::int {
   try {
-    core::int v = (#C6).{core::Iterable::single};
+    core::int v = (#C6).{core::Iterable::single}{core::int};
   }
   on core::StateError catch(no-exception-var) {
     return 0;
@@ -74,11 +74,11 @@
   return 1;
 }
 static method getWithIndexFn() → core::int {
-  return (#C10).{core::List::[]}(0);
+  return (#C10).{core::List::[]}(0){(core::int) → core::int};
 }
 static method rangeErrorCatchFn() → core::int {
   try {
-    core::int v = (#C10).{core::List::[]}(1);
+    core::int v = (#C10).{core::List::[]}(1){(core::int) → core::int};
   }
   on core::RangeError catch(no-exception-var) {
     return 0;
@@ -91,7 +91,7 @@
 }
 static method mutableListAdd() → core::List<core::int> {
   core::List<core::int> x = core::_GrowableList::_literal2<core::int>(1, 2);
-  x.{core::List::add}(3);
+  x.{core::List::add}(3){(core::int) → void};
   return x;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.expect
index d9798b9..f4af2aa 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.expect
@@ -82,16 +82,16 @@
            ^";
 static const field core::List<core::int> constListAddException = invalid-expression "Unhandled core exception: Unsupported operation: add";
 static method firstExceptionFn() → core::int {
-  return (#C1).{core::Iterable::first};
+  return (#C1).{core::Iterable::first}{core::int};
 }
 static method lastExceptionFn() → core::int {
-  return (#C1).{core::Iterable::last};
+  return (#C1).{core::Iterable::last}{core::int};
 }
 static method singleExceptionFn() → core::int {
-  return (#C1).{core::Iterable::single};
+  return (#C1).{core::Iterable::single}{core::int};
 }
 static method singleExceptionMultiFn() → core::int {
-  return (#C4).{core::Iterable::single};
+  return (#C4).{core::Iterable::single}{core::int};
 }
 static method invalidPropertyFn() → core::int {
   return invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:36:12: Error: The getter 'invalidProperty' isn't defined for the class 'List<int>'.
@@ -101,18 +101,18 @@
            ^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method getWithIndexExceptionFn() → core::int {
-  return (#C5).{core::List::[]}(1);
+  return (#C5).{core::List::[]}(1){(core::int) → core::int};
 }
 static method getWithIndexExceptionFn2() → core::int {
-  return (#C5).{core::List::[]}(1.{core::int::unary-}());
+  return (#C5).{core::List::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
 }
 static method getWithIndexExceptionFn3() → core::int {
   return (#C5).{core::List::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return x[0.1];
-           ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int);
+           ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
 }
 static method constListAddExceptionFn() → core::List<core::int> {
-  (#C4).{core::List::add}(3);
+  (#C4).{core::List::add}(3){(core::int) → void};
   return #C4;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.transformed.expect
index fb04009..6afdb33 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.strong.transformed.expect
@@ -82,16 +82,16 @@
            ^";
 static const field core::List<core::int> constListAddException = invalid-expression "Unhandled core exception: Unsupported operation: add";
 static method firstExceptionFn() → core::int {
-  return (#C1).{core::Iterable::first};
+  return (#C1).{core::Iterable::first}{core::int};
 }
 static method lastExceptionFn() → core::int {
-  return (#C1).{core::Iterable::last};
+  return (#C1).{core::Iterable::last}{core::int};
 }
 static method singleExceptionFn() → core::int {
-  return (#C1).{core::Iterable::single};
+  return (#C1).{core::Iterable::single}{core::int};
 }
 static method singleExceptionMultiFn() → core::int {
-  return (#C4).{core::Iterable::single};
+  return (#C4).{core::Iterable::single}{core::int};
 }
 static method invalidPropertyFn() → core::int {
   return invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:36:12: Error: The getter 'invalidProperty' isn't defined for the class 'List<int>'.
@@ -101,18 +101,18 @@
            ^^^^^^^^^^^^^^^";
 }
 static method getWithIndexExceptionFn() → core::int {
-  return (#C5).{core::List::[]}(1);
+  return (#C5).{core::List::[]}(1){(core::int) → core::int};
 }
 static method getWithIndexExceptionFn2() → core::int {
-  return (#C5).{core::List::[]}(1.{core::int::unary-}());
+  return (#C5).{core::List::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
 }
 static method getWithIndexExceptionFn3() → core::int {
   return (#C5).{core::List::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return x[0.1];
-           ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int);
+           ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
 }
 static method constListAddExceptionFn() → core::List<core::int> {
-  (#C4).{core::List::add}(3);
+  (#C4).{core::List::add}(3){(core::int) → void};
   return #C4;
 }
 static method main() → void {}
@@ -126,5 +126,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_list_error.dart:48:12 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_list_error.dart:48:12 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 11, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.expect
index d918e0a..4accbb0 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.expect
@@ -82,16 +82,16 @@
            ^";
 static const field core::List<core::int> constListAddException = invalid-expression "Unhandled core exception: Unsupported operation: add";
 static method firstExceptionFn() → core::int {
-  return (#C1).{core::Iterable::first};
+  return (#C1).{core::Iterable::first}{core::int};
 }
 static method lastExceptionFn() → core::int {
-  return (#C1).{core::Iterable::last};
+  return (#C1).{core::Iterable::last}{core::int};
 }
 static method singleExceptionFn() → core::int {
-  return (#C1).{core::Iterable::single};
+  return (#C1).{core::Iterable::single}{core::int};
 }
 static method singleExceptionMultiFn() → core::int {
-  return (#C4).{core::Iterable::single};
+  return (#C4).{core::Iterable::single}{core::int};
 }
 static method invalidPropertyFn() → core::int {
   return invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:36:12: Error: The getter 'invalidProperty' isn't defined for the class 'List<int>'.
@@ -101,18 +101,18 @@
            ^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method getWithIndexExceptionFn() → core::int {
-  return (#C5).{core::List::[]}(1);
+  return (#C5).{core::List::[]}(1){(core::int) → core::int};
 }
 static method getWithIndexExceptionFn2() → core::int {
-  return (#C5).{core::List::[]}(1.{core::int::unary-}());
+  return (#C5).{core::List::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
 }
 static method getWithIndexExceptionFn3() → core::int {
   return (#C5).{core::List::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return x[0.1];
-           ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int);
+           ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
 }
 static method constListAddExceptionFn() → core::List<core::int> {
-  (#C4).{core::List::add}(3);
+  (#C4).{core::List::add}(3){(core::int) → void};
   return #C4;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.transformed.expect
index e2984c7..670f5fc 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.transformed.expect
@@ -82,16 +82,16 @@
            ^";
 static const field core::List<core::int> constListAddException = invalid-expression "Unhandled core exception: Unsupported operation: add";
 static method firstExceptionFn() → core::int {
-  return (#C1).{core::Iterable::first};
+  return (#C1).{core::Iterable::first}{core::int};
 }
 static method lastExceptionFn() → core::int {
-  return (#C1).{core::Iterable::last};
+  return (#C1).{core::Iterable::last}{core::int};
 }
 static method singleExceptionFn() → core::int {
-  return (#C1).{core::Iterable::single};
+  return (#C1).{core::Iterable::single}{core::int};
 }
 static method singleExceptionMultiFn() → core::int {
-  return (#C4).{core::Iterable::single};
+  return (#C4).{core::Iterable::single}{core::int};
 }
 static method invalidPropertyFn() → core::int {
   return invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:36:12: Error: The getter 'invalidProperty' isn't defined for the class 'List<int>'.
@@ -101,18 +101,18 @@
            ^^^^^^^^^^^^^^^";
 }
 static method getWithIndexExceptionFn() → core::int {
-  return (#C5).{core::List::[]}(1);
+  return (#C5).{core::List::[]}(1){(core::int) → core::int};
 }
 static method getWithIndexExceptionFn2() → core::int {
-  return (#C5).{core::List::[]}(1.{core::int::unary-}());
+  return (#C5).{core::List::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
 }
 static method getWithIndexExceptionFn3() → core::int {
   return (#C5).{core::List::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return x[0.1];
-           ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int);
+           ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
 }
 static method constListAddExceptionFn() → core::List<core::int> {
-  (#C4).{core::List::add}(3);
+  (#C4).{core::List::add}(3){(core::int) → void};
   return #C4;
 }
 static method main() → void {}
@@ -126,5 +126,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_list_error.dart:48:12 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_list_error.dart:48:12 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 11, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.strong.expect
index cd90a2e..0ace590 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.strong.expect
@@ -8,24 +8,24 @@
 static const field core::int constTwo = #C1;
 static method function1() → core::int {
   function add(core::int a, core::int b) → core::int
-    return a.{core::num::+}(b);
+    return a.{core::num::+}(b){(core::num) → core::int};
   return #C2;
 }
 static method function2() → core::int {
   function addTwo(core::int a) → core::int {
-    core::int b = a.{core::num::+}(#C1);
+    core::int b = a.{core::num::+}(#C1){(core::num) → core::int};
     return b;
   }
   return #C3;
 }
 static method function3() → core::int {
   function addTwoReturn(core::int a) → core::int
-    return a.{core::num::+}(#C1);
+    return a.{core::num::+}(#C1){(core::num) → core::int};
   return #C4;
 }
 static method function4() → core::int {
   function addTwo(core::int a) → core::int
-    return a.{core::num::+}(#C1);
+    return a.{core::num::+}(#C1){(core::num) → core::int};
   return #C5;
 }
 static method function5() → core::int {
@@ -45,8 +45,8 @@
 }
 static method function8() → core::int {
   function add(core::int a, core::int b) → core::int
-    return a.{core::num::+}(b);
-  return (#C1).{core::num::+}(#C4);
+    return a.{core::num::+}(b){(core::num) → core::int};
+  return (#C1).{core::num::+}(#C4){(core::num) → core::int};
 }
 static method main() → void {
   exp::Expect::equals(self::function1(), 12);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.strong.transformed.expect
index 2dc0292..142ff6a 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.strong.transformed.expect
@@ -8,24 +8,24 @@
 static const field core::int constTwo = #C1;
 static method function1() → core::int {
   function add(core::int a, core::int b) → core::int
-    return a.{core::num::+}(b);
+    return a.{core::num::+}(b){(core::num) → core::int};
   return #C2;
 }
 static method function2() → core::int {
   function addTwo(core::int a) → core::int {
-    core::int b = a.{core::num::+}(#C1);
+    core::int b = a.{core::num::+}(#C1){(core::num) → core::int};
     return b;
   }
   return #C3;
 }
 static method function3() → core::int {
   function addTwoReturn(core::int a) → core::int
-    return a.{core::num::+}(#C1);
+    return a.{core::num::+}(#C1){(core::num) → core::int};
   return #C4;
 }
 static method function4() → core::int {
   function addTwo(core::int a) → core::int
-    return a.{core::num::+}(#C1);
+    return a.{core::num::+}(#C1){(core::num) → core::int};
   return #C5;
 }
 static method function5() → core::int {
@@ -45,8 +45,8 @@
 }
 static method function8() → core::int {
   function add(core::int a, core::int b) → core::int
-    return a.{core::num::+}(b);
-  return (#C1).{core::num::+}(#C4);
+    return a.{core::num::+}(b){(core::num) → core::int};
+  return (#C1).{core::num::+}(#C4){(core::num) → core::int};
 }
 static method main() → void {
   exp::Expect::equals(self::function1(), 12);
@@ -71,5 +71,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_local_functions.dart:61:16 -> IntConstant(7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_local_functions.dart:61:16 -> IntConstant(7)
 Extra constant evaluation: evaluated: 33, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.weak.expect
index cd90a2e..0ace590 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.weak.expect
@@ -8,24 +8,24 @@
 static const field core::int constTwo = #C1;
 static method function1() → core::int {
   function add(core::int a, core::int b) → core::int
-    return a.{core::num::+}(b);
+    return a.{core::num::+}(b){(core::num) → core::int};
   return #C2;
 }
 static method function2() → core::int {
   function addTwo(core::int a) → core::int {
-    core::int b = a.{core::num::+}(#C1);
+    core::int b = a.{core::num::+}(#C1){(core::num) → core::int};
     return b;
   }
   return #C3;
 }
 static method function3() → core::int {
   function addTwoReturn(core::int a) → core::int
-    return a.{core::num::+}(#C1);
+    return a.{core::num::+}(#C1){(core::num) → core::int};
   return #C4;
 }
 static method function4() → core::int {
   function addTwo(core::int a) → core::int
-    return a.{core::num::+}(#C1);
+    return a.{core::num::+}(#C1){(core::num) → core::int};
   return #C5;
 }
 static method function5() → core::int {
@@ -45,8 +45,8 @@
 }
 static method function8() → core::int {
   function add(core::int a, core::int b) → core::int
-    return a.{core::num::+}(b);
-  return (#C1).{core::num::+}(#C4);
+    return a.{core::num::+}(b){(core::num) → core::int};
+  return (#C1).{core::num::+}(#C4){(core::num) → core::int};
 }
 static method main() → void {
   exp::Expect::equals(self::function1(), 12);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.weak.transformed.expect
index 2dc0292..142ff6a 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.weak.transformed.expect
@@ -8,24 +8,24 @@
 static const field core::int constTwo = #C1;
 static method function1() → core::int {
   function add(core::int a, core::int b) → core::int
-    return a.{core::num::+}(b);
+    return a.{core::num::+}(b){(core::num) → core::int};
   return #C2;
 }
 static method function2() → core::int {
   function addTwo(core::int a) → core::int {
-    core::int b = a.{core::num::+}(#C1);
+    core::int b = a.{core::num::+}(#C1){(core::num) → core::int};
     return b;
   }
   return #C3;
 }
 static method function3() → core::int {
   function addTwoReturn(core::int a) → core::int
-    return a.{core::num::+}(#C1);
+    return a.{core::num::+}(#C1){(core::num) → core::int};
   return #C4;
 }
 static method function4() → core::int {
   function addTwo(core::int a) → core::int
-    return a.{core::num::+}(#C1);
+    return a.{core::num::+}(#C1){(core::num) → core::int};
   return #C5;
 }
 static method function5() → core::int {
@@ -45,8 +45,8 @@
 }
 static method function8() → core::int {
   function add(core::int a, core::int b) → core::int
-    return a.{core::num::+}(b);
-  return (#C1).{core::num::+}(#C4);
+    return a.{core::num::+}(b){(core::num) → core::int};
+  return (#C1).{core::num::+}(#C4){(core::num) → core::int};
 }
 static method main() → void {
   exp::Expect::equals(self::function1(), 12);
@@ -71,5 +71,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_local_functions.dart:61:16 -> IntConstant(7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_local_functions.dart:61:16 -> IntConstant(7)
 Extra constant evaluation: evaluated: 33, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.expect
index 1b2b117..f35acb3 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.expect
@@ -14,10 +14,10 @@
 static const field core::Object? var6 = #C8;
 static const field core::int? var7 = #C2;
 static method fn(core::Map<core::Object, core::Object> map, core::Object key) → core::Object? {
-  return map.{core::Map::[]}(key);
+  return map.{core::Map::[]}(key){(core::Object?) → core::Object?};
 }
 static method fn2() → core::int? {
-  return (#C13).{core::Map::[]}("key");
+  return (#C13).{core::Map::[]}("key"){(core::Object?) → core::int?};
 }
 static method main() → void {
   exp::Expect::equals(#C1, "val");
diff --git a/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.transformed.expect
index 1b2b117..f35acb3 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_map.dart.strong.transformed.expect
@@ -14,10 +14,10 @@
 static const field core::Object? var6 = #C8;
 static const field core::int? var7 = #C2;
 static method fn(core::Map<core::Object, core::Object> map, core::Object key) → core::Object? {
-  return map.{core::Map::[]}(key);
+  return map.{core::Map::[]}(key){(core::Object?) → core::Object?};
 }
 static method fn2() → core::int? {
-  return (#C13).{core::Map::[]}("key");
+  return (#C13).{core::Map::[]}("key"){(core::Object?) → core::int?};
 }
 static method main() → void {
   exp::Expect::equals(#C1, "val");
diff --git a/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.expect
index 836d428..a1dcfec 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.expect
@@ -14,10 +14,10 @@
 static const field core::Object? var6 = #C8;
 static const field core::int? var7 = #C2;
 static method fn(core::Map<core::Object, core::Object> map, core::Object key) → core::Object? {
-  return map.{core::Map::[]}(key);
+  return map.{core::Map::[]}(key){(core::Object?) → core::Object?};
 }
 static method fn2() → core::int? {
-  return (#C13).{core::Map::[]}("key");
+  return (#C13).{core::Map::[]}("key"){(core::Object?) → core::int?};
 }
 static method main() → void {
   exp::Expect::equals(#C1, "val");
diff --git a/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.transformed.expect
index 836d428..a1dcfec 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.transformed.expect
@@ -14,10 +14,10 @@
 static const field core::Object? var6 = #C8;
 static const field core::int? var7 = #C2;
 static method fn(core::Map<core::Object, core::Object> map, core::Object key) → core::Object? {
-  return map.{core::Map::[]}(key);
+  return map.{core::Map::[]}(key){(core::Object?) → core::Object?};
 }
 static method fn2() → core::int? {
-  return (#C13).{core::Map::[]}("key");
+  return (#C13).{core::Map::[]}("key"){(core::Object?) → core::int?};
 }
 static method main() → void {
   exp::Expect::equals(#C1, "val");
diff --git a/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.strong.expect
index c53d3dc..1ee9329 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.strong.expect
@@ -7,15 +7,15 @@
 
 static const field core::int b = #C1;
 static method fn(core::int a) → core::int {
-  if(a.{core::num::==}(1))
+  if(a =={core::num::==}{(core::Object) → core::bool} 1)
     return 1;
-  return a.{core::num::*}(self::fn(a.{core::num::-}(1)));
+  return a.{core::num::*}(self::fn(a.{core::num::-}(1){(core::num) → core::int})){(core::num) → core::int};
 }
 static method localTest() → core::int {
   function fnLocal(core::int a) → core::int {
-    if(a.{core::num::==}(1))
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
       return 1;
-    return a.{core::num::*}(fnLocal.call(a.{core::num::-}(1)));
+    return a.{core::num::*}(fnLocal(a.{core::num::-}(1){(core::num) → core::int}){(core::int) → core::int}){(core::num) → core::int};
   }
   return #C1;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.strong.transformed.expect
index c53d3dc..1ee9329 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.strong.transformed.expect
@@ -7,15 +7,15 @@
 
 static const field core::int b = #C1;
 static method fn(core::int a) → core::int {
-  if(a.{core::num::==}(1))
+  if(a =={core::num::==}{(core::Object) → core::bool} 1)
     return 1;
-  return a.{core::num::*}(self::fn(a.{core::num::-}(1)));
+  return a.{core::num::*}(self::fn(a.{core::num::-}(1){(core::num) → core::int})){(core::num) → core::int};
 }
 static method localTest() → core::int {
   function fnLocal(core::int a) → core::int {
-    if(a.{core::num::==}(1))
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
       return 1;
-    return a.{core::num::*}(fnLocal.call(a.{core::num::-}(1)));
+    return a.{core::num::*}(fnLocal(a.{core::num::-}(1){(core::num) → core::int}){(core::int) → core::int}){(core::num) → core::int};
   }
   return #C1;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.weak.expect
index c53d3dc..1ee9329 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.weak.expect
@@ -7,15 +7,15 @@
 
 static const field core::int b = #C1;
 static method fn(core::int a) → core::int {
-  if(a.{core::num::==}(1))
+  if(a =={core::num::==}{(core::Object) → core::bool} 1)
     return 1;
-  return a.{core::num::*}(self::fn(a.{core::num::-}(1)));
+  return a.{core::num::*}(self::fn(a.{core::num::-}(1){(core::num) → core::int})){(core::num) → core::int};
 }
 static method localTest() → core::int {
   function fnLocal(core::int a) → core::int {
-    if(a.{core::num::==}(1))
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
       return 1;
-    return a.{core::num::*}(fnLocal.call(a.{core::num::-}(1)));
+    return a.{core::num::*}(fnLocal(a.{core::num::-}(1){(core::num) → core::int}){(core::int) → core::int}){(core::num) → core::int};
   }
   return #C1;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.weak.transformed.expect
index c53d3dc..1ee9329 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.weak.transformed.expect
@@ -7,15 +7,15 @@
 
 static const field core::int b = #C1;
 static method fn(core::int a) → core::int {
-  if(a.{core::num::==}(1))
+  if(a =={core::num::==}{(core::Object) → core::bool} 1)
     return 1;
-  return a.{core::num::*}(self::fn(a.{core::num::-}(1)));
+  return a.{core::num::*}(self::fn(a.{core::num::-}(1){(core::num) → core::int})){(core::num) → core::int};
 }
 static method localTest() → core::int {
   function fnLocal(core::int a) → core::int {
-    if(a.{core::num::==}(1))
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
       return 1;
-    return a.{core::num::*}(fnLocal.call(a.{core::num::-}(1)));
+    return a.{core::num::*}(fnLocal(a.{core::num::-}(1){(core::num) → core::int}){(core::int) → core::int}){(core::num) → core::int};
   }
   return #C1;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.expect
index 0d13bf0..04bf4ef 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.expect
@@ -19,25 +19,25 @@
 static const field core::int multi = #C2;
 static const field core::int multi2 = #C3;
 static method binaryFn(core::int a, core::int b) → core::int
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num) → core::int};
 static method optionalFn(core::int c, [core::int d = #C11]) → core::int
-  return c.{core::num::+}(d);
+  return c.{core::num::+}(d){(core::num) → core::int};
 static method namedFn(core::int e, {core::int f = #C3}) → core::int
-  return e.{core::num::+}(f);
+  return e.{core::num::+}(f){(core::num) → core::int};
 static method typeFn<T extends core::Object? = dynamic>(self::typeFn::T% x) → self::typeFn::T%
   return x;
 static method stringFn(core::String s) → core::String
-  return s.{core::String::+}("ing");
+  return s.{core::String::+}("ing"){(core::String) → core::String};
 static method equalFn(core::int a, core::int b) → core::bool
-  return a.{core::num::==}(b);
+  return a =={core::num::==}{(core::Object) → core::bool} b;
 static method unary(core::int a) → core::int
-  return a.{core::int::unary-}();
+  return a.{core::int::unary-}(){() → core::int};
 static method boolFn(core::bool a, core::bool b) → core::bool
   return a || b;
 static method doubleFn(core::double a, core::double b) → core::double
-  return a.{core::double::*}(b);
+  return a.{core::double::*}(b){(core::num) → core::double};
 static method multiFn(core::int a) → core::int
-  return a.{core::num::+}(1);
+  return a.{core::num::+}(1){(core::num) → core::int};
 static method main() → void {
   exp::Expect::equals(#C1, 1);
   exp::Expect::equals(#C2, 2);
@@ -47,7 +47,7 @@
   exp::Expect::equals(#C6, 6);
   exp::Expect::equals(#C7, "string");
   exp::Expect::equals(#C8, true);
-  exp::Expect::equals(#C9, 2.{core::int::unary-}());
+  exp::Expect::equals(#C9, 2.{core::int::unary-}(){() → core::int});
   exp::Expect::equals(#C8, true);
   exp::Expect::equals(#C10, 4.4);
   exp::Expect::equals(#C2, 2);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.transformed.expect
index de39112..15750cc 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.strong.transformed.expect
@@ -19,25 +19,25 @@
 static const field core::int multi = #C2;
 static const field core::int multi2 = #C3;
 static method binaryFn(core::int a, core::int b) → core::int
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num) → core::int};
 static method optionalFn(core::int c, [core::int d = #C11]) → core::int
-  return c.{core::num::+}(d);
+  return c.{core::num::+}(d){(core::num) → core::int};
 static method namedFn(core::int e, {core::int f = #C3}) → core::int
-  return e.{core::num::+}(f);
+  return e.{core::num::+}(f){(core::num) → core::int};
 static method typeFn<T extends core::Object? = dynamic>(self::typeFn::T% x) → self::typeFn::T%
   return x;
 static method stringFn(core::String s) → core::String
-  return s.{core::String::+}("ing");
+  return s.{core::String::+}("ing"){(core::String) → core::String};
 static method equalFn(core::int a, core::int b) → core::bool
-  return a.{core::num::==}(b);
+  return a =={core::num::==}{(core::Object) → core::bool} b;
 static method unary(core::int a) → core::int
-  return a.{core::int::unary-}();
+  return a.{core::int::unary-}(){() → core::int};
 static method boolFn(core::bool a, core::bool b) → core::bool
   return a || b;
 static method doubleFn(core::double a, core::double b) → core::double
-  return a.{core::double::*}(b);
+  return a.{core::double::*}(b){(core::num) → core::double};
 static method multiFn(core::int a) → core::int
-  return a.{core::num::+}(1);
+  return a.{core::num::+}(1){(core::num) → core::int};
 static method main() → void {
   exp::Expect::equals(#C1, 1);
   exp::Expect::equals(#C2, 2);
@@ -47,7 +47,7 @@
   exp::Expect::equals(#C6, 6);
   exp::Expect::equals(#C7, "string");
   exp::Expect::equals(#C8, true);
-  exp::Expect::equals(#C9, 2.{core::int::unary-}());
+  exp::Expect::equals(#C9, 2.{core::int::unary-}(){() → core::int});
   exp::Expect::equals(#C8, true);
   exp::Expect::equals(#C10, 4.4);
   exp::Expect::equals(#C2, 2);
@@ -69,5 +69,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_simple_invocations.dart:51:27 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_simple_invocations.dart:51:27 -> IntConstant(-2)
 Extra constant evaluation: evaluated: 39, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.expect
index 0d13bf0..04bf4ef 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.expect
@@ -19,25 +19,25 @@
 static const field core::int multi = #C2;
 static const field core::int multi2 = #C3;
 static method binaryFn(core::int a, core::int b) → core::int
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num) → core::int};
 static method optionalFn(core::int c, [core::int d = #C11]) → core::int
-  return c.{core::num::+}(d);
+  return c.{core::num::+}(d){(core::num) → core::int};
 static method namedFn(core::int e, {core::int f = #C3}) → core::int
-  return e.{core::num::+}(f);
+  return e.{core::num::+}(f){(core::num) → core::int};
 static method typeFn<T extends core::Object? = dynamic>(self::typeFn::T% x) → self::typeFn::T%
   return x;
 static method stringFn(core::String s) → core::String
-  return s.{core::String::+}("ing");
+  return s.{core::String::+}("ing"){(core::String) → core::String};
 static method equalFn(core::int a, core::int b) → core::bool
-  return a.{core::num::==}(b);
+  return a =={core::num::==}{(core::Object) → core::bool} b;
 static method unary(core::int a) → core::int
-  return a.{core::int::unary-}();
+  return a.{core::int::unary-}(){() → core::int};
 static method boolFn(core::bool a, core::bool b) → core::bool
   return a || b;
 static method doubleFn(core::double a, core::double b) → core::double
-  return a.{core::double::*}(b);
+  return a.{core::double::*}(b){(core::num) → core::double};
 static method multiFn(core::int a) → core::int
-  return a.{core::num::+}(1);
+  return a.{core::num::+}(1){(core::num) → core::int};
 static method main() → void {
   exp::Expect::equals(#C1, 1);
   exp::Expect::equals(#C2, 2);
@@ -47,7 +47,7 @@
   exp::Expect::equals(#C6, 6);
   exp::Expect::equals(#C7, "string");
   exp::Expect::equals(#C8, true);
-  exp::Expect::equals(#C9, 2.{core::int::unary-}());
+  exp::Expect::equals(#C9, 2.{core::int::unary-}(){() → core::int});
   exp::Expect::equals(#C8, true);
   exp::Expect::equals(#C10, 4.4);
   exp::Expect::equals(#C2, 2);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.transformed.expect
index de39112..15750cc 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.transformed.expect
@@ -19,25 +19,25 @@
 static const field core::int multi = #C2;
 static const field core::int multi2 = #C3;
 static method binaryFn(core::int a, core::int b) → core::int
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num) → core::int};
 static method optionalFn(core::int c, [core::int d = #C11]) → core::int
-  return c.{core::num::+}(d);
+  return c.{core::num::+}(d){(core::num) → core::int};
 static method namedFn(core::int e, {core::int f = #C3}) → core::int
-  return e.{core::num::+}(f);
+  return e.{core::num::+}(f){(core::num) → core::int};
 static method typeFn<T extends core::Object? = dynamic>(self::typeFn::T% x) → self::typeFn::T%
   return x;
 static method stringFn(core::String s) → core::String
-  return s.{core::String::+}("ing");
+  return s.{core::String::+}("ing"){(core::String) → core::String};
 static method equalFn(core::int a, core::int b) → core::bool
-  return a.{core::num::==}(b);
+  return a =={core::num::==}{(core::Object) → core::bool} b;
 static method unary(core::int a) → core::int
-  return a.{core::int::unary-}();
+  return a.{core::int::unary-}(){() → core::int};
 static method boolFn(core::bool a, core::bool b) → core::bool
   return a || b;
 static method doubleFn(core::double a, core::double b) → core::double
-  return a.{core::double::*}(b);
+  return a.{core::double::*}(b){(core::num) → core::double};
 static method multiFn(core::int a) → core::int
-  return a.{core::num::+}(1);
+  return a.{core::num::+}(1){(core::num) → core::int};
 static method main() → void {
   exp::Expect::equals(#C1, 1);
   exp::Expect::equals(#C2, 2);
@@ -47,7 +47,7 @@
   exp::Expect::equals(#C6, 6);
   exp::Expect::equals(#C7, "string");
   exp::Expect::equals(#C8, true);
-  exp::Expect::equals(#C9, 2.{core::int::unary-}());
+  exp::Expect::equals(#C9, 2.{core::int::unary-}(){() → core::int});
   exp::Expect::equals(#C8, true);
   exp::Expect::equals(#C10, 4.4);
   exp::Expect::equals(#C2, 2);
@@ -69,5 +69,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_simple_invocations.dart:51:27 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_simple_invocations.dart:51:27 -> IntConstant(-2)
 Extra constant evaluation: evaluated: 39, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_string.dart.strong.expect
index f573022..30b3270 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string.dart.strong.expect
@@ -12,11 +12,11 @@
 static const field dynamic var4 = #C4;
 static method fn() → dynamic {
   core::String local = "str";
-  return local.{core::String::[]}(0);
+  return local.{core::String::[]}(0){(core::int) → core::String};
 }
 static method fn2() → dynamic {
   try {
-    core::String x = (#C1).{core::String::[]}(1.{core::int::unary-}());
+    core::String x = (#C1).{core::String::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::String};
   }
   on core::RangeError catch(no-exception-var) {
     return 2;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_string.dart.strong.transformed.expect
index 9ba5e5c..c6e9308 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string.dart.strong.transformed.expect
@@ -12,11 +12,11 @@
 static const field dynamic var4 = #C4;
 static method fn() → dynamic {
   core::String local = "str";
-  return local.{core::String::[]}(0);
+  return local.{core::String::[]}(0){(core::int) → core::String};
 }
 static method fn2() → dynamic {
   try {
-    core::String x = (#C1).{core::String::[]}(1.{core::int::unary-}());
+    core::String x = (#C1).{core::String::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::String};
   }
   on core::RangeError catch(no-exception-var) {
     return 2;
@@ -37,5 +37,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_string.dart:23:17 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_string.dart:23:17 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 8, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.expect
index f573022..30b3270 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.expect
@@ -12,11 +12,11 @@
 static const field dynamic var4 = #C4;
 static method fn() → dynamic {
   core::String local = "str";
-  return local.{core::String::[]}(0);
+  return local.{core::String::[]}(0){(core::int) → core::String};
 }
 static method fn2() → dynamic {
   try {
-    core::String x = (#C1).{core::String::[]}(1.{core::int::unary-}());
+    core::String x = (#C1).{core::String::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::String};
   }
   on core::RangeError catch(no-exception-var) {
     return 2;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.outline.expect
index 8da9073..eb00fe5 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.outline.expect
@@ -5,9 +5,9 @@
 import "package:expect/expect.dart";
 
 static const field core::String str = "str";
-static const field core::String var1 = self::str.{core::String::[]}(2);
+static const field core::String var1 = self::str.{core::String::[]}(2){(core::int) → core::String};
 static const field dynamic var2 = self::fn();
-static const field core::String var3 = "str".{core::String::[]}(0);
+static const field core::String var3 = "str".{core::String::[]}(0){(core::int) → core::String};
 static const field dynamic var4 = self::fn2();
 static method fn() → dynamic
   ;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.transformed.expect
index 9ba5e5c..c6e9308 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.transformed.expect
@@ -12,11 +12,11 @@
 static const field dynamic var4 = #C4;
 static method fn() → dynamic {
   core::String local = "str";
-  return local.{core::String::[]}(0);
+  return local.{core::String::[]}(0){(core::int) → core::String};
 }
 static method fn2() → dynamic {
   try {
-    core::String x = (#C1).{core::String::[]}(1.{core::int::unary-}());
+    core::String x = (#C1).{core::String::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::String};
   }
   on core::RangeError catch(no-exception-var) {
     return 2;
@@ -37,5 +37,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_string.dart:23:17 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_string.dart:23:17 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 8, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.expect
index 0cdd42f..7511ee3 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.expect
@@ -49,17 +49,17 @@
              ^";
 static method fn() → dynamic {
   core::String s = "str";
-  return (#C1).{core::String::[]}(1.{core::int::unary-}());
+  return (#C1).{core::String::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::String};
 }
 static method fn2() → dynamic {
   core::String s = "str";
-  return (#C1).{core::String::[]}(3);
+  return (#C1).{core::String::[]}(3){(core::int) → core::String};
 }
 static method fn3() → dynamic {
   core::String s = "str";
   return (#C1).{core::String::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return str[1.1];
-             ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int);
+             ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::String};
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.transformed.expect
index e7133c8..04e045d 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.strong.transformed.expect
@@ -49,17 +49,17 @@
              ^";
 static method fn() → dynamic {
   core::String s = "str";
-  return (#C1).{core::String::[]}(1.{core::int::unary-}());
+  return (#C1).{core::String::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::String};
 }
 static method fn2() → dynamic {
   core::String s = "str";
-  return (#C1).{core::String::[]}(3);
+  return (#C1).{core::String::[]}(3){(core::int) → core::String};
 }
 static method fn3() → dynamic {
   core::String s = "str";
   return (#C1).{core::String::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return str[1.1];
-             ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int);
+             ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::String};
 }
 static method main() → void {}
 
@@ -68,5 +68,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_string_error.dart:16:14 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_string_error.dart:16:14 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 6, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.expect
index 0cdd42f..7511ee3 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.expect
@@ -49,17 +49,17 @@
              ^";
 static method fn() → dynamic {
   core::String s = "str";
-  return (#C1).{core::String::[]}(1.{core::int::unary-}());
+  return (#C1).{core::String::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::String};
 }
 static method fn2() → dynamic {
   core::String s = "str";
-  return (#C1).{core::String::[]}(3);
+  return (#C1).{core::String::[]}(3){(core::int) → core::String};
 }
 static method fn3() → dynamic {
   core::String s = "str";
   return (#C1).{core::String::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return str[1.1];
-             ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int);
+             ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::String};
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.outline.expect
index 183676d..a20d79c 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.outline.expect
@@ -5,8 +5,8 @@
 import "package:expect/expect.dart";
 
 static const field core::String str = "str";
-static const field core::String var1 = self::str.{core::String::[]}(1.{core::int::unary-}());
-static const field core::String var2 = self::str.{core::String::[]}(3);
+static const field core::String var1 = self::str.{core::String::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::String};
+static const field core::String var2 = self::str.{core::String::[]}(3){(core::int) → core::String};
 static const field dynamic var3 = self::fn();
 static const field dynamic var4 = self::fn2();
 static const field dynamic var5 = self::fn3();
@@ -22,6 +22,6 @@
 
 Extra constant evaluation status:
 Evaluated: StaticGet @ org-dartlang-testcase:///const_functions_string_error.dart:10:14 -> StringConstant("str")
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_string_error.dart:10:18 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_string_error.dart:10:18 -> IntConstant(-1)
 Evaluated: StaticGet @ org-dartlang-testcase:///const_functions_string_error.dart:11:14 -> StringConstant("str")
 Extra constant evaluation: evaluated: 8, effectively constant: 3
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.transformed.expect
index e7133c8..04e045d 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.transformed.expect
@@ -49,17 +49,17 @@
              ^";
 static method fn() → dynamic {
   core::String s = "str";
-  return (#C1).{core::String::[]}(1.{core::int::unary-}());
+  return (#C1).{core::String::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::String};
 }
 static method fn2() → dynamic {
   core::String s = "str";
-  return (#C1).{core::String::[]}(3);
+  return (#C1).{core::String::[]}(3){(core::int) → core::String};
 }
 static method fn3() → dynamic {
   core::String s = "str";
   return (#C1).{core::String::[]}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   return str[1.1];
-             ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int);
+             ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::String};
 }
 static method main() → void {}
 
@@ -68,5 +68,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_string_error.dart:16:14 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_string_error.dart:16:14 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 6, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.strong.expect
index 76efdb8..b3f761c 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.strong.expect
@@ -25,7 +25,7 @@
     #L3:
     default:
       {
-        x = x.{core::num::+}(1);
+        x = x.{core::num::+}(1){(core::num) → core::int};
         break #L1;
       }
   }
@@ -53,7 +53,7 @@
     #L7:
     case #C7:
       {
-        x = x.{core::num::+}(100);
+        x = x.{core::num::+}(100){(core::num) → core::int};
         continue #L8;
       }
     #L9:
@@ -64,7 +64,7 @@
     #L8:
     case #C2:
       {
-        return x.{core::num::+}(3);
+        return x.{core::num::+}(3){(core::num) → core::int};
       }
   }
   return 0;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.strong.transformed.expect
index 76efdb8..b3f761c 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.strong.transformed.expect
@@ -25,7 +25,7 @@
     #L3:
     default:
       {
-        x = x.{core::num::+}(1);
+        x = x.{core::num::+}(1){(core::num) → core::int};
         break #L1;
       }
   }
@@ -53,7 +53,7 @@
     #L7:
     case #C7:
       {
-        x = x.{core::num::+}(100);
+        x = x.{core::num::+}(100){(core::num) → core::int};
         continue #L8;
       }
     #L9:
@@ -64,7 +64,7 @@
     #L8:
     case #C2:
       {
-        return x.{core::num::+}(3);
+        return x.{core::num::+}(3){(core::num) → core::int};
       }
   }
   return 0;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.weak.expect
index 76efdb8..b3f761c 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.weak.expect
@@ -25,7 +25,7 @@
     #L3:
     default:
       {
-        x = x.{core::num::+}(1);
+        x = x.{core::num::+}(1){(core::num) → core::int};
         break #L1;
       }
   }
@@ -53,7 +53,7 @@
     #L7:
     case #C7:
       {
-        x = x.{core::num::+}(100);
+        x = x.{core::num::+}(100){(core::num) → core::int};
         continue #L8;
       }
     #L9:
@@ -64,7 +64,7 @@
     #L8:
     case #C2:
       {
-        return x.{core::num::+}(3);
+        return x.{core::num::+}(3){(core::num) → core::int};
       }
   }
   return 0;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.weak.transformed.expect
index 76efdb8..b3f761c 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
     #L3:
     default:
       {
-        x = x.{core::num::+}(1);
+        x = x.{core::num::+}(1){(core::num) → core::int};
         break #L1;
       }
   }
@@ -53,7 +53,7 @@
     #L7:
     case #C7:
       {
-        x = x.{core::num::+}(100);
+        x = x.{core::num::+}(100){(core::num) → core::int};
         continue #L8;
       }
     #L9:
@@ -64,7 +64,7 @@
     #L8:
     case #C2:
       {
-        return x.{core::num::+}(3);
+        return x.{core::num::+}(3){(core::num) → core::int};
       }
   }
   return 0;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.strong.expect
index 1d0bf2c..f816401 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.strong.expect
@@ -43,7 +43,7 @@
 static method finallyReturn(dynamic error) → core::int {
   try
     try {
-      if(!error.{core::Object::==}(1))
+      if(!(error =={core::Object::==}{(core::Object) → core::bool} 1))
         throw error;
     }
     on core::int catch(final core::int e) {
@@ -58,7 +58,7 @@
 }
 static method finallyReturn1(core::int x) → core::int {
   try {
-    if(x.{core::num::==}(1)) {
+    if(x =={core::num::==}{(core::Object) → core::bool} 1) {
       throw x;
     }
     else {
@@ -75,7 +75,7 @@
     return x;
   }
   finally {
-    x = x.{core::num::+}(1);
+    x = x.{core::num::+}(1){(core::num) → core::int};
   }
 }
 static method subtypeFn() → core::int {
@@ -90,21 +90,21 @@
   core::String x = "st";
   try
     try {
-      x = x.{core::String::+}("ri");
+      x = x.{core::String::+}("ri"){(core::String) → core::String};
       throw 2;
     }
     on core::Object catch(final core::Object e) {
-      x = x.{core::String::+}("n");
+      x = x.{core::String::+}("n"){(core::String) → core::String};
     }
   finally {
-    return x.{core::String::+}("g");
+    return x.{core::String::+}("g"){(core::String) → core::String};
   }
 }
 static method notThrowStatement() → core::int {
   core::int count = 0;
   try {
-    for (core::int i = 0; i.{core::num::<}(1); throw "a") {
-      count = count.{core::num::+}(i);
+    for (core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; throw "a") {
+      count = count.{core::num::+}(i){(core::num) → core::int};
     }
   }
   on core::Object catch(final core::Object e) {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.strong.transformed.expect
index 1d0bf2c..f816401 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.strong.transformed.expect
@@ -43,7 +43,7 @@
 static method finallyReturn(dynamic error) → core::int {
   try
     try {
-      if(!error.{core::Object::==}(1))
+      if(!(error =={core::Object::==}{(core::Object) → core::bool} 1))
         throw error;
     }
     on core::int catch(final core::int e) {
@@ -58,7 +58,7 @@
 }
 static method finallyReturn1(core::int x) → core::int {
   try {
-    if(x.{core::num::==}(1)) {
+    if(x =={core::num::==}{(core::Object) → core::bool} 1) {
       throw x;
     }
     else {
@@ -75,7 +75,7 @@
     return x;
   }
   finally {
-    x = x.{core::num::+}(1);
+    x = x.{core::num::+}(1){(core::num) → core::int};
   }
 }
 static method subtypeFn() → core::int {
@@ -90,21 +90,21 @@
   core::String x = "st";
   try
     try {
-      x = x.{core::String::+}("ri");
+      x = x.{core::String::+}("ri"){(core::String) → core::String};
       throw 2;
     }
     on core::Object catch(final core::Object e) {
-      x = x.{core::String::+}("n");
+      x = x.{core::String::+}("n"){(core::String) → core::String};
     }
   finally {
-    return x.{core::String::+}("g");
+    return x.{core::String::+}("g"){(core::String) → core::String};
   }
 }
 static method notThrowStatement() → core::int {
   core::int count = 0;
   try {
-    for (core::int i = 0; i.{core::num::<}(1); throw "a") {
-      count = count.{core::num::+}(i);
+    for (core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; throw "a") {
+      count = count.{core::num::+}(i){(core::num) → core::int};
     }
   }
   on core::Object catch(final core::Object e) {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.weak.expect
index 1d0bf2c..f816401 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.weak.expect
@@ -43,7 +43,7 @@
 static method finallyReturn(dynamic error) → core::int {
   try
     try {
-      if(!error.{core::Object::==}(1))
+      if(!(error =={core::Object::==}{(core::Object) → core::bool} 1))
         throw error;
     }
     on core::int catch(final core::int e) {
@@ -58,7 +58,7 @@
 }
 static method finallyReturn1(core::int x) → core::int {
   try {
-    if(x.{core::num::==}(1)) {
+    if(x =={core::num::==}{(core::Object) → core::bool} 1) {
       throw x;
     }
     else {
@@ -75,7 +75,7 @@
     return x;
   }
   finally {
-    x = x.{core::num::+}(1);
+    x = x.{core::num::+}(1){(core::num) → core::int};
   }
 }
 static method subtypeFn() → core::int {
@@ -90,21 +90,21 @@
   core::String x = "st";
   try
     try {
-      x = x.{core::String::+}("ri");
+      x = x.{core::String::+}("ri"){(core::String) → core::String};
       throw 2;
     }
     on core::Object catch(final core::Object e) {
-      x = x.{core::String::+}("n");
+      x = x.{core::String::+}("n"){(core::String) → core::String};
     }
   finally {
-    return x.{core::String::+}("g");
+    return x.{core::String::+}("g"){(core::String) → core::String};
   }
 }
 static method notThrowStatement() → core::int {
   core::int count = 0;
   try {
-    for (core::int i = 0; i.{core::num::<}(1); throw "a") {
-      count = count.{core::num::+}(i);
+    for (core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; throw "a") {
+      count = count.{core::num::+}(i){(core::num) → core::int};
     }
   }
   on core::Object catch(final core::Object e) {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.weak.transformed.expect
index 1d0bf2c..f816401 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.weak.transformed.expect
@@ -43,7 +43,7 @@
 static method finallyReturn(dynamic error) → core::int {
   try
     try {
-      if(!error.{core::Object::==}(1))
+      if(!(error =={core::Object::==}{(core::Object) → core::bool} 1))
         throw error;
     }
     on core::int catch(final core::int e) {
@@ -58,7 +58,7 @@
 }
 static method finallyReturn1(core::int x) → core::int {
   try {
-    if(x.{core::num::==}(1)) {
+    if(x =={core::num::==}{(core::Object) → core::bool} 1) {
       throw x;
     }
     else {
@@ -75,7 +75,7 @@
     return x;
   }
   finally {
-    x = x.{core::num::+}(1);
+    x = x.{core::num::+}(1){(core::num) → core::int};
   }
 }
 static method subtypeFn() → core::int {
@@ -90,21 +90,21 @@
   core::String x = "st";
   try
     try {
-      x = x.{core::String::+}("ri");
+      x = x.{core::String::+}("ri"){(core::String) → core::String};
       throw 2;
     }
     on core::Object catch(final core::Object e) {
-      x = x.{core::String::+}("n");
+      x = x.{core::String::+}("n"){(core::String) → core::String};
     }
   finally {
-    return x.{core::String::+}("g");
+    return x.{core::String::+}("g"){(core::String) → core::String};
   }
 }
 static method notThrowStatement() → core::int {
   core::int count = 0;
   try {
-    for (core::int i = 0; i.{core::num::<}(1); throw "a") {
-      count = count.{core::num::+}(i);
+    for (core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; throw "a") {
+      count = count.{core::num::+}(i){(core::num) → core::int};
     }
   }
   on core::Object catch(final core::Object e) {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.strong.expect
index 3126895..233c4ee 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.strong.expect
@@ -49,7 +49,7 @@
 static const field core::int var5 = invalid-expression "Unhandled exception: \"a\"";
 static method finallyThrow(core::int x) → core::int {
   try {
-    if(x.{core::num::==}(1)) {
+    if(x =={core::num::==}{(core::Object) → core::bool} 1) {
       throw x;
     }
     else {
@@ -70,8 +70,8 @@
 }
 static method unhandledThrow2() → core::int {
   core::int count = 0;
-  for (core::int i = 0; i.{core::num::<}(1); throw "a") {
-    count = count.{core::num::+}(i);
+  for (core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; throw "a") {
+    count = count.{core::num::+}(i){(core::num) → core::int};
   }
   return 0;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.strong.transformed.expect
index 3126895..233c4ee 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.strong.transformed.expect
@@ -49,7 +49,7 @@
 static const field core::int var5 = invalid-expression "Unhandled exception: \"a\"";
 static method finallyThrow(core::int x) → core::int {
   try {
-    if(x.{core::num::==}(1)) {
+    if(x =={core::num::==}{(core::Object) → core::bool} 1) {
       throw x;
     }
     else {
@@ -70,8 +70,8 @@
 }
 static method unhandledThrow2() → core::int {
   core::int count = 0;
-  for (core::int i = 0; i.{core::num::<}(1); throw "a") {
-    count = count.{core::num::+}(i);
+  for (core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; throw "a") {
+    count = count.{core::num::+}(i){(core::num) → core::int};
   }
   return 0;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.weak.expect
index 3126895..233c4ee 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.weak.expect
@@ -49,7 +49,7 @@
 static const field core::int var5 = invalid-expression "Unhandled exception: \"a\"";
 static method finallyThrow(core::int x) → core::int {
   try {
-    if(x.{core::num::==}(1)) {
+    if(x =={core::num::==}{(core::Object) → core::bool} 1) {
       throw x;
     }
     else {
@@ -70,8 +70,8 @@
 }
 static method unhandledThrow2() → core::int {
   core::int count = 0;
-  for (core::int i = 0; i.{core::num::<}(1); throw "a") {
-    count = count.{core::num::+}(i);
+  for (core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; throw "a") {
+    count = count.{core::num::+}(i){(core::num) → core::int};
   }
   return 0;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.weak.transformed.expect
index 3126895..233c4ee 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.weak.transformed.expect
@@ -49,7 +49,7 @@
 static const field core::int var5 = invalid-expression "Unhandled exception: \"a\"";
 static method finallyThrow(core::int x) → core::int {
   try {
-    if(x.{core::num::==}(1)) {
+    if(x =={core::num::==}{(core::Object) → core::bool} 1) {
       throw x;
     }
     else {
@@ -70,8 +70,8 @@
 }
 static method unhandledThrow2() → core::int {
   core::int count = 0;
-  for (core::int i = 0; i.{core::num::<}(1); throw "a") {
-    count = count.{core::num::+}(i);
+  for (core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; throw "a") {
+    count = count.{core::num::+}(i){(core::num) → core::int};
   }
   return 0;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.strong.expect
index 7107ba3..704d914 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.strong.expect
@@ -18,14 +18,14 @@
 static method function() → core::int {
   function varAssignmentTest2() → core::int {
     core::int x = 2;
-    x = x.{core::num::+}(1);
+    x = x.{core::num::+}(1){(core::num) → core::int};
     return x;
   }
   return #C1;
 }
 static method varAssignmentTest3(core::int a) → core::int {
   core::int x = 4;
-  x = a.{core::num::+}(1);
+  x = a.{core::num::+}(1){(core::num) → core::int};
   return x;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.strong.transformed.expect
index 7107ba3..704d914 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.strong.transformed.expect
@@ -18,14 +18,14 @@
 static method function() → core::int {
   function varAssignmentTest2() → core::int {
     core::int x = 2;
-    x = x.{core::num::+}(1);
+    x = x.{core::num::+}(1){(core::num) → core::int};
     return x;
   }
   return #C1;
 }
 static method varAssignmentTest3(core::int a) → core::int {
   core::int x = 4;
-  x = a.{core::num::+}(1);
+  x = a.{core::num::+}(1){(core::num) → core::int};
   return x;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.weak.expect
index 7107ba3..704d914 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.weak.expect
@@ -18,14 +18,14 @@
 static method function() → core::int {
   function varAssignmentTest2() → core::int {
     core::int x = 2;
-    x = x.{core::num::+}(1);
+    x = x.{core::num::+}(1){(core::num) → core::int};
     return x;
   }
   return #C1;
 }
 static method varAssignmentTest3(core::int a) → core::int {
   core::int x = 4;
-  x = a.{core::num::+}(1);
+  x = a.{core::num::+}(1){(core::num) → core::int};
   return x;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.weak.transformed.expect
index 7107ba3..704d914 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.weak.transformed.expect
@@ -18,14 +18,14 @@
 static method function() → core::int {
   function varAssignmentTest2() → core::int {
     core::int x = 2;
-    x = x.{core::num::+}(1);
+    x = x.{core::num::+}(1){(core::num) → core::int};
     return x;
   }
   return #C1;
 }
 static method varAssignmentTest3(core::int a) → core::int {
   core::int x = 4;
-  x = a.{core::num::+}(1);
+  x = a.{core::num::+}(1){(core::num) → core::int};
   return x;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.strong.expect
index d270f74..c8a68f5 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.strong.expect
@@ -16,7 +16,7 @@
 static const field core::int var8 = #C5;
 static const field core::int? var9 = #C7;
 static method function1(core::int a, core::int b) → core::int {
-  core::int x = 1.{core::num::+}(a).{core::num::+}(b);
+  core::int x = 1.{core::num::+}(a){(core::num) → core::int}.{core::num::+}(b){(core::num) → core::int};
   return x;
 }
 static method function2() → core::String {
@@ -25,13 +25,13 @@
 }
 static method function3() → core::int {
   core::int first = 2;
-  core::int second = 2.{core::num::+}(first);
-  return 2.{core::num::+}(second);
+  core::int second = 2.{core::num::+}(first){(core::num) → core::int};
+  return 2.{core::num::+}(second){(core::num) → core::int};
 }
 static method function4() → core::int {
   core::int first = 2;
   core::int second = 0;
-  return first.{core::num::+}(second);
+  return first.{core::num::+}(second){(core::num) → core::int};
 }
 static method function5() → core::int {
   return #C6;
@@ -63,7 +63,7 @@
   exp::Expect::equals(#C3, "string");
   exp::Expect::equals(#C4, 6);
   exp::Expect::equals(#C5, 2);
-  exp::Expect::equals(#C6, 2.{core::int::unary-}());
+  exp::Expect::equals(#C6, 2.{core::int::unary-}(){() → core::int});
   exp::Expect::equals(#C5, 2);
   exp::Expect::equals(#C5, 2);
   exp::Expect::equals(#C5, 2);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.strong.transformed.expect
index 3ec97cd..47af773 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
 static const field core::int var8 = #C5;
 static const field core::int? var9 = #C7;
 static method function1(core::int a, core::int b) → core::int {
-  core::int x = 1.{core::num::+}(a).{core::num::+}(b);
+  core::int x = 1.{core::num::+}(a){(core::num) → core::int}.{core::num::+}(b){(core::num) → core::int};
   return x;
 }
 static method function2() → core::String {
@@ -25,13 +25,13 @@
 }
 static method function3() → core::int {
   core::int first = 2;
-  core::int second = 2.{core::num::+}(first);
-  return 2.{core::num::+}(second);
+  core::int second = 2.{core::num::+}(first){(core::num) → core::int};
+  return 2.{core::num::+}(second){(core::num) → core::int};
 }
 static method function4() → core::int {
   core::int first = 2;
   core::int second = 0;
-  return first.{core::num::+}(second);
+  return first.{core::num::+}(second){(core::num) → core::int};
 }
 static method function5() → core::int {
   return #C6;
@@ -63,7 +63,7 @@
   exp::Expect::equals(#C3, "string");
   exp::Expect::equals(#C4, 6);
   exp::Expect::equals(#C5, 2);
-  exp::Expect::equals(#C6, 2.{core::int::unary-}());
+  exp::Expect::equals(#C6, 2.{core::int::unary-}(){() → core::int});
   exp::Expect::equals(#C5, 2);
   exp::Expect::equals(#C5, 2);
   exp::Expect::equals(#C5, 2);
@@ -81,5 +81,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_variable_declarations.dart:77:23 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_variable_declarations.dart:77:23 -> IntConstant(-2)
 Extra constant evaluation: evaluated: 35, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.expect
index d270f74..c8a68f5 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.expect
@@ -16,7 +16,7 @@
 static const field core::int var8 = #C5;
 static const field core::int? var9 = #C7;
 static method function1(core::int a, core::int b) → core::int {
-  core::int x = 1.{core::num::+}(a).{core::num::+}(b);
+  core::int x = 1.{core::num::+}(a){(core::num) → core::int}.{core::num::+}(b){(core::num) → core::int};
   return x;
 }
 static method function2() → core::String {
@@ -25,13 +25,13 @@
 }
 static method function3() → core::int {
   core::int first = 2;
-  core::int second = 2.{core::num::+}(first);
-  return 2.{core::num::+}(second);
+  core::int second = 2.{core::num::+}(first){(core::num) → core::int};
+  return 2.{core::num::+}(second){(core::num) → core::int};
 }
 static method function4() → core::int {
   core::int first = 2;
   core::int second = 0;
-  return first.{core::num::+}(second);
+  return first.{core::num::+}(second){(core::num) → core::int};
 }
 static method function5() → core::int {
   return #C6;
@@ -63,7 +63,7 @@
   exp::Expect::equals(#C3, "string");
   exp::Expect::equals(#C4, 6);
   exp::Expect::equals(#C5, 2);
-  exp::Expect::equals(#C6, 2.{core::int::unary-}());
+  exp::Expect::equals(#C6, 2.{core::int::unary-}(){() → core::int});
   exp::Expect::equals(#C5, 2);
   exp::Expect::equals(#C5, 2);
   exp::Expect::equals(#C5, 2);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.transformed.expect
index 3ec97cd..47af773 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
 static const field core::int var8 = #C5;
 static const field core::int? var9 = #C7;
 static method function1(core::int a, core::int b) → core::int {
-  core::int x = 1.{core::num::+}(a).{core::num::+}(b);
+  core::int x = 1.{core::num::+}(a){(core::num) → core::int}.{core::num::+}(b){(core::num) → core::int};
   return x;
 }
 static method function2() → core::String {
@@ -25,13 +25,13 @@
 }
 static method function3() → core::int {
   core::int first = 2;
-  core::int second = 2.{core::num::+}(first);
-  return 2.{core::num::+}(second);
+  core::int second = 2.{core::num::+}(first){(core::num) → core::int};
+  return 2.{core::num::+}(second){(core::num) → core::int};
 }
 static method function4() → core::int {
   core::int first = 2;
   core::int second = 0;
-  return first.{core::num::+}(second);
+  return first.{core::num::+}(second){(core::num) → core::int};
 }
 static method function5() → core::int {
   return #C6;
@@ -63,7 +63,7 @@
   exp::Expect::equals(#C3, "string");
   exp::Expect::equals(#C4, 6);
   exp::Expect::equals(#C5, 2);
-  exp::Expect::equals(#C6, 2.{core::int::unary-}());
+  exp::Expect::equals(#C6, 2.{core::int::unary-}(){() → core::int});
   exp::Expect::equals(#C5, 2);
   exp::Expect::equals(#C5, 2);
   exp::Expect::equals(#C5, 2);
@@ -81,5 +81,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_variable_declarations.dart:77:23 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///const_functions_variable_declarations.dart:77:23 -> IntConstant(-2)
 Extra constant evaluation: evaluated: 35, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.strong.expect
index 00d3c60..b96eb2b 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.strong.expect
@@ -17,32 +17,32 @@
 static method fn(core::int a) → core::int {
   core::int b = a;
   core::int i = 0;
-  while (i.{core::num::<}(2)) {
-    b = b.{core::num::+}(a);
-    i = i.{core::num::+}(1);
+  while (i.{core::num::<}(2){(core::num) → core::bool}) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    i = i.{core::num::+}(1){(core::num) → core::int};
   }
   return b;
 }
 static method fn1(core::int a) → core::int {
   core::int b = a;
   while (true) {
-    b = b.{core::num::*}(3);
-    if(b.{core::num::>}(10))
+    b = b.{core::num::*}(3){(core::num) → core::int};
+    if(b.{core::num::>}(10){(core::num) → core::bool})
       return b;
   }
 }
 static method fnContinue() → core::int {
   core::int a = 0;
   core::int i = 0;
-  while (i.{core::num::<}(5))
+  while (i.{core::num::<}(5){(core::num) → core::bool})
     #L1:
     {
-      if(i.{core::num::%}(2).{core::num::==}(1)) {
-        i = i.{core::num::+}(1);
+      if(i.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1) {
+        i = i.{core::num::+}(1){(core::num) → core::int};
         break #L1;
       }
-      a = a.{core::num::+}(i);
-      i = i.{core::num::+}(1);
+      a = a.{core::num::+}(i){(core::num) → core::int};
+      i = i.{core::num::+}(1){(core::num) → core::int};
     }
   return a;
 }
@@ -50,11 +50,11 @@
   core::int b = a;
   core::int i = 0;
   #L2:
-  while (i.{core::num::<}(2)) {
-    if(b.{core::num::==}(2))
+  while (i.{core::num::<}(2){(core::num) → core::bool}) {
+    if(b =={core::num::==}{(core::Object) → core::bool} 2)
       break #L2;
-    b = b.{core::num::+}(a);
-    i = i.{core::num::+}(1);
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    i = i.{core::num::+}(1){(core::num) → core::int};
   }
   return b;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.strong.transformed.expect
index 00d3c60..b96eb2b 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.strong.transformed.expect
@@ -17,32 +17,32 @@
 static method fn(core::int a) → core::int {
   core::int b = a;
   core::int i = 0;
-  while (i.{core::num::<}(2)) {
-    b = b.{core::num::+}(a);
-    i = i.{core::num::+}(1);
+  while (i.{core::num::<}(2){(core::num) → core::bool}) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    i = i.{core::num::+}(1){(core::num) → core::int};
   }
   return b;
 }
 static method fn1(core::int a) → core::int {
   core::int b = a;
   while (true) {
-    b = b.{core::num::*}(3);
-    if(b.{core::num::>}(10))
+    b = b.{core::num::*}(3){(core::num) → core::int};
+    if(b.{core::num::>}(10){(core::num) → core::bool})
       return b;
   }
 }
 static method fnContinue() → core::int {
   core::int a = 0;
   core::int i = 0;
-  while (i.{core::num::<}(5))
+  while (i.{core::num::<}(5){(core::num) → core::bool})
     #L1:
     {
-      if(i.{core::num::%}(2).{core::num::==}(1)) {
-        i = i.{core::num::+}(1);
+      if(i.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1) {
+        i = i.{core::num::+}(1){(core::num) → core::int};
         break #L1;
       }
-      a = a.{core::num::+}(i);
-      i = i.{core::num::+}(1);
+      a = a.{core::num::+}(i){(core::num) → core::int};
+      i = i.{core::num::+}(1){(core::num) → core::int};
     }
   return a;
 }
@@ -50,11 +50,11 @@
   core::int b = a;
   core::int i = 0;
   #L2:
-  while (i.{core::num::<}(2)) {
-    if(b.{core::num::==}(2))
+  while (i.{core::num::<}(2){(core::num) → core::bool}) {
+    if(b =={core::num::==}{(core::Object) → core::bool} 2)
       break #L2;
-    b = b.{core::num::+}(a);
-    i = i.{core::num::+}(1);
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    i = i.{core::num::+}(1){(core::num) → core::int};
   }
   return b;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.weak.expect
index 00d3c60..b96eb2b 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.weak.expect
@@ -17,32 +17,32 @@
 static method fn(core::int a) → core::int {
   core::int b = a;
   core::int i = 0;
-  while (i.{core::num::<}(2)) {
-    b = b.{core::num::+}(a);
-    i = i.{core::num::+}(1);
+  while (i.{core::num::<}(2){(core::num) → core::bool}) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    i = i.{core::num::+}(1){(core::num) → core::int};
   }
   return b;
 }
 static method fn1(core::int a) → core::int {
   core::int b = a;
   while (true) {
-    b = b.{core::num::*}(3);
-    if(b.{core::num::>}(10))
+    b = b.{core::num::*}(3){(core::num) → core::int};
+    if(b.{core::num::>}(10){(core::num) → core::bool})
       return b;
   }
 }
 static method fnContinue() → core::int {
   core::int a = 0;
   core::int i = 0;
-  while (i.{core::num::<}(5))
+  while (i.{core::num::<}(5){(core::num) → core::bool})
     #L1:
     {
-      if(i.{core::num::%}(2).{core::num::==}(1)) {
-        i = i.{core::num::+}(1);
+      if(i.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1) {
+        i = i.{core::num::+}(1){(core::num) → core::int};
         break #L1;
       }
-      a = a.{core::num::+}(i);
-      i = i.{core::num::+}(1);
+      a = a.{core::num::+}(i){(core::num) → core::int};
+      i = i.{core::num::+}(1){(core::num) → core::int};
     }
   return a;
 }
@@ -50,11 +50,11 @@
   core::int b = a;
   core::int i = 0;
   #L2:
-  while (i.{core::num::<}(2)) {
-    if(b.{core::num::==}(2))
+  while (i.{core::num::<}(2){(core::num) → core::bool}) {
+    if(b =={core::num::==}{(core::Object) → core::bool} 2)
       break #L2;
-    b = b.{core::num::+}(a);
-    i = i.{core::num::+}(1);
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    i = i.{core::num::+}(1){(core::num) → core::int};
   }
   return b;
 }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.weak.transformed.expect
index 00d3c60..b96eb2b 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.weak.transformed.expect
@@ -17,32 +17,32 @@
 static method fn(core::int a) → core::int {
   core::int b = a;
   core::int i = 0;
-  while (i.{core::num::<}(2)) {
-    b = b.{core::num::+}(a);
-    i = i.{core::num::+}(1);
+  while (i.{core::num::<}(2){(core::num) → core::bool}) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    i = i.{core::num::+}(1){(core::num) → core::int};
   }
   return b;
 }
 static method fn1(core::int a) → core::int {
   core::int b = a;
   while (true) {
-    b = b.{core::num::*}(3);
-    if(b.{core::num::>}(10))
+    b = b.{core::num::*}(3){(core::num) → core::int};
+    if(b.{core::num::>}(10){(core::num) → core::bool})
       return b;
   }
 }
 static method fnContinue() → core::int {
   core::int a = 0;
   core::int i = 0;
-  while (i.{core::num::<}(5))
+  while (i.{core::num::<}(5){(core::num) → core::bool})
     #L1:
     {
-      if(i.{core::num::%}(2).{core::num::==}(1)) {
-        i = i.{core::num::+}(1);
+      if(i.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1) {
+        i = i.{core::num::+}(1){(core::num) → core::int};
         break #L1;
       }
-      a = a.{core::num::+}(i);
-      i = i.{core::num::+}(1);
+      a = a.{core::num::+}(i){(core::num) → core::int};
+      i = i.{core::num::+}(1){(core::num) → core::int};
     }
   return a;
 }
@@ -50,11 +50,11 @@
   core::int b = a;
   core::int i = 0;
   #L2:
-  while (i.{core::num::<}(2)) {
-    if(b.{core::num::==}(2))
+  while (i.{core::num::<}(2){(core::num) → core::bool}) {
+    if(b =={core::num::==}{(core::Object) → core::bool} 2)
       break #L2;
-    b = b.{core::num::+}(a);
-    i = i.{core::num::+}(1);
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    i = i.{core::num::+}(1){(core::num) → core::int};
   }
   return b;
 }
diff --git a/pkg/front_end/testcases/expression/class_capture.expression.yaml.expect b/pkg/front_end/testcases/expression/class_capture.expression.yaml.expect
index e05b4b1..2bf8abf 100644
--- a/pkg/front_end/testcases/expression/class_capture.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_capture.expression.yaml.expect
@@ -2,5 +2,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return () → dart.core::int* {
-    return this.{main::B::x}.{dart.core::num::+}(this.{main::B::y});
+    return this.{main::B::x}{dart.core::int*}.{dart.core::num::+}(this.{main::B::y}{dart.core::int*}){(dart.core::num*) →* dart.core::int*};
   };
diff --git a/pkg/front_end/testcases/expression/class_getter.expression.yaml.expect b/pkg/front_end/testcases/expression/class_getter.expression.yaml.expect
index e8e5846..d0eae14 100644
--- a/pkg/front_end/testcases/expression/class_getter.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_getter.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::B::z};
+  return this.{main::B::z}{dart.core::String*};
diff --git a/pkg/front_end/testcases/expression/class_invalid_static_capture.expression.yaml.expect b/pkg/front_end/testcases/expression/class_invalid_static_capture.expression.yaml.expect
index eb8b256..330d032 100644
--- a/pkg/front_end/testcases/expression/class_invalid_static_capture.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_invalid_static_capture.expression.yaml.expect
@@ -8,5 +8,5 @@
 }
 static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return () → dynamic {
-    return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Getter not found: 'x'.\n() { return x + y; }\n            ^".+(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:17: Error: Getter not found: 'y'.\n() { return x + y; }\n                ^");
+    return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Getter not found: 'x'.\n() { return x + y; }\n            ^"{dynamic}.+(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:17: Error: Getter not found: 'y'.\n() { return x + y; }\n                ^");
   };
diff --git a/pkg/front_end/testcases/expression/class_method.expression.yaml.expect b/pkg/front_end/testcases/expression/class_method.expression.yaml.expect
index 5c85dec..f5bb3e4 100644
--- a/pkg/front_end/testcases/expression/class_method.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_method.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::A::doit_with_this}(2);
+  return this.{main::A::doit_with_this}(2){(dart.core::int*) →* dart.core::int*};
diff --git a/pkg/front_end/testcases/expression/class_private_get.expression.yaml.expect b/pkg/front_end/testcases/expression/class_private_get.expression.yaml.expect
index 1b23fa1..b594541 100644
--- a/pkg/front_end/testcases/expression/class_private_get.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_private_get.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::B::_priv};
+  return this.{main::B::_priv}{dart.core::int*};
diff --git a/pkg/front_end/testcases/expression/class_private_method.expression.yaml.expect b/pkg/front_end/testcases/expression/class_private_method.expression.yaml.expect
index d945f2e..b1449b4 100644
--- a/pkg/front_end/testcases/expression/class_private_method.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_private_method.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::B::_privMethod};
+  return this.{main::B::_privMethod}{() →* void};
diff --git a/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect b/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
index 9fcf6bc..18654e51 100644
--- a/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
@@ -4,8 +4,8 @@
               ^^^^^^^^^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #lib1::globalVar.{dart.core::num::+}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Getter not found: 'staticVar'.\nglobalVar + staticVar + 5\n            ^^^^^^^^^").{dart.core::num::+}(5);
+  return #lib1::globalVar.{dart.core::num::+}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Getter not found: 'staticVar'.\nglobalVar + staticVar + 5\n            ^^^^^^^^^"){(dart.core::num*) →* dart.core::num*}.{dart.core::num::+}(5){(dart.core::num*) →* dart.core::num*};
 Errors: {
 }
 static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #lib1::globalVar.{dart.core::num::+}(#lib1::MyClass::staticVar).{dart.core::num::+}(5);
+  return #lib1::globalVar.{dart.core::num::+}(#lib1::MyClass::staticVar){(dart.core::num*) →* dart.core::int*}.{dart.core::num::+}(5){(dart.core::num*) →* dart.core::int*};
diff --git a/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect
index efc0681..87b923b 100644
--- a/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::MiddlewareApi::toString}();
+  return this.{main::MiddlewareApi::toString}(){() →* dart.core::String*};
diff --git a/pkg/front_end/testcases/expression/const_usage.expression.yaml.expect b/pkg/front_end/testcases/expression/const_usage.expression.yaml.expect
index 1d2b890..7253997 100644
--- a/pkg/front_end/testcases/expression/const_usage.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/const_usage.expression.yaml.expect
@@ -1,7 +1,7 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return (#C2).{main::ConstClass::x};
+  return (#C2).{main::ConstClass::x}{dart.core::int*};
 constants  {
   #C1 = 42
   #C2 = main::ConstClass {x:#C1}
diff --git a/pkg/front_end/testcases/expression/const_usage_class.expression.yaml.expect b/pkg/front_end/testcases/expression/const_usage_class.expression.yaml.expect
index 1d2b890..7253997 100644
--- a/pkg/front_end/testcases/expression/const_usage_class.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/const_usage_class.expression.yaml.expect
@@ -1,7 +1,7 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return (#C2).{main::ConstClass::x};
+  return (#C2).{main::ConstClass::x}{dart.core::int*};
 constants  {
   #C1 = 42
   #C2 = main::ConstClass {x:#C1}
diff --git a/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect b/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
index 6ca1293..b6b1ee0 100644
--- a/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
@@ -2,20 +2,20 @@
 }
 method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic a, dynamic b) → dynamic
   return ((dynamic a, dynamic b) → dart.core::bool* {
-    if(!a._usedData.{dart.core::Object::==}(b._usedData) || !a._deletedKeys.{dart.core::Object::==}(b._deletedKeys) || !a._hashMask.{dart.core::Object::==}(b._hashMask) || !a._index.length.{dart.core::Object::==}(b._index.length) || !a._data.length.{dart.core::Object::==}(b._data.length)) {
+    if(!(a{dynamic}._usedData =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._usedData) || !(a{dynamic}._deletedKeys =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._deletedKeys) || !(a{dynamic}._hashMask =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._hashMask) || !(a{dynamic}._index{dynamic}.length =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._index{dynamic}.length) || !(a{dynamic}._data{dynamic}.length =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._data{dynamic}.length)) {
       return false;
     }
-    for (dart.core::int* i = 0; i.{dart.core::num::<}(a._index.length as{TypeError,ForDynamic} dart.core::num*); i = i.{dart.core::num::+}(1)) {
-      if(!a._index.[](i).{dart.core::Object::==}(b._index.[](i))) {
+    for (dart.core::int* i = 0; i.{dart.core::num::<}(a{dynamic}._index{dynamic}.length as{TypeError,ForDynamic} dart.core::num*){(dart.core::num*) →* dart.core::bool*}; i = i.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*}) {
+      if(!(a{dynamic}._index{dynamic}.[](i) =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._index{dynamic}.[](i))) {
         return false;
       }
     }
-    for (dart.core::int* i = 0; i.{dart.core::num::<}(a._data.length as{TypeError,ForDynamic} dart.core::num*); i = i.{dart.core::num::+}(1)) {
-      dynamic ad = a._data.[](i);
-      dynamic bd = b._data.[](i);
-      if(!dart.core::identical(ad, bd) && !(ad.{dart.core::Object::==}(a) && bd.{dart.core::Object::==}(b))) {
+    for (dart.core::int* i = 0; i.{dart.core::num::<}(a{dynamic}._data{dynamic}.length as{TypeError,ForDynamic} dart.core::num*){(dart.core::num*) →* dart.core::bool*}; i = i.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*}) {
+      dynamic ad = a{dynamic}._data{dynamic}.[](i);
+      dynamic bd = b{dynamic}._data{dynamic}.[](i);
+      if(!dart.core::identical(ad, bd) && !(ad =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} a && bd =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b)) {
         return false;
       }
     }
     return true;
-  }).call(a, b);
+  })(a, b){(dynamic, dynamic) →* dart.core::bool*};
diff --git a/pkg/front_end/testcases/expression/invalid.expression.yaml.expect b/pkg/front_end/testcases/expression/invalid.expression.yaml.expect
index 7fc40b9..9e16ada 100644
--- a/pkg/front_end/testcases/expression/invalid.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/invalid.expression.yaml.expect
@@ -11,4 +11,4 @@
    ^^^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:1: Error: This couldn't be parsed.\n*foo(3,\n^".*(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:2: Error: Method not found: 'foo'.\n*foo(3,\n ^^^");
+  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:1: Error: This couldn't be parsed.\n*foo(3,\n^"{dynamic}.*(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:2: Error: Method not found: 'foo'.\n*foo(3,\n ^^^");
diff --git a/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml.expect b/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml.expect
index cbffcf7..69d0373 100644
--- a/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic s) → dynamic
-  return this.{main::D::m}(this.{main::D::id}<dart.core::List<main::D::T*>*>((s = dart.core::_GrowableList::•<dynamic>(0)) as{TypeError} dart.core::List<main::D::T*>*));
+  return this.{main::D::m}(this.{main::D::id}<dart.core::List<main::D::T*>*>((s = dart.core::_GrowableList::•<dynamic>(0)) as{TypeError} dart.core::List<main::D::T*>*){(dart.core::List<main::D::T*>*) →* dart.core::List<main::D::T*>*}){(dart.core::List<main::D::T*>*) →* dynamic};
diff --git a/pkg/front_end/testcases/expression/param_capture.expression.yaml.expect b/pkg/front_end/testcases/expression/param_capture.expression.yaml.expect
index ccedccc..3845731 100644
--- a/pkg/front_end/testcases/expression/param_capture.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/param_capture.expression.yaml.expect
@@ -2,5 +2,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x, dynamic y) → dynamic
   return () → Null {
-    x = x.+(y);
+    x = x{dynamic}.+(y);
   };
diff --git a/pkg/front_end/testcases/expression/param_conflict.expression.yaml.expect b/pkg/front_end/testcases/expression/param_conflict.expression.yaml.expect
index 5c4a28c..34e5988 100644
--- a/pkg/front_end/testcases/expression/param_conflict.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/param_conflict.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic dostat, dynamic y) → dynamic
-  return dostat.foo();
+  return dostat{dynamic}.foo();
diff --git a/pkg/front_end/testcases/expression/param_conflict_class.expression.yaml.expect b/pkg/front_end/testcases/expression/param_conflict_class.expression.yaml.expect
index c66e526..13e40f7 100644
--- a/pkg/front_end/testcases/expression/param_conflict_class.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/param_conflict_class.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic A, dynamic y) → dynamic
-  return A.foo(y);
+  return A{dynamic}.foo(y);
diff --git a/pkg/front_end/testcases/expression/param_method.expression.yaml.expect b/pkg/front_end/testcases/expression/param_method.expression.yaml.expect
index 4f6b188..0d0326b 100644
--- a/pkg/front_end/testcases/expression/param_method.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/param_method.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x, dynamic y) → dynamic
-  return x.foo(y);
+  return x{dynamic}.foo(y);
diff --git a/pkg/front_end/testcases/expression/regress_34224.expression.yaml.expect b/pkg/front_end/testcases/expression/regress_34224.expression.yaml.expect
index fd35ac2..fd54faa 100644
--- a/pkg/front_end/testcases/expression/regress_34224.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/regress_34224.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{dart.core::Object::toString}();
+  return this.{dart.core::Object::toString}(){() →* dart.core::String*};
diff --git a/pkg/front_end/testcases/expression/set_literal.expression.yaml.expect b/pkg/front_end/testcases/expression/set_literal.expression.yaml.expect
index 88031b2..59ee272 100644
--- a/pkg/front_end/testcases/expression/set_literal.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/set_literal.expression.yaml.expect
@@ -3,5 +3,5 @@
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return block {
     final dart.core::Set<dart.core::String*>* #t1 = new dart.collection::_CompactLinkedHashSet::•<dart.core::String*>();
-    #t1.{dart.core::Set::add}{Invariant}("a");
+    #t1.{dart.core::Set::add}("a"){(dart.core::String*) →* dart.core::bool*};
   } =>#t1;
diff --git a/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.strong.expect b/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.strong.expect
index 8c6d2ea..f7bc273 100644
--- a/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.strong.expect
@@ -23,7 +23,7 @@
 static method E|get#bar(lowered final self::A #this) → core::double
   return 3.14;
 static method test(self::A a, self::E e) → dynamic {
-  a.{self::A::foo};
+  a.{self::A::foo}{core::int};
   self::E|get#bar(a);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:16:5: Error: The getter 'foo' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
diff --git a/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.weak.expect b/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.weak.expect
index 8c6d2ea..f7bc273 100644
--- a/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.weak.expect
@@ -23,7 +23,7 @@
 static method E|get#bar(lowered final self::A #this) → core::double
   return 3.14;
 static method test(self::A a, self::E e) → dynamic {
-  a.{self::A::foo};
+  a.{self::A::foo}{core::int};
   self::E|get#bar(a);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:16:5: Error: The getter 'foo' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
diff --git a/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.strong.expect b/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.strong.expect
index 207f18f..043030d 100644
--- a/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.strong.expect
@@ -21,11 +21,11 @@
   tearoff bar = self::E|get#bar;
 }
 static method E|bar(lowered final self::A #this) → void
-  return #this.{self::A::foo}();
+  return #this.{self::A::foo}(){() → void};
 static method E|get#bar(lowered final self::A #this) → () → void
   return () → void => self::E|bar(#this);
 static method test(self::A a, self::E e) → dynamic {
-  a.{self::A::foo}();
+  a.{self::A::foo}(){() → void};
   self::E|bar(a);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:16:5: Error: The method 'foo' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing method, or defining a method name 'foo'.
diff --git a/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.weak.expect b/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.weak.expect
index 207f18f..043030d 100644
--- a/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.weak.expect
@@ -21,11 +21,11 @@
   tearoff bar = self::E|get#bar;
 }
 static method E|bar(lowered final self::A #this) → void
-  return #this.{self::A::foo}();
+  return #this.{self::A::foo}(){() → void};
 static method E|get#bar(lowered final self::A #this) → () → void
   return () → void => self::E|bar(#this);
 static method test(self::A a, self::E e) → dynamic {
-  a.{self::A::foo}();
+  a.{self::A::foo}(){() → void};
   self::E|bar(a);
   invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:16:5: Error: The method 'foo' isn't defined for the extension 'E'.
 Try correcting the name to the name of an existing method, or defining a method name 'foo'.
diff --git a/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.strong.expect b/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.strong.expect
index 80d58c8..2ff87ce 100644
--- a/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.strong.expect
@@ -43,10 +43,10 @@
 static method E|+(lowered final self::A #this, dynamic other) → dynamic
   return 42;
 static method test(self::A a, self::E e) → dynamic {
-  a.{self::A::*}("foobar");
-  a.{self::A::[]}(0);
-  a.{self::A::[]=}(0, "foobar");
-  a.{self::A::unary-}();
+  a.{self::A::*}("foobar"){(dynamic) → dynamic};
+  a.{self::A::[]}(0){(core::int) → dynamic};
+  a.{self::A::[]=}(0, "foobar"){(core::int, dynamic) → void};
+  a.{self::A::unary-}(){() → dynamic};
   self::E|+(a, "foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:23:5: Error: The operator '*' isn't defined for the extension 'E'.
 Try correcting the operator to an existing operator, or defining a '*' operator.
diff --git a/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.weak.expect b/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.weak.expect
index 80d58c8..2ff87ce 100644
--- a/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.weak.expect
@@ -43,10 +43,10 @@
 static method E|+(lowered final self::A #this, dynamic other) → dynamic
   return 42;
 static method test(self::A a, self::E e) → dynamic {
-  a.{self::A::*}("foobar");
-  a.{self::A::[]}(0);
-  a.{self::A::[]=}(0, "foobar");
-  a.{self::A::unary-}();
+  a.{self::A::*}("foobar"){(dynamic) → dynamic};
+  a.{self::A::[]}(0){(core::int) → dynamic};
+  a.{self::A::[]=}(0, "foobar"){(core::int, dynamic) → void};
+  a.{self::A::unary-}(){() → dynamic};
   self::E|+(a, "foobar");
   invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:23:5: Error: The operator '*' isn't defined for the extension 'E'.
 Try correcting the operator to an existing operator, or defining a '*' operator.
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
index 5a2ac69..6f3ad1d 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
@@ -141,19 +141,19 @@
 static field core::String* topLevel1 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel1 = 1(10);
-                 ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)).call(10);
+                 ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
 static field core::String* topLevel2 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel2 = 1(\"10\");
-                 ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)).call("10");
+                 ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
 static field core::String* topLevel3 = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel3 = 1.0(10);
-                   ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)).call(10);
+                   ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
 static field core::String* topLevel4 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel4 = 1.0(\"10\");
-                   ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)).call("10");
+                   ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
 static field self::A* a = new self::A::•();
 static field core::String* topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
@@ -173,25 +173,25 @@
 static method _extension#2|get#call(lowered final core::String* #this) → () →* core::String*
   return () → core::String* => "My name is String";
 static method main() → dynamic {
-  self::_extension#2|get#call("").call();
+  self::_extension#2|get#call("")(){() →* core::String*};
 }
 static method errors() → dynamic {
   let final Never* #t5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:39:4: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   1(10);
-   ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)).call(10);
+   ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
   let final Never* #t6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:40:4: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   1(\"10\");
-   ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)).call("10");
+   ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
   let final Never* #t7 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:41:6: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   1.0(10);
-     ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)).call(10);
+     ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
   let final Never* #t8 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:42:6: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   1.0(\"10\");
-     ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)).call("10");
+     ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
   self::A* a = new self::A::•();
   invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
new file mode 100644
index 0000000..55e391b
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
@@ -0,0 +1,212 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+// var topLevel1 = 1(10);
+//                  ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+// var topLevel2 = 1("10");
+//                  ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+// var topLevel3 = 1.0(10);
+//                    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+// var topLevel4 = 1.0("10");
+//                    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+// var topLevel5 = a(2);
+//                  ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var topLevel5 = a(2);
+//                  ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Too many positional arguments: 0 allowed, but 2 found.
+// Try removing the extra positional arguments.
+// var topLevel6 = a(2, "3");
+//                  ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var topLevel6 = a(2, "3");
+//                  ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:39:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   1(10);
+//    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:40:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   1("10");
+//    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:41:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   1.0(10);
+//      ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:42:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   1.0("10");
+//      ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   a(2);
+//    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   a(2);
+//    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Too many positional arguments: 0 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   a(2, "3");
+//    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   a(2, "3");
+//    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:47:4: Error: Cannot invoke an instance of 'B' because it declares 'call' to be something other than a method.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   b();
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  get call() → core::String*
+    return "My name is A";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get call() → () →* core::String*
+    return () → core::String* => "My name is B";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension _extension#0 on core::int* {
+  get call = self::_extension#0|get#call;
+}
+extension _extension#1 on core::num* {
+  get call = self::_extension#1|get#call;
+}
+extension _extension#2 on core::String* {
+  get call = self::_extension#2|get#call;
+}
+static field core::String* topLevel1 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+var topLevel1 = 1(10);
+                 ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
+static field core::String* topLevel2 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+var topLevel2 = 1(\"10\");
+                 ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
+static field core::String* topLevel3 = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+var topLevel3 = 1.0(10);
+                   ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
+static field core::String* topLevel4 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+var topLevel4 = 1.0(\"10\");
+                   ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
+static field self::A* a = new self::A::•();
+static field core::String* topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+ - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var topLevel5 = a(2);
+                 ^";
+static field self::B* b = new self::B::•();
+static field core::String* topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+ - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var topLevel6 = a(2, \"3\");
+                 ^";
+static method _extension#0|get#call(lowered final core::int* #this) → core::String*
+  return "My name is int";
+static method _extension#1|get#call(lowered final core::num* #this) → core::String*
+  return "My name is num";
+static method _extension#2|get#call(lowered final core::String* #this) → () →* core::String*
+  return () → core::String* => "My name is String";
+static method main() → dynamic {
+  self::_extension#2|get#call("")(){() →* core::String*};
+}
+static method errors() → dynamic {
+  let final Never* #t5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:39:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  1(10);
+   ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
+  let final Never* #t6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:40:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  1(\"10\");
+   ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
+  let final Never* #t7 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:41:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  1.0(10);
+     ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
+  let final Never* #t8 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:42:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  1.0(\"10\");
+     ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
+  self::A* a = new self::A::•();
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+ - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  a(2);
+   ^";
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+ - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  a(2, \"3\");
+   ^";
+  self::B* b = new self::B::•();
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:47:4: Error: Cannot invoke an instance of 'B' because it declares 'call' to be something other than a method.
+ - 'B' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  b();
+   ^";
+}
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.weak.expect b/pkg/front_end/testcases/extensions/compounds.dart.weak.expect
index 5174cae..ccd5bd4 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.weak.expect
@@ -8,11 +8,11 @@
     : self::Number::value = value, super core::Object::•()
     ;
   get hashCode() → core::int*
-    return this.{self::Number::value}.{core::num::hashCode};
+    return this.{self::Number::value}{core::int*}.{core::num::hashCode}{core::int*};
   operator ==(core::Object* other) → core::bool*
-    return other is self::Number* && this.{self::Number::value}.{core::num::==}(other{self::Number*}.{self::Number::value});
+    return other is self::Number* && this.{self::Number::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Number*}.{self::Number::value}{core::int*};
   method toString() → core::String*
-    return "Number(${this.{self::Number::value}})";
+    return "Number(${this.{self::Number::value}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -71,11 +71,11 @@
 }
 static method NumberExtension|+(lowered final self::Number* #this, core::Object* other) → self::Number* {
   if(other is core::int*) {
-    return new self::Number::•(#this.{self::Number::value}.{core::num::+}(other{core::int*}));
+    return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::+}(other{core::int*}){(core::num*) →* core::int*});
   }
   else
     if(other is self::Number*) {
-      return new self::Number::•(#this.{self::Number::value}.{core::num::+}(other{self::Number*}.{self::Number::value}));
+      return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::+}(other{self::Number*}.{self::Number::value}{core::int*}){(core::num*) →* core::int*});
     }
     else {
       throw new core::ArgumentError::•("${other}");
@@ -83,18 +83,18 @@
 }
 static method NumberExtension|-(lowered final self::Number* #this, core::Object* other) → self::Number* {
   if(other is core::int*) {
-    return new self::Number::•(#this.{self::Number::value}.{core::num::-}(other{core::int*}));
+    return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::-}(other{core::int*}){(core::num*) →* core::int*});
   }
   else
     if(other is self::Number*) {
-      return new self::Number::•(#this.{self::Number::value}.{core::num::-}(other{self::Number*}.{self::Number::value}));
+      return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::-}(other{self::Number*}.{self::Number::value}{core::int*}){(core::num*) →* core::int*});
     }
     else {
       throw new core::ArgumentError::•("${other}");
     }
 }
 static method ClassExtension|get#property(lowered final self::Class* #this) → self::Number*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{self::Number*};
 static method ClassExtension|set#property(lowered final self::Class* #this, self::Number* value) → void {
   #this.{self::Class::field} = value;
 }
@@ -136,7 +136,7 @@
 static method ClassExtension|get#testImplicitProperties(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::ClassExtension|testImplicitProperties(#this);
 static method IntClassExtension|get#property(lowered final self::IntClass* #this) → core::int*
-  return #this.{self::IntClass::field};
+  return #this.{self::IntClass::field}{core::int*};
 static method IntClassExtension|set#property(lowered final self::IntClass* #this, core::int* value) → void {
   #this.{self::IntClass::field} = value;
 }
@@ -145,34 +145,34 @@
   core::int* n1 = 1;
   core::int* n2 = 2;
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::expect(n1, let final core::int* #t23 = self::IntClassExtension|get#property(#this).{core::num::+}(n1) in let final void #t24 = self::IntClassExtension|set#property(#this, #t23) in #t23);
-  self::expect(n2, let final core::int* #t25 = self::IntClassExtension|get#property(#this).{core::num::+}(n1) in let final void #t26 = self::IntClassExtension|set#property(#this, #t25) in #t25);
-  self::expect(n0, let final core::int* #t27 = self::IntClassExtension|get#property(#this).{core::num::-}(n2) in let final void #t28 = self::IntClassExtension|set#property(#this, #t27) in #t27);
-  self::expect(n1, let final core::int* #t29 = self::IntClassExtension|get#property(#this).{core::num::+}(n1) in let final void #t30 = self::IntClassExtension|set#property(#this, #t29) in #t29);
-  self::expect(n0, let final core::int* #t31 = self::IntClassExtension|get#property(#this).{core::num::-}(n1) in let final void #t32 = self::IntClassExtension|set#property(#this, #t31) in #t31);
-  self::expect(n1, let final core::int* #t33 = self::IntClassExtension|get#property(#this).{core::num::+}(1) in let final void #t34 = self::IntClassExtension|set#property(#this, #t33) in #t33);
-  self::expect(n0, let final core::int* #t35 = self::IntClassExtension|get#property(#this).{core::num::-}(1) in let final void #t36 = self::IntClassExtension|set#property(#this, #t35) in #t35);
-  self::expect(n0, let final core::int* #t37 = self::IntClassExtension|get#property(#this) in let final core::int* #t38 = self::IntClassExtension|set#property(#this, #t37.{core::num::+}(1)) in #t37);
-  self::expect(n1, let final core::int* #t39 = self::IntClassExtension|get#property(#this) in let final core::int* #t40 = self::IntClassExtension|set#property(#this, #t39.{core::num::-}(1)) in #t39);
+  self::expect(n1, let final core::int* #t23 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t24 = self::IntClassExtension|set#property(#this, #t23) in #t23);
+  self::expect(n2, let final core::int* #t25 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t26 = self::IntClassExtension|set#property(#this, #t25) in #t25);
+  self::expect(n0, let final core::int* #t27 = self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t28 = self::IntClassExtension|set#property(#this, #t27) in #t27);
+  self::expect(n1, let final core::int* #t29 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t30 = self::IntClassExtension|set#property(#this, #t29) in #t29);
+  self::expect(n0, let final core::int* #t31 = self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t32 = self::IntClassExtension|set#property(#this, #t31) in #t31);
+  self::expect(n1, let final core::int* #t33 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t34 = self::IntClassExtension|set#property(#this, #t33) in #t33);
+  self::expect(n0, let final core::int* #t35 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t36 = self::IntClassExtension|set#property(#this, #t35) in #t35);
+  self::expect(n0, let final core::int* #t37 = self::IntClassExtension|get#property(#this) in let final core::int* #t38 = self::IntClassExtension|set#property(#this, #t37.{core::num::+}(1){(core::num*) →* core::int*}) in #t37);
+  self::expect(n1, let final core::int* #t39 = self::IntClassExtension|get#property(#this) in let final core::int* #t40 = self::IntClassExtension|set#property(#this, #t39.{core::num::-}(1){(core::num*) →* core::int*}) in #t39);
   self::expect(n0, self::IntClassExtension|get#property(#this));
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n2, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n2));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n1));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  let final core::int* #t41 = self::IntClassExtension|get#property(#this).{core::num::+}(1) in let final void #t42 = self::IntClassExtension|set#property(#this, #t41) in #t41;
+  let final core::int* #t41 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t42 = self::IntClassExtension|set#property(#this, #t41) in #t41;
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  let final core::int* #t43 = self::IntClassExtension|get#property(#this).{core::num::-}(1) in let final void #t44 = self::IntClassExtension|set#property(#this, #t43) in #t43;
+  let final core::int* #t43 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t44 = self::IntClassExtension|set#property(#this, #t43) in #t43;
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(1));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(#this));
 }
 static method IntClassExtension|get#testImplicitProperties(lowered final self::IntClass* #this) → () →* dynamic
@@ -231,36 +231,36 @@
   self::Number* n1 = new self::Number::•(1);
   self::Number* n2 = new self::Number::•(2);
   self::Class* v = new self::Class::•(n0);
-  self::expect(n0, v.{self::Class::field});
-  self::expect(n1, let final self::Class* #t49 = v in #t49.{self::Class::field} = self::NumberExtension|+(#t49.{self::Class::field}, n1));
-  self::expect(n2, let final self::Class* #t50 = v in #t50.{self::Class::field} = self::NumberExtension|+(#t50.{self::Class::field}, n1));
-  self::expect(n0, let final self::Class* #t51 = v in #t51.{self::Class::field} = self::NumberExtension|-(#t51.{self::Class::field}, n2));
-  self::expect(n1, let final self::Class* #t52 = v in #t52.{self::Class::field} = self::NumberExtension|+(#t52.{self::Class::field}, n1));
-  self::expect(n0, let final self::Class* #t53 = v in #t53.{self::Class::field} = self::NumberExtension|-(#t53.{self::Class::field}, n1));
-  self::expect(n1, let final self::Class* #t54 = v in #t54.{self::Class::field} = self::NumberExtension|+(#t54.{self::Class::field}, 1));
-  self::expect(n0, let final self::Class* #t55 = v in #t55.{self::Class::field} = self::NumberExtension|-(#t55.{self::Class::field}, 1));
-  self::expect(n0, let final self::Class* #t56 = v in let final self::Number* #t57 = #t56.{self::Class::field} in let final self::Number* #t58 = #t56.{self::Class::field} = self::NumberExtension|+(#t57, 1) in #t57);
-  self::expect(n1, let final self::Class* #t59 = v in let final self::Number* #t60 = #t59.{self::Class::field} in let final self::Number* #t61 = #t59.{self::Class::field} = self::NumberExtension|-(#t60, 1) in #t60);
-  self::expect(n0, v.{self::Class::field});
-  self::expect(n0, v.{self::Class::field});
-  let final self::Class* #t62 = v in #t62.{self::Class::field} = self::NumberExtension|+(#t62.{self::Class::field}, n1);
-  self::expect(n1, v.{self::Class::field});
-  let final self::Class* #t63 = v in #t63.{self::Class::field} = self::NumberExtension|+(#t63.{self::Class::field}, n1);
-  self::expect(n2, v.{self::Class::field});
-  let final self::Class* #t64 = v in #t64.{self::Class::field} = self::NumberExtension|-(#t64.{self::Class::field}, n2);
-  self::expect(n0, v.{self::Class::field});
-  let final self::Class* #t65 = v in #t65.{self::Class::field} = self::NumberExtension|+(#t65.{self::Class::field}, n1);
-  self::expect(n1, v.{self::Class::field});
-  let final self::Class* #t66 = v in #t66.{self::Class::field} = self::NumberExtension|-(#t66.{self::Class::field}, n1);
-  self::expect(n0, v.{self::Class::field});
-  let final self::Class* #t67 = v in #t67.{self::Class::field} = self::NumberExtension|+(#t67.{self::Class::field}, 1);
-  self::expect(n1, v.{self::Class::field});
-  let final self::Class* #t68 = v in #t68.{self::Class::field} = self::NumberExtension|-(#t68.{self::Class::field}, 1);
-  self::expect(n0, v.{self::Class::field});
-  let final self::Class* #t69 = v in #t69.{self::Class::field} = self::NumberExtension|+(#t69.{self::Class::field}, 1);
-  self::expect(n1, v.{self::Class::field});
-  let final self::Class* #t70 = v in #t70.{self::Class::field} = self::NumberExtension|-(#t70.{self::Class::field}, 1);
-  self::expect(n0, v.{self::Class::field});
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  self::expect(n1, let final self::Class* #t49 = v in #t49.{self::Class::field} = self::NumberExtension|+(#t49.{self::Class::field}{self::Number*}, n1));
+  self::expect(n2, let final self::Class* #t50 = v in #t50.{self::Class::field} = self::NumberExtension|+(#t50.{self::Class::field}{self::Number*}, n1));
+  self::expect(n0, let final self::Class* #t51 = v in #t51.{self::Class::field} = self::NumberExtension|-(#t51.{self::Class::field}{self::Number*}, n2));
+  self::expect(n1, let final self::Class* #t52 = v in #t52.{self::Class::field} = self::NumberExtension|+(#t52.{self::Class::field}{self::Number*}, n1));
+  self::expect(n0, let final self::Class* #t53 = v in #t53.{self::Class::field} = self::NumberExtension|-(#t53.{self::Class::field}{self::Number*}, n1));
+  self::expect(n1, let final self::Class* #t54 = v in #t54.{self::Class::field} = self::NumberExtension|+(#t54.{self::Class::field}{self::Number*}, 1));
+  self::expect(n0, let final self::Class* #t55 = v in #t55.{self::Class::field} = self::NumberExtension|-(#t55.{self::Class::field}{self::Number*}, 1));
+  self::expect(n0, let final self::Class* #t56 = v in let final self::Number* #t57 = #t56.{self::Class::field}{self::Number*} in let final self::Number* #t58 = #t56.{self::Class::field} = self::NumberExtension|+(#t57, 1) in #t57);
+  self::expect(n1, let final self::Class* #t59 = v in let final self::Number* #t60 = #t59.{self::Class::field}{self::Number*} in let final self::Number* #t61 = #t59.{self::Class::field} = self::NumberExtension|-(#t60, 1) in #t60);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t62 = v in #t62.{self::Class::field} = self::NumberExtension|+(#t62.{self::Class::field}{self::Number*}, n1);
+  self::expect(n1, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t63 = v in #t63.{self::Class::field} = self::NumberExtension|+(#t63.{self::Class::field}{self::Number*}, n1);
+  self::expect(n2, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t64 = v in #t64.{self::Class::field} = self::NumberExtension|-(#t64.{self::Class::field}{self::Number*}, n2);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t65 = v in #t65.{self::Class::field} = self::NumberExtension|+(#t65.{self::Class::field}{self::Number*}, n1);
+  self::expect(n1, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t66 = v in #t66.{self::Class::field} = self::NumberExtension|-(#t66.{self::Class::field}{self::Number*}, n1);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t67 = v in #t67.{self::Class::field} = self::NumberExtension|+(#t67.{self::Class::field}{self::Number*}, 1);
+  self::expect(n1, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t68 = v in #t68.{self::Class::field} = self::NumberExtension|-(#t68.{self::Class::field}{self::Number*}, 1);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t69 = v in #t69.{self::Class::field} = self::NumberExtension|+(#t69.{self::Class::field}{self::Number*}, 1);
+  self::expect(n1, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t70 = v in #t70.{self::Class::field} = self::NumberExtension|-(#t70.{self::Class::field}{self::Number*}, 1);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
   self::expect(n0, self::ClassExtension|get#property(v));
   self::expect(n1, let final self::Class* #t71 = v in let final self::Number* #t72 = self::NumberExtension|+(self::ClassExtension|get#property(#t71), n1) in let final void #t73 = self::ClassExtension|set#property(#t71, #t72) in #t72);
   self::expect(n2, let final self::Class* #t74 = v in let final self::Number* #t75 = self::NumberExtension|+(self::ClassExtension|get#property(#t74), n1) in let final void #t76 = self::ClassExtension|set#property(#t74, #t75) in #t75);
@@ -297,65 +297,65 @@
   core::int* n1 = 1;
   core::int* n2 = 2;
   self::IntClass* v = new self::IntClass::•(n0);
-  self::expect(n0, v.{self::IntClass::field});
-  self::expect(n1, let final self::IntClass* #t111 = v in #t111.{self::IntClass::field} = #t111.{self::IntClass::field}.{core::num::+}(n1));
-  self::expect(n2, let final self::IntClass* #t112 = v in #t112.{self::IntClass::field} = #t112.{self::IntClass::field}.{core::num::+}(n1));
-  self::expect(n0, let final self::IntClass* #t113 = v in #t113.{self::IntClass::field} = #t113.{self::IntClass::field}.{core::num::-}(n2));
-  self::expect(n1, let final self::IntClass* #t114 = v in #t114.{self::IntClass::field} = #t114.{self::IntClass::field}.{core::num::+}(n1));
-  self::expect(n0, let final self::IntClass* #t115 = v in #t115.{self::IntClass::field} = #t115.{self::IntClass::field}.{core::num::-}(n1));
-  self::expect(n1, let final self::IntClass* #t116 = v in #t116.{self::IntClass::field} = #t116.{self::IntClass::field}.{core::num::+}(1));
-  self::expect(n0, let final self::IntClass* #t117 = v in #t117.{self::IntClass::field} = #t117.{self::IntClass::field}.{core::num::-}(1));
-  self::expect(n0, let final self::IntClass* #t118 = v in let final core::int* #t119 = #t118.{self::IntClass::field} in let final core::int* #t120 = #t118.{self::IntClass::field} = #t119.{core::num::+}(1) in #t119);
-  self::expect(n1, let final self::IntClass* #t121 = v in let final core::int* #t122 = #t121.{self::IntClass::field} in let final core::int* #t123 = #t121.{self::IntClass::field} = #t122.{core::num::-}(1) in #t122);
-  self::expect(n0, v.{self::IntClass::field});
-  self::expect(n0, v.{self::IntClass::field});
-  let final self::IntClass* #t124 = v in #t124.{self::IntClass::field} = #t124.{self::IntClass::field}.{core::num::+}(n1);
-  self::expect(n1, v.{self::IntClass::field});
-  let final self::IntClass* #t125 = v in #t125.{self::IntClass::field} = #t125.{self::IntClass::field}.{core::num::+}(n1);
-  self::expect(n2, v.{self::IntClass::field});
-  let final self::IntClass* #t126 = v in #t126.{self::IntClass::field} = #t126.{self::IntClass::field}.{core::num::-}(n2);
-  self::expect(n0, v.{self::IntClass::field});
-  let final self::IntClass* #t127 = v in #t127.{self::IntClass::field} = #t127.{self::IntClass::field}.{core::num::+}(n1);
-  self::expect(n1, v.{self::IntClass::field});
-  let final self::IntClass* #t128 = v in #t128.{self::IntClass::field} = #t128.{self::IntClass::field}.{core::num::-}(n1);
-  self::expect(n0, v.{self::IntClass::field});
-  let final self::IntClass* #t129 = v in #t129.{self::IntClass::field} = #t129.{self::IntClass::field}.{core::num::+}(1);
-  self::expect(n1, v.{self::IntClass::field});
-  let final self::IntClass* #t130 = v in #t130.{self::IntClass::field} = #t130.{self::IntClass::field}.{core::num::-}(1);
-  self::expect(n0, v.{self::IntClass::field});
-  let final self::IntClass* #t131 = v in #t131.{self::IntClass::field} = #t131.{self::IntClass::field}.{core::num::+}(1);
-  self::expect(n1, v.{self::IntClass::field});
-  let final self::IntClass* #t132 = v in #t132.{self::IntClass::field} = #t132.{self::IntClass::field}.{core::num::-}(1);
-  self::expect(n0, v.{self::IntClass::field});
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  self::expect(n1, let final self::IntClass* #t111 = v in #t111.{self::IntClass::field} = #t111.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n2, let final self::IntClass* #t112 = v in #t112.{self::IntClass::field} = #t112.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t113 = v in #t113.{self::IntClass::field} = #t113.{self::IntClass::field}{core::int*}.{core::num::-}(n2){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t114 = v in #t114.{self::IntClass::field} = #t114.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t115 = v in #t115.{self::IntClass::field} = #t115.{self::IntClass::field}{core::int*}.{core::num::-}(n1){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t116 = v in #t116.{self::IntClass::field} = #t116.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t117 = v in #t117.{self::IntClass::field} = #t117.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t118 = v in let final core::int* #t119 = #t118.{self::IntClass::field}{core::int*} in let final core::int* #t120 = #t118.{self::IntClass::field} = #t119.{core::num::+}(1){(core::num*) →* core::int*} in #t119);
+  self::expect(n1, let final self::IntClass* #t121 = v in let final core::int* #t122 = #t121.{self::IntClass::field}{core::int*} in let final core::int* #t123 = #t121.{self::IntClass::field} = #t122.{core::num::-}(1){(core::num*) →* core::int*} in #t122);
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t124 = v in #t124.{self::IntClass::field} = #t124.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
+  self::expect(n1, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t125 = v in #t125.{self::IntClass::field} = #t125.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
+  self::expect(n2, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t126 = v in #t126.{self::IntClass::field} = #t126.{self::IntClass::field}{core::int*}.{core::num::-}(n2){(core::num*) →* core::int*};
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t127 = v in #t127.{self::IntClass::field} = #t127.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
+  self::expect(n1, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t128 = v in #t128.{self::IntClass::field} = #t128.{self::IntClass::field}{core::int*}.{core::num::-}(n1){(core::num*) →* core::int*};
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t129 = v in #t129.{self::IntClass::field} = #t129.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+  self::expect(n1, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t130 = v in #t130.{self::IntClass::field} = #t130.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t131 = v in #t131.{self::IntClass::field} = #t131.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+  self::expect(n1, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t132 = v in #t132.{self::IntClass::field} = #t132.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  self::expect(n1, let final self::IntClass* #t133 = v in let final core::int* #t134 = self::IntClassExtension|get#property(#t133).{core::num::+}(n1) in let final void #t135 = self::IntClassExtension|set#property(#t133, #t134) in #t134);
-  self::expect(n2, let final self::IntClass* #t136 = v in let final core::int* #t137 = self::IntClassExtension|get#property(#t136).{core::num::+}(n1) in let final void #t138 = self::IntClassExtension|set#property(#t136, #t137) in #t137);
-  self::expect(n0, let final self::IntClass* #t139 = v in let final core::int* #t140 = self::IntClassExtension|get#property(#t139).{core::num::-}(n2) in let final void #t141 = self::IntClassExtension|set#property(#t139, #t140) in #t140);
-  self::expect(n1, let final self::IntClass* #t142 = v in let final core::int* #t143 = self::IntClassExtension|get#property(#t142).{core::num::+}(n1) in let final void #t144 = self::IntClassExtension|set#property(#t142, #t143) in #t143);
-  self::expect(n0, let final self::IntClass* #t145 = v in let final core::int* #t146 = self::IntClassExtension|get#property(#t145).{core::num::-}(n1) in let final void #t147 = self::IntClassExtension|set#property(#t145, #t146) in #t146);
-  self::expect(n1, let final self::IntClass* #t148 = v in let final core::int* #t149 = self::IntClassExtension|get#property(#t148).{core::num::+}(1) in let final void #t150 = self::IntClassExtension|set#property(#t148, #t149) in #t149);
-  self::expect(n0, let final self::IntClass* #t151 = v in let final core::int* #t152 = self::IntClassExtension|get#property(#t151).{core::num::-}(1) in let final void #t153 = self::IntClassExtension|set#property(#t151, #t152) in #t152);
-  self::expect(n0, let final self::IntClass* #t154 = v in let final core::int* #t155 = self::IntClassExtension|get#property(#t154) in let final core::int* #t156 = self::IntClassExtension|set#property(#t154, #t155.{core::num::+}(1)) in #t155);
-  self::expect(n1, let final self::IntClass* #t157 = v in let final core::int* #t158 = self::IntClassExtension|get#property(#t157) in let final core::int* #t159 = self::IntClassExtension|set#property(#t157, #t158.{core::num::-}(1)) in #t158);
+  self::expect(n1, let final self::IntClass* #t133 = v in let final core::int* #t134 = self::IntClassExtension|get#property(#t133).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t135 = self::IntClassExtension|set#property(#t133, #t134) in #t134);
+  self::expect(n2, let final self::IntClass* #t136 = v in let final core::int* #t137 = self::IntClassExtension|get#property(#t136).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t138 = self::IntClassExtension|set#property(#t136, #t137) in #t137);
+  self::expect(n0, let final self::IntClass* #t139 = v in let final core::int* #t140 = self::IntClassExtension|get#property(#t139).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t141 = self::IntClassExtension|set#property(#t139, #t140) in #t140);
+  self::expect(n1, let final self::IntClass* #t142 = v in let final core::int* #t143 = self::IntClassExtension|get#property(#t142).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t144 = self::IntClassExtension|set#property(#t142, #t143) in #t143);
+  self::expect(n0, let final self::IntClass* #t145 = v in let final core::int* #t146 = self::IntClassExtension|get#property(#t145).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t147 = self::IntClassExtension|set#property(#t145, #t146) in #t146);
+  self::expect(n1, let final self::IntClass* #t148 = v in let final core::int* #t149 = self::IntClassExtension|get#property(#t148).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t150 = self::IntClassExtension|set#property(#t148, #t149) in #t149);
+  self::expect(n0, let final self::IntClass* #t151 = v in let final core::int* #t152 = self::IntClassExtension|get#property(#t151).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t153 = self::IntClassExtension|set#property(#t151, #t152) in #t152);
+  self::expect(n0, let final self::IntClass* #t154 = v in let final core::int* #t155 = self::IntClassExtension|get#property(#t154) in let final core::int* #t156 = self::IntClassExtension|set#property(#t154, #t155.{core::num::+}(1){(core::num*) →* core::int*}) in #t155);
+  self::expect(n1, let final self::IntClass* #t157 = v in let final core::int* #t158 = self::IntClassExtension|get#property(#t157) in let final core::int* #t159 = self::IntClassExtension|set#property(#t157, #t158.{core::num::-}(1){(core::num*) →* core::int*}) in #t158);
   self::expect(n0, self::IntClassExtension|get#property(v));
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t160 = v in self::IntClassExtension|set#property(#t160, self::IntClassExtension|get#property(#t160).{core::num::+}(n1));
+  let final self::IntClass* #t160 = v in self::IntClassExtension|set#property(#t160, self::IntClassExtension|get#property(#t160).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t161 = v in self::IntClassExtension|set#property(#t161, self::IntClassExtension|get#property(#t161).{core::num::+}(n1));
+  let final self::IntClass* #t161 = v in self::IntClassExtension|set#property(#t161, self::IntClassExtension|get#property(#t161).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n2, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t162 = v in self::IntClassExtension|set#property(#t162, self::IntClassExtension|get#property(#t162).{core::num::-}(n2));
+  let final self::IntClass* #t162 = v in self::IntClassExtension|set#property(#t162, self::IntClassExtension|get#property(#t162).{core::num::-}(n2){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t163 = v in self::IntClassExtension|set#property(#t163, self::IntClassExtension|get#property(#t163).{core::num::+}(n1));
+  let final self::IntClass* #t163 = v in self::IntClassExtension|set#property(#t163, self::IntClassExtension|get#property(#t163).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t164 = v in self::IntClassExtension|set#property(#t164, self::IntClassExtension|get#property(#t164).{core::num::-}(n1));
+  let final self::IntClass* #t164 = v in self::IntClassExtension|set#property(#t164, self::IntClassExtension|get#property(#t164).{core::num::-}(n1){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t165 = v in let final core::int* #t166 = self::IntClassExtension|get#property(#t165).{core::num::+}(1) in let final void #t167 = self::IntClassExtension|set#property(#t165, #t166) in #t166;
+  let final self::IntClass* #t165 = v in let final core::int* #t166 = self::IntClassExtension|get#property(#t165).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t167 = self::IntClassExtension|set#property(#t165, #t166) in #t166;
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t168 = v in let final core::int* #t169 = self::IntClassExtension|get#property(#t168).{core::num::-}(1) in let final void #t170 = self::IntClassExtension|set#property(#t168, #t169) in #t169;
+  let final self::IntClass* #t168 = v in let final core::int* #t169 = self::IntClassExtension|get#property(#t168).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t170 = self::IntClassExtension|set#property(#t168, #t169) in #t169;
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t171 = v in self::IntClassExtension|set#property(#t171, self::IntClassExtension|get#property(#t171).{core::num::+}(1));
+  let final self::IntClass* #t171 = v in self::IntClassExtension|set#property(#t171, self::IntClassExtension|get#property(#t171).{core::num::+}(1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t172 = v in self::IntClassExtension|set#property(#t172, self::IntClassExtension|get#property(#t172).{core::num::-}(1));
+  let final self::IntClass* #t172 = v in self::IntClassExtension|set#property(#t172, self::IntClassExtension|get#property(#t172).{core::num::-}(1){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
 }
 static method testExplicitProperties() → dynamic {
@@ -400,111 +400,111 @@
   core::int* n2 = 2;
   self::IntClass* v = new self::IntClass::•(n0);
   self::expect(n0, self::IntClassExtension|get#property(v));
-  self::expect(n1, let final self::IntClass* #t217 = v in let final core::int* #t218 = self::IntClassExtension|get#property(#t217).{core::num::+}(n1) in let final void #t219 = self::IntClassExtension|set#property(#t217, #t218) in #t218);
-  self::expect(n2, let final self::IntClass* #t220 = v in let final core::int* #t221 = self::IntClassExtension|get#property(#t220).{core::num::+}(n1) in let final void #t222 = self::IntClassExtension|set#property(#t220, #t221) in #t221);
-  self::expect(n0, let final self::IntClass* #t223 = v in let final core::int* #t224 = self::IntClassExtension|get#property(#t223).{core::num::-}(n2) in let final void #t225 = self::IntClassExtension|set#property(#t223, #t224) in #t224);
-  self::expect(n1, let final self::IntClass* #t226 = v in let final core::int* #t227 = self::IntClassExtension|get#property(#t226).{core::num::+}(n1) in let final void #t228 = self::IntClassExtension|set#property(#t226, #t227) in #t227);
-  self::expect(n0, let final self::IntClass* #t229 = v in let final core::int* #t230 = self::IntClassExtension|get#property(#t229).{core::num::-}(n1) in let final void #t231 = self::IntClassExtension|set#property(#t229, #t230) in #t230);
-  self::expect(n1, let final self::IntClass* #t232 = v in let final core::int* #t233 = self::IntClassExtension|get#property(#t232).{core::num::+}(1) in let final void #t234 = self::IntClassExtension|set#property(#t232, #t233) in #t233);
-  self::expect(n0, let final self::IntClass* #t235 = v in let final core::int* #t236 = self::IntClassExtension|get#property(#t235).{core::num::-}(1) in let final void #t237 = self::IntClassExtension|set#property(#t235, #t236) in #t236);
-  self::expect(n0, let final self::IntClass* #t238 = v in let final core::int* #t239 = self::IntClassExtension|get#property(#t238) in let final core::int* #t240 = let final core::int* #t241 = #t239.{core::num::+}(1) in let final void #t242 = self::IntClassExtension|set#property(#t238, #t241) in #t241 in #t239);
-  self::expect(n1, let final self::IntClass* #t243 = v in let final core::int* #t244 = self::IntClassExtension|get#property(#t243) in let final core::int* #t245 = let final core::int* #t246 = #t244.{core::num::-}(1) in let final void #t247 = self::IntClassExtension|set#property(#t243, #t246) in #t246 in #t244);
+  self::expect(n1, let final self::IntClass* #t217 = v in let final core::int* #t218 = self::IntClassExtension|get#property(#t217).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t219 = self::IntClassExtension|set#property(#t217, #t218) in #t218);
+  self::expect(n2, let final self::IntClass* #t220 = v in let final core::int* #t221 = self::IntClassExtension|get#property(#t220).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t222 = self::IntClassExtension|set#property(#t220, #t221) in #t221);
+  self::expect(n0, let final self::IntClass* #t223 = v in let final core::int* #t224 = self::IntClassExtension|get#property(#t223).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t225 = self::IntClassExtension|set#property(#t223, #t224) in #t224);
+  self::expect(n1, let final self::IntClass* #t226 = v in let final core::int* #t227 = self::IntClassExtension|get#property(#t226).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t228 = self::IntClassExtension|set#property(#t226, #t227) in #t227);
+  self::expect(n0, let final self::IntClass* #t229 = v in let final core::int* #t230 = self::IntClassExtension|get#property(#t229).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t231 = self::IntClassExtension|set#property(#t229, #t230) in #t230);
+  self::expect(n1, let final self::IntClass* #t232 = v in let final core::int* #t233 = self::IntClassExtension|get#property(#t232).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t234 = self::IntClassExtension|set#property(#t232, #t233) in #t233);
+  self::expect(n0, let final self::IntClass* #t235 = v in let final core::int* #t236 = self::IntClassExtension|get#property(#t235).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t237 = self::IntClassExtension|set#property(#t235, #t236) in #t236);
+  self::expect(n0, let final self::IntClass* #t238 = v in let final core::int* #t239 = self::IntClassExtension|get#property(#t238) in let final core::int* #t240 = let final core::int* #t241 = #t239.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t242 = self::IntClassExtension|set#property(#t238, #t241) in #t241 in #t239);
+  self::expect(n1, let final self::IntClass* #t243 = v in let final core::int* #t244 = self::IntClassExtension|get#property(#t243) in let final core::int* #t245 = let final core::int* #t246 = #t244.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t247 = self::IntClassExtension|set#property(#t243, #t246) in #t246 in #t244);
   self::expect(n0, self::IntClassExtension|get#property(v));
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t248 = v in self::IntClassExtension|set#property(#t248, self::IntClassExtension|get#property(#t248).{core::num::+}(n1));
+  let final self::IntClass* #t248 = v in self::IntClassExtension|set#property(#t248, self::IntClassExtension|get#property(#t248).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t249 = v in self::IntClassExtension|set#property(#t249, self::IntClassExtension|get#property(#t249).{core::num::+}(n1));
+  let final self::IntClass* #t249 = v in self::IntClassExtension|set#property(#t249, self::IntClassExtension|get#property(#t249).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n2, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t250 = v in self::IntClassExtension|set#property(#t250, self::IntClassExtension|get#property(#t250).{core::num::-}(n2));
+  let final self::IntClass* #t250 = v in self::IntClassExtension|set#property(#t250, self::IntClassExtension|get#property(#t250).{core::num::-}(n2){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t251 = v in self::IntClassExtension|set#property(#t251, self::IntClassExtension|get#property(#t251).{core::num::+}(n1));
+  let final self::IntClass* #t251 = v in self::IntClassExtension|set#property(#t251, self::IntClassExtension|get#property(#t251).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t252 = v in self::IntClassExtension|set#property(#t252, self::IntClassExtension|get#property(#t252).{core::num::-}(n1));
+  let final self::IntClass* #t252 = v in self::IntClassExtension|set#property(#t252, self::IntClassExtension|get#property(#t252).{core::num::-}(n1){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t253 = v in let final core::int* #t254 = self::IntClassExtension|get#property(#t253).{core::num::+}(1) in let final void #t255 = self::IntClassExtension|set#property(#t253, #t254) in #t254;
+  let final self::IntClass* #t253 = v in let final core::int* #t254 = self::IntClassExtension|get#property(#t253).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t255 = self::IntClassExtension|set#property(#t253, #t254) in #t254;
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t256 = v in let final core::int* #t257 = self::IntClassExtension|get#property(#t256).{core::num::-}(1) in let final void #t258 = self::IntClassExtension|set#property(#t256, #t257) in #t257;
+  let final self::IntClass* #t256 = v in let final core::int* #t257 = self::IntClassExtension|get#property(#t256).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t258 = self::IntClassExtension|set#property(#t256, #t257) in #t257;
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t259 = v in self::IntClassExtension|set#property(#t259, self::IntClassExtension|get#property(#t259).{core::num::+}(1));
+  let final self::IntClass* #t259 = v in self::IntClassExtension|set#property(#t259, self::IntClassExtension|get#property(#t259).{core::num::+}(1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t260 = v in self::IntClassExtension|set#property(#t260, self::IntClassExtension|get#property(#t260).{core::num::-}(1));
+  let final self::IntClass* #t260 = v in self::IntClassExtension|set#property(#t260, self::IntClassExtension|get#property(#t260).{core::num::-}(1){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
 }
 static method testExplicitNullAwareProperties(self::Class* v) → dynamic {
   self::Number* n0 = new self::Number::•(0);
   self::Number* n1 = new self::Number::•(1);
   self::Number* n2 = new self::Number::•(2);
-  self::expect(n0, let final self::Class* #t261 = v in #t261.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t261), v.{self::Class::==}(null));
-  self::expect(n1, let final self::Class* #t262 = v in #t262.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t263 = self::NumberExtension|+(self::ClassExtension|get#property(#t262), n1) in let final void #t264 = self::ClassExtension|set#property(#t262, #t263) in #t263, v.{self::Class::==}(null));
-  self::expect(n2, let final self::Class* #t265 = v in #t265.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t266 = self::NumberExtension|+(self::ClassExtension|get#property(#t265), n1) in let final void #t267 = self::ClassExtension|set#property(#t265, #t266) in #t266, v.{self::Class::==}(null));
-  self::expect(n0, let final self::Class* #t268 = v in #t268.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t269 = self::NumberExtension|-(self::ClassExtension|get#property(#t268), n2) in let final void #t270 = self::ClassExtension|set#property(#t268, #t269) in #t269, v.{self::Class::==}(null));
-  self::expect(n1, let final self::Class* #t271 = v in #t271.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t272 = self::NumberExtension|+(self::ClassExtension|get#property(#t271), n1) in let final void #t273 = self::ClassExtension|set#property(#t271, #t272) in #t272, v.{self::Class::==}(null));
-  self::expect(n0, let final self::Class* #t274 = v in #t274.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t275 = self::NumberExtension|-(self::ClassExtension|get#property(#t274), n1) in let final void #t276 = self::ClassExtension|set#property(#t274, #t275) in #t275, v.{self::Class::==}(null));
-  self::expect(n1, let final self::Class* #t277 = v in #t277.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t278 = self::NumberExtension|+(self::ClassExtension|get#property(#t277), 1) in let final void #t279 = self::ClassExtension|set#property(#t277, #t278) in #t278, v.{self::Class::==}(null));
-  self::expect(n0, let final self::Class* #t280 = v in #t280.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t281 = self::NumberExtension|-(self::ClassExtension|get#property(#t280), 1) in let final void #t282 = self::ClassExtension|set#property(#t280, #t281) in #t281, v.{self::Class::==}(null));
-  self::expect(n0, let final self::Class* #t283 = v in #t283.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t284 = self::ClassExtension|get#property(#t283) in let final self::Number* #t285 = let final self::Number* #t286 = self::NumberExtension|+(#t284, 1) in let final void #t287 = self::ClassExtension|set#property(#t283, #t286) in #t286 in #t284, v.{self::Class::==}(null));
-  self::expect(n1, let final self::Class* #t288 = v in #t288.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t289 = self::ClassExtension|get#property(#t288) in let final self::Number* #t290 = let final self::Number* #t291 = self::NumberExtension|-(#t289, 1) in let final void #t292 = self::ClassExtension|set#property(#t288, #t291) in #t291 in #t289, v.{self::Class::==}(null));
-  self::expect(n0, let final self::Class* #t293 = v in #t293.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t293), v.{self::Class::==}(null));
-  self::expect(n0, let final self::Class* #t294 = v in #t294.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t294), v.{self::Class::==}(null));
-  let final self::Class* #t295 = v in #t295.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t295, self::NumberExtension|+(self::ClassExtension|get#property(#t295), n1));
-  self::expect(n1, let final self::Class* #t296 = v in #t296.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t296), v.{self::Class::==}(null));
-  let final self::Class* #t297 = v in #t297.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t297, self::NumberExtension|+(self::ClassExtension|get#property(#t297), n1));
-  self::expect(n2, let final self::Class* #t298 = v in #t298.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t298), v.{self::Class::==}(null));
-  let final self::Class* #t299 = v in #t299.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t299, self::NumberExtension|-(self::ClassExtension|get#property(#t299), n2));
-  self::expect(n0, let final self::Class* #t300 = v in #t300.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t300), v.{self::Class::==}(null));
-  let final self::Class* #t301 = v in #t301.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t301, self::NumberExtension|+(self::ClassExtension|get#property(#t301), n1));
-  self::expect(n1, let final self::Class* #t302 = v in #t302.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t302), v.{self::Class::==}(null));
-  let final self::Class* #t303 = v in #t303.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t303, self::NumberExtension|-(self::ClassExtension|get#property(#t303), n1));
-  self::expect(n0, let final self::Class* #t304 = v in #t304.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t304), v.{self::Class::==}(null));
-  let final self::Class* #t305 = v in #t305.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t306 = self::NumberExtension|+(self::ClassExtension|get#property(#t305), 1) in let final void #t307 = self::ClassExtension|set#property(#t305, #t306) in #t306;
-  self::expect(n1, let final self::Class* #t308 = v in #t308.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t308), v.{self::Class::==}(null));
-  let final self::Class* #t309 = v in #t309.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t310 = self::NumberExtension|-(self::ClassExtension|get#property(#t309), 1) in let final void #t311 = self::ClassExtension|set#property(#t309, #t310) in #t310;
-  self::expect(n0, let final self::Class* #t312 = v in #t312.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t312), v.{self::Class::==}(null));
-  let final self::Class* #t313 = v in #t313.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t313, self::NumberExtension|+(self::ClassExtension|get#property(#t313), 1));
-  self::expect(n1, let final self::Class* #t314 = v in #t314.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t314), v.{self::Class::==}(null));
-  let final self::Class* #t315 = v in #t315.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t315, self::NumberExtension|-(self::ClassExtension|get#property(#t315), 1));
-  self::expect(n0, let final self::Class* #t316 = v in #t316.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t316), v.{self::Class::==}(null));
+  self::expect(n0, let final self::Class* #t261 = v in #t261 == null ?{self::Number*} null : self::ClassExtension|get#property(#t261), v == null);
+  self::expect(n1, let final self::Class* #t262 = v in #t262 == null ?{self::Number*} null : let final self::Number* #t263 = self::NumberExtension|+(self::ClassExtension|get#property(#t262), n1) in let final void #t264 = self::ClassExtension|set#property(#t262, #t263) in #t263, v == null);
+  self::expect(n2, let final self::Class* #t265 = v in #t265 == null ?{self::Number*} null : let final self::Number* #t266 = self::NumberExtension|+(self::ClassExtension|get#property(#t265), n1) in let final void #t267 = self::ClassExtension|set#property(#t265, #t266) in #t266, v == null);
+  self::expect(n0, let final self::Class* #t268 = v in #t268 == null ?{self::Number*} null : let final self::Number* #t269 = self::NumberExtension|-(self::ClassExtension|get#property(#t268), n2) in let final void #t270 = self::ClassExtension|set#property(#t268, #t269) in #t269, v == null);
+  self::expect(n1, let final self::Class* #t271 = v in #t271 == null ?{self::Number*} null : let final self::Number* #t272 = self::NumberExtension|+(self::ClassExtension|get#property(#t271), n1) in let final void #t273 = self::ClassExtension|set#property(#t271, #t272) in #t272, v == null);
+  self::expect(n0, let final self::Class* #t274 = v in #t274 == null ?{self::Number*} null : let final self::Number* #t275 = self::NumberExtension|-(self::ClassExtension|get#property(#t274), n1) in let final void #t276 = self::ClassExtension|set#property(#t274, #t275) in #t275, v == null);
+  self::expect(n1, let final self::Class* #t277 = v in #t277 == null ?{self::Number*} null : let final self::Number* #t278 = self::NumberExtension|+(self::ClassExtension|get#property(#t277), 1) in let final void #t279 = self::ClassExtension|set#property(#t277, #t278) in #t278, v == null);
+  self::expect(n0, let final self::Class* #t280 = v in #t280 == null ?{self::Number*} null : let final self::Number* #t281 = self::NumberExtension|-(self::ClassExtension|get#property(#t280), 1) in let final void #t282 = self::ClassExtension|set#property(#t280, #t281) in #t281, v == null);
+  self::expect(n0, let final self::Class* #t283 = v in #t283 == null ?{self::Number*} null : let final self::Number* #t284 = self::ClassExtension|get#property(#t283) in let final self::Number* #t285 = let final self::Number* #t286 = self::NumberExtension|+(#t284, 1) in let final void #t287 = self::ClassExtension|set#property(#t283, #t286) in #t286 in #t284, v == null);
+  self::expect(n1, let final self::Class* #t288 = v in #t288 == null ?{self::Number*} null : let final self::Number* #t289 = self::ClassExtension|get#property(#t288) in let final self::Number* #t290 = let final self::Number* #t291 = self::NumberExtension|-(#t289, 1) in let final void #t292 = self::ClassExtension|set#property(#t288, #t291) in #t291 in #t289, v == null);
+  self::expect(n0, let final self::Class* #t293 = v in #t293 == null ?{self::Number*} null : self::ClassExtension|get#property(#t293), v == null);
+  self::expect(n0, let final self::Class* #t294 = v in #t294 == null ?{self::Number*} null : self::ClassExtension|get#property(#t294), v == null);
+  let final self::Class* #t295 = v in #t295 == null ?{self::Number*} null : self::ClassExtension|set#property(#t295, self::NumberExtension|+(self::ClassExtension|get#property(#t295), n1));
+  self::expect(n1, let final self::Class* #t296 = v in #t296 == null ?{self::Number*} null : self::ClassExtension|get#property(#t296), v == null);
+  let final self::Class* #t297 = v in #t297 == null ?{self::Number*} null : self::ClassExtension|set#property(#t297, self::NumberExtension|+(self::ClassExtension|get#property(#t297), n1));
+  self::expect(n2, let final self::Class* #t298 = v in #t298 == null ?{self::Number*} null : self::ClassExtension|get#property(#t298), v == null);
+  let final self::Class* #t299 = v in #t299 == null ?{self::Number*} null : self::ClassExtension|set#property(#t299, self::NumberExtension|-(self::ClassExtension|get#property(#t299), n2));
+  self::expect(n0, let final self::Class* #t300 = v in #t300 == null ?{self::Number*} null : self::ClassExtension|get#property(#t300), v == null);
+  let final self::Class* #t301 = v in #t301 == null ?{self::Number*} null : self::ClassExtension|set#property(#t301, self::NumberExtension|+(self::ClassExtension|get#property(#t301), n1));
+  self::expect(n1, let final self::Class* #t302 = v in #t302 == null ?{self::Number*} null : self::ClassExtension|get#property(#t302), v == null);
+  let final self::Class* #t303 = v in #t303 == null ?{self::Number*} null : self::ClassExtension|set#property(#t303, self::NumberExtension|-(self::ClassExtension|get#property(#t303), n1));
+  self::expect(n0, let final self::Class* #t304 = v in #t304 == null ?{self::Number*} null : self::ClassExtension|get#property(#t304), v == null);
+  let final self::Class* #t305 = v in #t305 == null ?{self::Number*} null : let final self::Number* #t306 = self::NumberExtension|+(self::ClassExtension|get#property(#t305), 1) in let final void #t307 = self::ClassExtension|set#property(#t305, #t306) in #t306;
+  self::expect(n1, let final self::Class* #t308 = v in #t308 == null ?{self::Number*} null : self::ClassExtension|get#property(#t308), v == null);
+  let final self::Class* #t309 = v in #t309 == null ?{self::Number*} null : let final self::Number* #t310 = self::NumberExtension|-(self::ClassExtension|get#property(#t309), 1) in let final void #t311 = self::ClassExtension|set#property(#t309, #t310) in #t310;
+  self::expect(n0, let final self::Class* #t312 = v in #t312 == null ?{self::Number*} null : self::ClassExtension|get#property(#t312), v == null);
+  let final self::Class* #t313 = v in #t313 == null ?{self::Number*} null : self::ClassExtension|set#property(#t313, self::NumberExtension|+(self::ClassExtension|get#property(#t313), 1));
+  self::expect(n1, let final self::Class* #t314 = v in #t314 == null ?{self::Number*} null : self::ClassExtension|get#property(#t314), v == null);
+  let final self::Class* #t315 = v in #t315 == null ?{self::Number*} null : self::ClassExtension|set#property(#t315, self::NumberExtension|-(self::ClassExtension|get#property(#t315), 1));
+  self::expect(n0, let final self::Class* #t316 = v in #t316 == null ?{self::Number*} null : self::ClassExtension|get#property(#t316), v == null);
 }
 static method testExplicitNullAwareIntProperties(self::IntClass* v) → dynamic {
   core::int* n0 = 0;
   core::int* n1 = 1;
   core::int* n2 = 2;
-  self::expect(n0, let final self::IntClass* #t317 = v in #t317.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t317), v.{self::IntClass::==}(null));
-  self::expect(n1, let final self::IntClass* #t318 = v in #t318.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t319 = self::IntClassExtension|get#property(#t318).{core::num::+}(n1) in let final void #t320 = self::IntClassExtension|set#property(#t318, #t319) in #t319, v.{self::IntClass::==}(null));
-  self::expect(n2, let final self::IntClass* #t321 = v in #t321.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t322 = self::IntClassExtension|get#property(#t321).{core::num::+}(n1) in let final void #t323 = self::IntClassExtension|set#property(#t321, #t322) in #t322, v.{self::IntClass::==}(null));
-  self::expect(n0, let final self::IntClass* #t324 = v in #t324.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t325 = self::IntClassExtension|get#property(#t324).{core::num::-}(n2) in let final void #t326 = self::IntClassExtension|set#property(#t324, #t325) in #t325, v.{self::IntClass::==}(null));
-  self::expect(n1, let final self::IntClass* #t327 = v in #t327.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t328 = self::IntClassExtension|get#property(#t327).{core::num::+}(n1) in let final void #t329 = self::IntClassExtension|set#property(#t327, #t328) in #t328, v.{self::IntClass::==}(null));
-  self::expect(n0, let final self::IntClass* #t330 = v in #t330.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t331 = self::IntClassExtension|get#property(#t330).{core::num::-}(n1) in let final void #t332 = self::IntClassExtension|set#property(#t330, #t331) in #t331, v.{self::IntClass::==}(null));
-  self::expect(n1, let final self::IntClass* #t333 = v in #t333.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t334 = self::IntClassExtension|get#property(#t333).{core::num::+}(1) in let final void #t335 = self::IntClassExtension|set#property(#t333, #t334) in #t334, v.{self::IntClass::==}(null));
-  self::expect(n0, let final self::IntClass* #t336 = v in #t336.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t337 = self::IntClassExtension|get#property(#t336).{core::num::-}(1) in let final void #t338 = self::IntClassExtension|set#property(#t336, #t337) in #t337, v.{self::IntClass::==}(null));
-  self::expect(n0, let final self::IntClass* #t339 = v in #t339.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t340 = self::IntClassExtension|get#property(#t339) in let final core::int* #t341 = let final core::int* #t342 = #t340.{core::num::+}(1) in let final void #t343 = self::IntClassExtension|set#property(#t339, #t342) in #t342 in #t340, v.{self::IntClass::==}(null));
-  self::expect(n1, let final self::IntClass* #t344 = v in #t344.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t345 = self::IntClassExtension|get#property(#t344) in let final core::int* #t346 = let final core::int* #t347 = #t345.{core::num::-}(1) in let final void #t348 = self::IntClassExtension|set#property(#t344, #t347) in #t347 in #t345, v.{self::IntClass::==}(null));
-  self::expect(n0, let final self::IntClass* #t349 = v in #t349.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t349), v.{self::IntClass::==}(null));
-  self::expect(n0, let final self::IntClass* #t350 = v in #t350.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t350), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t351 = v in #t351.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t351, self::IntClassExtension|get#property(#t351).{core::num::+}(n1));
-  self::expect(n1, let final self::IntClass* #t352 = v in #t352.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t352), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t353 = v in #t353.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t353, self::IntClassExtension|get#property(#t353).{core::num::+}(n1));
-  self::expect(n2, let final self::IntClass* #t354 = v in #t354.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t354), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t355 = v in #t355.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t355, self::IntClassExtension|get#property(#t355).{core::num::-}(n2));
-  self::expect(n0, let final self::IntClass* #t356 = v in #t356.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t356), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t357 = v in #t357.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t357, self::IntClassExtension|get#property(#t357).{core::num::+}(n1));
-  self::expect(n1, let final self::IntClass* #t358 = v in #t358.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t358), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t359 = v in #t359.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t359, self::IntClassExtension|get#property(#t359).{core::num::-}(n1));
-  self::expect(n0, let final self::IntClass* #t360 = v in #t360.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t360), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t361 = v in #t361.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t362 = self::IntClassExtension|get#property(#t361).{core::num::+}(1) in let final void #t363 = self::IntClassExtension|set#property(#t361, #t362) in #t362;
-  self::expect(n1, let final self::IntClass* #t364 = v in #t364.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t364), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t365 = v in #t365.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t366 = self::IntClassExtension|get#property(#t365).{core::num::-}(1) in let final void #t367 = self::IntClassExtension|set#property(#t365, #t366) in #t366;
-  self::expect(n0, let final self::IntClass* #t368 = v in #t368.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t368), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t369 = v in #t369.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t369, self::IntClassExtension|get#property(#t369).{core::num::+}(1));
-  self::expect(n1, let final self::IntClass* #t370 = v in #t370.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t370), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t371 = v in #t371.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t371, self::IntClassExtension|get#property(#t371).{core::num::-}(1));
-  self::expect(n0, let final self::IntClass* #t372 = v in #t372.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t372), v.{self::IntClass::==}(null));
+  self::expect(n0, let final self::IntClass* #t317 = v in #t317 == null ?{core::int*} null : self::IntClassExtension|get#property(#t317), v == null);
+  self::expect(n1, let final self::IntClass* #t318 = v in #t318 == null ?{core::int*} null : let final core::int* #t319 = self::IntClassExtension|get#property(#t318).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t320 = self::IntClassExtension|set#property(#t318, #t319) in #t319, v == null);
+  self::expect(n2, let final self::IntClass* #t321 = v in #t321 == null ?{core::int*} null : let final core::int* #t322 = self::IntClassExtension|get#property(#t321).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t323 = self::IntClassExtension|set#property(#t321, #t322) in #t322, v == null);
+  self::expect(n0, let final self::IntClass* #t324 = v in #t324 == null ?{core::int*} null : let final core::int* #t325 = self::IntClassExtension|get#property(#t324).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t326 = self::IntClassExtension|set#property(#t324, #t325) in #t325, v == null);
+  self::expect(n1, let final self::IntClass* #t327 = v in #t327 == null ?{core::int*} null : let final core::int* #t328 = self::IntClassExtension|get#property(#t327).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t329 = self::IntClassExtension|set#property(#t327, #t328) in #t328, v == null);
+  self::expect(n0, let final self::IntClass* #t330 = v in #t330 == null ?{core::int*} null : let final core::int* #t331 = self::IntClassExtension|get#property(#t330).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t332 = self::IntClassExtension|set#property(#t330, #t331) in #t331, v == null);
+  self::expect(n1, let final self::IntClass* #t333 = v in #t333 == null ?{core::int*} null : let final core::int* #t334 = self::IntClassExtension|get#property(#t333).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t335 = self::IntClassExtension|set#property(#t333, #t334) in #t334, v == null);
+  self::expect(n0, let final self::IntClass* #t336 = v in #t336 == null ?{core::int*} null : let final core::int* #t337 = self::IntClassExtension|get#property(#t336).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t338 = self::IntClassExtension|set#property(#t336, #t337) in #t337, v == null);
+  self::expect(n0, let final self::IntClass* #t339 = v in #t339 == null ?{core::int*} null : let final core::int* #t340 = self::IntClassExtension|get#property(#t339) in let final core::int* #t341 = let final core::int* #t342 = #t340.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t343 = self::IntClassExtension|set#property(#t339, #t342) in #t342 in #t340, v == null);
+  self::expect(n1, let final self::IntClass* #t344 = v in #t344 == null ?{core::int*} null : let final core::int* #t345 = self::IntClassExtension|get#property(#t344) in let final core::int* #t346 = let final core::int* #t347 = #t345.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t348 = self::IntClassExtension|set#property(#t344, #t347) in #t347 in #t345, v == null);
+  self::expect(n0, let final self::IntClass* #t349 = v in #t349 == null ?{core::int*} null : self::IntClassExtension|get#property(#t349), v == null);
+  self::expect(n0, let final self::IntClass* #t350 = v in #t350 == null ?{core::int*} null : self::IntClassExtension|get#property(#t350), v == null);
+  let final self::IntClass* #t351 = v in #t351 == null ?{core::int*} null : self::IntClassExtension|set#property(#t351, self::IntClassExtension|get#property(#t351).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t352 = v in #t352 == null ?{core::int*} null : self::IntClassExtension|get#property(#t352), v == null);
+  let final self::IntClass* #t353 = v in #t353 == null ?{core::int*} null : self::IntClassExtension|set#property(#t353, self::IntClassExtension|get#property(#t353).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n2, let final self::IntClass* #t354 = v in #t354 == null ?{core::int*} null : self::IntClassExtension|get#property(#t354), v == null);
+  let final self::IntClass* #t355 = v in #t355 == null ?{core::int*} null : self::IntClassExtension|set#property(#t355, self::IntClassExtension|get#property(#t355).{core::num::-}(n2){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t356 = v in #t356 == null ?{core::int*} null : self::IntClassExtension|get#property(#t356), v == null);
+  let final self::IntClass* #t357 = v in #t357 == null ?{core::int*} null : self::IntClassExtension|set#property(#t357, self::IntClassExtension|get#property(#t357).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t358 = v in #t358 == null ?{core::int*} null : self::IntClassExtension|get#property(#t358), v == null);
+  let final self::IntClass* #t359 = v in #t359 == null ?{core::int*} null : self::IntClassExtension|set#property(#t359, self::IntClassExtension|get#property(#t359).{core::num::-}(n1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t360 = v in #t360 == null ?{core::int*} null : self::IntClassExtension|get#property(#t360), v == null);
+  let final self::IntClass* #t361 = v in #t361 == null ?{core::int*} null : let final core::int* #t362 = self::IntClassExtension|get#property(#t361).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t363 = self::IntClassExtension|set#property(#t361, #t362) in #t362;
+  self::expect(n1, let final self::IntClass* #t364 = v in #t364 == null ?{core::int*} null : self::IntClassExtension|get#property(#t364), v == null);
+  let final self::IntClass* #t365 = v in #t365 == null ?{core::int*} null : let final core::int* #t366 = self::IntClassExtension|get#property(#t365).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t367 = self::IntClassExtension|set#property(#t365, #t366) in #t366;
+  self::expect(n0, let final self::IntClass* #t368 = v in #t368 == null ?{core::int*} null : self::IntClassExtension|get#property(#t368), v == null);
+  let final self::IntClass* #t369 = v in #t369 == null ?{core::int*} null : self::IntClassExtension|set#property(#t369, self::IntClassExtension|get#property(#t369).{core::num::+}(1){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t370 = v in #t370 == null ?{core::int*} null : self::IntClassExtension|get#property(#t370), v == null);
+  let final self::IntClass* #t371 = v in #t371 == null ?{core::int*} null : self::IntClassExtension|set#property(#t371, self::IntClassExtension|get#property(#t371).{core::num::-}(1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t372 = v in #t372 == null ?{core::int*} null : self::IntClassExtension|get#property(#t372), v == null);
 }
 static method expect(dynamic expected, dynamic actual, [dynamic expectNull = #C1]) → dynamic {
   if(expectNull as{TypeError,ForDynamic} core::bool*) {
     expected = null;
   }
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/compounds.dart.weak.transformed.expect
index 5174cae..ccd5bd4 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.weak.transformed.expect
@@ -8,11 +8,11 @@
     : self::Number::value = value, super core::Object::•()
     ;
   get hashCode() → core::int*
-    return this.{self::Number::value}.{core::num::hashCode};
+    return this.{self::Number::value}{core::int*}.{core::num::hashCode}{core::int*};
   operator ==(core::Object* other) → core::bool*
-    return other is self::Number* && this.{self::Number::value}.{core::num::==}(other{self::Number*}.{self::Number::value});
+    return other is self::Number* && this.{self::Number::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Number*}.{self::Number::value}{core::int*};
   method toString() → core::String*
-    return "Number(${this.{self::Number::value}})";
+    return "Number(${this.{self::Number::value}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -71,11 +71,11 @@
 }
 static method NumberExtension|+(lowered final self::Number* #this, core::Object* other) → self::Number* {
   if(other is core::int*) {
-    return new self::Number::•(#this.{self::Number::value}.{core::num::+}(other{core::int*}));
+    return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::+}(other{core::int*}){(core::num*) →* core::int*});
   }
   else
     if(other is self::Number*) {
-      return new self::Number::•(#this.{self::Number::value}.{core::num::+}(other{self::Number*}.{self::Number::value}));
+      return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::+}(other{self::Number*}.{self::Number::value}{core::int*}){(core::num*) →* core::int*});
     }
     else {
       throw new core::ArgumentError::•("${other}");
@@ -83,18 +83,18 @@
 }
 static method NumberExtension|-(lowered final self::Number* #this, core::Object* other) → self::Number* {
   if(other is core::int*) {
-    return new self::Number::•(#this.{self::Number::value}.{core::num::-}(other{core::int*}));
+    return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::-}(other{core::int*}){(core::num*) →* core::int*});
   }
   else
     if(other is self::Number*) {
-      return new self::Number::•(#this.{self::Number::value}.{core::num::-}(other{self::Number*}.{self::Number::value}));
+      return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::-}(other{self::Number*}.{self::Number::value}{core::int*}){(core::num*) →* core::int*});
     }
     else {
       throw new core::ArgumentError::•("${other}");
     }
 }
 static method ClassExtension|get#property(lowered final self::Class* #this) → self::Number*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{self::Number*};
 static method ClassExtension|set#property(lowered final self::Class* #this, self::Number* value) → void {
   #this.{self::Class::field} = value;
 }
@@ -136,7 +136,7 @@
 static method ClassExtension|get#testImplicitProperties(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::ClassExtension|testImplicitProperties(#this);
 static method IntClassExtension|get#property(lowered final self::IntClass* #this) → core::int*
-  return #this.{self::IntClass::field};
+  return #this.{self::IntClass::field}{core::int*};
 static method IntClassExtension|set#property(lowered final self::IntClass* #this, core::int* value) → void {
   #this.{self::IntClass::field} = value;
 }
@@ -145,34 +145,34 @@
   core::int* n1 = 1;
   core::int* n2 = 2;
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::expect(n1, let final core::int* #t23 = self::IntClassExtension|get#property(#this).{core::num::+}(n1) in let final void #t24 = self::IntClassExtension|set#property(#this, #t23) in #t23);
-  self::expect(n2, let final core::int* #t25 = self::IntClassExtension|get#property(#this).{core::num::+}(n1) in let final void #t26 = self::IntClassExtension|set#property(#this, #t25) in #t25);
-  self::expect(n0, let final core::int* #t27 = self::IntClassExtension|get#property(#this).{core::num::-}(n2) in let final void #t28 = self::IntClassExtension|set#property(#this, #t27) in #t27);
-  self::expect(n1, let final core::int* #t29 = self::IntClassExtension|get#property(#this).{core::num::+}(n1) in let final void #t30 = self::IntClassExtension|set#property(#this, #t29) in #t29);
-  self::expect(n0, let final core::int* #t31 = self::IntClassExtension|get#property(#this).{core::num::-}(n1) in let final void #t32 = self::IntClassExtension|set#property(#this, #t31) in #t31);
-  self::expect(n1, let final core::int* #t33 = self::IntClassExtension|get#property(#this).{core::num::+}(1) in let final void #t34 = self::IntClassExtension|set#property(#this, #t33) in #t33);
-  self::expect(n0, let final core::int* #t35 = self::IntClassExtension|get#property(#this).{core::num::-}(1) in let final void #t36 = self::IntClassExtension|set#property(#this, #t35) in #t35);
-  self::expect(n0, let final core::int* #t37 = self::IntClassExtension|get#property(#this) in let final core::int* #t38 = self::IntClassExtension|set#property(#this, #t37.{core::num::+}(1)) in #t37);
-  self::expect(n1, let final core::int* #t39 = self::IntClassExtension|get#property(#this) in let final core::int* #t40 = self::IntClassExtension|set#property(#this, #t39.{core::num::-}(1)) in #t39);
+  self::expect(n1, let final core::int* #t23 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t24 = self::IntClassExtension|set#property(#this, #t23) in #t23);
+  self::expect(n2, let final core::int* #t25 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t26 = self::IntClassExtension|set#property(#this, #t25) in #t25);
+  self::expect(n0, let final core::int* #t27 = self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t28 = self::IntClassExtension|set#property(#this, #t27) in #t27);
+  self::expect(n1, let final core::int* #t29 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t30 = self::IntClassExtension|set#property(#this, #t29) in #t29);
+  self::expect(n0, let final core::int* #t31 = self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t32 = self::IntClassExtension|set#property(#this, #t31) in #t31);
+  self::expect(n1, let final core::int* #t33 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t34 = self::IntClassExtension|set#property(#this, #t33) in #t33);
+  self::expect(n0, let final core::int* #t35 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t36 = self::IntClassExtension|set#property(#this, #t35) in #t35);
+  self::expect(n0, let final core::int* #t37 = self::IntClassExtension|get#property(#this) in let final core::int* #t38 = self::IntClassExtension|set#property(#this, #t37.{core::num::+}(1){(core::num*) →* core::int*}) in #t37);
+  self::expect(n1, let final core::int* #t39 = self::IntClassExtension|get#property(#this) in let final core::int* #t40 = self::IntClassExtension|set#property(#this, #t39.{core::num::-}(1){(core::num*) →* core::int*}) in #t39);
   self::expect(n0, self::IntClassExtension|get#property(#this));
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n2, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n2));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n1));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  let final core::int* #t41 = self::IntClassExtension|get#property(#this).{core::num::+}(1) in let final void #t42 = self::IntClassExtension|set#property(#this, #t41) in #t41;
+  let final core::int* #t41 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t42 = self::IntClassExtension|set#property(#this, #t41) in #t41;
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  let final core::int* #t43 = self::IntClassExtension|get#property(#this).{core::num::-}(1) in let final void #t44 = self::IntClassExtension|set#property(#this, #t43) in #t43;
+  let final core::int* #t43 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t44 = self::IntClassExtension|set#property(#this, #t43) in #t43;
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(1));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(#this));
 }
 static method IntClassExtension|get#testImplicitProperties(lowered final self::IntClass* #this) → () →* dynamic
@@ -231,36 +231,36 @@
   self::Number* n1 = new self::Number::•(1);
   self::Number* n2 = new self::Number::•(2);
   self::Class* v = new self::Class::•(n0);
-  self::expect(n0, v.{self::Class::field});
-  self::expect(n1, let final self::Class* #t49 = v in #t49.{self::Class::field} = self::NumberExtension|+(#t49.{self::Class::field}, n1));
-  self::expect(n2, let final self::Class* #t50 = v in #t50.{self::Class::field} = self::NumberExtension|+(#t50.{self::Class::field}, n1));
-  self::expect(n0, let final self::Class* #t51 = v in #t51.{self::Class::field} = self::NumberExtension|-(#t51.{self::Class::field}, n2));
-  self::expect(n1, let final self::Class* #t52 = v in #t52.{self::Class::field} = self::NumberExtension|+(#t52.{self::Class::field}, n1));
-  self::expect(n0, let final self::Class* #t53 = v in #t53.{self::Class::field} = self::NumberExtension|-(#t53.{self::Class::field}, n1));
-  self::expect(n1, let final self::Class* #t54 = v in #t54.{self::Class::field} = self::NumberExtension|+(#t54.{self::Class::field}, 1));
-  self::expect(n0, let final self::Class* #t55 = v in #t55.{self::Class::field} = self::NumberExtension|-(#t55.{self::Class::field}, 1));
-  self::expect(n0, let final self::Class* #t56 = v in let final self::Number* #t57 = #t56.{self::Class::field} in let final self::Number* #t58 = #t56.{self::Class::field} = self::NumberExtension|+(#t57, 1) in #t57);
-  self::expect(n1, let final self::Class* #t59 = v in let final self::Number* #t60 = #t59.{self::Class::field} in let final self::Number* #t61 = #t59.{self::Class::field} = self::NumberExtension|-(#t60, 1) in #t60);
-  self::expect(n0, v.{self::Class::field});
-  self::expect(n0, v.{self::Class::field});
-  let final self::Class* #t62 = v in #t62.{self::Class::field} = self::NumberExtension|+(#t62.{self::Class::field}, n1);
-  self::expect(n1, v.{self::Class::field});
-  let final self::Class* #t63 = v in #t63.{self::Class::field} = self::NumberExtension|+(#t63.{self::Class::field}, n1);
-  self::expect(n2, v.{self::Class::field});
-  let final self::Class* #t64 = v in #t64.{self::Class::field} = self::NumberExtension|-(#t64.{self::Class::field}, n2);
-  self::expect(n0, v.{self::Class::field});
-  let final self::Class* #t65 = v in #t65.{self::Class::field} = self::NumberExtension|+(#t65.{self::Class::field}, n1);
-  self::expect(n1, v.{self::Class::field});
-  let final self::Class* #t66 = v in #t66.{self::Class::field} = self::NumberExtension|-(#t66.{self::Class::field}, n1);
-  self::expect(n0, v.{self::Class::field});
-  let final self::Class* #t67 = v in #t67.{self::Class::field} = self::NumberExtension|+(#t67.{self::Class::field}, 1);
-  self::expect(n1, v.{self::Class::field});
-  let final self::Class* #t68 = v in #t68.{self::Class::field} = self::NumberExtension|-(#t68.{self::Class::field}, 1);
-  self::expect(n0, v.{self::Class::field});
-  let final self::Class* #t69 = v in #t69.{self::Class::field} = self::NumberExtension|+(#t69.{self::Class::field}, 1);
-  self::expect(n1, v.{self::Class::field});
-  let final self::Class* #t70 = v in #t70.{self::Class::field} = self::NumberExtension|-(#t70.{self::Class::field}, 1);
-  self::expect(n0, v.{self::Class::field});
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  self::expect(n1, let final self::Class* #t49 = v in #t49.{self::Class::field} = self::NumberExtension|+(#t49.{self::Class::field}{self::Number*}, n1));
+  self::expect(n2, let final self::Class* #t50 = v in #t50.{self::Class::field} = self::NumberExtension|+(#t50.{self::Class::field}{self::Number*}, n1));
+  self::expect(n0, let final self::Class* #t51 = v in #t51.{self::Class::field} = self::NumberExtension|-(#t51.{self::Class::field}{self::Number*}, n2));
+  self::expect(n1, let final self::Class* #t52 = v in #t52.{self::Class::field} = self::NumberExtension|+(#t52.{self::Class::field}{self::Number*}, n1));
+  self::expect(n0, let final self::Class* #t53 = v in #t53.{self::Class::field} = self::NumberExtension|-(#t53.{self::Class::field}{self::Number*}, n1));
+  self::expect(n1, let final self::Class* #t54 = v in #t54.{self::Class::field} = self::NumberExtension|+(#t54.{self::Class::field}{self::Number*}, 1));
+  self::expect(n0, let final self::Class* #t55 = v in #t55.{self::Class::field} = self::NumberExtension|-(#t55.{self::Class::field}{self::Number*}, 1));
+  self::expect(n0, let final self::Class* #t56 = v in let final self::Number* #t57 = #t56.{self::Class::field}{self::Number*} in let final self::Number* #t58 = #t56.{self::Class::field} = self::NumberExtension|+(#t57, 1) in #t57);
+  self::expect(n1, let final self::Class* #t59 = v in let final self::Number* #t60 = #t59.{self::Class::field}{self::Number*} in let final self::Number* #t61 = #t59.{self::Class::field} = self::NumberExtension|-(#t60, 1) in #t60);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t62 = v in #t62.{self::Class::field} = self::NumberExtension|+(#t62.{self::Class::field}{self::Number*}, n1);
+  self::expect(n1, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t63 = v in #t63.{self::Class::field} = self::NumberExtension|+(#t63.{self::Class::field}{self::Number*}, n1);
+  self::expect(n2, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t64 = v in #t64.{self::Class::field} = self::NumberExtension|-(#t64.{self::Class::field}{self::Number*}, n2);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t65 = v in #t65.{self::Class::field} = self::NumberExtension|+(#t65.{self::Class::field}{self::Number*}, n1);
+  self::expect(n1, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t66 = v in #t66.{self::Class::field} = self::NumberExtension|-(#t66.{self::Class::field}{self::Number*}, n1);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t67 = v in #t67.{self::Class::field} = self::NumberExtension|+(#t67.{self::Class::field}{self::Number*}, 1);
+  self::expect(n1, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t68 = v in #t68.{self::Class::field} = self::NumberExtension|-(#t68.{self::Class::field}{self::Number*}, 1);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t69 = v in #t69.{self::Class::field} = self::NumberExtension|+(#t69.{self::Class::field}{self::Number*}, 1);
+  self::expect(n1, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t70 = v in #t70.{self::Class::field} = self::NumberExtension|-(#t70.{self::Class::field}{self::Number*}, 1);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
   self::expect(n0, self::ClassExtension|get#property(v));
   self::expect(n1, let final self::Class* #t71 = v in let final self::Number* #t72 = self::NumberExtension|+(self::ClassExtension|get#property(#t71), n1) in let final void #t73 = self::ClassExtension|set#property(#t71, #t72) in #t72);
   self::expect(n2, let final self::Class* #t74 = v in let final self::Number* #t75 = self::NumberExtension|+(self::ClassExtension|get#property(#t74), n1) in let final void #t76 = self::ClassExtension|set#property(#t74, #t75) in #t75);
@@ -297,65 +297,65 @@
   core::int* n1 = 1;
   core::int* n2 = 2;
   self::IntClass* v = new self::IntClass::•(n0);
-  self::expect(n0, v.{self::IntClass::field});
-  self::expect(n1, let final self::IntClass* #t111 = v in #t111.{self::IntClass::field} = #t111.{self::IntClass::field}.{core::num::+}(n1));
-  self::expect(n2, let final self::IntClass* #t112 = v in #t112.{self::IntClass::field} = #t112.{self::IntClass::field}.{core::num::+}(n1));
-  self::expect(n0, let final self::IntClass* #t113 = v in #t113.{self::IntClass::field} = #t113.{self::IntClass::field}.{core::num::-}(n2));
-  self::expect(n1, let final self::IntClass* #t114 = v in #t114.{self::IntClass::field} = #t114.{self::IntClass::field}.{core::num::+}(n1));
-  self::expect(n0, let final self::IntClass* #t115 = v in #t115.{self::IntClass::field} = #t115.{self::IntClass::field}.{core::num::-}(n1));
-  self::expect(n1, let final self::IntClass* #t116 = v in #t116.{self::IntClass::field} = #t116.{self::IntClass::field}.{core::num::+}(1));
-  self::expect(n0, let final self::IntClass* #t117 = v in #t117.{self::IntClass::field} = #t117.{self::IntClass::field}.{core::num::-}(1));
-  self::expect(n0, let final self::IntClass* #t118 = v in let final core::int* #t119 = #t118.{self::IntClass::field} in let final core::int* #t120 = #t118.{self::IntClass::field} = #t119.{core::num::+}(1) in #t119);
-  self::expect(n1, let final self::IntClass* #t121 = v in let final core::int* #t122 = #t121.{self::IntClass::field} in let final core::int* #t123 = #t121.{self::IntClass::field} = #t122.{core::num::-}(1) in #t122);
-  self::expect(n0, v.{self::IntClass::field});
-  self::expect(n0, v.{self::IntClass::field});
-  let final self::IntClass* #t124 = v in #t124.{self::IntClass::field} = #t124.{self::IntClass::field}.{core::num::+}(n1);
-  self::expect(n1, v.{self::IntClass::field});
-  let final self::IntClass* #t125 = v in #t125.{self::IntClass::field} = #t125.{self::IntClass::field}.{core::num::+}(n1);
-  self::expect(n2, v.{self::IntClass::field});
-  let final self::IntClass* #t126 = v in #t126.{self::IntClass::field} = #t126.{self::IntClass::field}.{core::num::-}(n2);
-  self::expect(n0, v.{self::IntClass::field});
-  let final self::IntClass* #t127 = v in #t127.{self::IntClass::field} = #t127.{self::IntClass::field}.{core::num::+}(n1);
-  self::expect(n1, v.{self::IntClass::field});
-  let final self::IntClass* #t128 = v in #t128.{self::IntClass::field} = #t128.{self::IntClass::field}.{core::num::-}(n1);
-  self::expect(n0, v.{self::IntClass::field});
-  let final self::IntClass* #t129 = v in #t129.{self::IntClass::field} = #t129.{self::IntClass::field}.{core::num::+}(1);
-  self::expect(n1, v.{self::IntClass::field});
-  let final self::IntClass* #t130 = v in #t130.{self::IntClass::field} = #t130.{self::IntClass::field}.{core::num::-}(1);
-  self::expect(n0, v.{self::IntClass::field});
-  let final self::IntClass* #t131 = v in #t131.{self::IntClass::field} = #t131.{self::IntClass::field}.{core::num::+}(1);
-  self::expect(n1, v.{self::IntClass::field});
-  let final self::IntClass* #t132 = v in #t132.{self::IntClass::field} = #t132.{self::IntClass::field}.{core::num::-}(1);
-  self::expect(n0, v.{self::IntClass::field});
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  self::expect(n1, let final self::IntClass* #t111 = v in #t111.{self::IntClass::field} = #t111.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n2, let final self::IntClass* #t112 = v in #t112.{self::IntClass::field} = #t112.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t113 = v in #t113.{self::IntClass::field} = #t113.{self::IntClass::field}{core::int*}.{core::num::-}(n2){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t114 = v in #t114.{self::IntClass::field} = #t114.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t115 = v in #t115.{self::IntClass::field} = #t115.{self::IntClass::field}{core::int*}.{core::num::-}(n1){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t116 = v in #t116.{self::IntClass::field} = #t116.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t117 = v in #t117.{self::IntClass::field} = #t117.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t118 = v in let final core::int* #t119 = #t118.{self::IntClass::field}{core::int*} in let final core::int* #t120 = #t118.{self::IntClass::field} = #t119.{core::num::+}(1){(core::num*) →* core::int*} in #t119);
+  self::expect(n1, let final self::IntClass* #t121 = v in let final core::int* #t122 = #t121.{self::IntClass::field}{core::int*} in let final core::int* #t123 = #t121.{self::IntClass::field} = #t122.{core::num::-}(1){(core::num*) →* core::int*} in #t122);
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t124 = v in #t124.{self::IntClass::field} = #t124.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
+  self::expect(n1, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t125 = v in #t125.{self::IntClass::field} = #t125.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
+  self::expect(n2, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t126 = v in #t126.{self::IntClass::field} = #t126.{self::IntClass::field}{core::int*}.{core::num::-}(n2){(core::num*) →* core::int*};
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t127 = v in #t127.{self::IntClass::field} = #t127.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
+  self::expect(n1, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t128 = v in #t128.{self::IntClass::field} = #t128.{self::IntClass::field}{core::int*}.{core::num::-}(n1){(core::num*) →* core::int*};
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t129 = v in #t129.{self::IntClass::field} = #t129.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+  self::expect(n1, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t130 = v in #t130.{self::IntClass::field} = #t130.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t131 = v in #t131.{self::IntClass::field} = #t131.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+  self::expect(n1, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t132 = v in #t132.{self::IntClass::field} = #t132.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  self::expect(n1, let final self::IntClass* #t133 = v in let final core::int* #t134 = self::IntClassExtension|get#property(#t133).{core::num::+}(n1) in let final void #t135 = self::IntClassExtension|set#property(#t133, #t134) in #t134);
-  self::expect(n2, let final self::IntClass* #t136 = v in let final core::int* #t137 = self::IntClassExtension|get#property(#t136).{core::num::+}(n1) in let final void #t138 = self::IntClassExtension|set#property(#t136, #t137) in #t137);
-  self::expect(n0, let final self::IntClass* #t139 = v in let final core::int* #t140 = self::IntClassExtension|get#property(#t139).{core::num::-}(n2) in let final void #t141 = self::IntClassExtension|set#property(#t139, #t140) in #t140);
-  self::expect(n1, let final self::IntClass* #t142 = v in let final core::int* #t143 = self::IntClassExtension|get#property(#t142).{core::num::+}(n1) in let final void #t144 = self::IntClassExtension|set#property(#t142, #t143) in #t143);
-  self::expect(n0, let final self::IntClass* #t145 = v in let final core::int* #t146 = self::IntClassExtension|get#property(#t145).{core::num::-}(n1) in let final void #t147 = self::IntClassExtension|set#property(#t145, #t146) in #t146);
-  self::expect(n1, let final self::IntClass* #t148 = v in let final core::int* #t149 = self::IntClassExtension|get#property(#t148).{core::num::+}(1) in let final void #t150 = self::IntClassExtension|set#property(#t148, #t149) in #t149);
-  self::expect(n0, let final self::IntClass* #t151 = v in let final core::int* #t152 = self::IntClassExtension|get#property(#t151).{core::num::-}(1) in let final void #t153 = self::IntClassExtension|set#property(#t151, #t152) in #t152);
-  self::expect(n0, let final self::IntClass* #t154 = v in let final core::int* #t155 = self::IntClassExtension|get#property(#t154) in let final core::int* #t156 = self::IntClassExtension|set#property(#t154, #t155.{core::num::+}(1)) in #t155);
-  self::expect(n1, let final self::IntClass* #t157 = v in let final core::int* #t158 = self::IntClassExtension|get#property(#t157) in let final core::int* #t159 = self::IntClassExtension|set#property(#t157, #t158.{core::num::-}(1)) in #t158);
+  self::expect(n1, let final self::IntClass* #t133 = v in let final core::int* #t134 = self::IntClassExtension|get#property(#t133).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t135 = self::IntClassExtension|set#property(#t133, #t134) in #t134);
+  self::expect(n2, let final self::IntClass* #t136 = v in let final core::int* #t137 = self::IntClassExtension|get#property(#t136).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t138 = self::IntClassExtension|set#property(#t136, #t137) in #t137);
+  self::expect(n0, let final self::IntClass* #t139 = v in let final core::int* #t140 = self::IntClassExtension|get#property(#t139).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t141 = self::IntClassExtension|set#property(#t139, #t140) in #t140);
+  self::expect(n1, let final self::IntClass* #t142 = v in let final core::int* #t143 = self::IntClassExtension|get#property(#t142).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t144 = self::IntClassExtension|set#property(#t142, #t143) in #t143);
+  self::expect(n0, let final self::IntClass* #t145 = v in let final core::int* #t146 = self::IntClassExtension|get#property(#t145).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t147 = self::IntClassExtension|set#property(#t145, #t146) in #t146);
+  self::expect(n1, let final self::IntClass* #t148 = v in let final core::int* #t149 = self::IntClassExtension|get#property(#t148).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t150 = self::IntClassExtension|set#property(#t148, #t149) in #t149);
+  self::expect(n0, let final self::IntClass* #t151 = v in let final core::int* #t152 = self::IntClassExtension|get#property(#t151).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t153 = self::IntClassExtension|set#property(#t151, #t152) in #t152);
+  self::expect(n0, let final self::IntClass* #t154 = v in let final core::int* #t155 = self::IntClassExtension|get#property(#t154) in let final core::int* #t156 = self::IntClassExtension|set#property(#t154, #t155.{core::num::+}(1){(core::num*) →* core::int*}) in #t155);
+  self::expect(n1, let final self::IntClass* #t157 = v in let final core::int* #t158 = self::IntClassExtension|get#property(#t157) in let final core::int* #t159 = self::IntClassExtension|set#property(#t157, #t158.{core::num::-}(1){(core::num*) →* core::int*}) in #t158);
   self::expect(n0, self::IntClassExtension|get#property(v));
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t160 = v in self::IntClassExtension|set#property(#t160, self::IntClassExtension|get#property(#t160).{core::num::+}(n1));
+  let final self::IntClass* #t160 = v in self::IntClassExtension|set#property(#t160, self::IntClassExtension|get#property(#t160).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t161 = v in self::IntClassExtension|set#property(#t161, self::IntClassExtension|get#property(#t161).{core::num::+}(n1));
+  let final self::IntClass* #t161 = v in self::IntClassExtension|set#property(#t161, self::IntClassExtension|get#property(#t161).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n2, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t162 = v in self::IntClassExtension|set#property(#t162, self::IntClassExtension|get#property(#t162).{core::num::-}(n2));
+  let final self::IntClass* #t162 = v in self::IntClassExtension|set#property(#t162, self::IntClassExtension|get#property(#t162).{core::num::-}(n2){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t163 = v in self::IntClassExtension|set#property(#t163, self::IntClassExtension|get#property(#t163).{core::num::+}(n1));
+  let final self::IntClass* #t163 = v in self::IntClassExtension|set#property(#t163, self::IntClassExtension|get#property(#t163).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t164 = v in self::IntClassExtension|set#property(#t164, self::IntClassExtension|get#property(#t164).{core::num::-}(n1));
+  let final self::IntClass* #t164 = v in self::IntClassExtension|set#property(#t164, self::IntClassExtension|get#property(#t164).{core::num::-}(n1){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t165 = v in let final core::int* #t166 = self::IntClassExtension|get#property(#t165).{core::num::+}(1) in let final void #t167 = self::IntClassExtension|set#property(#t165, #t166) in #t166;
+  let final self::IntClass* #t165 = v in let final core::int* #t166 = self::IntClassExtension|get#property(#t165).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t167 = self::IntClassExtension|set#property(#t165, #t166) in #t166;
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t168 = v in let final core::int* #t169 = self::IntClassExtension|get#property(#t168).{core::num::-}(1) in let final void #t170 = self::IntClassExtension|set#property(#t168, #t169) in #t169;
+  let final self::IntClass* #t168 = v in let final core::int* #t169 = self::IntClassExtension|get#property(#t168).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t170 = self::IntClassExtension|set#property(#t168, #t169) in #t169;
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t171 = v in self::IntClassExtension|set#property(#t171, self::IntClassExtension|get#property(#t171).{core::num::+}(1));
+  let final self::IntClass* #t171 = v in self::IntClassExtension|set#property(#t171, self::IntClassExtension|get#property(#t171).{core::num::+}(1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t172 = v in self::IntClassExtension|set#property(#t172, self::IntClassExtension|get#property(#t172).{core::num::-}(1));
+  let final self::IntClass* #t172 = v in self::IntClassExtension|set#property(#t172, self::IntClassExtension|get#property(#t172).{core::num::-}(1){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
 }
 static method testExplicitProperties() → dynamic {
@@ -400,111 +400,111 @@
   core::int* n2 = 2;
   self::IntClass* v = new self::IntClass::•(n0);
   self::expect(n0, self::IntClassExtension|get#property(v));
-  self::expect(n1, let final self::IntClass* #t217 = v in let final core::int* #t218 = self::IntClassExtension|get#property(#t217).{core::num::+}(n1) in let final void #t219 = self::IntClassExtension|set#property(#t217, #t218) in #t218);
-  self::expect(n2, let final self::IntClass* #t220 = v in let final core::int* #t221 = self::IntClassExtension|get#property(#t220).{core::num::+}(n1) in let final void #t222 = self::IntClassExtension|set#property(#t220, #t221) in #t221);
-  self::expect(n0, let final self::IntClass* #t223 = v in let final core::int* #t224 = self::IntClassExtension|get#property(#t223).{core::num::-}(n2) in let final void #t225 = self::IntClassExtension|set#property(#t223, #t224) in #t224);
-  self::expect(n1, let final self::IntClass* #t226 = v in let final core::int* #t227 = self::IntClassExtension|get#property(#t226).{core::num::+}(n1) in let final void #t228 = self::IntClassExtension|set#property(#t226, #t227) in #t227);
-  self::expect(n0, let final self::IntClass* #t229 = v in let final core::int* #t230 = self::IntClassExtension|get#property(#t229).{core::num::-}(n1) in let final void #t231 = self::IntClassExtension|set#property(#t229, #t230) in #t230);
-  self::expect(n1, let final self::IntClass* #t232 = v in let final core::int* #t233 = self::IntClassExtension|get#property(#t232).{core::num::+}(1) in let final void #t234 = self::IntClassExtension|set#property(#t232, #t233) in #t233);
-  self::expect(n0, let final self::IntClass* #t235 = v in let final core::int* #t236 = self::IntClassExtension|get#property(#t235).{core::num::-}(1) in let final void #t237 = self::IntClassExtension|set#property(#t235, #t236) in #t236);
-  self::expect(n0, let final self::IntClass* #t238 = v in let final core::int* #t239 = self::IntClassExtension|get#property(#t238) in let final core::int* #t240 = let final core::int* #t241 = #t239.{core::num::+}(1) in let final void #t242 = self::IntClassExtension|set#property(#t238, #t241) in #t241 in #t239);
-  self::expect(n1, let final self::IntClass* #t243 = v in let final core::int* #t244 = self::IntClassExtension|get#property(#t243) in let final core::int* #t245 = let final core::int* #t246 = #t244.{core::num::-}(1) in let final void #t247 = self::IntClassExtension|set#property(#t243, #t246) in #t246 in #t244);
+  self::expect(n1, let final self::IntClass* #t217 = v in let final core::int* #t218 = self::IntClassExtension|get#property(#t217).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t219 = self::IntClassExtension|set#property(#t217, #t218) in #t218);
+  self::expect(n2, let final self::IntClass* #t220 = v in let final core::int* #t221 = self::IntClassExtension|get#property(#t220).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t222 = self::IntClassExtension|set#property(#t220, #t221) in #t221);
+  self::expect(n0, let final self::IntClass* #t223 = v in let final core::int* #t224 = self::IntClassExtension|get#property(#t223).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t225 = self::IntClassExtension|set#property(#t223, #t224) in #t224);
+  self::expect(n1, let final self::IntClass* #t226 = v in let final core::int* #t227 = self::IntClassExtension|get#property(#t226).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t228 = self::IntClassExtension|set#property(#t226, #t227) in #t227);
+  self::expect(n0, let final self::IntClass* #t229 = v in let final core::int* #t230 = self::IntClassExtension|get#property(#t229).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t231 = self::IntClassExtension|set#property(#t229, #t230) in #t230);
+  self::expect(n1, let final self::IntClass* #t232 = v in let final core::int* #t233 = self::IntClassExtension|get#property(#t232).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t234 = self::IntClassExtension|set#property(#t232, #t233) in #t233);
+  self::expect(n0, let final self::IntClass* #t235 = v in let final core::int* #t236 = self::IntClassExtension|get#property(#t235).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t237 = self::IntClassExtension|set#property(#t235, #t236) in #t236);
+  self::expect(n0, let final self::IntClass* #t238 = v in let final core::int* #t239 = self::IntClassExtension|get#property(#t238) in let final core::int* #t240 = let final core::int* #t241 = #t239.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t242 = self::IntClassExtension|set#property(#t238, #t241) in #t241 in #t239);
+  self::expect(n1, let final self::IntClass* #t243 = v in let final core::int* #t244 = self::IntClassExtension|get#property(#t243) in let final core::int* #t245 = let final core::int* #t246 = #t244.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t247 = self::IntClassExtension|set#property(#t243, #t246) in #t246 in #t244);
   self::expect(n0, self::IntClassExtension|get#property(v));
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t248 = v in self::IntClassExtension|set#property(#t248, self::IntClassExtension|get#property(#t248).{core::num::+}(n1));
+  let final self::IntClass* #t248 = v in self::IntClassExtension|set#property(#t248, self::IntClassExtension|get#property(#t248).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t249 = v in self::IntClassExtension|set#property(#t249, self::IntClassExtension|get#property(#t249).{core::num::+}(n1));
+  let final self::IntClass* #t249 = v in self::IntClassExtension|set#property(#t249, self::IntClassExtension|get#property(#t249).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n2, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t250 = v in self::IntClassExtension|set#property(#t250, self::IntClassExtension|get#property(#t250).{core::num::-}(n2));
+  let final self::IntClass* #t250 = v in self::IntClassExtension|set#property(#t250, self::IntClassExtension|get#property(#t250).{core::num::-}(n2){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t251 = v in self::IntClassExtension|set#property(#t251, self::IntClassExtension|get#property(#t251).{core::num::+}(n1));
+  let final self::IntClass* #t251 = v in self::IntClassExtension|set#property(#t251, self::IntClassExtension|get#property(#t251).{core::num::+}(n1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t252 = v in self::IntClassExtension|set#property(#t252, self::IntClassExtension|get#property(#t252).{core::num::-}(n1));
+  let final self::IntClass* #t252 = v in self::IntClassExtension|set#property(#t252, self::IntClassExtension|get#property(#t252).{core::num::-}(n1){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t253 = v in let final core::int* #t254 = self::IntClassExtension|get#property(#t253).{core::num::+}(1) in let final void #t255 = self::IntClassExtension|set#property(#t253, #t254) in #t254;
+  let final self::IntClass* #t253 = v in let final core::int* #t254 = self::IntClassExtension|get#property(#t253).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t255 = self::IntClassExtension|set#property(#t253, #t254) in #t254;
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t256 = v in let final core::int* #t257 = self::IntClassExtension|get#property(#t256).{core::num::-}(1) in let final void #t258 = self::IntClassExtension|set#property(#t256, #t257) in #t257;
+  let final self::IntClass* #t256 = v in let final core::int* #t257 = self::IntClassExtension|get#property(#t256).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t258 = self::IntClassExtension|set#property(#t256, #t257) in #t257;
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t259 = v in self::IntClassExtension|set#property(#t259, self::IntClassExtension|get#property(#t259).{core::num::+}(1));
+  let final self::IntClass* #t259 = v in self::IntClassExtension|set#property(#t259, self::IntClassExtension|get#property(#t259).{core::num::+}(1){(core::num*) →* core::int*});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t260 = v in self::IntClassExtension|set#property(#t260, self::IntClassExtension|get#property(#t260).{core::num::-}(1));
+  let final self::IntClass* #t260 = v in self::IntClassExtension|set#property(#t260, self::IntClassExtension|get#property(#t260).{core::num::-}(1){(core::num*) →* core::int*});
   self::expect(n0, self::IntClassExtension|get#property(v));
 }
 static method testExplicitNullAwareProperties(self::Class* v) → dynamic {
   self::Number* n0 = new self::Number::•(0);
   self::Number* n1 = new self::Number::•(1);
   self::Number* n2 = new self::Number::•(2);
-  self::expect(n0, let final self::Class* #t261 = v in #t261.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t261), v.{self::Class::==}(null));
-  self::expect(n1, let final self::Class* #t262 = v in #t262.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t263 = self::NumberExtension|+(self::ClassExtension|get#property(#t262), n1) in let final void #t264 = self::ClassExtension|set#property(#t262, #t263) in #t263, v.{self::Class::==}(null));
-  self::expect(n2, let final self::Class* #t265 = v in #t265.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t266 = self::NumberExtension|+(self::ClassExtension|get#property(#t265), n1) in let final void #t267 = self::ClassExtension|set#property(#t265, #t266) in #t266, v.{self::Class::==}(null));
-  self::expect(n0, let final self::Class* #t268 = v in #t268.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t269 = self::NumberExtension|-(self::ClassExtension|get#property(#t268), n2) in let final void #t270 = self::ClassExtension|set#property(#t268, #t269) in #t269, v.{self::Class::==}(null));
-  self::expect(n1, let final self::Class* #t271 = v in #t271.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t272 = self::NumberExtension|+(self::ClassExtension|get#property(#t271), n1) in let final void #t273 = self::ClassExtension|set#property(#t271, #t272) in #t272, v.{self::Class::==}(null));
-  self::expect(n0, let final self::Class* #t274 = v in #t274.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t275 = self::NumberExtension|-(self::ClassExtension|get#property(#t274), n1) in let final void #t276 = self::ClassExtension|set#property(#t274, #t275) in #t275, v.{self::Class::==}(null));
-  self::expect(n1, let final self::Class* #t277 = v in #t277.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t278 = self::NumberExtension|+(self::ClassExtension|get#property(#t277), 1) in let final void #t279 = self::ClassExtension|set#property(#t277, #t278) in #t278, v.{self::Class::==}(null));
-  self::expect(n0, let final self::Class* #t280 = v in #t280.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t281 = self::NumberExtension|-(self::ClassExtension|get#property(#t280), 1) in let final void #t282 = self::ClassExtension|set#property(#t280, #t281) in #t281, v.{self::Class::==}(null));
-  self::expect(n0, let final self::Class* #t283 = v in #t283.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t284 = self::ClassExtension|get#property(#t283) in let final self::Number* #t285 = let final self::Number* #t286 = self::NumberExtension|+(#t284, 1) in let final void #t287 = self::ClassExtension|set#property(#t283, #t286) in #t286 in #t284, v.{self::Class::==}(null));
-  self::expect(n1, let final self::Class* #t288 = v in #t288.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t289 = self::ClassExtension|get#property(#t288) in let final self::Number* #t290 = let final self::Number* #t291 = self::NumberExtension|-(#t289, 1) in let final void #t292 = self::ClassExtension|set#property(#t288, #t291) in #t291 in #t289, v.{self::Class::==}(null));
-  self::expect(n0, let final self::Class* #t293 = v in #t293.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t293), v.{self::Class::==}(null));
-  self::expect(n0, let final self::Class* #t294 = v in #t294.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t294), v.{self::Class::==}(null));
-  let final self::Class* #t295 = v in #t295.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t295, self::NumberExtension|+(self::ClassExtension|get#property(#t295), n1));
-  self::expect(n1, let final self::Class* #t296 = v in #t296.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t296), v.{self::Class::==}(null));
-  let final self::Class* #t297 = v in #t297.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t297, self::NumberExtension|+(self::ClassExtension|get#property(#t297), n1));
-  self::expect(n2, let final self::Class* #t298 = v in #t298.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t298), v.{self::Class::==}(null));
-  let final self::Class* #t299 = v in #t299.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t299, self::NumberExtension|-(self::ClassExtension|get#property(#t299), n2));
-  self::expect(n0, let final self::Class* #t300 = v in #t300.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t300), v.{self::Class::==}(null));
-  let final self::Class* #t301 = v in #t301.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t301, self::NumberExtension|+(self::ClassExtension|get#property(#t301), n1));
-  self::expect(n1, let final self::Class* #t302 = v in #t302.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t302), v.{self::Class::==}(null));
-  let final self::Class* #t303 = v in #t303.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t303, self::NumberExtension|-(self::ClassExtension|get#property(#t303), n1));
-  self::expect(n0, let final self::Class* #t304 = v in #t304.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t304), v.{self::Class::==}(null));
-  let final self::Class* #t305 = v in #t305.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t306 = self::NumberExtension|+(self::ClassExtension|get#property(#t305), 1) in let final void #t307 = self::ClassExtension|set#property(#t305, #t306) in #t306;
-  self::expect(n1, let final self::Class* #t308 = v in #t308.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t308), v.{self::Class::==}(null));
-  let final self::Class* #t309 = v in #t309.{self::Class::==}(null) ?{self::Number*} null : let final self::Number* #t310 = self::NumberExtension|-(self::ClassExtension|get#property(#t309), 1) in let final void #t311 = self::ClassExtension|set#property(#t309, #t310) in #t310;
-  self::expect(n0, let final self::Class* #t312 = v in #t312.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t312), v.{self::Class::==}(null));
-  let final self::Class* #t313 = v in #t313.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t313, self::NumberExtension|+(self::ClassExtension|get#property(#t313), 1));
-  self::expect(n1, let final self::Class* #t314 = v in #t314.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t314), v.{self::Class::==}(null));
-  let final self::Class* #t315 = v in #t315.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|set#property(#t315, self::NumberExtension|-(self::ClassExtension|get#property(#t315), 1));
-  self::expect(n0, let final self::Class* #t316 = v in #t316.{self::Class::==}(null) ?{self::Number*} null : self::ClassExtension|get#property(#t316), v.{self::Class::==}(null));
+  self::expect(n0, let final self::Class* #t261 = v in #t261 == null ?{self::Number*} null : self::ClassExtension|get#property(#t261), v == null);
+  self::expect(n1, let final self::Class* #t262 = v in #t262 == null ?{self::Number*} null : let final self::Number* #t263 = self::NumberExtension|+(self::ClassExtension|get#property(#t262), n1) in let final void #t264 = self::ClassExtension|set#property(#t262, #t263) in #t263, v == null);
+  self::expect(n2, let final self::Class* #t265 = v in #t265 == null ?{self::Number*} null : let final self::Number* #t266 = self::NumberExtension|+(self::ClassExtension|get#property(#t265), n1) in let final void #t267 = self::ClassExtension|set#property(#t265, #t266) in #t266, v == null);
+  self::expect(n0, let final self::Class* #t268 = v in #t268 == null ?{self::Number*} null : let final self::Number* #t269 = self::NumberExtension|-(self::ClassExtension|get#property(#t268), n2) in let final void #t270 = self::ClassExtension|set#property(#t268, #t269) in #t269, v == null);
+  self::expect(n1, let final self::Class* #t271 = v in #t271 == null ?{self::Number*} null : let final self::Number* #t272 = self::NumberExtension|+(self::ClassExtension|get#property(#t271), n1) in let final void #t273 = self::ClassExtension|set#property(#t271, #t272) in #t272, v == null);
+  self::expect(n0, let final self::Class* #t274 = v in #t274 == null ?{self::Number*} null : let final self::Number* #t275 = self::NumberExtension|-(self::ClassExtension|get#property(#t274), n1) in let final void #t276 = self::ClassExtension|set#property(#t274, #t275) in #t275, v == null);
+  self::expect(n1, let final self::Class* #t277 = v in #t277 == null ?{self::Number*} null : let final self::Number* #t278 = self::NumberExtension|+(self::ClassExtension|get#property(#t277), 1) in let final void #t279 = self::ClassExtension|set#property(#t277, #t278) in #t278, v == null);
+  self::expect(n0, let final self::Class* #t280 = v in #t280 == null ?{self::Number*} null : let final self::Number* #t281 = self::NumberExtension|-(self::ClassExtension|get#property(#t280), 1) in let final void #t282 = self::ClassExtension|set#property(#t280, #t281) in #t281, v == null);
+  self::expect(n0, let final self::Class* #t283 = v in #t283 == null ?{self::Number*} null : let final self::Number* #t284 = self::ClassExtension|get#property(#t283) in let final self::Number* #t285 = let final self::Number* #t286 = self::NumberExtension|+(#t284, 1) in let final void #t287 = self::ClassExtension|set#property(#t283, #t286) in #t286 in #t284, v == null);
+  self::expect(n1, let final self::Class* #t288 = v in #t288 == null ?{self::Number*} null : let final self::Number* #t289 = self::ClassExtension|get#property(#t288) in let final self::Number* #t290 = let final self::Number* #t291 = self::NumberExtension|-(#t289, 1) in let final void #t292 = self::ClassExtension|set#property(#t288, #t291) in #t291 in #t289, v == null);
+  self::expect(n0, let final self::Class* #t293 = v in #t293 == null ?{self::Number*} null : self::ClassExtension|get#property(#t293), v == null);
+  self::expect(n0, let final self::Class* #t294 = v in #t294 == null ?{self::Number*} null : self::ClassExtension|get#property(#t294), v == null);
+  let final self::Class* #t295 = v in #t295 == null ?{self::Number*} null : self::ClassExtension|set#property(#t295, self::NumberExtension|+(self::ClassExtension|get#property(#t295), n1));
+  self::expect(n1, let final self::Class* #t296 = v in #t296 == null ?{self::Number*} null : self::ClassExtension|get#property(#t296), v == null);
+  let final self::Class* #t297 = v in #t297 == null ?{self::Number*} null : self::ClassExtension|set#property(#t297, self::NumberExtension|+(self::ClassExtension|get#property(#t297), n1));
+  self::expect(n2, let final self::Class* #t298 = v in #t298 == null ?{self::Number*} null : self::ClassExtension|get#property(#t298), v == null);
+  let final self::Class* #t299 = v in #t299 == null ?{self::Number*} null : self::ClassExtension|set#property(#t299, self::NumberExtension|-(self::ClassExtension|get#property(#t299), n2));
+  self::expect(n0, let final self::Class* #t300 = v in #t300 == null ?{self::Number*} null : self::ClassExtension|get#property(#t300), v == null);
+  let final self::Class* #t301 = v in #t301 == null ?{self::Number*} null : self::ClassExtension|set#property(#t301, self::NumberExtension|+(self::ClassExtension|get#property(#t301), n1));
+  self::expect(n1, let final self::Class* #t302 = v in #t302 == null ?{self::Number*} null : self::ClassExtension|get#property(#t302), v == null);
+  let final self::Class* #t303 = v in #t303 == null ?{self::Number*} null : self::ClassExtension|set#property(#t303, self::NumberExtension|-(self::ClassExtension|get#property(#t303), n1));
+  self::expect(n0, let final self::Class* #t304 = v in #t304 == null ?{self::Number*} null : self::ClassExtension|get#property(#t304), v == null);
+  let final self::Class* #t305 = v in #t305 == null ?{self::Number*} null : let final self::Number* #t306 = self::NumberExtension|+(self::ClassExtension|get#property(#t305), 1) in let final void #t307 = self::ClassExtension|set#property(#t305, #t306) in #t306;
+  self::expect(n1, let final self::Class* #t308 = v in #t308 == null ?{self::Number*} null : self::ClassExtension|get#property(#t308), v == null);
+  let final self::Class* #t309 = v in #t309 == null ?{self::Number*} null : let final self::Number* #t310 = self::NumberExtension|-(self::ClassExtension|get#property(#t309), 1) in let final void #t311 = self::ClassExtension|set#property(#t309, #t310) in #t310;
+  self::expect(n0, let final self::Class* #t312 = v in #t312 == null ?{self::Number*} null : self::ClassExtension|get#property(#t312), v == null);
+  let final self::Class* #t313 = v in #t313 == null ?{self::Number*} null : self::ClassExtension|set#property(#t313, self::NumberExtension|+(self::ClassExtension|get#property(#t313), 1));
+  self::expect(n1, let final self::Class* #t314 = v in #t314 == null ?{self::Number*} null : self::ClassExtension|get#property(#t314), v == null);
+  let final self::Class* #t315 = v in #t315 == null ?{self::Number*} null : self::ClassExtension|set#property(#t315, self::NumberExtension|-(self::ClassExtension|get#property(#t315), 1));
+  self::expect(n0, let final self::Class* #t316 = v in #t316 == null ?{self::Number*} null : self::ClassExtension|get#property(#t316), v == null);
 }
 static method testExplicitNullAwareIntProperties(self::IntClass* v) → dynamic {
   core::int* n0 = 0;
   core::int* n1 = 1;
   core::int* n2 = 2;
-  self::expect(n0, let final self::IntClass* #t317 = v in #t317.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t317), v.{self::IntClass::==}(null));
-  self::expect(n1, let final self::IntClass* #t318 = v in #t318.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t319 = self::IntClassExtension|get#property(#t318).{core::num::+}(n1) in let final void #t320 = self::IntClassExtension|set#property(#t318, #t319) in #t319, v.{self::IntClass::==}(null));
-  self::expect(n2, let final self::IntClass* #t321 = v in #t321.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t322 = self::IntClassExtension|get#property(#t321).{core::num::+}(n1) in let final void #t323 = self::IntClassExtension|set#property(#t321, #t322) in #t322, v.{self::IntClass::==}(null));
-  self::expect(n0, let final self::IntClass* #t324 = v in #t324.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t325 = self::IntClassExtension|get#property(#t324).{core::num::-}(n2) in let final void #t326 = self::IntClassExtension|set#property(#t324, #t325) in #t325, v.{self::IntClass::==}(null));
-  self::expect(n1, let final self::IntClass* #t327 = v in #t327.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t328 = self::IntClassExtension|get#property(#t327).{core::num::+}(n1) in let final void #t329 = self::IntClassExtension|set#property(#t327, #t328) in #t328, v.{self::IntClass::==}(null));
-  self::expect(n0, let final self::IntClass* #t330 = v in #t330.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t331 = self::IntClassExtension|get#property(#t330).{core::num::-}(n1) in let final void #t332 = self::IntClassExtension|set#property(#t330, #t331) in #t331, v.{self::IntClass::==}(null));
-  self::expect(n1, let final self::IntClass* #t333 = v in #t333.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t334 = self::IntClassExtension|get#property(#t333).{core::num::+}(1) in let final void #t335 = self::IntClassExtension|set#property(#t333, #t334) in #t334, v.{self::IntClass::==}(null));
-  self::expect(n0, let final self::IntClass* #t336 = v in #t336.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t337 = self::IntClassExtension|get#property(#t336).{core::num::-}(1) in let final void #t338 = self::IntClassExtension|set#property(#t336, #t337) in #t337, v.{self::IntClass::==}(null));
-  self::expect(n0, let final self::IntClass* #t339 = v in #t339.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t340 = self::IntClassExtension|get#property(#t339) in let final core::int* #t341 = let final core::int* #t342 = #t340.{core::num::+}(1) in let final void #t343 = self::IntClassExtension|set#property(#t339, #t342) in #t342 in #t340, v.{self::IntClass::==}(null));
-  self::expect(n1, let final self::IntClass* #t344 = v in #t344.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t345 = self::IntClassExtension|get#property(#t344) in let final core::int* #t346 = let final core::int* #t347 = #t345.{core::num::-}(1) in let final void #t348 = self::IntClassExtension|set#property(#t344, #t347) in #t347 in #t345, v.{self::IntClass::==}(null));
-  self::expect(n0, let final self::IntClass* #t349 = v in #t349.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t349), v.{self::IntClass::==}(null));
-  self::expect(n0, let final self::IntClass* #t350 = v in #t350.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t350), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t351 = v in #t351.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t351, self::IntClassExtension|get#property(#t351).{core::num::+}(n1));
-  self::expect(n1, let final self::IntClass* #t352 = v in #t352.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t352), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t353 = v in #t353.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t353, self::IntClassExtension|get#property(#t353).{core::num::+}(n1));
-  self::expect(n2, let final self::IntClass* #t354 = v in #t354.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t354), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t355 = v in #t355.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t355, self::IntClassExtension|get#property(#t355).{core::num::-}(n2));
-  self::expect(n0, let final self::IntClass* #t356 = v in #t356.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t356), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t357 = v in #t357.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t357, self::IntClassExtension|get#property(#t357).{core::num::+}(n1));
-  self::expect(n1, let final self::IntClass* #t358 = v in #t358.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t358), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t359 = v in #t359.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t359, self::IntClassExtension|get#property(#t359).{core::num::-}(n1));
-  self::expect(n0, let final self::IntClass* #t360 = v in #t360.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t360), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t361 = v in #t361.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t362 = self::IntClassExtension|get#property(#t361).{core::num::+}(1) in let final void #t363 = self::IntClassExtension|set#property(#t361, #t362) in #t362;
-  self::expect(n1, let final self::IntClass* #t364 = v in #t364.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t364), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t365 = v in #t365.{self::IntClass::==}(null) ?{core::int*} null : let final core::int* #t366 = self::IntClassExtension|get#property(#t365).{core::num::-}(1) in let final void #t367 = self::IntClassExtension|set#property(#t365, #t366) in #t366;
-  self::expect(n0, let final self::IntClass* #t368 = v in #t368.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t368), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t369 = v in #t369.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t369, self::IntClassExtension|get#property(#t369).{core::num::+}(1));
-  self::expect(n1, let final self::IntClass* #t370 = v in #t370.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t370), v.{self::IntClass::==}(null));
-  let final self::IntClass* #t371 = v in #t371.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|set#property(#t371, self::IntClassExtension|get#property(#t371).{core::num::-}(1));
-  self::expect(n0, let final self::IntClass* #t372 = v in #t372.{self::IntClass::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t372), v.{self::IntClass::==}(null));
+  self::expect(n0, let final self::IntClass* #t317 = v in #t317 == null ?{core::int*} null : self::IntClassExtension|get#property(#t317), v == null);
+  self::expect(n1, let final self::IntClass* #t318 = v in #t318 == null ?{core::int*} null : let final core::int* #t319 = self::IntClassExtension|get#property(#t318).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t320 = self::IntClassExtension|set#property(#t318, #t319) in #t319, v == null);
+  self::expect(n2, let final self::IntClass* #t321 = v in #t321 == null ?{core::int*} null : let final core::int* #t322 = self::IntClassExtension|get#property(#t321).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t323 = self::IntClassExtension|set#property(#t321, #t322) in #t322, v == null);
+  self::expect(n0, let final self::IntClass* #t324 = v in #t324 == null ?{core::int*} null : let final core::int* #t325 = self::IntClassExtension|get#property(#t324).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t326 = self::IntClassExtension|set#property(#t324, #t325) in #t325, v == null);
+  self::expect(n1, let final self::IntClass* #t327 = v in #t327 == null ?{core::int*} null : let final core::int* #t328 = self::IntClassExtension|get#property(#t327).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t329 = self::IntClassExtension|set#property(#t327, #t328) in #t328, v == null);
+  self::expect(n0, let final self::IntClass* #t330 = v in #t330 == null ?{core::int*} null : let final core::int* #t331 = self::IntClassExtension|get#property(#t330).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t332 = self::IntClassExtension|set#property(#t330, #t331) in #t331, v == null);
+  self::expect(n1, let final self::IntClass* #t333 = v in #t333 == null ?{core::int*} null : let final core::int* #t334 = self::IntClassExtension|get#property(#t333).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t335 = self::IntClassExtension|set#property(#t333, #t334) in #t334, v == null);
+  self::expect(n0, let final self::IntClass* #t336 = v in #t336 == null ?{core::int*} null : let final core::int* #t337 = self::IntClassExtension|get#property(#t336).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t338 = self::IntClassExtension|set#property(#t336, #t337) in #t337, v == null);
+  self::expect(n0, let final self::IntClass* #t339 = v in #t339 == null ?{core::int*} null : let final core::int* #t340 = self::IntClassExtension|get#property(#t339) in let final core::int* #t341 = let final core::int* #t342 = #t340.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t343 = self::IntClassExtension|set#property(#t339, #t342) in #t342 in #t340, v == null);
+  self::expect(n1, let final self::IntClass* #t344 = v in #t344 == null ?{core::int*} null : let final core::int* #t345 = self::IntClassExtension|get#property(#t344) in let final core::int* #t346 = let final core::int* #t347 = #t345.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t348 = self::IntClassExtension|set#property(#t344, #t347) in #t347 in #t345, v == null);
+  self::expect(n0, let final self::IntClass* #t349 = v in #t349 == null ?{core::int*} null : self::IntClassExtension|get#property(#t349), v == null);
+  self::expect(n0, let final self::IntClass* #t350 = v in #t350 == null ?{core::int*} null : self::IntClassExtension|get#property(#t350), v == null);
+  let final self::IntClass* #t351 = v in #t351 == null ?{core::int*} null : self::IntClassExtension|set#property(#t351, self::IntClassExtension|get#property(#t351).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t352 = v in #t352 == null ?{core::int*} null : self::IntClassExtension|get#property(#t352), v == null);
+  let final self::IntClass* #t353 = v in #t353 == null ?{core::int*} null : self::IntClassExtension|set#property(#t353, self::IntClassExtension|get#property(#t353).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n2, let final self::IntClass* #t354 = v in #t354 == null ?{core::int*} null : self::IntClassExtension|get#property(#t354), v == null);
+  let final self::IntClass* #t355 = v in #t355 == null ?{core::int*} null : self::IntClassExtension|set#property(#t355, self::IntClassExtension|get#property(#t355).{core::num::-}(n2){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t356 = v in #t356 == null ?{core::int*} null : self::IntClassExtension|get#property(#t356), v == null);
+  let final self::IntClass* #t357 = v in #t357 == null ?{core::int*} null : self::IntClassExtension|set#property(#t357, self::IntClassExtension|get#property(#t357).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t358 = v in #t358 == null ?{core::int*} null : self::IntClassExtension|get#property(#t358), v == null);
+  let final self::IntClass* #t359 = v in #t359 == null ?{core::int*} null : self::IntClassExtension|set#property(#t359, self::IntClassExtension|get#property(#t359).{core::num::-}(n1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t360 = v in #t360 == null ?{core::int*} null : self::IntClassExtension|get#property(#t360), v == null);
+  let final self::IntClass* #t361 = v in #t361 == null ?{core::int*} null : let final core::int* #t362 = self::IntClassExtension|get#property(#t361).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t363 = self::IntClassExtension|set#property(#t361, #t362) in #t362;
+  self::expect(n1, let final self::IntClass* #t364 = v in #t364 == null ?{core::int*} null : self::IntClassExtension|get#property(#t364), v == null);
+  let final self::IntClass* #t365 = v in #t365 == null ?{core::int*} null : let final core::int* #t366 = self::IntClassExtension|get#property(#t365).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t367 = self::IntClassExtension|set#property(#t365, #t366) in #t366;
+  self::expect(n0, let final self::IntClass* #t368 = v in #t368 == null ?{core::int*} null : self::IntClassExtension|get#property(#t368), v == null);
+  let final self::IntClass* #t369 = v in #t369 == null ?{core::int*} null : self::IntClassExtension|set#property(#t369, self::IntClassExtension|get#property(#t369).{core::num::+}(1){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t370 = v in #t370 == null ?{core::int*} null : self::IntClassExtension|get#property(#t370), v == null);
+  let final self::IntClass* #t371 = v in #t371 == null ?{core::int*} null : self::IntClassExtension|set#property(#t371, self::IntClassExtension|get#property(#t371).{core::num::-}(1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t372 = v in #t372 == null ?{core::int*} null : self::IntClassExtension|get#property(#t372), v == null);
 }
 static method expect(dynamic expected, dynamic actual, [dynamic expectNull = #C1]) → dynamic {
   if(expectNull as{TypeError,ForDynamic} core::bool*) {
     expected = null;
   }
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.expect
index fa3307c..96b1de2 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.expect
@@ -60,13 +60,13 @@
   return "Foo";
 static method main() → dynamic {
   core::int* value;
-  self::expect(true, "".{core::Object::noSuchMethod} is core::Function*);
+  self::expect(true, "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} is core::Function*);
   value = self::Extension|get#noSuchMethod("");
   self::Extension|set#hashCode("", 42);
-  self::expect(true, "".{core::Object::runtimeType} is core::Type*);
+  self::expect(true, "".{core::Object::runtimeType}{core::Type*} is core::Type*);
   self::expect(true, self::Extension|get#runtimeType("") is core::Function*);
   value = self::Extension|runtimeType("");
-  self::expect(true, "".{core::String::==}(""));
+  self::expect(true, "" =={core::String::==}{(core::Object*) →* core::bool*} "");
   self::expect("Foo", self::Extension|toString());
 }
 static method errors() → dynamic {
@@ -74,7 +74,7 @@
   value = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:27:14: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'int'.
  - 'Invocation' is from 'dart:core'.
   value = \"\".noSuchMethod;
-             ^" in "".{core::Object::noSuchMethod} as{TypeError} core::int*;
+             ^" in "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} as{TypeError} core::int*;
   invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:28:6: Error: The setter 'hashCode' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'hashCode'.
   \"\".hashCode = 42;
@@ -82,10 +82,10 @@
   value = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:29:14: Error: A value of type 'Type' can't be assigned to a variable of type 'int'.
  - 'Type' is from 'dart:core'.
   value = \"\".runtimeType;
-             ^" in "".{core::Object::runtimeType} as{TypeError} core::int*;
+             ^" in "".{core::Object::runtimeType}{core::Type*} as{TypeError} core::int*;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.transformed.expect
index 7134ac1..5c1250b 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.transformed.expect
@@ -60,13 +60,13 @@
   return "Foo";
 static method main() → dynamic {
   core::int* value;
-  self::expect(true, "".{core::Object::noSuchMethod} is core::Function*);
+  self::expect(true, "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} is core::Function*);
   value = self::Extension|get#noSuchMethod("");
   self::Extension|set#hashCode("", 42);
-  self::expect(true, "".{core::Object::runtimeType} is core::Type*);
+  self::expect(true, "".{core::Object::runtimeType}{core::Type*} is core::Type*);
   self::expect(true, self::Extension|get#runtimeType("") is core::Function*);
   value = self::Extension|runtimeType("");
-  self::expect(true, "".{core::String::==}(""));
+  self::expect(true, "" =={core::String::==}{(core::Object*) →* core::bool*} "");
   self::expect("Foo", self::Extension|toString());
 }
 static method errors() → dynamic {
@@ -74,7 +74,7 @@
   value = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:27:14: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'int'.
  - 'Invocation' is from 'dart:core'.
   value = \"\".noSuchMethod;
-             ^" in "".{core::Object::noSuchMethod} as{TypeError} core::int*;
+             ^" in "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} as{TypeError} core::int*;
   invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:28:6: Error: The setter 'hashCode' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'hashCode'.
   \"\".hashCode = 42;
@@ -82,15 +82,15 @@
   value = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:29:14: Error: A value of type 'Type' can't be assigned to a variable of type 'int'.
  - 'Type' is from 'dart:core'.
   value = \"\".runtimeType;
-             ^" in "".{core::Object::runtimeType} as{TypeError} core::int*;
+             ^" in "".{core::Object::runtimeType}{core::Type*} as{TypeError} core::int*;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///conflict_with_object.dart:21:19 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///conflict_with_object.dart:21:19 -> BoolConstant(true)
 Extra constant evaluation: evaluated: 37, effectively constant: 1
diff --git a/pkg/front_end/testcases/extensions/default_values.dart.weak.expect b/pkg/front_end/testcases/extensions/default_values.dart.weak.expect
index 3c37068..f4256f5 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/default_values.dart.weak.expect
@@ -41,7 +41,7 @@
 static method Extension|get#method2(lowered final self::Class* #this) → ({b: dynamic}) →* dynamic
   return ({dynamic b = #C3}) → dynamic => self::Extension|method2(#this, b: b);
 static method Extension|method3(lowered final self::Class* #this, {dynamic c = #C4}) → dynamic
-  return c.call();
+  return c{dynamic}.call();
 static method Extension|get#method3(lowered final self::Class* #this) → ({c: dynamic}) →* dynamic
   return ({dynamic c = #C4}) → dynamic => self::Extension|method3(#this, c: c);
 static method Extension|staticMethod() → dynamic
@@ -49,20 +49,20 @@
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
   ([dynamic]) →* dynamic tearOff0 = self::Extension|get#method0(c);
-  self::expect(0, tearOff0.call(0));
-  self::expect(null, tearOff0.call());
+  self::expect(0, tearOff0(0){([dynamic]) →* dynamic});
+  self::expect(null, tearOff0(){([dynamic]) →* dynamic});
   ([dynamic]) →* dynamic tearOff1 = self::Extension|get#method1(c);
-  self::expect(0, tearOff1.call(0));
-  self::expect(42, tearOff1.call());
+  self::expect(0, tearOff1(0){([dynamic]) →* dynamic});
+  self::expect(42, tearOff1(){([dynamic]) →* dynamic});
   ({b: dynamic}) →* dynamic tearOff2 = self::Extension|get#method2(c);
-  self::expect(0, tearOff2.call(b: 0));
-  self::expect(87, tearOff2.call());
+  self::expect(0, tearOff2(b: 0){({b: dynamic}) →* dynamic});
+  self::expect(87, tearOff2(){({b: dynamic}) →* dynamic});
   ({c: dynamic}) →* dynamic tearOff3 = self::Extension|get#method3(c);
-  self::expect(0, tearOff3.call(c: () → core::int* => 0));
-  self::expect(123, tearOff3.call());
+  self::expect(0, tearOff3(c: () → core::int* => 0){({c: dynamic}) →* dynamic});
+  self::expect(123, tearOff3(){({c: dynamic}) →* dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/default_values.dart.weak.transformed.expect
index 3c37068..f4256f5 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/default_values.dart.weak.transformed.expect
@@ -41,7 +41,7 @@
 static method Extension|get#method2(lowered final self::Class* #this) → ({b: dynamic}) →* dynamic
   return ({dynamic b = #C3}) → dynamic => self::Extension|method2(#this, b: b);
 static method Extension|method3(lowered final self::Class* #this, {dynamic c = #C4}) → dynamic
-  return c.call();
+  return c{dynamic}.call();
 static method Extension|get#method3(lowered final self::Class* #this) → ({c: dynamic}) →* dynamic
   return ({dynamic c = #C4}) → dynamic => self::Extension|method3(#this, c: c);
 static method Extension|staticMethod() → dynamic
@@ -49,20 +49,20 @@
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
   ([dynamic]) →* dynamic tearOff0 = self::Extension|get#method0(c);
-  self::expect(0, tearOff0.call(0));
-  self::expect(null, tearOff0.call());
+  self::expect(0, tearOff0(0){([dynamic]) →* dynamic});
+  self::expect(null, tearOff0(){([dynamic]) →* dynamic});
   ([dynamic]) →* dynamic tearOff1 = self::Extension|get#method1(c);
-  self::expect(0, tearOff1.call(0));
-  self::expect(42, tearOff1.call());
+  self::expect(0, tearOff1(0){([dynamic]) →* dynamic});
+  self::expect(42, tearOff1(){([dynamic]) →* dynamic});
   ({b: dynamic}) →* dynamic tearOff2 = self::Extension|get#method2(c);
-  self::expect(0, tearOff2.call(b: 0));
-  self::expect(87, tearOff2.call());
+  self::expect(0, tearOff2(b: 0){({b: dynamic}) →* dynamic});
+  self::expect(87, tearOff2(){({b: dynamic}) →* dynamic});
   ({c: dynamic}) →* dynamic tearOff3 = self::Extension|get#method3(c);
-  self::expect(0, tearOff3.call(c: () → core::int* => 0));
-  self::expect(123, tearOff3.call());
+  self::expect(0, tearOff3(c: () → core::int* => 0){({c: dynamic}) →* dynamic});
+  self::expect(123, tearOff3(){({c: dynamic}) →* dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.expect
index eb88dad..a3e0d9a 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.expect
@@ -25,7 +25,7 @@
   self::expect(87, let final dynamic #t11 = CheckLibraryIsLoaded(prefix) in def::Extension|staticMethod());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
@@ -53,12 +53,12 @@
 static method Extension|staticMethod() → core::int*
   return def::Extension|staticField;
 static method Extension|get#property(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField);
+  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
 static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
   def::Extension|staticField = value;
 }
 static method Extension|method(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField);
+  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
 static method Extension|get#method(lowered final core::int* #this) → () →* core::int*
   return () → core::int* => def::Extension|method(#this);
 static get topLevelProperty() → core::int*
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
index 9a7758f..c7560fa 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
@@ -51,7 +51,7 @@
   return :async_future;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
@@ -79,12 +79,12 @@
 static method Extension|staticMethod() → core::int*
   return def::Extension|staticField;
 static method Extension|get#property(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField);
+  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
 static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
   def::Extension|staticField = value;
 }
 static method Extension|method(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField);
+  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
 static method Extension|get#method(lowered final core::int* #this) → () →* core::int*
   return () → core::int* => def::Extension|method(#this);
 static get topLevelProperty() → core::int*
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.expect
index 614cb6f..ddd41d6 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.expect
@@ -16,7 +16,7 @@
   self::expect(87, let final dynamic #t7 = CheckLibraryIsLoaded(prefix) in def::topLevelMethod());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
@@ -44,12 +44,12 @@
 static method Extension|staticMethod() → core::int*
   return def::Extension|staticField;
 static method Extension|get#property(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField);
+  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
 static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
   def::Extension|staticField = value;
 }
 static method Extension|method(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField);
+  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
 static method Extension|get#method(lowered final core::int* #this) → () →* core::int*
   return () → core::int* => def::Extension|method(#this);
 static get topLevelProperty() → core::int*
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
index 41815d4..86a95a1 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
@@ -42,7 +42,7 @@
   return :async_future;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
@@ -70,12 +70,12 @@
 static method Extension|staticMethod() → core::int*
   return def::Extension|staticField;
 static method Extension|get#property(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField);
+  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
 static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
   def::Extension|staticField = value;
 }
 static method Extension|method(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField);
+  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
 static method Extension|get#method(lowered final core::int* #this) → () →* core::int*
   return () → core::int* => def::Extension|method(#this);
 static get topLevelProperty() → core::int*
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.expect
index 394a69b3..9db4ca6 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.expect
@@ -116,7 +116,7 @@
 static method Extension|get#tearOffGetterNamed(lowered final self::Class* #this) → dynamic
   return self::Extension|get#writeSetterNamed(#this);
 static method Extension|get#property(lowered final self::Class* #this) → dynamic
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{dynamic};
 static method Extension|set#property(lowered final self::Class* #this, dynamic value) → void {
   #this.{self::Class::field} = value;
 }
@@ -134,23 +134,23 @@
   return (dynamic value) → dynamic => self::Extension|tearOffs(#this, value);
 static method Extension|tearOffs(lowered final self::Class* #this, dynamic value) → dynamic {
   () →* dynamic tearOffNoArgs = self::Extension|get#readGetter(#this);
-  tearOffNoArgs.call();
+  tearOffNoArgs(){() →* dynamic};
   (dynamic) →* dynamic tearOffRequired = self::Extension|get#writeSetterRequired(#this);
-  tearOffRequired.call(value);
+  tearOffRequired(value){(dynamic) →* dynamic};
   ([dynamic]) →* dynamic tearOffOptional = self::Extension|get#writeSetterOptional(#this);
-  tearOffOptional.call();
-  tearOffOptional.call(value);
+  tearOffOptional(){([dynamic]) →* dynamic};
+  tearOffOptional(value){([dynamic]) →* dynamic};
   ({value: dynamic}) →* dynamic tearOffNamed = self::Extension|get#writeSetterNamed(#this);
-  tearOffNamed.call();
-  tearOffNamed.call(value: value);
+  tearOffNamed(){({value: dynamic}) →* dynamic};
+  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
 }
 static method Extension|getterCalls(lowered final self::Class* #this, dynamic value) → dynamic {
-  self::Extension|get#tearOffGetterNoArgs(#this).call();
-  self::Extension|get#tearOffGetterRequired(#this).call(value);
-  self::Extension|get#tearOffGetterOptional(#this).call();
-  self::Extension|get#tearOffGetterOptional(#this).call(value);
-  self::Extension|get#tearOffGetterNamed(#this).call();
-  self::Extension|get#tearOffGetterNamed(#this).call(value: value);
+  self::Extension|get#tearOffGetterNoArgs(#this){dynamic}.call();
+  self::Extension|get#tearOffGetterRequired(#this){dynamic}.call(value);
+  self::Extension|get#tearOffGetterOptional(#this){dynamic}.call();
+  self::Extension|get#tearOffGetterOptional(#this){dynamic}.call(value);
+  self::Extension|get#tearOffGetterNamed(#this){dynamic}.call();
+  self::Extension|get#tearOffGetterNamed(#this){dynamic}.call(value: value);
 }
 static method Extension|get#getterCalls(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|getterCalls(#this, value);
@@ -190,7 +190,7 @@
   self::GenericExtension|set#property<self::GenericExtension|genericWriteSetterNamed::T*>(#this, value);
 }
 static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
-  return #this.{self::GenericClass::field};
+  return #this.{self::GenericClass::field}{self::GenericExtension|get#property::T*};
 static method GenericExtension|set#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#property::T*>* #this, self::GenericExtension|set#property::T* value) → void {
   #this.{self::GenericClass::field} = value;
 }
@@ -235,58 +235,58 @@
   return <S extends self::GenericExtension|get#invocations::T* = dynamic>(S* value) → dynamic => self::GenericExtension|invocations<self::GenericExtension|get#invocations::T*, S*>(#this, value);
 static method GenericExtension|tearOffs<T extends core::Object* = dynamic, S extends self::GenericExtension|tearOffs::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|tearOffs::T*>* #this, self::GenericExtension|tearOffs::S* value) → dynamic {
   () →* self::GenericExtension|tearOffs::T* tearOffNoArgs = self::GenericExtension|get#readGetter<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffNoArgs.call();
+  tearOffNoArgs(){() →* self::GenericExtension|tearOffs::T*};
   (self::GenericExtension|tearOffs::T*) →* dynamic tearOffRequired = self::GenericExtension|get#writeSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffRequired.call(value);
+  tearOffRequired(value){(self::GenericExtension|tearOffs::T*) →* dynamic};
   ([self::GenericExtension|tearOffs::T*]) →* dynamic tearOffOptional = self::GenericExtension|get#writeSetterOptional<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffOptional.call();
-  tearOffOptional.call(value);
+  tearOffOptional(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  tearOffOptional(value){([self::GenericExtension|tearOffs::T*]) →* dynamic};
   ({value: self::GenericExtension|tearOffs::T*}) →* dynamic tearOffNamed = self::GenericExtension|get#writeSetterNamed<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffNamed.call();
-  tearOffNamed.call(value: value);
+  tearOffNamed(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  tearOffNamed(value: value){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
   <S extends self::GenericExtension|tearOffs::T* = dynamic>(S*) →* dynamic genericTearOffRequired = self::GenericExtension|get#genericWriteSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffRequired.call<self::GenericExtension|tearOffs::S*>(value);
-  genericTearOffRequired.call<self::GenericExtension|tearOffs::T*>(value);
-  genericTearOffRequired.call<self::GenericExtension|tearOffs::S*>(value);
+  genericTearOffRequired<self::GenericExtension|tearOffs::S*>(value){(self::GenericExtension|tearOffs::S*) →* dynamic};
+  genericTearOffRequired<self::GenericExtension|tearOffs::T*>(value){(self::GenericExtension|tearOffs::T*) →* dynamic};
+  genericTearOffRequired<self::GenericExtension|tearOffs::S*>(value){(self::GenericExtension|tearOffs::S*) →* dynamic};
   <S extends self::GenericExtension|tearOffs::T* = dynamic>([S*]) →* dynamic genericTearOffOptional = self::GenericExtension|get#genericWriteSetterOptional<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffOptional.call<self::GenericExtension|tearOffs::T*>();
-  genericTearOffOptional.call<self::GenericExtension|tearOffs::T*>();
-  genericTearOffOptional.call<self::GenericExtension|tearOffs::S*>();
-  genericTearOffOptional.call<self::GenericExtension|tearOffs::S*>(value);
-  genericTearOffOptional.call<self::GenericExtension|tearOffs::T*>(value);
-  genericTearOffOptional.call<self::GenericExtension|tearOffs::S*>(value);
+  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(){([self::GenericExtension|tearOffs::S*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(value){([self::GenericExtension|tearOffs::S*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(value){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(value){([self::GenericExtension|tearOffs::S*]) →* dynamic};
   <S extends self::GenericExtension|tearOffs::T* = dynamic>({value: S*}) →* dynamic genericTearOffNamed = self::GenericExtension|get#genericWriteSetterNamed<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffNamed.call<self::GenericExtension|tearOffs::T*>();
-  genericTearOffNamed.call<self::GenericExtension|tearOffs::T*>();
-  genericTearOffNamed.call<self::GenericExtension|tearOffs::S*>();
-  genericTearOffNamed.call<self::GenericExtension|tearOffs::S*>(value: value);
-  genericTearOffNamed.call<self::GenericExtension|tearOffs::T*>(value: value);
-  genericTearOffNamed.call<self::GenericExtension|tearOffs::S*>(value: value);
+  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(value: value){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(value: value){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(value: value){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
 }
 static method GenericExtension|get#tearOffs<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffs::T*>* #this) → <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S* value) → dynamic => self::GenericExtension|tearOffs<self::GenericExtension|get#tearOffs::T*, S*>(#this, value);
 static method GenericExtension|getterCalls<T extends core::Object* = dynamic, S extends self::GenericExtension|getterCalls::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic {
-  self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T*>(#this).call();
-  self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T*>(#this).call(value);
-  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this).call();
-  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this).call(value);
-  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this).call();
-  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this).call(value: value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this).call(value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::T*>(value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::S*>(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this).call();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::T*>();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::S*>();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this).call(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::T*>(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::S*>(value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::T*>();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::S*>();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call(value: value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::T*>(value: value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::S*>(value: value);
+  self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value: value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value: value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value: value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value: value);
 }
 static method GenericExtension|get#getterCalls<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#getterCalls::T*>* #this) → <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S* value) → dynamic => self::GenericExtension|getterCalls<self::GenericExtension|get#getterCalls::T*, S*>(#this, value);
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.transformed.expect
index 394a69b3..9db4ca6 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.transformed.expect
@@ -116,7 +116,7 @@
 static method Extension|get#tearOffGetterNamed(lowered final self::Class* #this) → dynamic
   return self::Extension|get#writeSetterNamed(#this);
 static method Extension|get#property(lowered final self::Class* #this) → dynamic
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{dynamic};
 static method Extension|set#property(lowered final self::Class* #this, dynamic value) → void {
   #this.{self::Class::field} = value;
 }
@@ -134,23 +134,23 @@
   return (dynamic value) → dynamic => self::Extension|tearOffs(#this, value);
 static method Extension|tearOffs(lowered final self::Class* #this, dynamic value) → dynamic {
   () →* dynamic tearOffNoArgs = self::Extension|get#readGetter(#this);
-  tearOffNoArgs.call();
+  tearOffNoArgs(){() →* dynamic};
   (dynamic) →* dynamic tearOffRequired = self::Extension|get#writeSetterRequired(#this);
-  tearOffRequired.call(value);
+  tearOffRequired(value){(dynamic) →* dynamic};
   ([dynamic]) →* dynamic tearOffOptional = self::Extension|get#writeSetterOptional(#this);
-  tearOffOptional.call();
-  tearOffOptional.call(value);
+  tearOffOptional(){([dynamic]) →* dynamic};
+  tearOffOptional(value){([dynamic]) →* dynamic};
   ({value: dynamic}) →* dynamic tearOffNamed = self::Extension|get#writeSetterNamed(#this);
-  tearOffNamed.call();
-  tearOffNamed.call(value: value);
+  tearOffNamed(){({value: dynamic}) →* dynamic};
+  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
 }
 static method Extension|getterCalls(lowered final self::Class* #this, dynamic value) → dynamic {
-  self::Extension|get#tearOffGetterNoArgs(#this).call();
-  self::Extension|get#tearOffGetterRequired(#this).call(value);
-  self::Extension|get#tearOffGetterOptional(#this).call();
-  self::Extension|get#tearOffGetterOptional(#this).call(value);
-  self::Extension|get#tearOffGetterNamed(#this).call();
-  self::Extension|get#tearOffGetterNamed(#this).call(value: value);
+  self::Extension|get#tearOffGetterNoArgs(#this){dynamic}.call();
+  self::Extension|get#tearOffGetterRequired(#this){dynamic}.call(value);
+  self::Extension|get#tearOffGetterOptional(#this){dynamic}.call();
+  self::Extension|get#tearOffGetterOptional(#this){dynamic}.call(value);
+  self::Extension|get#tearOffGetterNamed(#this){dynamic}.call();
+  self::Extension|get#tearOffGetterNamed(#this){dynamic}.call(value: value);
 }
 static method Extension|get#getterCalls(lowered final self::Class* #this) → (dynamic) →* dynamic
   return (dynamic value) → dynamic => self::Extension|getterCalls(#this, value);
@@ -190,7 +190,7 @@
   self::GenericExtension|set#property<self::GenericExtension|genericWriteSetterNamed::T*>(#this, value);
 }
 static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
-  return #this.{self::GenericClass::field};
+  return #this.{self::GenericClass::field}{self::GenericExtension|get#property::T*};
 static method GenericExtension|set#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#property::T*>* #this, self::GenericExtension|set#property::T* value) → void {
   #this.{self::GenericClass::field} = value;
 }
@@ -235,58 +235,58 @@
   return <S extends self::GenericExtension|get#invocations::T* = dynamic>(S* value) → dynamic => self::GenericExtension|invocations<self::GenericExtension|get#invocations::T*, S*>(#this, value);
 static method GenericExtension|tearOffs<T extends core::Object* = dynamic, S extends self::GenericExtension|tearOffs::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|tearOffs::T*>* #this, self::GenericExtension|tearOffs::S* value) → dynamic {
   () →* self::GenericExtension|tearOffs::T* tearOffNoArgs = self::GenericExtension|get#readGetter<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffNoArgs.call();
+  tearOffNoArgs(){() →* self::GenericExtension|tearOffs::T*};
   (self::GenericExtension|tearOffs::T*) →* dynamic tearOffRequired = self::GenericExtension|get#writeSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffRequired.call(value);
+  tearOffRequired(value){(self::GenericExtension|tearOffs::T*) →* dynamic};
   ([self::GenericExtension|tearOffs::T*]) →* dynamic tearOffOptional = self::GenericExtension|get#writeSetterOptional<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffOptional.call();
-  tearOffOptional.call(value);
+  tearOffOptional(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  tearOffOptional(value){([self::GenericExtension|tearOffs::T*]) →* dynamic};
   ({value: self::GenericExtension|tearOffs::T*}) →* dynamic tearOffNamed = self::GenericExtension|get#writeSetterNamed<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffNamed.call();
-  tearOffNamed.call(value: value);
+  tearOffNamed(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  tearOffNamed(value: value){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
   <S extends self::GenericExtension|tearOffs::T* = dynamic>(S*) →* dynamic genericTearOffRequired = self::GenericExtension|get#genericWriteSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffRequired.call<self::GenericExtension|tearOffs::S*>(value);
-  genericTearOffRequired.call<self::GenericExtension|tearOffs::T*>(value);
-  genericTearOffRequired.call<self::GenericExtension|tearOffs::S*>(value);
+  genericTearOffRequired<self::GenericExtension|tearOffs::S*>(value){(self::GenericExtension|tearOffs::S*) →* dynamic};
+  genericTearOffRequired<self::GenericExtension|tearOffs::T*>(value){(self::GenericExtension|tearOffs::T*) →* dynamic};
+  genericTearOffRequired<self::GenericExtension|tearOffs::S*>(value){(self::GenericExtension|tearOffs::S*) →* dynamic};
   <S extends self::GenericExtension|tearOffs::T* = dynamic>([S*]) →* dynamic genericTearOffOptional = self::GenericExtension|get#genericWriteSetterOptional<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffOptional.call<self::GenericExtension|tearOffs::T*>();
-  genericTearOffOptional.call<self::GenericExtension|tearOffs::T*>();
-  genericTearOffOptional.call<self::GenericExtension|tearOffs::S*>();
-  genericTearOffOptional.call<self::GenericExtension|tearOffs::S*>(value);
-  genericTearOffOptional.call<self::GenericExtension|tearOffs::T*>(value);
-  genericTearOffOptional.call<self::GenericExtension|tearOffs::S*>(value);
+  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(){([self::GenericExtension|tearOffs::S*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(value){([self::GenericExtension|tearOffs::S*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(value){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(value){([self::GenericExtension|tearOffs::S*]) →* dynamic};
   <S extends self::GenericExtension|tearOffs::T* = dynamic>({value: S*}) →* dynamic genericTearOffNamed = self::GenericExtension|get#genericWriteSetterNamed<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffNamed.call<self::GenericExtension|tearOffs::T*>();
-  genericTearOffNamed.call<self::GenericExtension|tearOffs::T*>();
-  genericTearOffNamed.call<self::GenericExtension|tearOffs::S*>();
-  genericTearOffNamed.call<self::GenericExtension|tearOffs::S*>(value: value);
-  genericTearOffNamed.call<self::GenericExtension|tearOffs::T*>(value: value);
-  genericTearOffNamed.call<self::GenericExtension|tearOffs::S*>(value: value);
+  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(value: value){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(value: value){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(value: value){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
 }
 static method GenericExtension|get#tearOffs<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffs::T*>* #this) → <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S* value) → dynamic => self::GenericExtension|tearOffs<self::GenericExtension|get#tearOffs::T*, S*>(#this, value);
 static method GenericExtension|getterCalls<T extends core::Object* = dynamic, S extends self::GenericExtension|getterCalls::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic {
-  self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T*>(#this).call();
-  self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T*>(#this).call(value);
-  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this).call();
-  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this).call(value);
-  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this).call();
-  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this).call(value: value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this).call(value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::T*>(value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::S*>(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this).call();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::T*>();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::S*>();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this).call(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::T*>(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::S*>(value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::T*>();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::S*>();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call(value: value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::T*>(value: value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this).call<self::GenericExtension|getterCalls::S*>(value: value);
+  self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value: value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value: value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value: value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value: value);
 }
 static method GenericExtension|get#getterCalls<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#getterCalls::T*>* #this) → <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S*) →* dynamic
   return <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S* value) → dynamic => self::GenericExtension|getterCalls<self::GenericExtension|get#getterCalls::T*, S*>(#this, value);
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.expect
index f9c2886..bef26cf 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.expect
@@ -110,50 +110,50 @@
 }
 static method Extension|tearOffsFromStaticContext(core::int* value) → dynamic {
   () →* dynamic tearOffNoArgs = #C2;
-  tearOffNoArgs.call();
+  tearOffNoArgs(){() →* dynamic};
   (dynamic) →* dynamic tearOffRequired = #C3;
-  tearOffRequired.call(value);
+  tearOffRequired(value){(dynamic) →* dynamic};
   ([dynamic]) →* dynamic tearOffOptional = #C4;
-  tearOffOptional.call();
-  tearOffOptional.call(value);
+  tearOffOptional(){([dynamic]) →* dynamic};
+  tearOffOptional(value){([dynamic]) →* dynamic};
   ({value: dynamic}) →* dynamic tearOffNamed = #C5;
-  tearOffNamed.call();
-  tearOffNamed.call(value: value);
+  tearOffNamed(){({value: dynamic}) →* dynamic};
+  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
   <S extends core::Object* = dynamic>(S*) →* dynamic tearOffGenericRequired = #C6;
-  tearOffGenericRequired.call<core::int*>(value);
-  tearOffGenericRequired.call<core::int*>(value);
+  tearOffGenericRequired<core::int*>(value){(core::int*) →* dynamic};
+  tearOffGenericRequired<core::int*>(value){(core::int*) →* dynamic};
   <S extends core::Object* = dynamic>([S*]) →* dynamic tearOffGenericOptional = #C7;
-  tearOffGenericOptional.call<dynamic>();
-  tearOffGenericOptional.call<core::int*>();
-  tearOffGenericOptional.call<core::int*>(value);
-  tearOffGenericOptional.call<core::int*>(value);
+  tearOffGenericOptional<dynamic>(){([dynamic]) →* dynamic};
+  tearOffGenericOptional<core::int*>(){([core::int*]) →* dynamic};
+  tearOffGenericOptional<core::int*>(value){([core::int*]) →* dynamic};
+  tearOffGenericOptional<core::int*>(value){([core::int*]) →* dynamic};
   <S extends core::Object* = dynamic>({value: S*}) →* dynamic tearOffGenericNamed = #C8;
-  tearOffGenericNamed.call<dynamic>();
-  tearOffGenericNamed.call<core::int*>();
-  tearOffGenericNamed.call<core::int*>(value: value);
-  tearOffGenericNamed.call<core::int*>(value: value);
+  tearOffGenericNamed<dynamic>(){({value: dynamic}) →* dynamic};
+  tearOffGenericNamed<core::int*>(){({value: core::int*}) →* dynamic};
+  tearOffGenericNamed<core::int*>(value: value){({value: core::int*}) →* dynamic};
+  tearOffGenericNamed<core::int*>(value: value){({value: core::int*}) →* dynamic};
 }
 static method Extension|fieldAccessFromStaticContext() → dynamic {
   self::Extension|field = self::Extension|property;
   self::Extension|property = self::Extension|field;
 }
 static method Extension|getterCallsFromStaticContext(core::int* value) → dynamic {
-  self::Extension|tearOffGetterNoArgs.call();
-  self::Extension|tearOffGetterRequired.call(value);
-  self::Extension|tearOffGetterOptional.call();
-  self::Extension|tearOffGetterOptional.call(value);
-  self::Extension|tearOffGetterNamed.call();
-  self::Extension|tearOffGetterNamed.call(value: value);
-  self::Extension|tearOffGetterGenericRequired.call(value);
-  self::Extension|tearOffGetterGenericRequired.call<core::int*>(value);
-  self::Extension|tearOffGetterGenericOptional.call();
-  self::Extension|tearOffGetterGenericOptional.call<core::int*>();
-  self::Extension|tearOffGetterGenericOptional.call(value);
-  self::Extension|tearOffGetterGenericOptional.call<core::int*>(value);
-  self::Extension|tearOffGetterGenericNamed.call();
-  self::Extension|tearOffGetterGenericNamed.call<core::int*>();
-  self::Extension|tearOffGetterGenericNamed.call(value: value);
-  self::Extension|tearOffGetterGenericNamed.call<core::int*>(value: value);
+  self::Extension|tearOffGetterNoArgs{dynamic}.call();
+  self::Extension|tearOffGetterRequired{dynamic}.call(value);
+  self::Extension|tearOffGetterOptional{dynamic}.call();
+  self::Extension|tearOffGetterOptional{dynamic}.call(value);
+  self::Extension|tearOffGetterNamed{dynamic}.call();
+  self::Extension|tearOffGetterNamed{dynamic}.call(value: value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call(value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call<core::int*>(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int*>();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int*>(value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int*>();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call(value: value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int*>(value: value);
 }
 static method Extension|invocationsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|invocationsFromInstanceContext::T*>* #this, self::Extension|invocationsFromInstanceContext::T* value) → dynamic {
   self::Extension|readGetter();
@@ -177,28 +177,28 @@
   return (self::Extension|get#invocationsFromInstanceContext::T* value) → dynamic => self::Extension|invocationsFromInstanceContext<self::Extension|get#invocationsFromInstanceContext::T*>(#this, value);
 static method Extension|tearOffsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic {
   () →* dynamic tearOffNoArgs = #C2;
-  tearOffNoArgs.call();
+  tearOffNoArgs(){() →* dynamic};
   (dynamic) →* dynamic tearOffRequired = #C3;
-  tearOffRequired.call(value);
+  tearOffRequired(value){(dynamic) →* dynamic};
   ([dynamic]) →* dynamic tearOffOptional = #C4;
-  tearOffOptional.call();
-  tearOffOptional.call(value);
+  tearOffOptional(){([dynamic]) →* dynamic};
+  tearOffOptional(value){([dynamic]) →* dynamic};
   ({value: dynamic}) →* dynamic tearOffNamed = #C5;
-  tearOffNamed.call();
-  tearOffNamed.call(value: value);
+  tearOffNamed(){({value: dynamic}) →* dynamic};
+  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
   <S extends core::Object* = dynamic>(S*) →* dynamic tearOffGenericRequired = #C6;
-  tearOffGenericRequired.call<self::Extension|tearOffsFromInstanceContext::T*>(value);
-  tearOffGenericRequired.call<self::Extension|tearOffsFromInstanceContext::T*>(value);
+  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T*>(value){(self::Extension|tearOffsFromInstanceContext::T*) →* dynamic};
+  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T*>(value){(self::Extension|tearOffsFromInstanceContext::T*) →* dynamic};
   <S extends core::Object* = dynamic>([S*]) →* dynamic tearOffGenericOptional = #C7;
-  tearOffGenericOptional.call<dynamic>();
-  tearOffGenericOptional.call<self::Extension|tearOffsFromInstanceContext::T*>();
-  tearOffGenericOptional.call<self::Extension|tearOffsFromInstanceContext::T*>(value);
-  tearOffGenericOptional.call<self::Extension|tearOffsFromInstanceContext::T*>(value);
+  tearOffGenericOptional<dynamic>(){([dynamic]) →* dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(value){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(value){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
   <S extends core::Object* = dynamic>({value: S*}) →* dynamic tearOffGenericNamed = #C8;
-  tearOffGenericNamed.call<dynamic>();
-  tearOffGenericNamed.call<self::Extension|tearOffsFromInstanceContext::T*>();
-  tearOffGenericNamed.call<self::Extension|tearOffsFromInstanceContext::T*>(value: value);
-  tearOffGenericNamed.call<self::Extension|tearOffsFromInstanceContext::T*>(value: value);
+  tearOffGenericNamed<dynamic>(){({value: dynamic}) →* dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
 }
 static method Extension|get#tearOffsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#tearOffsFromInstanceContext::T*>* #this) → (self::Extension|get#tearOffsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#tearOffsFromInstanceContext::T* value) → dynamic => self::Extension|tearOffsFromInstanceContext<self::Extension|get#tearOffsFromInstanceContext::T*>(#this, value);
@@ -209,22 +209,22 @@
 static method Extension|get#fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#fieldAccessFromInstanceContext::T*>* #this) → () →* dynamic
   return () → dynamic => self::Extension|fieldAccessFromInstanceContext<self::Extension|get#fieldAccessFromInstanceContext::T*>(#this);
 static method Extension|getterCallsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → dynamic {
-  self::Extension|tearOffGetterNoArgs.call();
-  self::Extension|tearOffGetterRequired.call(value);
-  self::Extension|tearOffGetterOptional.call();
-  self::Extension|tearOffGetterOptional.call(value);
-  self::Extension|tearOffGetterNamed.call();
-  self::Extension|tearOffGetterNamed.call(value: value);
-  self::Extension|tearOffGetterGenericRequired.call(value);
-  self::Extension|tearOffGetterGenericRequired.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
-  self::Extension|tearOffGetterGenericOptional.call();
-  self::Extension|tearOffGetterGenericOptional.call<self::Extension|getterCallsFromInstanceContext::T*>();
-  self::Extension|tearOffGetterGenericOptional.call(value);
-  self::Extension|tearOffGetterGenericOptional.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
-  self::Extension|tearOffGetterGenericNamed.call();
-  self::Extension|tearOffGetterGenericNamed.call<self::Extension|getterCallsFromInstanceContext::T*>();
-  self::Extension|tearOffGetterGenericNamed.call(value: value);
-  self::Extension|tearOffGetterGenericNamed.call<self::Extension|getterCallsFromInstanceContext::T*>(value: value);
+  self::Extension|tearOffGetterNoArgs{dynamic}.call();
+  self::Extension|tearOffGetterRequired{dynamic}.call(value);
+  self::Extension|tearOffGetterOptional{dynamic}.call();
+  self::Extension|tearOffGetterOptional{dynamic}.call(value);
+  self::Extension|tearOffGetterNamed{dynamic}.call();
+  self::Extension|tearOffGetterNamed{dynamic}.call(value: value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call(value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call(value: value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value: value);
 }
 static method Extension|get#getterCallsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#getterCallsFromInstanceContext::T*>* #this) → (self::Extension|get#getterCallsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#getterCallsFromInstanceContext::T* value) → dynamic => self::Extension|getterCallsFromInstanceContext<self::Extension|get#getterCallsFromInstanceContext::T*>(#this, value);
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.transformed.expect
index f9c2886..bef26cf 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.transformed.expect
@@ -110,50 +110,50 @@
 }
 static method Extension|tearOffsFromStaticContext(core::int* value) → dynamic {
   () →* dynamic tearOffNoArgs = #C2;
-  tearOffNoArgs.call();
+  tearOffNoArgs(){() →* dynamic};
   (dynamic) →* dynamic tearOffRequired = #C3;
-  tearOffRequired.call(value);
+  tearOffRequired(value){(dynamic) →* dynamic};
   ([dynamic]) →* dynamic tearOffOptional = #C4;
-  tearOffOptional.call();
-  tearOffOptional.call(value);
+  tearOffOptional(){([dynamic]) →* dynamic};
+  tearOffOptional(value){([dynamic]) →* dynamic};
   ({value: dynamic}) →* dynamic tearOffNamed = #C5;
-  tearOffNamed.call();
-  tearOffNamed.call(value: value);
+  tearOffNamed(){({value: dynamic}) →* dynamic};
+  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
   <S extends core::Object* = dynamic>(S*) →* dynamic tearOffGenericRequired = #C6;
-  tearOffGenericRequired.call<core::int*>(value);
-  tearOffGenericRequired.call<core::int*>(value);
+  tearOffGenericRequired<core::int*>(value){(core::int*) →* dynamic};
+  tearOffGenericRequired<core::int*>(value){(core::int*) →* dynamic};
   <S extends core::Object* = dynamic>([S*]) →* dynamic tearOffGenericOptional = #C7;
-  tearOffGenericOptional.call<dynamic>();
-  tearOffGenericOptional.call<core::int*>();
-  tearOffGenericOptional.call<core::int*>(value);
-  tearOffGenericOptional.call<core::int*>(value);
+  tearOffGenericOptional<dynamic>(){([dynamic]) →* dynamic};
+  tearOffGenericOptional<core::int*>(){([core::int*]) →* dynamic};
+  tearOffGenericOptional<core::int*>(value){([core::int*]) →* dynamic};
+  tearOffGenericOptional<core::int*>(value){([core::int*]) →* dynamic};
   <S extends core::Object* = dynamic>({value: S*}) →* dynamic tearOffGenericNamed = #C8;
-  tearOffGenericNamed.call<dynamic>();
-  tearOffGenericNamed.call<core::int*>();
-  tearOffGenericNamed.call<core::int*>(value: value);
-  tearOffGenericNamed.call<core::int*>(value: value);
+  tearOffGenericNamed<dynamic>(){({value: dynamic}) →* dynamic};
+  tearOffGenericNamed<core::int*>(){({value: core::int*}) →* dynamic};
+  tearOffGenericNamed<core::int*>(value: value){({value: core::int*}) →* dynamic};
+  tearOffGenericNamed<core::int*>(value: value){({value: core::int*}) →* dynamic};
 }
 static method Extension|fieldAccessFromStaticContext() → dynamic {
   self::Extension|field = self::Extension|property;
   self::Extension|property = self::Extension|field;
 }
 static method Extension|getterCallsFromStaticContext(core::int* value) → dynamic {
-  self::Extension|tearOffGetterNoArgs.call();
-  self::Extension|tearOffGetterRequired.call(value);
-  self::Extension|tearOffGetterOptional.call();
-  self::Extension|tearOffGetterOptional.call(value);
-  self::Extension|tearOffGetterNamed.call();
-  self::Extension|tearOffGetterNamed.call(value: value);
-  self::Extension|tearOffGetterGenericRequired.call(value);
-  self::Extension|tearOffGetterGenericRequired.call<core::int*>(value);
-  self::Extension|tearOffGetterGenericOptional.call();
-  self::Extension|tearOffGetterGenericOptional.call<core::int*>();
-  self::Extension|tearOffGetterGenericOptional.call(value);
-  self::Extension|tearOffGetterGenericOptional.call<core::int*>(value);
-  self::Extension|tearOffGetterGenericNamed.call();
-  self::Extension|tearOffGetterGenericNamed.call<core::int*>();
-  self::Extension|tearOffGetterGenericNamed.call(value: value);
-  self::Extension|tearOffGetterGenericNamed.call<core::int*>(value: value);
+  self::Extension|tearOffGetterNoArgs{dynamic}.call();
+  self::Extension|tearOffGetterRequired{dynamic}.call(value);
+  self::Extension|tearOffGetterOptional{dynamic}.call();
+  self::Extension|tearOffGetterOptional{dynamic}.call(value);
+  self::Extension|tearOffGetterNamed{dynamic}.call();
+  self::Extension|tearOffGetterNamed{dynamic}.call(value: value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call(value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call<core::int*>(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int*>();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int*>(value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int*>();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call(value: value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int*>(value: value);
 }
 static method Extension|invocationsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|invocationsFromInstanceContext::T*>* #this, self::Extension|invocationsFromInstanceContext::T* value) → dynamic {
   self::Extension|readGetter();
@@ -177,28 +177,28 @@
   return (self::Extension|get#invocationsFromInstanceContext::T* value) → dynamic => self::Extension|invocationsFromInstanceContext<self::Extension|get#invocationsFromInstanceContext::T*>(#this, value);
 static method Extension|tearOffsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic {
   () →* dynamic tearOffNoArgs = #C2;
-  tearOffNoArgs.call();
+  tearOffNoArgs(){() →* dynamic};
   (dynamic) →* dynamic tearOffRequired = #C3;
-  tearOffRequired.call(value);
+  tearOffRequired(value){(dynamic) →* dynamic};
   ([dynamic]) →* dynamic tearOffOptional = #C4;
-  tearOffOptional.call();
-  tearOffOptional.call(value);
+  tearOffOptional(){([dynamic]) →* dynamic};
+  tearOffOptional(value){([dynamic]) →* dynamic};
   ({value: dynamic}) →* dynamic tearOffNamed = #C5;
-  tearOffNamed.call();
-  tearOffNamed.call(value: value);
+  tearOffNamed(){({value: dynamic}) →* dynamic};
+  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
   <S extends core::Object* = dynamic>(S*) →* dynamic tearOffGenericRequired = #C6;
-  tearOffGenericRequired.call<self::Extension|tearOffsFromInstanceContext::T*>(value);
-  tearOffGenericRequired.call<self::Extension|tearOffsFromInstanceContext::T*>(value);
+  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T*>(value){(self::Extension|tearOffsFromInstanceContext::T*) →* dynamic};
+  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T*>(value){(self::Extension|tearOffsFromInstanceContext::T*) →* dynamic};
   <S extends core::Object* = dynamic>([S*]) →* dynamic tearOffGenericOptional = #C7;
-  tearOffGenericOptional.call<dynamic>();
-  tearOffGenericOptional.call<self::Extension|tearOffsFromInstanceContext::T*>();
-  tearOffGenericOptional.call<self::Extension|tearOffsFromInstanceContext::T*>(value);
-  tearOffGenericOptional.call<self::Extension|tearOffsFromInstanceContext::T*>(value);
+  tearOffGenericOptional<dynamic>(){([dynamic]) →* dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(value){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(value){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
   <S extends core::Object* = dynamic>({value: S*}) →* dynamic tearOffGenericNamed = #C8;
-  tearOffGenericNamed.call<dynamic>();
-  tearOffGenericNamed.call<self::Extension|tearOffsFromInstanceContext::T*>();
-  tearOffGenericNamed.call<self::Extension|tearOffsFromInstanceContext::T*>(value: value);
-  tearOffGenericNamed.call<self::Extension|tearOffsFromInstanceContext::T*>(value: value);
+  tearOffGenericNamed<dynamic>(){({value: dynamic}) →* dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
 }
 static method Extension|get#tearOffsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#tearOffsFromInstanceContext::T*>* #this) → (self::Extension|get#tearOffsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#tearOffsFromInstanceContext::T* value) → dynamic => self::Extension|tearOffsFromInstanceContext<self::Extension|get#tearOffsFromInstanceContext::T*>(#this, value);
@@ -209,22 +209,22 @@
 static method Extension|get#fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#fieldAccessFromInstanceContext::T*>* #this) → () →* dynamic
   return () → dynamic => self::Extension|fieldAccessFromInstanceContext<self::Extension|get#fieldAccessFromInstanceContext::T*>(#this);
 static method Extension|getterCallsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → dynamic {
-  self::Extension|tearOffGetterNoArgs.call();
-  self::Extension|tearOffGetterRequired.call(value);
-  self::Extension|tearOffGetterOptional.call();
-  self::Extension|tearOffGetterOptional.call(value);
-  self::Extension|tearOffGetterNamed.call();
-  self::Extension|tearOffGetterNamed.call(value: value);
-  self::Extension|tearOffGetterGenericRequired.call(value);
-  self::Extension|tearOffGetterGenericRequired.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
-  self::Extension|tearOffGetterGenericOptional.call();
-  self::Extension|tearOffGetterGenericOptional.call<self::Extension|getterCallsFromInstanceContext::T*>();
-  self::Extension|tearOffGetterGenericOptional.call(value);
-  self::Extension|tearOffGetterGenericOptional.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
-  self::Extension|tearOffGetterGenericNamed.call();
-  self::Extension|tearOffGetterGenericNamed.call<self::Extension|getterCallsFromInstanceContext::T*>();
-  self::Extension|tearOffGetterGenericNamed.call(value: value);
-  self::Extension|tearOffGetterGenericNamed.call<self::Extension|getterCallsFromInstanceContext::T*>(value: value);
+  self::Extension|tearOffGetterNoArgs{dynamic}.call();
+  self::Extension|tearOffGetterRequired{dynamic}.call(value);
+  self::Extension|tearOffGetterOptional{dynamic}.call();
+  self::Extension|tearOffGetterOptional{dynamic}.call(value);
+  self::Extension|tearOffGetterNamed{dynamic}.call();
+  self::Extension|tearOffGetterNamed{dynamic}.call(value: value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call(value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call(value: value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value: value);
 }
 static method Extension|get#getterCallsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#getterCallsFromInstanceContext::T*>* #this) → (self::Extension|get#getterCallsFromInstanceContext::T*) →* dynamic
   return (self::Extension|get#getterCallsFromInstanceContext::T* value) → dynamic => self::Extension|getterCallsFromInstanceContext<self::Extension|get#getterCallsFromInstanceContext::T*>(#this, value);
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.expect b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.expect
index 3f2a400..8289cb4 100644
--- a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.expect
@@ -38,12 +38,12 @@
   dynamic c0 = new self::Class::•();
   core::Object* c1 = new self::Class::•();
   self::Class* c2 = new self::Class::•();
-  self::expect(123, c0.method());
+  self::expect(123, c0{dynamic}.method());
   self::expect(87, self::Extension|method(c1));
   self::expect(42, self::ClassExtension|method(c2));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.transformed.expect
index 3f2a400..8289cb4 100644
--- a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.transformed.expect
@@ -38,12 +38,12 @@
   dynamic c0 = new self::Class::•();
   core::Object* c1 = new self::Class::•();
   self::Class* c2 = new self::Class::•();
-  self::expect(123, c0.method());
+  self::expect(123, c0{dynamic}.method());
   self::expect(87, self::Extension|method(c1));
   self::expect(42, self::ClassExtension|method(c2));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.expect b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.expect
index cf95acc..b2bd40c 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.expect
@@ -36,29 +36,29 @@
   set field = self::Extension2|set#field;
 }
 static method Extension1|get#field(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field1};
+  return #this.{self::Class::field1}{core::int*};
 static method Extension1|set#field(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field1} = value;
 }
 static method Extension1|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field1};
+  return #this.{self::Class::field1}{core::int*};
 static method Extension1|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
 static method Extension1|genericMethod<T extends core::num*>(lowered final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
-  return #this.{self::Class::field1}.{core::num::+}(t) as{TypeError} core::int*;
+  return #this.{self::Class::field1}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
 static method Extension1|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
 static method Extension2|get#field(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field2};
+  return #this.{self::Class::field2}{core::int*};
 static method Extension2|set#field(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field2} = value;
 }
 static method Extension2|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field2};
+  return #this.{self::Class::field2}{core::int*};
 static method Extension2|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
 static method Extension2|genericMethod<T extends core::num*>(lowered final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
-  return #this.{self::Class::field2}.{core::num::+}(t) as{TypeError} core::int*;
+  return #this.{self::Class::field2}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
 static method Extension2|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
 static method main() → dynamic {
@@ -69,25 +69,25 @@
   self::expect(87, self::Extension2|method(c));
   () →* core::int* tearOff1 = self::Extension1|get#method(c);
   () →* core::int* tearOff2 = self::Extension2|get#method(c);
-  self::expect(42, tearOff1.call());
-  self::expect(87, tearOff2.call());
+  self::expect(42, tearOff1(){() →* core::int*});
+  self::expect(87, tearOff2(){() →* core::int*});
   self::expect(52, self::Extension1|genericMethod<core::int*>(c, 10));
   self::expect(97, self::Extension2|genericMethod<core::int*>(c, 10));
   self::expect(52, self::Extension1|genericMethod<core::num*>(c, 10));
   self::expect(97, self::Extension2|genericMethod<core::num*>(c, 10));
   <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c);
   <T extends core::num*>(T*) →* core::int* genericTearOff2 = self::Extension2|get#genericMethod(c);
-  self::expect(52, genericTearOff1.call<core::int*>(10));
-  self::expect(97, genericTearOff2.call<core::int*>(10));
-  self::expect(52, genericTearOff1.call<core::num*>(10));
-  self::expect(97, genericTearOff2.call<core::num*>(10));
+  self::expect(52, genericTearOff1<core::int*>(10){(core::int*) →* core::int*});
+  self::expect(97, genericTearOff2<core::int*>(10){(core::int*) →* core::int*});
+  self::expect(52, genericTearOff1<core::num*>(10){(core::num*) →* core::int*});
+  self::expect(97, genericTearOff2<core::num*>(10){(core::num*) →* core::int*});
   self::expect(23, let final self::Class* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field(#t1, #t2) in #t2);
   self::expect(67, let final self::Class* #t4 = c in let final core::int* #t5 = 67 in let final void #t6 = self::Extension2|set#field(#t4, #t5) in #t5);
   self::expect(23, self::Extension1|get#field(c));
   self::expect(67, self::Extension2|get#field(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.transformed.expect
index ad97e80..5beead8 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.transformed.expect
@@ -36,29 +36,29 @@
   set field = self::Extension2|set#field;
 }
 static method Extension1|get#field(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field1};
+  return #this.{self::Class::field1}{core::int*};
 static method Extension1|set#field(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field1} = value;
 }
 static method Extension1|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field1};
+  return #this.{self::Class::field1}{core::int*};
 static method Extension1|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
 static method Extension1|genericMethod<T extends core::num*>(lowered final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
-  return #this.{self::Class::field1}.{core::num::+}(t) as{TypeError} core::int*;
+  return #this.{self::Class::field1}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
 static method Extension1|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
 static method Extension2|get#field(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field2};
+  return #this.{self::Class::field2}{core::int*};
 static method Extension2|set#field(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field2} = value;
 }
 static method Extension2|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field2};
+  return #this.{self::Class::field2}{core::int*};
 static method Extension2|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
 static method Extension2|genericMethod<T extends core::num*>(lowered final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
-  return #this.{self::Class::field2}.{core::num::+}(t) as{TypeError} core::int*;
+  return #this.{self::Class::field2}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
 static method Extension2|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
 static method main() → dynamic {
@@ -69,25 +69,25 @@
   self::expect(87, self::Extension2|method(c));
   () →* core::int* tearOff1 = self::Extension1|get#method(c);
   () →* core::int* tearOff2 = self::Extension2|get#method(c);
-  self::expect(42, tearOff1.call());
-  self::expect(87, tearOff2.call());
+  self::expect(42, tearOff1(){() →* core::int*});
+  self::expect(87, tearOff2(){() →* core::int*});
   self::expect(52, self::Extension1|genericMethod<core::int*>(c, 10));
   self::expect(97, self::Extension2|genericMethod<core::int*>(c, 10));
   self::expect(52, self::Extension1|genericMethod<core::num*>(c, 10));
   self::expect(97, self::Extension2|genericMethod<core::num*>(c, 10));
   <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c);
   <T extends core::num*>(T*) →* core::int* genericTearOff2 = self::Extension2|get#genericMethod(c);
-  self::expect(52, genericTearOff1.call<core::int*>(10));
-  self::expect(97, genericTearOff2.call<core::int*>(10));
-  self::expect(52, genericTearOff1.call<core::num*>(10));
-  self::expect(97, genericTearOff2.call<core::num*>(10));
+  self::expect(52, genericTearOff1<core::int*>(10){(core::int*) →* core::int*});
+  self::expect(97, genericTearOff2<core::int*>(10){(core::int*) →* core::int*});
+  self::expect(52, genericTearOff1<core::num*>(10){(core::num*) →* core::int*});
+  self::expect(97, genericTearOff2<core::num*>(10){(core::num*) →* core::int*});
   self::expect(23, let final self::Class* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field(#t1, #t2) in #t2);
   self::expect(67, let final self::Class* #t4 = c in let final core::int* #t5 = 67 in let final void #t6 = self::Extension2|set#field(#t4, #t5) in #t5);
   self::expect(23, self::Extension1|get#field(c));
   self::expect(67, self::Extension2|get#field(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.expect
index 6cff7c7..6e15fda 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.expect
@@ -39,7 +39,7 @@
 static field core::String* Extension1|latestType;
 static method Extension1|get#field<T extends core::num*>(lowered final self::Class<self::Extension1|get#field::T*>* #this) → self::Extension1|get#field::T* {
   self::Extension1|latestType = "${self::Extension1|get#field::T*}";
-  return #this.{self::Class::field1};
+  return #this.{self::Class::field1}{self::Extension1|get#field::T*};
 }
 static method Extension1|set#field<T extends core::num*>(lowered final self::Class<self::Extension1|set#field::T*>* #this, self::Extension1|set#field::T* value) → void {
   self::Extension1|latestType = "${self::Extension1|set#field::T*}";
@@ -47,27 +47,27 @@
 }
 static method Extension1|method<T extends core::num*>(lowered final self::Class<self::Extension1|method::T*>* #this) → self::Extension1|method::T* {
   self::Extension1|latestType = "${self::Extension1|method::T*}";
-  return #this.{self::Class::field1};
+  return #this.{self::Class::field1}{self::Extension1|method::T*};
 }
 static method Extension1|get#method<T extends core::num*>(lowered final self::Class<self::Extension1|get#method::T*>* #this) → () →* self::Extension1|get#method::T*
   return () → self::Extension1|get#method::T* => self::Extension1|method<self::Extension1|get#method::T*>(#this);
 static method Extension1|genericMethod<T extends core::num*, S extends core::num*>(lowered final self::Class<self::Extension1|genericMethod::T*>* #this, self::Extension1|genericMethod::S* t) → self::Extension1|genericMethod::T* {
   self::Extension1|latestType = "${self::Extension1|genericMethod::T*}:${self::Extension1|genericMethod::S*}";
-  return #this.{self::Class::field1}.{core::num::+}(t) as{TypeError} self::Extension1|genericMethod::T*;
+  return #this.{self::Class::field1}{self::Extension1|genericMethod::T*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} self::Extension1|genericMethod::T*;
 }
 static method Extension1|get#genericMethod<T extends core::num*>(lowered final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension1|get#genericMethod::T*
   return <S extends core::num*>(S* t) → self::Extension1|get#genericMethod::T* => self::Extension1|genericMethod<self::Extension1|get#genericMethod::T*, S*>(#this, t);
 static method Extension2|get#field<T extends core::num*>(lowered final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
-  return #this.{self::Class::field2};
+  return #this.{self::Class::field2}{self::Extension2|get#field::T*};
 static method Extension2|set#field<T extends core::num*>(lowered final self::Class<self::Extension2|set#field::T*>* #this, self::Extension2|set#field::T* value) → void {
   #this.{self::Class::field2} = value;
 }
 static method Extension2|method<T extends core::num*>(lowered final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
-  return #this.{self::Class::field2};
+  return #this.{self::Class::field2}{self::Extension2|method::T*};
 static method Extension2|get#method<T extends core::num*>(lowered final self::Class<self::Extension2|get#method::T*>* #this) → () →* self::Extension2|get#method::T*
   return () → self::Extension2|get#method::T* => self::Extension2|method<self::Extension2|get#method::T*>(#this);
 static method Extension2|genericMethod<T extends core::num*, S extends core::num*>(lowered final self::Class<self::Extension2|genericMethod::T*>* #this, self::Extension2|genericMethod::S* t) → self::Extension2|genericMethod::T*
-  return #this.{self::Class::field2}.{core::num::+}(t) as{TypeError} self::Extension2|genericMethod::T*;
+  return #this.{self::Class::field2}{self::Extension2|genericMethod::T*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} self::Extension2|genericMethod::T*;
 static method Extension2|get#genericMethod<T extends core::num*>(lowered final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension2|get#genericMethod::T*
   return <S extends core::num*>(S* t) → self::Extension2|get#genericMethod::T* => self::Extension2|genericMethod<self::Extension2|get#genericMethod::T*, S*>(#this, t);
 static method main() → dynamic {
@@ -85,11 +85,11 @@
   () →* core::num* tearOffNumber1 = self::Extension1|get#method<core::num*>(c);
   () →* core::int* tearOffInteger1 = self::Extension1|get#method<core::int*>(c);
   () →* core::num* tearOff2 = self::Extension2|get#method<core::num*>(c);
-  self::expect(42, tearOffNumber1.call());
+  self::expect(42, tearOffNumber1(){() →* core::num*});
   self::expect("num", self::Extension1|latestType);
-  self::expect(42, tearOffInteger1.call());
+  self::expect(42, tearOffInteger1(){() →* core::int*});
   self::expect("int", self::Extension1|latestType);
-  self::expect(87, tearOff2.call());
+  self::expect(87, tearOff2(){() →* core::num*});
   self::expect(52, self::Extension1|genericMethod<core::num*, core::int*>(c, 10));
   self::expect("num:int", self::Extension1|latestType);
   self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
@@ -109,16 +109,16 @@
   <S extends core::num*>(S*) →* core::num* genericTearOffNumber1 = self::Extension1|get#genericMethod<core::num*>(c);
   <S extends core::num*>(S*) →* core::int* genericTearOffInteger1 = self::Extension1|get#genericMethod<core::int*>(c);
   <S extends core::num*>(S*) →* core::num* genericTearOff2 = self::Extension2|get#genericMethod<core::num*>(c);
-  self::expect(52, genericTearOffNumber1.call<core::int*>(10));
+  self::expect(52, genericTearOffNumber1<core::int*>(10){(core::int*) →* core::num*});
   self::expect("num:int", self::Extension1|latestType);
-  self::expect(52, genericTearOffInteger1.call<core::int*>(10));
+  self::expect(52, genericTearOffInteger1<core::int*>(10){(core::int*) →* core::int*});
   self::expect("int:int", self::Extension1|latestType);
-  self::expect(97, genericTearOff2.call<core::int*>(10));
-  self::expect(52, genericTearOffNumber1.call<core::num*>(10));
+  self::expect(97, genericTearOff2<core::int*>(10){(core::int*) →* core::num*});
+  self::expect(52, genericTearOffNumber1<core::num*>(10){(core::num*) →* core::num*});
   self::expect("num:num", self::Extension1|latestType);
-  self::expect(52, genericTearOffInteger1.call<core::num*>(10));
+  self::expect(52, genericTearOffInteger1<core::num*>(10){(core::num*) →* core::int*});
   self::expect("int:num", self::Extension1|latestType);
-  self::expect(97, genericTearOff2.call<core::num*>(10));
+  self::expect(97, genericTearOff2<core::num*>(10){(core::num*) →* core::num*});
   self::expect(23, let final self::Class<core::int*>* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field<core::num*>(#t1, #t2) in #t2);
   self::expect("num", self::Extension1|latestType);
   self::expect(23, let final self::Class<core::int*>* #t4 = c in let final core::int* #t5 = 23 in let final void #t6 = self::Extension1|set#field<core::int*>(#t4, #t5) in #t5);
@@ -128,7 +128,7 @@
   self::expect(67, self::Extension2|get#field<core::num*>(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.transformed.expect
index 8f41bf6..a8c297a 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.transformed.expect
@@ -39,7 +39,7 @@
 static field core::String* Extension1|latestType;
 static method Extension1|get#field<T extends core::num*>(lowered final self::Class<self::Extension1|get#field::T*>* #this) → self::Extension1|get#field::T* {
   self::Extension1|latestType = "${self::Extension1|get#field::T*}";
-  return #this.{self::Class::field1};
+  return #this.{self::Class::field1}{self::Extension1|get#field::T*};
 }
 static method Extension1|set#field<T extends core::num*>(lowered final self::Class<self::Extension1|set#field::T*>* #this, self::Extension1|set#field::T* value) → void {
   self::Extension1|latestType = "${self::Extension1|set#field::T*}";
@@ -47,27 +47,27 @@
 }
 static method Extension1|method<T extends core::num*>(lowered final self::Class<self::Extension1|method::T*>* #this) → self::Extension1|method::T* {
   self::Extension1|latestType = "${self::Extension1|method::T*}";
-  return #this.{self::Class::field1};
+  return #this.{self::Class::field1}{self::Extension1|method::T*};
 }
 static method Extension1|get#method<T extends core::num*>(lowered final self::Class<self::Extension1|get#method::T*>* #this) → () →* self::Extension1|get#method::T*
   return () → self::Extension1|get#method::T* => self::Extension1|method<self::Extension1|get#method::T*>(#this);
 static method Extension1|genericMethod<T extends core::num*, S extends core::num*>(lowered final self::Class<self::Extension1|genericMethod::T*>* #this, self::Extension1|genericMethod::S* t) → self::Extension1|genericMethod::T* {
   self::Extension1|latestType = "${self::Extension1|genericMethod::T*}:${self::Extension1|genericMethod::S*}";
-  return #this.{self::Class::field1}.{core::num::+}(t) as{TypeError} self::Extension1|genericMethod::T*;
+  return #this.{self::Class::field1}{self::Extension1|genericMethod::T*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} self::Extension1|genericMethod::T*;
 }
 static method Extension1|get#genericMethod<T extends core::num*>(lowered final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension1|get#genericMethod::T*
   return <S extends core::num*>(S* t) → self::Extension1|get#genericMethod::T* => self::Extension1|genericMethod<self::Extension1|get#genericMethod::T*, S*>(#this, t);
 static method Extension2|get#field<T extends core::num*>(lowered final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
-  return #this.{self::Class::field2};
+  return #this.{self::Class::field2}{self::Extension2|get#field::T*};
 static method Extension2|set#field<T extends core::num*>(lowered final self::Class<self::Extension2|set#field::T*>* #this, self::Extension2|set#field::T* value) → void {
   #this.{self::Class::field2} = value;
 }
 static method Extension2|method<T extends core::num*>(lowered final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
-  return #this.{self::Class::field2};
+  return #this.{self::Class::field2}{self::Extension2|method::T*};
 static method Extension2|get#method<T extends core::num*>(lowered final self::Class<self::Extension2|get#method::T*>* #this) → () →* self::Extension2|get#method::T*
   return () → self::Extension2|get#method::T* => self::Extension2|method<self::Extension2|get#method::T*>(#this);
 static method Extension2|genericMethod<T extends core::num*, S extends core::num*>(lowered final self::Class<self::Extension2|genericMethod::T*>* #this, self::Extension2|genericMethod::S* t) → self::Extension2|genericMethod::T*
-  return #this.{self::Class::field2}.{core::num::+}(t) as{TypeError} self::Extension2|genericMethod::T*;
+  return #this.{self::Class::field2}{self::Extension2|genericMethod::T*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} self::Extension2|genericMethod::T*;
 static method Extension2|get#genericMethod<T extends core::num*>(lowered final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension2|get#genericMethod::T*
   return <S extends core::num*>(S* t) → self::Extension2|get#genericMethod::T* => self::Extension2|genericMethod<self::Extension2|get#genericMethod::T*, S*>(#this, t);
 static method main() → dynamic {
@@ -85,11 +85,11 @@
   () →* core::num* tearOffNumber1 = self::Extension1|get#method<core::num*>(c);
   () →* core::int* tearOffInteger1 = self::Extension1|get#method<core::int*>(c);
   () →* core::num* tearOff2 = self::Extension2|get#method<core::num*>(c);
-  self::expect(42, tearOffNumber1.call());
+  self::expect(42, tearOffNumber1(){() →* core::num*});
   self::expect("num", self::Extension1|latestType);
-  self::expect(42, tearOffInteger1.call());
+  self::expect(42, tearOffInteger1(){() →* core::int*});
   self::expect("int", self::Extension1|latestType);
-  self::expect(87, tearOff2.call());
+  self::expect(87, tearOff2(){() →* core::num*});
   self::expect(52, self::Extension1|genericMethod<core::num*, core::int*>(c, 10));
   self::expect("num:int", self::Extension1|latestType);
   self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
@@ -109,16 +109,16 @@
   <S extends core::num*>(S*) →* core::num* genericTearOffNumber1 = self::Extension1|get#genericMethod<core::num*>(c);
   <S extends core::num*>(S*) →* core::int* genericTearOffInteger1 = self::Extension1|get#genericMethod<core::int*>(c);
   <S extends core::num*>(S*) →* core::num* genericTearOff2 = self::Extension2|get#genericMethod<core::num*>(c);
-  self::expect(52, genericTearOffNumber1.call<core::int*>(10));
+  self::expect(52, genericTearOffNumber1<core::int*>(10){(core::int*) →* core::num*});
   self::expect("num:int", self::Extension1|latestType);
-  self::expect(52, genericTearOffInteger1.call<core::int*>(10));
+  self::expect(52, genericTearOffInteger1<core::int*>(10){(core::int*) →* core::int*});
   self::expect("int:int", self::Extension1|latestType);
-  self::expect(97, genericTearOff2.call<core::int*>(10));
-  self::expect(52, genericTearOffNumber1.call<core::num*>(10));
+  self::expect(97, genericTearOff2<core::int*>(10){(core::int*) →* core::num*});
+  self::expect(52, genericTearOffNumber1<core::num*>(10){(core::num*) →* core::num*});
   self::expect("num:num", self::Extension1|latestType);
-  self::expect(52, genericTearOffInteger1.call<core::num*>(10));
+  self::expect(52, genericTearOffInteger1<core::num*>(10){(core::num*) →* core::int*});
   self::expect("int:num", self::Extension1|latestType);
-  self::expect(97, genericTearOff2.call<core::num*>(10));
+  self::expect(97, genericTearOff2<core::num*>(10){(core::num*) →* core::num*});
   self::expect(23, let final self::Class<core::int*>* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field<core::num*>(#t1, #t2) in #t2);
   self::expect("num", self::Extension1|latestType);
   self::expect(23, let final self::Class<core::int*>* #t4 = c in let final core::int* #t5 = 23 in let final void #t6 = self::Extension1|set#field<core::int*>(#t4, #t5) in #t5);
@@ -128,7 +128,7 @@
   self::expect(67, self::Extension2|get#field<core::num*>(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/explicit_this.dart.weak.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.expect
index f13b8bd..9328ef6 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.expect
@@ -28,11 +28,11 @@
   tearoff method4 = self::A2|get#method4;
 }
 static method A2|method2(lowered final self::A1* #this) → void
-  return #this.{self::A1::method1}();
+  return #this.{self::A1::method1}(){() →* void};
 static method A2|get#method2(lowered final self::A1* #this) → () →* void
   return () → void => self::A2|method2(#this);
 static method A2|method3(lowered final self::A1* #this) → core::Object*
-  return #this.{self::A1::field};
+  return #this.{self::A1::field}{core::Object*};
 static method A2|get#method3(lowered final self::A1* #this) → () →* core::Object*
   return () → core::Object* => self::A2|method3(#this);
 static method A2|method4(lowered final self::A1* #this, core::Object* o) → void {
diff --git a/pkg/front_end/testcases/extensions/explicit_this.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.transformed.expect
index f13b8bd..9328ef6 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.transformed.expect
@@ -28,11 +28,11 @@
   tearoff method4 = self::A2|get#method4;
 }
 static method A2|method2(lowered final self::A1* #this) → void
-  return #this.{self::A1::method1}();
+  return #this.{self::A1::method1}(){() →* void};
 static method A2|get#method2(lowered final self::A1* #this) → () →* void
   return () → void => self::A2|method2(#this);
 static method A2|method3(lowered final self::A1* #this) → core::Object*
-  return #this.{self::A1::field};
+  return #this.{self::A1::field}{core::Object*};
 static method A2|get#method3(lowered final self::A1* #this) → () →* core::Object*
   return () → core::Object* => self::A2|method3(#this);
 static method A2|method4(lowered final self::A1* #this, core::Object* o) → void {
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_call.dart.weak.expect
index 12c9cd8..c6d89be 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.weak.expect
@@ -24,7 +24,7 @@
   tearoff call = self::Extension|get#call;
 }
 static method Extension|call<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|call::T*>* #this, self::Extension|call::T* a) → self::Extension|call::T*
-  return #this.{self::Class::method}(a);
+  return #this.{self::Class::method}(a){(self::Extension|call::T*) →* self::Extension|call::T*};
 static method Extension|get#call<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#call::T*>* #this) → (self::Extension|get#call::T*) →* self::Extension|get#call::T*
   return (self::Extension|get#call::T* a) → self::Extension|get#call::T* => self::Extension|call<self::Extension|get#call::T*>(#this, a);
 static method main() → dynamic {
@@ -37,7 +37,7 @@
   self::expect(123, self::Extension|call<core::int*>(c, 123));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_call.dart.weak.transformed.expect
index 12c9cd8..c6d89be 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
   tearoff call = self::Extension|get#call;
 }
 static method Extension|call<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|call::T*>* #this, self::Extension|call::T* a) → self::Extension|call::T*
-  return #this.{self::Class::method}(a);
+  return #this.{self::Class::method}(a){(self::Extension|call::T*) →* self::Extension|call::T*};
 static method Extension|get#call<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#call::T*>* #this) → (self::Extension|get#call::T*) →* self::Extension|get#call::T*
   return (self::Extension|get#call::T* a) → self::Extension|get#call::T* => self::Extension|call<self::Extension|get#call::T*>(#this, a);
 static method main() → dynamic {
@@ -37,7 +37,7 @@
   self::expect(123, self::Extension|call<core::int*>(c, 123));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.expect
index e1fc1ee..3578f8e 100644
--- a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.expect
@@ -85,16 +85,16 @@
 static field core::int* E|field2 = (() → Null {
   invalid-type x = null;
   return null;
-}).call();
+})(){() →* Null};
 static field core::List<invalid-type>* E|field3 = null;
 static field (invalid-type) →* invalid-type E|field4 = null;
 static field (core::List<invalid-type>*) →* core::List<invalid-type>* E|field5 = null;
 static field core::int* E|field6 = (<E extends core::Object* = dynamic>() → Null {
   E* x = null;
   return null;
-}).call<core::String*>();
+})<core::String*>(){() →* Null};
 static field core::int* E|field7 = (<E extends core::Object* = dynamic>() → Null {
   E* x = null;
   return null;
-}).call<invalid-type>();
+})<invalid-type>(){() →* Null};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.transformed.expect
index e1fc1ee..3578f8e 100644
--- a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.transformed.expect
@@ -85,16 +85,16 @@
 static field core::int* E|field2 = (() → Null {
   invalid-type x = null;
   return null;
-}).call();
+})(){() →* Null};
 static field core::List<invalid-type>* E|field3 = null;
 static field (invalid-type) →* invalid-type E|field4 = null;
 static field (core::List<invalid-type>*) →* core::List<invalid-type>* E|field5 = null;
 static field core::int* E|field6 = (<E extends core::Object* = dynamic>() → Null {
   E* x = null;
   return null;
-}).call<core::String*>();
+})<core::String*>(){() →* Null};
 static field core::int* E|field7 = (<E extends core::Object* = dynamic>() → Null {
   E* x = null;
   return null;
-}).call<invalid-type>();
+})<invalid-type>(){() →* Null};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/extension_methods.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.expect
index fd6fddd..dd3ee97 100644
--- a/pkg/front_end/testcases/extensions/extension_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.expect
@@ -29,6 +29,6 @@
   return 2;
 static method main() → dynamic {
   self::C* c = new self::C::•();
-  core::int* result = c.{self::C::one}.{core::num::+}(self::E|get#two(c));
+  core::int* result = c.{self::C::one}{core::int*}.{core::num::+}(self::E|get#two(c)){(core::num*) →* core::int*};
   exp::Expect::equals(result, 3);
 }
diff --git a/pkg/front_end/testcases/extensions/extension_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.transformed.expect
index fd6fddd..dd3ee97 100644
--- a/pkg/front_end/testcases/extensions/extension_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.transformed.expect
@@ -29,6 +29,6 @@
   return 2;
 static method main() → dynamic {
   self::C* c = new self::C::•();
-  core::int* result = c.{self::C::one}.{core::num::+}(self::E|get#two(c));
+  core::int* result = c.{self::C::one}{core::int*}.{core::num::+}(self::E|get#two(c)){(core::num*) →* core::int*};
   exp::Expect::equals(result, 3);
 }
diff --git a/pkg/front_end/testcases/extensions/extension_setter.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_setter.dart.weak.expect
index ce8e8ef..049dae0 100644
--- a/pkg/front_end/testcases/extensions/extension_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter.dart.weak.expect
@@ -49,175 +49,175 @@
   set setter = self::GenericExtension|set#setter;
 }
 static method Extension|get#simpleSetter(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|set#simpleSetter(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field} = value;
 }
 static method Extension|get#mutatingSetter(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|set#mutatingSetter(lowered final self::Class* #this, core::int* value) → void {
-  value = value.{core::num::+}(1);
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
   #this.{self::Class::field} = value;
 }
 static method Extension|get#setterWithReturn(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|set#setterWithReturn(lowered final self::Class* #this, core::int* value) → void {
-  if(value.{core::num::<}(0)) {
-    #this.{self::Class::field} = value.{core::int::unary-}();
+  if(value.{core::num::<}(0){(core::num*) →* core::bool*}) {
+    #this.{self::Class::field} = value.{core::int::unary-}(){() →* core::int*};
     return;
   }
   #this.{self::Class::field} = value;
 }
 static method Extension|get#setterWithClosure(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|set#setterWithClosure(lowered final self::Class* #this, core::int* value) → void {
   function abs(dynamic value) → dynamic {
-    return value.<(0) as{TypeError,ForDynamic} core::bool* ?{dynamic} value.unary-() : value;
+    return value{dynamic}.<(0) as{TypeError,ForDynamic} core::bool* ?{dynamic} value{dynamic}.unary-() : value;
   }
-  #this.{self::Class::field} = abs.call(value) as{TypeError,ForDynamic} core::int*;
+  #this.{self::Class::field} = abs(value){(dynamic) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method Extension|testInternal(lowered final self::Class* #this) → dynamic {
-  self::expect(null, #this.{self::Class::field});
+  self::expect(null, #this.{self::Class::field}{core::int*});
   self::Extension|set#simpleSetter(#this, 0);
-  self::expect(0, #this.{self::Class::field});
+  self::expect(0, #this.{self::Class::field}{core::int*});
   self::expect(1, let final core::int* #t1 = 1 in let final void #t2 = self::Extension|set#simpleSetter(#this, #t1) in #t1);
   self::Extension|set#mutatingSetter(#this, 0);
-  self::expect(1, #this.{self::Class::field});
+  self::expect(1, #this.{self::Class::field}{core::int*});
   self::expect(2, let final core::int* #t3 = 2 in let final void #t4 = self::Extension|set#mutatingSetter(#this, #t3) in #t3);
-  self::expect(3, #this.{self::Class::field});
+  self::expect(3, #this.{self::Class::field}{core::int*});
   self::Extension|set#setterWithReturn(#this, 1);
-  self::expect(1, #this.{self::Class::field});
-  self::Extension|set#setterWithReturn(#this, 2.{core::int::unary-}());
-  self::expect(2, #this.{self::Class::field});
+  self::expect(1, #this.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(#this, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, #this.{self::Class::field}{core::int*});
   self::expect(3, let final core::int* #t5 = 3 in let final void #t6 = self::Extension|set#setterWithReturn(#this, #t5) in #t5);
-  self::expect(3, #this.{self::Class::field});
-  self::expect(4.{core::int::unary-}(), let final core::int* #t7 = 4.{core::int::unary-}() in let final void #t8 = self::Extension|set#setterWithReturn(#this, #t7) in #t7);
-  self::expect(4, #this.{self::Class::field});
+  self::expect(3, #this.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final core::int* #t7 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t8 = self::Extension|set#setterWithReturn(#this, #t7) in #t7);
+  self::expect(4, #this.{self::Class::field}{core::int*});
   self::Extension|set#setterWithClosure(#this, 1);
-  self::expect(1, #this.{self::Class::field});
-  self::Extension|set#setterWithClosure(#this, 2.{core::int::unary-}());
-  self::expect(2, #this.{self::Class::field});
+  self::expect(1, #this.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(#this, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, #this.{self::Class::field}{core::int*});
   self::expect(3, let final core::int* #t9 = 3 in let final void #t10 = self::Extension|set#setterWithClosure(#this, #t9) in #t9);
-  self::expect(3, #this.{self::Class::field});
-  self::expect(4.{core::int::unary-}(), let final core::int* #t11 = 4.{core::int::unary-}() in let final void #t12 = self::Extension|set#setterWithClosure(#this, #t11) in #t11);
-  self::expect(4, #this.{self::Class::field});
+  self::expect(3, #this.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final core::int* #t11 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t12 = self::Extension|set#setterWithClosure(#this, #t11) in #t11);
+  self::expect(4, #this.{self::Class::field}{core::int*});
 }
 static method Extension|get#testInternal(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|testInternal(#this);
 static method GenericExtension|set#setter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void {}
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
-  self::expect(null, c.{self::Class::field});
+  self::expect(null, c.{self::Class::field}{core::int*});
   self::Extension|set#simpleSetter(c, 0);
-  self::expect(0, c.{self::Class::field});
+  self::expect(0, c.{self::Class::field}{core::int*});
   self::expect(1, let final core::int* #t13 = 1 in let final void #t14 = self::Extension|set#simpleSetter(c, #t13) in #t13);
   self::Extension|set#simpleSetter(c, 2);
-  self::expect(2, c.{self::Class::field});
+  self::expect(2, c.{self::Class::field}{core::int*});
   self::expect(3, let final self::Class* #t15 = c in let final core::int* #t16 = 3 in let final void #t17 = self::Extension|set#simpleSetter(#t15, #t16) in #t16);
   self::Extension|set#mutatingSetter(c, 0);
-  self::expect(1, c.{self::Class::field});
+  self::expect(1, c.{self::Class::field}{core::int*});
   self::expect(2, let final core::int* #t18 = 2 in let final void #t19 = self::Extension|set#mutatingSetter(c, #t18) in #t18);
-  self::expect(3, c.{self::Class::field});
+  self::expect(3, c.{self::Class::field}{core::int*});
   self::Extension|set#mutatingSetter(c, 4);
-  self::expect(5, c.{self::Class::field});
+  self::expect(5, c.{self::Class::field}{core::int*});
   self::expect(6, let final self::Class* #t20 = c in let final core::int* #t21 = 6 in let final void #t22 = self::Extension|set#mutatingSetter(#t20, #t21) in #t21);
-  self::expect(7, c.{self::Class::field});
+  self::expect(7, c.{self::Class::field}{core::int*});
   self::Extension|set#setterWithReturn(c, 1);
-  self::expect(1, c.{self::Class::field});
-  self::Extension|set#setterWithReturn(c, 2.{core::int::unary-}());
-  self::expect(2, c.{self::Class::field});
+  self::expect(1, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(c, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, c.{self::Class::field}{core::int*});
   self::expect(3, let final core::int* #t23 = 3 in let final void #t24 = self::Extension|set#setterWithReturn(c, #t23) in #t23);
-  self::expect(3, c.{self::Class::field});
-  self::expect(4.{core::int::unary-}(), let final core::int* #t25 = 4.{core::int::unary-}() in let final void #t26 = self::Extension|set#setterWithReturn(c, #t25) in #t25);
-  self::expect(4, c.{self::Class::field});
+  self::expect(3, c.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final core::int* #t25 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t26 = self::Extension|set#setterWithReturn(c, #t25) in #t25);
+  self::expect(4, c.{self::Class::field}{core::int*});
   self::Extension|set#setterWithReturn(c, 5);
-  self::expect(5, c.{self::Class::field});
-  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}());
-  self::expect(6, c.{self::Class::field});
+  self::expect(5, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() →* core::int*});
+  self::expect(6, c.{self::Class::field}{core::int*});
   self::expect(7, let final self::Class* #t27 = c in let final core::int* #t28 = 7 in let final void #t29 = self::Extension|set#setterWithReturn(#t27, #t28) in #t28);
-  self::expect(7, c.{self::Class::field});
-  self::expect(8.{core::int::unary-}(), let final self::Class* #t30 = c in let final core::int* #t31 = 8.{core::int::unary-}() in let final void #t32 = self::Extension|set#setterWithReturn(#t30, #t31) in #t31);
-  self::expect(8, c.{self::Class::field});
+  self::expect(7, c.{self::Class::field}{core::int*});
+  self::expect(8.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t30 = c in let final core::int* #t31 = 8.{core::int::unary-}(){() →* core::int*} in let final void #t32 = self::Extension|set#setterWithReturn(#t30, #t31) in #t31);
+  self::expect(8, c.{self::Class::field}{core::int*});
   self::Extension|set#setterWithClosure(c, 1);
-  self::expect(1, c.{self::Class::field});
-  self::Extension|set#setterWithClosure(c, 2.{core::int::unary-}());
-  self::expect(2, c.{self::Class::field});
+  self::expect(1, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(c, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, c.{self::Class::field}{core::int*});
   self::expect(3, let final core::int* #t33 = 3 in let final void #t34 = self::Extension|set#setterWithClosure(c, #t33) in #t33);
-  self::expect(3, c.{self::Class::field});
-  self::expect(4.{core::int::unary-}(), let final core::int* #t35 = 4.{core::int::unary-}() in let final void #t36 = self::Extension|set#setterWithClosure(c, #t35) in #t35);
-  self::expect(4, c.{self::Class::field});
+  self::expect(3, c.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final core::int* #t35 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t36 = self::Extension|set#setterWithClosure(c, #t35) in #t35);
+  self::expect(4, c.{self::Class::field}{core::int*});
   self::Extension|set#setterWithClosure(c, 5);
-  self::expect(5, c.{self::Class::field});
-  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}());
-  self::expect(6, c.{self::Class::field});
+  self::expect(5, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() →* core::int*});
+  self::expect(6, c.{self::Class::field}{core::int*});
   self::expect(7, let final self::Class* #t37 = c in let final core::int* #t38 = 7 in let final void #t39 = self::Extension|set#setterWithClosure(#t37, #t38) in #t38);
-  self::expect(7, c.{self::Class::field});
-  self::expect(8.{core::int::unary-}(), let final self::Class* #t40 = c in let final core::int* #t41 = 8.{core::int::unary-}() in let final void #t42 = self::Extension|set#setterWithClosure(#t40, #t41) in #t41);
-  self::expect(8, c.{self::Class::field});
+  self::expect(7, c.{self::Class::field}{core::int*});
+  self::expect(8.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t40 = c in let final core::int* #t41 = 8.{core::int::unary-}(){() →* core::int*} in let final void #t42 = self::Extension|set#setterWithClosure(#t40, #t41) in #t41);
+  self::expect(8, c.{self::Class::field}{core::int*});
   self::Extension|set#simpleSetter(c, 0);
-  self::expect(0, let final self::Class* #t43 = c in #t43.{self::Class::==}(null) ?{core::int*} null : #t43.{self::Class::field});
-  self::expect(1, let final self::Class* #t44 = c in #t44.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t45 = 1 in let final void #t46 = self::Extension|set#simpleSetter(#t44, #t45) in #t45);
+  self::expect(0, let final self::Class* #t43 = c in #t43 == null ?{core::int*} null : #t43.{self::Class::field}{core::int*});
+  self::expect(1, let final self::Class* #t44 = c in #t44 == null ?{core::int*} null : let final core::int* #t45 = 1 in let final void #t46 = self::Extension|set#simpleSetter(#t44, #t45) in #t45);
   self::Extension|set#simpleSetter(c, 2);
-  self::expect(2, let final self::Class* #t47 = c in #t47.{self::Class::==}(null) ?{core::int*} null : #t47.{self::Class::field});
+  self::expect(2, let final self::Class* #t47 = c in #t47 == null ?{core::int*} null : #t47.{self::Class::field}{core::int*});
   self::expect(3, let final self::Class* #t48 = c in let final core::int* #t49 = 3 in let final void #t50 = self::Extension|set#simpleSetter(#t48, #t49) in #t49);
   self::Extension|set#mutatingSetter(c, 0);
-  self::expect(1, let final self::Class* #t51 = c in #t51.{self::Class::==}(null) ?{core::int*} null : #t51.{self::Class::field});
-  self::expect(2, let final self::Class* #t52 = c in #t52.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t53 = 2 in let final void #t54 = self::Extension|set#mutatingSetter(#t52, #t53) in #t53);
-  self::expect(3, let final self::Class* #t55 = c in #t55.{self::Class::==}(null) ?{core::int*} null : #t55.{self::Class::field});
+  self::expect(1, let final self::Class* #t51 = c in #t51 == null ?{core::int*} null : #t51.{self::Class::field}{core::int*});
+  self::expect(2, let final self::Class* #t52 = c in #t52 == null ?{core::int*} null : let final core::int* #t53 = 2 in let final void #t54 = self::Extension|set#mutatingSetter(#t52, #t53) in #t53);
+  self::expect(3, let final self::Class* #t55 = c in #t55 == null ?{core::int*} null : #t55.{self::Class::field}{core::int*});
   self::Extension|set#mutatingSetter(c, 4);
-  self::expect(5, let final self::Class* #t56 = c in #t56.{self::Class::==}(null) ?{core::int*} null : #t56.{self::Class::field});
+  self::expect(5, let final self::Class* #t56 = c in #t56 == null ?{core::int*} null : #t56.{self::Class::field}{core::int*});
   self::expect(6, let final self::Class* #t57 = c in let final core::int* #t58 = 6 in let final void #t59 = self::Extension|set#mutatingSetter(#t57, #t58) in #t58);
-  self::expect(7, let final self::Class* #t60 = c in #t60.{self::Class::==}(null) ?{core::int*} null : #t60.{self::Class::field});
-  let final self::Class* #t61 = c in #t61.{self::Class::==}(null) ?{core::int*} null : self::Extension|set#setterWithReturn(#t61, 1);
-  self::expect(1, let final self::Class* #t62 = c in #t62.{self::Class::==}(null) ?{core::int*} null : #t62.{self::Class::field});
-  let final self::Class* #t63 = c in #t63.{self::Class::==}(null) ?{core::int*} null : self::Extension|set#setterWithReturn(#t63, 2.{core::int::unary-}());
-  self::expect(2, let final self::Class* #t64 = c in #t64.{self::Class::==}(null) ?{core::int*} null : #t64.{self::Class::field});
-  self::expect(3, let final self::Class* #t65 = c in #t65.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t66 = 3 in let final void #t67 = self::Extension|set#setterWithReturn(#t65, #t66) in #t66);
-  self::expect(3, let final self::Class* #t68 = c in #t68.{self::Class::==}(null) ?{core::int*} null : #t68.{self::Class::field});
-  self::expect(4.{core::int::unary-}(), let final self::Class* #t69 = c in #t69.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t70 = 4.{core::int::unary-}() in let final void #t71 = self::Extension|set#setterWithReturn(#t69, #t70) in #t70);
-  self::expect(4, let final self::Class* #t72 = c in #t72.{self::Class::==}(null) ?{core::int*} null : #t72.{self::Class::field});
+  self::expect(7, let final self::Class* #t60 = c in #t60 == null ?{core::int*} null : #t60.{self::Class::field}{core::int*});
+  let final self::Class* #t61 = c in #t61 == null ?{core::int*} null : self::Extension|set#setterWithReturn(#t61, 1);
+  self::expect(1, let final self::Class* #t62 = c in #t62 == null ?{core::int*} null : #t62.{self::Class::field}{core::int*});
+  let final self::Class* #t63 = c in #t63 == null ?{core::int*} null : self::Extension|set#setterWithReturn(#t63, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, let final self::Class* #t64 = c in #t64 == null ?{core::int*} null : #t64.{self::Class::field}{core::int*});
+  self::expect(3, let final self::Class* #t65 = c in #t65 == null ?{core::int*} null : let final core::int* #t66 = 3 in let final void #t67 = self::Extension|set#setterWithReturn(#t65, #t66) in #t66);
+  self::expect(3, let final self::Class* #t68 = c in #t68 == null ?{core::int*} null : #t68.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t69 = c in #t69 == null ?{core::int*} null : let final core::int* #t70 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t71 = self::Extension|set#setterWithReturn(#t69, #t70) in #t70);
+  self::expect(4, let final self::Class* #t72 = c in #t72 == null ?{core::int*} null : #t72.{self::Class::field}{core::int*});
   self::Extension|set#setterWithReturn(c, 5);
-  self::expect(5, let final self::Class* #t73 = c in #t73.{self::Class::==}(null) ?{core::int*} null : #t73.{self::Class::field});
-  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}());
-  self::expect(6, let final self::Class* #t74 = c in #t74.{self::Class::==}(null) ?{core::int*} null : #t74.{self::Class::field});
+  self::expect(5, let final self::Class* #t73 = c in #t73 == null ?{core::int*} null : #t73.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() →* core::int*});
+  self::expect(6, let final self::Class* #t74 = c in #t74 == null ?{core::int*} null : #t74.{self::Class::field}{core::int*});
   self::expect(7, let final self::Class* #t75 = c in let final core::int* #t76 = 7 in let final void #t77 = self::Extension|set#setterWithReturn(#t75, #t76) in #t76);
-  self::expect(7, let final self::Class* #t78 = c in #t78.{self::Class::==}(null) ?{core::int*} null : #t78.{self::Class::field});
-  self::expect(8.{core::int::unary-}(), let final self::Class* #t79 = c in let final core::int* #t80 = 8.{core::int::unary-}() in let final void #t81 = self::Extension|set#setterWithReturn(#t79, #t80) in #t80);
-  self::expect(8, let final self::Class* #t82 = c in #t82.{self::Class::==}(null) ?{core::int*} null : #t82.{self::Class::field});
-  let final self::Class* #t83 = c in #t83.{self::Class::==}(null) ?{core::int*} null : self::Extension|set#setterWithClosure(#t83, 1);
-  self::expect(1, let final self::Class* #t84 = c in #t84.{self::Class::==}(null) ?{core::int*} null : #t84.{self::Class::field});
-  let final self::Class* #t85 = c in #t85.{self::Class::==}(null) ?{core::int*} null : self::Extension|set#setterWithClosure(#t85, 2.{core::int::unary-}());
-  self::expect(2, let final self::Class* #t86 = c in #t86.{self::Class::==}(null) ?{core::int*} null : #t86.{self::Class::field});
-  self::expect(3, let final self::Class* #t87 = c in #t87.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t88 = 3 in let final void #t89 = self::Extension|set#setterWithClosure(#t87, #t88) in #t88);
-  self::expect(3, let final self::Class* #t90 = c in #t90.{self::Class::==}(null) ?{core::int*} null : #t90.{self::Class::field});
-  self::expect(4.{core::int::unary-}(), let final self::Class* #t91 = c in #t91.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t92 = 4.{core::int::unary-}() in let final void #t93 = self::Extension|set#setterWithClosure(#t91, #t92) in #t92);
-  self::expect(4, let final self::Class* #t94 = c in #t94.{self::Class::==}(null) ?{core::int*} null : #t94.{self::Class::field});
+  self::expect(7, let final self::Class* #t78 = c in #t78 == null ?{core::int*} null : #t78.{self::Class::field}{core::int*});
+  self::expect(8.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t79 = c in let final core::int* #t80 = 8.{core::int::unary-}(){() →* core::int*} in let final void #t81 = self::Extension|set#setterWithReturn(#t79, #t80) in #t80);
+  self::expect(8, let final self::Class* #t82 = c in #t82 == null ?{core::int*} null : #t82.{self::Class::field}{core::int*});
+  let final self::Class* #t83 = c in #t83 == null ?{core::int*} null : self::Extension|set#setterWithClosure(#t83, 1);
+  self::expect(1, let final self::Class* #t84 = c in #t84 == null ?{core::int*} null : #t84.{self::Class::field}{core::int*});
+  let final self::Class* #t85 = c in #t85 == null ?{core::int*} null : self::Extension|set#setterWithClosure(#t85, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, let final self::Class* #t86 = c in #t86 == null ?{core::int*} null : #t86.{self::Class::field}{core::int*});
+  self::expect(3, let final self::Class* #t87 = c in #t87 == null ?{core::int*} null : let final core::int* #t88 = 3 in let final void #t89 = self::Extension|set#setterWithClosure(#t87, #t88) in #t88);
+  self::expect(3, let final self::Class* #t90 = c in #t90 == null ?{core::int*} null : #t90.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t91 = c in #t91 == null ?{core::int*} null : let final core::int* #t92 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t93 = self::Extension|set#setterWithClosure(#t91, #t92) in #t92);
+  self::expect(4, let final self::Class* #t94 = c in #t94 == null ?{core::int*} null : #t94.{self::Class::field}{core::int*});
   self::Extension|set#setterWithClosure(c, 5);
-  self::expect(5, let final self::Class* #t95 = c in #t95.{self::Class::==}(null) ?{core::int*} null : #t95.{self::Class::field});
-  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}());
-  self::expect(6, let final self::Class* #t96 = c in #t96.{self::Class::==}(null) ?{core::int*} null : #t96.{self::Class::field});
+  self::expect(5, let final self::Class* #t95 = c in #t95 == null ?{core::int*} null : #t95.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() →* core::int*});
+  self::expect(6, let final self::Class* #t96 = c in #t96 == null ?{core::int*} null : #t96.{self::Class::field}{core::int*});
   self::expect(7, let final self::Class* #t97 = c in let final core::int* #t98 = 7 in let final void #t99 = self::Extension|set#setterWithClosure(#t97, #t98) in #t98);
-  self::expect(7, let final self::Class* #t100 = c in #t100.{self::Class::==}(null) ?{core::int*} null : #t100.{self::Class::field});
-  self::expect(8.{core::int::unary-}(), let final self::Class* #t101 = c in let final core::int* #t102 = 8.{core::int::unary-}() in let final void #t103 = self::Extension|set#setterWithClosure(#t101, #t102) in #t102);
-  self::expect(8, let final self::Class* #t104 = c in #t104.{self::Class::==}(null) ?{core::int*} null : #t104.{self::Class::field});
+  self::expect(7, let final self::Class* #t100 = c in #t100 == null ?{core::int*} null : #t100.{self::Class::field}{core::int*});
+  self::expect(8.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t101 = c in let final core::int* #t102 = 8.{core::int::unary-}(){() →* core::int*} in let final void #t103 = self::Extension|set#setterWithClosure(#t101, #t102) in #t102);
+  self::expect(8, let final self::Class* #t104 = c in #t104 == null ?{core::int*} null : #t104.{self::Class::field}{core::int*});
   c.{self::Class::field} = null;
-  let final self::Class* #t105 = c in self::Extension|get#simpleSetter(#t105).{core::num::==}(null) ?{core::int*} self::Extension|set#simpleSetter(#t105, 1) : null;
-  self::expect(1, c.{self::Class::field});
-  self::expect(1, let final self::Class* #t106 = c in let final core::int* #t107 = self::Extension|get#simpleSetter(#t106) in #t107.{core::num::==}(null) ?{core::int*} let final core::int* #t108 = 2 in let final void #t109 = self::Extension|set#simpleSetter(#t106, #t108) in #t108 : #t107);
+  let final self::Class* #t105 = c in self::Extension|get#simpleSetter(#t105) == null ?{core::int*} self::Extension|set#simpleSetter(#t105, 1) : null;
+  self::expect(1, c.{self::Class::field}{core::int*});
+  self::expect(1, let final self::Class* #t106 = c in let final core::int* #t107 = self::Extension|get#simpleSetter(#t106) in #t107 == null ?{core::int*} let final core::int* #t108 = 2 in let final void #t109 = self::Extension|set#simpleSetter(#t106, #t108) in #t108 : #t107);
   c.{self::Class::field} = null;
-  self::expect(2, let final self::Class* #t110 = c in let final core::int* #t111 = self::Extension|get#simpleSetter(#t110) in #t111.{core::num::==}(null) ?{core::int*} let final core::int* #t112 = 2 in let final void #t113 = self::Extension|set#simpleSetter(#t110, #t112) in #t112 : #t111);
-  let final self::Class* #t114 = c in #t114.{self::Class::==}(null) ?{Null} null : #t114.{self::Class::field} = null;
-  let final self::Class* #t115 = c in #t115.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#simpleSetter(#t115).{core::num::==}(null) ?{core::int*} self::Extension|set#simpleSetter(#t115, 1) : null;
-  self::expect(1, let final self::Class* #t116 = c in #t116.{self::Class::==}(null) ?{core::int*} null : #t116.{self::Class::field});
-  self::expect(1, let final self::Class* #t117 = c in #t117.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t118 = self::Extension|get#simpleSetter(#t117) in #t118.{core::num::==}(null) ?{core::int*} let final core::int* #t119 = 2 in let final void #t120 = self::Extension|set#simpleSetter(#t117, #t119) in #t119 : #t118);
-  let final self::Class* #t121 = c in #t121.{self::Class::==}(null) ?{Null} null : #t121.{self::Class::field} = null;
-  self::expect(2, let final self::Class* #t122 = c in #t122.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t123 = self::Extension|get#simpleSetter(#t122) in #t123.{core::num::==}(null) ?{core::int*} let final core::int* #t124 = 2 in let final void #t125 = self::Extension|set#simpleSetter(#t122, #t124) in #t124 : #t123);
+  self::expect(2, let final self::Class* #t110 = c in let final core::int* #t111 = self::Extension|get#simpleSetter(#t110) in #t111 == null ?{core::int*} let final core::int* #t112 = 2 in let final void #t113 = self::Extension|set#simpleSetter(#t110, #t112) in #t112 : #t111);
+  let final self::Class* #t114 = c in #t114 == null ?{Null} null : #t114.{self::Class::field} = null;
+  let final self::Class* #t115 = c in #t115 == null ?{core::int*} null : self::Extension|get#simpleSetter(#t115) == null ?{core::int*} self::Extension|set#simpleSetter(#t115, 1) : null;
+  self::expect(1, let final self::Class* #t116 = c in #t116 == null ?{core::int*} null : #t116.{self::Class::field}{core::int*});
+  self::expect(1, let final self::Class* #t117 = c in #t117 == null ?{core::int*} null : let final core::int* #t118 = self::Extension|get#simpleSetter(#t117) in #t118 == null ?{core::int*} let final core::int* #t119 = 2 in let final void #t120 = self::Extension|set#simpleSetter(#t117, #t119) in #t119 : #t118);
+  let final self::Class* #t121 = c in #t121 == null ?{Null} null : #t121.{self::Class::field} = null;
+  self::expect(2, let final self::Class* #t122 = c in #t122 == null ?{core::int*} null : let final core::int* #t123 = self::Extension|get#simpleSetter(#t122) in #t123 == null ?{core::int*} let final core::int* #t124 = 2 in let final void #t125 = self::Extension|set#simpleSetter(#t122, #t124) in #t124 : #t123);
   self::Extension|testInternal(new self::Class::•());
   self::GenericClass<core::int*>* genericClass = new self::GenericClass::•<core::int*>();
   self::expect(1, let final self::GenericClass<core::int*>* #t126 = genericClass in let final core::int* #t127 = 1 in let final void #t128 = self::GenericExtension|set#setter<core::int*>(#t126, #t127) in #t127);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/extension_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_setter.dart.weak.transformed.expect
index 37d083c..27a9a41 100644
--- a/pkg/front_end/testcases/extensions/extension_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter.dart.weak.transformed.expect
@@ -49,175 +49,175 @@
   set setter = self::GenericExtension|set#setter;
 }
 static method Extension|get#simpleSetter(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|set#simpleSetter(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field} = value;
 }
 static method Extension|get#mutatingSetter(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|set#mutatingSetter(lowered final self::Class* #this, core::int* value) → void {
-  value = value.{core::num::+}(1);
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
   #this.{self::Class::field} = value;
 }
 static method Extension|get#setterWithReturn(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|set#setterWithReturn(lowered final self::Class* #this, core::int* value) → void {
-  if(value.{core::num::<}(0)) {
-    #this.{self::Class::field} = value.{core::int::unary-}();
+  if(value.{core::num::<}(0){(core::num*) →* core::bool*}) {
+    #this.{self::Class::field} = value.{core::int::unary-}(){() →* core::int*};
     return;
   }
   #this.{self::Class::field} = value;
 }
 static method Extension|get#setterWithClosure(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|set#setterWithClosure(lowered final self::Class* #this, core::int* value) → void {
   function abs(dynamic value) → dynamic {
-    return value.<(0) as{TypeError,ForDynamic} core::bool* ?{dynamic} value.unary-() : value;
+    return value{dynamic}.<(0) as{TypeError,ForDynamic} core::bool* ?{dynamic} value{dynamic}.unary-() : value;
   }
-  #this.{self::Class::field} = abs.call(value) as{TypeError,ForDynamic} core::int*;
+  #this.{self::Class::field} = abs(value){(dynamic) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method Extension|testInternal(lowered final self::Class* #this) → dynamic {
-  self::expect(null, #this.{self::Class::field});
+  self::expect(null, #this.{self::Class::field}{core::int*});
   self::Extension|set#simpleSetter(#this, 0);
-  self::expect(0, #this.{self::Class::field});
+  self::expect(0, #this.{self::Class::field}{core::int*});
   self::expect(1, let final core::int* #t1 = 1 in let final void #t2 = self::Extension|set#simpleSetter(#this, #t1) in #t1);
   self::Extension|set#mutatingSetter(#this, 0);
-  self::expect(1, #this.{self::Class::field});
+  self::expect(1, #this.{self::Class::field}{core::int*});
   self::expect(2, let final core::int* #t3 = 2 in let final void #t4 = self::Extension|set#mutatingSetter(#this, #t3) in #t3);
-  self::expect(3, #this.{self::Class::field});
+  self::expect(3, #this.{self::Class::field}{core::int*});
   self::Extension|set#setterWithReturn(#this, 1);
-  self::expect(1, #this.{self::Class::field});
-  self::Extension|set#setterWithReturn(#this, 2.{core::int::unary-}());
-  self::expect(2, #this.{self::Class::field});
+  self::expect(1, #this.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(#this, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, #this.{self::Class::field}{core::int*});
   self::expect(3, let final core::int* #t5 = 3 in let final void #t6 = self::Extension|set#setterWithReturn(#this, #t5) in #t5);
-  self::expect(3, #this.{self::Class::field});
-  self::expect(4.{core::int::unary-}(), let final core::int* #t7 = 4.{core::int::unary-}() in let final void #t8 = self::Extension|set#setterWithReturn(#this, #t7) in #t7);
-  self::expect(4, #this.{self::Class::field});
+  self::expect(3, #this.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final core::int* #t7 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t8 = self::Extension|set#setterWithReturn(#this, #t7) in #t7);
+  self::expect(4, #this.{self::Class::field}{core::int*});
   self::Extension|set#setterWithClosure(#this, 1);
-  self::expect(1, #this.{self::Class::field});
-  self::Extension|set#setterWithClosure(#this, 2.{core::int::unary-}());
-  self::expect(2, #this.{self::Class::field});
+  self::expect(1, #this.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(#this, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, #this.{self::Class::field}{core::int*});
   self::expect(3, let final core::int* #t9 = 3 in let final void #t10 = self::Extension|set#setterWithClosure(#this, #t9) in #t9);
-  self::expect(3, #this.{self::Class::field});
-  self::expect(4.{core::int::unary-}(), let final core::int* #t11 = 4.{core::int::unary-}() in let final void #t12 = self::Extension|set#setterWithClosure(#this, #t11) in #t11);
-  self::expect(4, #this.{self::Class::field});
+  self::expect(3, #this.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final core::int* #t11 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t12 = self::Extension|set#setterWithClosure(#this, #t11) in #t11);
+  self::expect(4, #this.{self::Class::field}{core::int*});
 }
 static method Extension|get#testInternal(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|testInternal(#this);
 static method GenericExtension|set#setter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void {}
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
-  self::expect(null, c.{self::Class::field});
+  self::expect(null, c.{self::Class::field}{core::int*});
   self::Extension|set#simpleSetter(c, 0);
-  self::expect(0, c.{self::Class::field});
+  self::expect(0, c.{self::Class::field}{core::int*});
   self::expect(1, let final core::int* #t13 = 1 in let final void #t14 = self::Extension|set#simpleSetter(c, #t13) in #t13);
   self::Extension|set#simpleSetter(c, 2);
-  self::expect(2, c.{self::Class::field});
+  self::expect(2, c.{self::Class::field}{core::int*});
   self::expect(3, let final self::Class* #t15 = c in let final core::int* #t16 = 3 in let final void #t17 = self::Extension|set#simpleSetter(#t15, #t16) in #t16);
   self::Extension|set#mutatingSetter(c, 0);
-  self::expect(1, c.{self::Class::field});
+  self::expect(1, c.{self::Class::field}{core::int*});
   self::expect(2, let final core::int* #t18 = 2 in let final void #t19 = self::Extension|set#mutatingSetter(c, #t18) in #t18);
-  self::expect(3, c.{self::Class::field});
+  self::expect(3, c.{self::Class::field}{core::int*});
   self::Extension|set#mutatingSetter(c, 4);
-  self::expect(5, c.{self::Class::field});
+  self::expect(5, c.{self::Class::field}{core::int*});
   self::expect(6, let final self::Class* #t20 = c in let final core::int* #t21 = 6 in let final void #t22 = self::Extension|set#mutatingSetter(#t20, #t21) in #t21);
-  self::expect(7, c.{self::Class::field});
+  self::expect(7, c.{self::Class::field}{core::int*});
   self::Extension|set#setterWithReturn(c, 1);
-  self::expect(1, c.{self::Class::field});
-  self::Extension|set#setterWithReturn(c, 2.{core::int::unary-}());
-  self::expect(2, c.{self::Class::field});
+  self::expect(1, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(c, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, c.{self::Class::field}{core::int*});
   self::expect(3, let final core::int* #t23 = 3 in let final void #t24 = self::Extension|set#setterWithReturn(c, #t23) in #t23);
-  self::expect(3, c.{self::Class::field});
-  self::expect(4.{core::int::unary-}(), let final core::int* #t25 = 4.{core::int::unary-}() in let final void #t26 = self::Extension|set#setterWithReturn(c, #t25) in #t25);
-  self::expect(4, c.{self::Class::field});
+  self::expect(3, c.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final core::int* #t25 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t26 = self::Extension|set#setterWithReturn(c, #t25) in #t25);
+  self::expect(4, c.{self::Class::field}{core::int*});
   self::Extension|set#setterWithReturn(c, 5);
-  self::expect(5, c.{self::Class::field});
-  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}());
-  self::expect(6, c.{self::Class::field});
+  self::expect(5, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() →* core::int*});
+  self::expect(6, c.{self::Class::field}{core::int*});
   self::expect(7, let final self::Class* #t27 = c in let final core::int* #t28 = 7 in let final void #t29 = self::Extension|set#setterWithReturn(#t27, #t28) in #t28);
-  self::expect(7, c.{self::Class::field});
-  self::expect(8.{core::int::unary-}(), let final self::Class* #t30 = c in let final core::int* #t31 = 8.{core::int::unary-}() in let final void #t32 = self::Extension|set#setterWithReturn(#t30, #t31) in #t31);
-  self::expect(8, c.{self::Class::field});
+  self::expect(7, c.{self::Class::field}{core::int*});
+  self::expect(8.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t30 = c in let final core::int* #t31 = 8.{core::int::unary-}(){() →* core::int*} in let final void #t32 = self::Extension|set#setterWithReturn(#t30, #t31) in #t31);
+  self::expect(8, c.{self::Class::field}{core::int*});
   self::Extension|set#setterWithClosure(c, 1);
-  self::expect(1, c.{self::Class::field});
-  self::Extension|set#setterWithClosure(c, 2.{core::int::unary-}());
-  self::expect(2, c.{self::Class::field});
+  self::expect(1, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(c, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, c.{self::Class::field}{core::int*});
   self::expect(3, let final core::int* #t33 = 3 in let final void #t34 = self::Extension|set#setterWithClosure(c, #t33) in #t33);
-  self::expect(3, c.{self::Class::field});
-  self::expect(4.{core::int::unary-}(), let final core::int* #t35 = 4.{core::int::unary-}() in let final void #t36 = self::Extension|set#setterWithClosure(c, #t35) in #t35);
-  self::expect(4, c.{self::Class::field});
+  self::expect(3, c.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final core::int* #t35 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t36 = self::Extension|set#setterWithClosure(c, #t35) in #t35);
+  self::expect(4, c.{self::Class::field}{core::int*});
   self::Extension|set#setterWithClosure(c, 5);
-  self::expect(5, c.{self::Class::field});
-  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}());
-  self::expect(6, c.{self::Class::field});
+  self::expect(5, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() →* core::int*});
+  self::expect(6, c.{self::Class::field}{core::int*});
   self::expect(7, let final self::Class* #t37 = c in let final core::int* #t38 = 7 in let final void #t39 = self::Extension|set#setterWithClosure(#t37, #t38) in #t38);
-  self::expect(7, c.{self::Class::field});
-  self::expect(8.{core::int::unary-}(), let final self::Class* #t40 = c in let final core::int* #t41 = 8.{core::int::unary-}() in let final void #t42 = self::Extension|set#setterWithClosure(#t40, #t41) in #t41);
-  self::expect(8, c.{self::Class::field});
+  self::expect(7, c.{self::Class::field}{core::int*});
+  self::expect(8.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t40 = c in let final core::int* #t41 = 8.{core::int::unary-}(){() →* core::int*} in let final void #t42 = self::Extension|set#setterWithClosure(#t40, #t41) in #t41);
+  self::expect(8, c.{self::Class::field}{core::int*});
   self::Extension|set#simpleSetter(c, 0);
-  self::expect(0, let final self::Class* #t43 = c in #t43.{self::Class::==}(null) ?{core::int*} null : #t43.{self::Class::field});
-  self::expect(1, let final self::Class* #t44 = c in #t44.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t45 = 1 in let final void #t46 = self::Extension|set#simpleSetter(#t44, #t45) in #t45);
+  self::expect(0, let final self::Class* #t43 = c in #t43 == null ?{core::int*} null : #t43.{self::Class::field}{core::int*});
+  self::expect(1, let final self::Class* #t44 = c in #t44 == null ?{core::int*} null : let final core::int* #t45 = 1 in let final void #t46 = self::Extension|set#simpleSetter(#t44, #t45) in #t45);
   self::Extension|set#simpleSetter(c, 2);
-  self::expect(2, let final self::Class* #t47 = c in #t47.{self::Class::==}(null) ?{core::int*} null : #t47.{self::Class::field});
+  self::expect(2, let final self::Class* #t47 = c in #t47 == null ?{core::int*} null : #t47.{self::Class::field}{core::int*});
   self::expect(3, let final self::Class* #t48 = c in let final core::int* #t49 = 3 in let final void #t50 = self::Extension|set#simpleSetter(#t48, #t49) in #t49);
   self::Extension|set#mutatingSetter(c, 0);
-  self::expect(1, let final self::Class* #t51 = c in #t51.{self::Class::==}(null) ?{core::int*} null : #t51.{self::Class::field});
-  self::expect(2, let final self::Class* #t52 = c in #t52.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t53 = 2 in let final void #t54 = self::Extension|set#mutatingSetter(#t52, #t53) in #t53);
-  self::expect(3, let final self::Class* #t55 = c in #t55.{self::Class::==}(null) ?{core::int*} null : #t55.{self::Class::field});
+  self::expect(1, let final self::Class* #t51 = c in #t51 == null ?{core::int*} null : #t51.{self::Class::field}{core::int*});
+  self::expect(2, let final self::Class* #t52 = c in #t52 == null ?{core::int*} null : let final core::int* #t53 = 2 in let final void #t54 = self::Extension|set#mutatingSetter(#t52, #t53) in #t53);
+  self::expect(3, let final self::Class* #t55 = c in #t55 == null ?{core::int*} null : #t55.{self::Class::field}{core::int*});
   self::Extension|set#mutatingSetter(c, 4);
-  self::expect(5, let final self::Class* #t56 = c in #t56.{self::Class::==}(null) ?{core::int*} null : #t56.{self::Class::field});
+  self::expect(5, let final self::Class* #t56 = c in #t56 == null ?{core::int*} null : #t56.{self::Class::field}{core::int*});
   self::expect(6, let final self::Class* #t57 = c in let final core::int* #t58 = 6 in let final void #t59 = self::Extension|set#mutatingSetter(#t57, #t58) in #t58);
-  self::expect(7, let final self::Class* #t60 = c in #t60.{self::Class::==}(null) ?{core::int*} null : #t60.{self::Class::field});
-  let final self::Class* #t61 = c in #t61.{self::Class::==}(null) ?{core::int*} null : self::Extension|set#setterWithReturn(#t61, 1);
-  self::expect(1, let final self::Class* #t62 = c in #t62.{self::Class::==}(null) ?{core::int*} null : #t62.{self::Class::field});
-  let final self::Class* #t63 = c in #t63.{self::Class::==}(null) ?{core::int*} null : self::Extension|set#setterWithReturn(#t63, 2.{core::int::unary-}());
-  self::expect(2, let final self::Class* #t64 = c in #t64.{self::Class::==}(null) ?{core::int*} null : #t64.{self::Class::field});
-  self::expect(3, let final self::Class* #t65 = c in #t65.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t66 = 3 in let final void #t67 = self::Extension|set#setterWithReturn(#t65, #t66) in #t66);
-  self::expect(3, let final self::Class* #t68 = c in #t68.{self::Class::==}(null) ?{core::int*} null : #t68.{self::Class::field});
-  self::expect(4.{core::int::unary-}(), let final self::Class* #t69 = c in #t69.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t70 = 4.{core::int::unary-}() in let final void #t71 = self::Extension|set#setterWithReturn(#t69, #t70) in #t70);
-  self::expect(4, let final self::Class* #t72 = c in #t72.{self::Class::==}(null) ?{core::int*} null : #t72.{self::Class::field});
+  self::expect(7, let final self::Class* #t60 = c in #t60 == null ?{core::int*} null : #t60.{self::Class::field}{core::int*});
+  let final self::Class* #t61 = c in #t61 == null ?{core::int*} null : self::Extension|set#setterWithReturn(#t61, 1);
+  self::expect(1, let final self::Class* #t62 = c in #t62 == null ?{core::int*} null : #t62.{self::Class::field}{core::int*});
+  let final self::Class* #t63 = c in #t63 == null ?{core::int*} null : self::Extension|set#setterWithReturn(#t63, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, let final self::Class* #t64 = c in #t64 == null ?{core::int*} null : #t64.{self::Class::field}{core::int*});
+  self::expect(3, let final self::Class* #t65 = c in #t65 == null ?{core::int*} null : let final core::int* #t66 = 3 in let final void #t67 = self::Extension|set#setterWithReturn(#t65, #t66) in #t66);
+  self::expect(3, let final self::Class* #t68 = c in #t68 == null ?{core::int*} null : #t68.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t69 = c in #t69 == null ?{core::int*} null : let final core::int* #t70 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t71 = self::Extension|set#setterWithReturn(#t69, #t70) in #t70);
+  self::expect(4, let final self::Class* #t72 = c in #t72 == null ?{core::int*} null : #t72.{self::Class::field}{core::int*});
   self::Extension|set#setterWithReturn(c, 5);
-  self::expect(5, let final self::Class* #t73 = c in #t73.{self::Class::==}(null) ?{core::int*} null : #t73.{self::Class::field});
-  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}());
-  self::expect(6, let final self::Class* #t74 = c in #t74.{self::Class::==}(null) ?{core::int*} null : #t74.{self::Class::field});
+  self::expect(5, let final self::Class* #t73 = c in #t73 == null ?{core::int*} null : #t73.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() →* core::int*});
+  self::expect(6, let final self::Class* #t74 = c in #t74 == null ?{core::int*} null : #t74.{self::Class::field}{core::int*});
   self::expect(7, let final self::Class* #t75 = c in let final core::int* #t76 = 7 in let final void #t77 = self::Extension|set#setterWithReturn(#t75, #t76) in #t76);
-  self::expect(7, let final self::Class* #t78 = c in #t78.{self::Class::==}(null) ?{core::int*} null : #t78.{self::Class::field});
-  self::expect(8.{core::int::unary-}(), let final self::Class* #t79 = c in let final core::int* #t80 = 8.{core::int::unary-}() in let final void #t81 = self::Extension|set#setterWithReturn(#t79, #t80) in #t80);
-  self::expect(8, let final self::Class* #t82 = c in #t82.{self::Class::==}(null) ?{core::int*} null : #t82.{self::Class::field});
-  let final self::Class* #t83 = c in #t83.{self::Class::==}(null) ?{core::int*} null : self::Extension|set#setterWithClosure(#t83, 1);
-  self::expect(1, let final self::Class* #t84 = c in #t84.{self::Class::==}(null) ?{core::int*} null : #t84.{self::Class::field});
-  let final self::Class* #t85 = c in #t85.{self::Class::==}(null) ?{core::int*} null : self::Extension|set#setterWithClosure(#t85, 2.{core::int::unary-}());
-  self::expect(2, let final self::Class* #t86 = c in #t86.{self::Class::==}(null) ?{core::int*} null : #t86.{self::Class::field});
-  self::expect(3, let final self::Class* #t87 = c in #t87.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t88 = 3 in let final void #t89 = self::Extension|set#setterWithClosure(#t87, #t88) in #t88);
-  self::expect(3, let final self::Class* #t90 = c in #t90.{self::Class::==}(null) ?{core::int*} null : #t90.{self::Class::field});
-  self::expect(4.{core::int::unary-}(), let final self::Class* #t91 = c in #t91.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t92 = 4.{core::int::unary-}() in let final void #t93 = self::Extension|set#setterWithClosure(#t91, #t92) in #t92);
-  self::expect(4, let final self::Class* #t94 = c in #t94.{self::Class::==}(null) ?{core::int*} null : #t94.{self::Class::field});
+  self::expect(7, let final self::Class* #t78 = c in #t78 == null ?{core::int*} null : #t78.{self::Class::field}{core::int*});
+  self::expect(8.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t79 = c in let final core::int* #t80 = 8.{core::int::unary-}(){() →* core::int*} in let final void #t81 = self::Extension|set#setterWithReturn(#t79, #t80) in #t80);
+  self::expect(8, let final self::Class* #t82 = c in #t82 == null ?{core::int*} null : #t82.{self::Class::field}{core::int*});
+  let final self::Class* #t83 = c in #t83 == null ?{core::int*} null : self::Extension|set#setterWithClosure(#t83, 1);
+  self::expect(1, let final self::Class* #t84 = c in #t84 == null ?{core::int*} null : #t84.{self::Class::field}{core::int*});
+  let final self::Class* #t85 = c in #t85 == null ?{core::int*} null : self::Extension|set#setterWithClosure(#t85, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, let final self::Class* #t86 = c in #t86 == null ?{core::int*} null : #t86.{self::Class::field}{core::int*});
+  self::expect(3, let final self::Class* #t87 = c in #t87 == null ?{core::int*} null : let final core::int* #t88 = 3 in let final void #t89 = self::Extension|set#setterWithClosure(#t87, #t88) in #t88);
+  self::expect(3, let final self::Class* #t90 = c in #t90 == null ?{core::int*} null : #t90.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t91 = c in #t91 == null ?{core::int*} null : let final core::int* #t92 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t93 = self::Extension|set#setterWithClosure(#t91, #t92) in #t92);
+  self::expect(4, let final self::Class* #t94 = c in #t94 == null ?{core::int*} null : #t94.{self::Class::field}{core::int*});
   self::Extension|set#setterWithClosure(c, 5);
-  self::expect(5, let final self::Class* #t95 = c in #t95.{self::Class::==}(null) ?{core::int*} null : #t95.{self::Class::field});
-  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}());
-  self::expect(6, let final self::Class* #t96 = c in #t96.{self::Class::==}(null) ?{core::int*} null : #t96.{self::Class::field});
+  self::expect(5, let final self::Class* #t95 = c in #t95 == null ?{core::int*} null : #t95.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() →* core::int*});
+  self::expect(6, let final self::Class* #t96 = c in #t96 == null ?{core::int*} null : #t96.{self::Class::field}{core::int*});
   self::expect(7, let final self::Class* #t97 = c in let final core::int* #t98 = 7 in let final void #t99 = self::Extension|set#setterWithClosure(#t97, #t98) in #t98);
-  self::expect(7, let final self::Class* #t100 = c in #t100.{self::Class::==}(null) ?{core::int*} null : #t100.{self::Class::field});
-  self::expect(8.{core::int::unary-}(), let final self::Class* #t101 = c in let final core::int* #t102 = 8.{core::int::unary-}() in let final void #t103 = self::Extension|set#setterWithClosure(#t101, #t102) in #t102);
-  self::expect(8, let final self::Class* #t104 = c in #t104.{self::Class::==}(null) ?{core::int*} null : #t104.{self::Class::field});
+  self::expect(7, let final self::Class* #t100 = c in #t100 == null ?{core::int*} null : #t100.{self::Class::field}{core::int*});
+  self::expect(8.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t101 = c in let final core::int* #t102 = 8.{core::int::unary-}(){() →* core::int*} in let final void #t103 = self::Extension|set#setterWithClosure(#t101, #t102) in #t102);
+  self::expect(8, let final self::Class* #t104 = c in #t104 == null ?{core::int*} null : #t104.{self::Class::field}{core::int*});
   c.{self::Class::field} = null;
-  let final self::Class* #t105 = c in self::Extension|get#simpleSetter(#t105).{core::num::==}(null) ?{core::int*} self::Extension|set#simpleSetter(#t105, 1) : null;
-  self::expect(1, c.{self::Class::field});
-  self::expect(1, let final self::Class* #t106 = c in let final core::int* #t107 = self::Extension|get#simpleSetter(#t106) in #t107.{core::num::==}(null) ?{core::int*} let final core::int* #t108 = 2 in let final void #t109 = self::Extension|set#simpleSetter(#t106, #t108) in #t108 : #t107);
+  let final self::Class* #t105 = c in self::Extension|get#simpleSetter(#t105) == null ?{core::int*} self::Extension|set#simpleSetter(#t105, 1) : null;
+  self::expect(1, c.{self::Class::field}{core::int*});
+  self::expect(1, let final self::Class* #t106 = c in let final core::int* #t107 = self::Extension|get#simpleSetter(#t106) in #t107 == null ?{core::int*} let final core::int* #t108 = 2 in let final void #t109 = self::Extension|set#simpleSetter(#t106, #t108) in #t108 : #t107);
   c.{self::Class::field} = null;
-  self::expect(2, let final self::Class* #t110 = c in let final core::int* #t111 = self::Extension|get#simpleSetter(#t110) in #t111.{core::num::==}(null) ?{core::int*} let final core::int* #t112 = 2 in let final void #t113 = self::Extension|set#simpleSetter(#t110, #t112) in #t112 : #t111);
-  let final self::Class* #t114 = c in #t114.{self::Class::==}(null) ?{Null} null : #t114.{self::Class::field} = null;
-  let final self::Class* #t115 = c in #t115.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#simpleSetter(#t115).{core::num::==}(null) ?{core::int*} self::Extension|set#simpleSetter(#t115, 1) : null;
-  self::expect(1, let final self::Class* #t116 = c in #t116.{self::Class::==}(null) ?{core::int*} null : #t116.{self::Class::field});
-  self::expect(1, let final self::Class* #t117 = c in #t117.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t118 = self::Extension|get#simpleSetter(#t117) in #t118.{core::num::==}(null) ?{core::int*} let final core::int* #t119 = 2 in let final void #t120 = self::Extension|set#simpleSetter(#t117, #t119) in #t119 : #t118);
-  let final self::Class* #t121 = c in #t121.{self::Class::==}(null) ?{Null} null : #t121.{self::Class::field} = null;
-  self::expect(2, let final self::Class* #t122 = c in #t122.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t123 = self::Extension|get#simpleSetter(#t122) in #t123.{core::num::==}(null) ?{core::int*} let final core::int* #t124 = 2 in let final void #t125 = self::Extension|set#simpleSetter(#t122, #t124) in #t124 : #t123);
+  self::expect(2, let final self::Class* #t110 = c in let final core::int* #t111 = self::Extension|get#simpleSetter(#t110) in #t111 == null ?{core::int*} let final core::int* #t112 = 2 in let final void #t113 = self::Extension|set#simpleSetter(#t110, #t112) in #t112 : #t111);
+  let final self::Class* #t114 = c in #t114 == null ?{Null} null : #t114.{self::Class::field} = null;
+  let final self::Class* #t115 = c in #t115 == null ?{core::int*} null : self::Extension|get#simpleSetter(#t115) == null ?{core::int*} self::Extension|set#simpleSetter(#t115, 1) : null;
+  self::expect(1, let final self::Class* #t116 = c in #t116 == null ?{core::int*} null : #t116.{self::Class::field}{core::int*});
+  self::expect(1, let final self::Class* #t117 = c in #t117 == null ?{core::int*} null : let final core::int* #t118 = self::Extension|get#simpleSetter(#t117) in #t118 == null ?{core::int*} let final core::int* #t119 = 2 in let final void #t120 = self::Extension|set#simpleSetter(#t117, #t119) in #t119 : #t118);
+  let final self::Class* #t121 = c in #t121 == null ?{Null} null : #t121.{self::Class::field} = null;
+  self::expect(2, let final self::Class* #t122 = c in #t122 == null ?{core::int*} null : let final core::int* #t123 = self::Extension|get#simpleSetter(#t122) in #t123 == null ?{core::int*} let final core::int* #t124 = 2 in let final void #t125 = self::Extension|set#simpleSetter(#t122, #t124) in #t124 : #t123);
   self::Extension|testInternal(new self::Class::•());
   self::GenericClass<core::int*>* genericClass = new self::GenericClass::•<core::int*>();
   self::expect(1, let final self::GenericClass<core::int*>* #t126 = genericClass in let final core::int* #t127 = 1 in let final void #t128 = self::GenericExtension|set#setter<core::int*>(#t126, #t127) in #t127);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
@@ -228,18 +228,18 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:47:30 -> IntConstant(1)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:51:32 -> IntConstant(2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:51:32 -> IntConstant(2)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:56:24 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:56:24 -> IntConstant(-2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:58:34 -> IntConstant(3)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:58:34 -> IntConstant(3)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:60:12 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:60:35 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:60:12 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:60:35 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:60:35 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:60:35 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:65:25 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:65:25 -> IntConstant(-2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:67:35 -> IntConstant(3)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:67:35 -> IntConstant(3)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:69:12 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:69:36 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:69:12 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:69:36 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:69:36 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:69:36 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:86:30 -> IntConstant(1)
@@ -250,32 +250,32 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:93:32 -> IntConstant(2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:97:43 -> IntConstant(6)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:97:43 -> IntConstant(6)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:102:24 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:102:24 -> IntConstant(-2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:104:34 -> IntConstant(3)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:104:34 -> IntConstant(3)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:106:10 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:106:35 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:106:10 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:106:35 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:106:35 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:106:35 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:110:35 -> IntConstant(-6)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:110:35 -> IntConstant(-6)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:112:45 -> IntConstant(7)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:112:45 -> IntConstant(7)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:114:10 -> IntConstant(-8)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:114:46 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:114:10 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:114:46 -> IntConstant(-8)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:114:46 -> IntConstant(-8)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:114:46 -> IntConstant(-8)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:119:25 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:119:25 -> IntConstant(-2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:121:35 -> IntConstant(3)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:121:35 -> IntConstant(3)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:123:10 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:123:36 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:123:10 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:123:36 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:123:36 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:123:36 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:127:36 -> IntConstant(-6)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:127:36 -> IntConstant(-6)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:129:46 -> IntConstant(7)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:129:46 -> IntConstant(7)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:131:10 -> IntConstant(-8)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:131:47 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:131:10 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:131:47 -> IntConstant(-8)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:131:47 -> IntConstant(-8)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:131:47 -> IntConstant(-8)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:136:31 -> IntConstant(1)
@@ -286,32 +286,32 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:143:33 -> IntConstant(2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:147:43 -> IntConstant(6)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:147:43 -> IntConstant(6)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:152:25 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:152:25 -> IntConstant(-2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:154:35 -> IntConstant(3)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:154:35 -> IntConstant(3)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:156:10 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:156:36 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:156:10 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:156:36 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:156:36 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:156:36 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:160:35 -> IntConstant(-6)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:160:35 -> IntConstant(-6)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:162:45 -> IntConstant(7)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:162:45 -> IntConstant(7)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:164:10 -> IntConstant(-8)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:164:46 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:164:10 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:164:46 -> IntConstant(-8)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:164:46 -> IntConstant(-8)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:164:46 -> IntConstant(-8)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:169:26 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:169:26 -> IntConstant(-2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:171:36 -> IntConstant(3)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:171:36 -> IntConstant(3)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:173:10 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:173:37 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:173:10 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:173:37 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:173:37 -> IntConstant(-4)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:173:37 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:177:36 -> IntConstant(-6)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:177:36 -> IntConstant(-6)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:179:46 -> IntConstant(7)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:179:46 -> IntConstant(7)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:181:10 -> IntConstant(-8)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///extension_setter.dart:181:47 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:181:10 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:181:47 -> IntConstant(-8)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:181:47 -> IntConstant(-8)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:181:47 -> IntConstant(-8)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:187:32 -> IntConstant(2)
@@ -324,4 +324,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:196:33 -> IntConstant(2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:201:53 -> IntConstant(1)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:201:53 -> IntConstant(1)
-Extra constant evaluation: evaluated: 836, effectively constant: 100
+Extra constant evaluation: evaluated: 835, effectively constant: 100
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect
index 5bf824a..9f115ce 100644
--- a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect
@@ -37,7 +37,7 @@
                                         ^" in genericClass as{TypeError} self::GenericClass<core::double*>* in let final Null #t3 = null in let final void #t4 = self::GenericExtension|set#setter<core::double*>(#t1, #t3) in #t3);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.expect b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.expect
index e351a9e..47243334 100644
--- a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.expect
@@ -26,5 +26,5 @@
 static method Extension|get#method<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#method::T*>* #this) → <R extends core::Object* = dynamic>(self::Extension|get#method::T*) →* R*
   return <R extends core::Object* = dynamic>(self::Extension|get#method::T* t) → R* => self::Extension|method<self::Extension|get#method::T*, R*>(#this, t);
 static method main() → dynamic {
-  let final dynamic #t1 = self::Extension|method<core::int*, dynamic>(new self::Class::•<core::int*>(), 0) in #t1.{core::Object::==}(null) ?{core::String*} null : #t1.{core::Object::toString}();
+  let final dynamic #t1 = self::Extension|method<core::int*, dynamic>(new self::Class::•<core::int*>(), 0) in #t1 == null ?{core::String*} null : #t1.{core::Object::toString}(){() →* core::String*};
 }
diff --git a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.transformed.expect
index e351a9e..47243334 100644
--- a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.transformed.expect
@@ -26,5 +26,5 @@
 static method Extension|get#method<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#method::T*>* #this) → <R extends core::Object* = dynamic>(self::Extension|get#method::T*) →* R*
   return <R extends core::Object* = dynamic>(self::Extension|get#method::T* t) → R* => self::Extension|method<self::Extension|get#method::T*, R*>(#this, t);
 static method main() → dynamic {
-  let final dynamic #t1 = self::Extension|method<core::int*, dynamic>(new self::Class::•<core::int*>(), 0) in #t1.{core::Object::==}(null) ?{core::String*} null : #t1.{core::Object::toString}();
+  let final dynamic #t1 = self::Extension|method<core::int*, dynamic>(new self::Class::•<core::int*>(), 0) in #t1 == null ?{core::String*} null : #t1.{core::Object::toString}(){() →* core::String*};
 }
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.expect
index 4c0c516..9ae037b 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.expect
@@ -104,7 +104,7 @@
 static method Extension1|set#m4(lowered final self::Class* #this, core::int* x) → void {}
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
-  self::expect(0, c.{self::Class::m1});
+  self::expect(0, c.{self::Class::m1}{core::int*});
   c.{self::Class::m2} = 2;
 }
 static method errors() → dynamic {
@@ -141,7 +141,7 @@
     ^^";
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.transformed.expect
index 4c0c516..9ae037b 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.transformed.expect
@@ -104,7 +104,7 @@
 static method Extension1|set#m4(lowered final self::Class* #this, core::int* x) → void {}
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
-  self::expect(0, c.{self::Class::m1});
+  self::expect(0, c.{self::Class::m1}{core::int*});
   c.{self::Class::m2} = 2;
 }
 static method errors() → dynamic {
@@ -141,7 +141,7 @@
     ^^";
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/if_null.dart.weak.expect b/pkg/front_end/testcases/extensions/if_null.dart.weak.expect
index e4d6312..34aa9aa 100644
--- a/pkg/front_end/testcases/extensions/if_null.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/if_null.dart.weak.expect
@@ -25,25 +25,25 @@
   set property = self::Extension|set#property;
 }
 static method Extension|get#property(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|set#property(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field} = value;
 }
 static method Extension|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
 static method main() → dynamic {
   self::Class* c;
-  let final core::int* #t1 = let final self::Class* #t2 = c in #t2.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t2) in #t1.{core::num::==}(null) ?{core::int*} 0 : #t1;
-  let final core::int* #t3 = let final self::Class* #t4 = c in #t4.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t4) in #t3.{core::num::==}(null) ?{core::int*} 0 : #t3;
-  let final self::Class* #t5 = c in #t5.{self::Class::==}(null) ?{core::int*} null : self::Extension|set#property(#t5, let final core::int* #t6 = 42 in #t6.{core::num::==}(null) ?{core::int*} 0 : #t6);
-  let final self::Class* #t7 = c in #t7.{self::Class::==}(null) ?{core::int*} null : self::Extension|set#property(#t7, let final core::int* #t8 = 42 in #t8.{core::num::==}(null) ?{core::int*} 0 : #t8);
-  let final core::int* #t9 = let final self::Class* #t10 = c in #t10.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10, #t11) in #t11 in #t9.{core::num::==}(null) ?{core::int*} 0 : #t9;
-  let final core::int* #t13 = let final self::Class* #t14 = c in #t14.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t15 = 42 in let final void #t16 = self::Extension|set#property(#t14, #t15) in #t15 in #t13.{core::num::==}(null) ?{core::int*} 0 : #t13;
-  let final core::int* #t17 = let final self::Class* #t18 = c in #t18.{self::Class::==}(null) ?{core::int*} null : self::Extension|method(#t18) in #t17.{core::num::==}(null) ?{core::int*} 0 : #t17;
-  let final core::int* #t19 = let final self::Class* #t20 = c in #t20.{self::Class::==}(null) ?{core::int*} null : self::Extension|method(#t20) in #t19.{core::num::==}(null) ?{core::int*} 0 : #t19;
+  let final core::int* #t1 = let final self::Class* #t2 = c in #t2 == null ?{core::int*} null : self::Extension|get#property(#t2) in #t1 == null ?{core::int*} 0 : #t1;
+  let final core::int* #t3 = let final self::Class* #t4 = c in #t4 == null ?{core::int*} null : self::Extension|get#property(#t4) in #t3 == null ?{core::int*} 0 : #t3;
+  let final self::Class* #t5 = c in #t5 == null ?{core::int*} null : self::Extension|set#property(#t5, let final core::int* #t6 = 42 in #t6 == null ?{core::int*} 0 : #t6);
+  let final self::Class* #t7 = c in #t7 == null ?{core::int*} null : self::Extension|set#property(#t7, let final core::int* #t8 = 42 in #t8 == null ?{core::int*} 0 : #t8);
+  let final core::int* #t9 = let final self::Class* #t10 = c in #t10 == null ?{core::int*} null : let final core::int* #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10, #t11) in #t11 in #t9 == null ?{core::int*} 0 : #t9;
+  let final core::int* #t13 = let final self::Class* #t14 = c in #t14 == null ?{core::int*} null : let final core::int* #t15 = 42 in let final void #t16 = self::Extension|set#property(#t14, #t15) in #t15 in #t13 == null ?{core::int*} 0 : #t13;
+  let final core::int* #t17 = let final self::Class* #t18 = c in #t18 == null ?{core::int*} null : self::Extension|method(#t18) in #t17 == null ?{core::int*} 0 : #t17;
+  let final core::int* #t19 = let final self::Class* #t20 = c in #t20 == null ?{core::int*} null : self::Extension|method(#t20) in #t19 == null ?{core::int*} 0 : #t19;
   c = new self::Class::•();
-  let final core::int* #t21 = self::Extension|get#property(c) in #t21.{core::num::==}(null) ?{core::int*} 0 : #t21;
-  let final core::int* #t22 = self::Extension|get#property(c) in #t22.{core::num::==}(null) ?{core::int*} 0 : #t22;
+  let final core::int* #t21 = self::Extension|get#property(c) in #t21 == null ?{core::int*} 0 : #t21;
+  let final core::int* #t22 = self::Extension|get#property(c) in #t22 == null ?{core::int*} 0 : #t22;
 }
diff --git a/pkg/front_end/testcases/extensions/if_null.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/if_null.dart.weak.transformed.expect
index f3e6b96..c98287f 100644
--- a/pkg/front_end/testcases/extensions/if_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/if_null.dart.weak.transformed.expect
@@ -25,27 +25,27 @@
   set property = self::Extension|set#property;
 }
 static method Extension|get#property(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|set#property(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field} = value;
 }
 static method Extension|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
 static method main() → dynamic {
   self::Class* c;
-  let final core::int* #t1 = let final self::Class* #t2 = c in #t2.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t2) in #t1.{core::num::==}(null) ?{core::int*} 0 : #t1;
-  let final core::int* #t3 = let final self::Class* #t4 = c in #t4.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t4) in #t3.{core::num::==}(null) ?{core::int*} 0 : #t3;
-  let final self::Class* #t5 = c in #t5.{self::Class::==}(null) ?{core::int*} null : self::Extension|set#property(#t5, let final core::int* #t6 = 42 in #t6.{core::num::==}(null) ?{core::int*} 0 : #t6);
-  let final self::Class* #t7 = c in #t7.{self::Class::==}(null) ?{core::int*} null : self::Extension|set#property(#t7, let final core::int* #t8 = 42 in #t8.{core::num::==}(null) ?{core::int*} 0 : #t8);
-  let final core::int* #t9 = let final self::Class* #t10 = c in #t10.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10, #t11) in #t11 in #t9.{core::num::==}(null) ?{core::int*} 0 : #t9;
-  let final core::int* #t13 = let final self::Class* #t14 = c in #t14.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t15 = 42 in let final void #t16 = self::Extension|set#property(#t14, #t15) in #t15 in #t13.{core::num::==}(null) ?{core::int*} 0 : #t13;
-  let final core::int* #t17 = let final self::Class* #t18 = c in #t18.{self::Class::==}(null) ?{core::int*} null : self::Extension|method(#t18) in #t17.{core::num::==}(null) ?{core::int*} 0 : #t17;
-  let final core::int* #t19 = let final self::Class* #t20 = c in #t20.{self::Class::==}(null) ?{core::int*} null : self::Extension|method(#t20) in #t19.{core::num::==}(null) ?{core::int*} 0 : #t19;
+  let final core::int* #t1 = let final self::Class* #t2 = c in #t2 == null ?{core::int*} null : self::Extension|get#property(#t2) in #t1 == null ?{core::int*} 0 : #t1;
+  let final core::int* #t3 = let final self::Class* #t4 = c in #t4 == null ?{core::int*} null : self::Extension|get#property(#t4) in #t3 == null ?{core::int*} 0 : #t3;
+  let final self::Class* #t5 = c in #t5 == null ?{core::int*} null : self::Extension|set#property(#t5, let final core::int* #t6 = 42 in #t6 == null ?{core::int*} 0 : #t6);
+  let final self::Class* #t7 = c in #t7 == null ?{core::int*} null : self::Extension|set#property(#t7, let final core::int* #t8 = 42 in #t8 == null ?{core::int*} 0 : #t8);
+  let final core::int* #t9 = let final self::Class* #t10 = c in #t10 == null ?{core::int*} null : let final core::int* #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10, #t11) in #t11 in #t9 == null ?{core::int*} 0 : #t9;
+  let final core::int* #t13 = let final self::Class* #t14 = c in #t14 == null ?{core::int*} null : let final core::int* #t15 = 42 in let final void #t16 = self::Extension|set#property(#t14, #t15) in #t15 in #t13 == null ?{core::int*} 0 : #t13;
+  let final core::int* #t17 = let final self::Class* #t18 = c in #t18 == null ?{core::int*} null : self::Extension|method(#t18) in #t17 == null ?{core::int*} 0 : #t17;
+  let final core::int* #t19 = let final self::Class* #t20 = c in #t20 == null ?{core::int*} null : self::Extension|method(#t20) in #t19 == null ?{core::int*} 0 : #t19;
   c = new self::Class::•();
-  let final core::int* #t21 = self::Extension|get#property(c) in #t21.{core::num::==}(null) ?{core::int*} 0 : #t21;
-  let final core::int* #t22 = self::Extension|get#property(c) in #t22.{core::num::==}(null) ?{core::int*} 0 : #t22;
+  let final core::int* #t21 = self::Extension|get#property(c) in #t21 == null ?{core::int*} 0 : #t21;
+  let final core::int* #t22 = self::Extension|get#property(c) in #t22 == null ?{core::int*} 0 : #t22;
 }
 
 
diff --git a/pkg/front_end/testcases/extensions/implicit_this.dart.weak.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.expect
index f13b8bd..9328ef6 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.expect
@@ -28,11 +28,11 @@
   tearoff method4 = self::A2|get#method4;
 }
 static method A2|method2(lowered final self::A1* #this) → void
-  return #this.{self::A1::method1}();
+  return #this.{self::A1::method1}(){() →* void};
 static method A2|get#method2(lowered final self::A1* #this) → () →* void
   return () → void => self::A2|method2(#this);
 static method A2|method3(lowered final self::A1* #this) → core::Object*
-  return #this.{self::A1::field};
+  return #this.{self::A1::field}{core::Object*};
 static method A2|get#method3(lowered final self::A1* #this) → () →* core::Object*
   return () → core::Object* => self::A2|method3(#this);
 static method A2|method4(lowered final self::A1* #this, core::Object* o) → void {
diff --git a/pkg/front_end/testcases/extensions/implicit_this.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.transformed.expect
index f13b8bd..9328ef6 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.transformed.expect
@@ -28,11 +28,11 @@
   tearoff method4 = self::A2|get#method4;
 }
 static method A2|method2(lowered final self::A1* #this) → void
-  return #this.{self::A1::method1}();
+  return #this.{self::A1::method1}(){() →* void};
 static method A2|get#method2(lowered final self::A1* #this) → () →* void
   return () → void => self::A2|method2(#this);
 static method A2|method3(lowered final self::A1* #this) → core::Object*
-  return #this.{self::A1::field};
+  return #this.{self::A1::field}{core::Object*};
 static method A2|get#method3(lowered final self::A1* #this) → () →* core::Object*
   return () → core::Object* => self::A2|method3(#this);
 static method A2|method4(lowered final self::A1* #this, core::Object* o) → void {
diff --git a/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.expect b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.expect
index 6ffdbd7..0b2f376 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.expect
@@ -9,7 +9,7 @@
   self::expect(3, imp::Extension|method("foo"));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
@@ -22,6 +22,6 @@
   tearoff method = imp::Extension|get#method;
 }
 static method Extension|method(lowered final core::String* #this) → core::int*
-  return #this.{core::String::length};
+  return #this.{core::String::length}{core::int*};
 static method Extension|get#method(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => imp::Extension|method(#this);
diff --git a/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.transformed.expect
index 6ffdbd7..0b2f376 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
   self::expect(3, imp::Extension|method("foo"));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
@@ -22,6 +22,6 @@
   tearoff method = imp::Extension|get#method;
 }
 static method Extension|method(lowered final core::String* #this) → core::int*
-  return #this.{core::String::length};
+  return #this.{core::String::length}{core::int*};
 static method Extension|get#method(lowered final core::String* #this) → () →* core::int*
   return () → core::int* => imp::Extension|method(#this);
diff --git a/pkg/front_end/testcases/extensions/index.dart.weak.expect b/pkg/front_end/testcases/extensions/index.dart.weak.expect
index 81557be..d141d5b 100644
--- a/pkg/front_end/testcases/extensions/index.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/index.dart.weak.expect
@@ -8,9 +8,9 @@
     : super core::Object::•()
     ;
   method get(core::Object* key) → self::MapLike::V*
-    return this.{self::MapLike::_map}.{core::Map::[]}(key);
+    return this.{self::MapLike::_map}{core::Map<self::MapLike::K*, self::MapLike::V*>*}.{core::Map::[]}(key){(core::Object*) →* self::MapLike::V*};
   method put(generic-covariant-impl self::MapLike::K* key, generic-covariant-impl self::MapLike::V* value) → self::MapLike::V*
-    return let final core::Map<self::MapLike::K*, self::MapLike::V*>* #t1 = this.{self::MapLike::_map} in let final self::MapLike::K* #t2 = key in let final self::MapLike::V* #t3 = value in let final void #t4 = #t1.{core::Map::[]=}(#t2, #t3) in #t3;
+    return let final core::Map<self::MapLike::K*, self::MapLike::V*>* #t1 = this.{self::MapLike::_map}{core::Map<self::MapLike::K*, self::MapLike::V*>*} in let final self::MapLike::K* #t2 = key in let final self::MapLike::V* #t3 = value in let final void #t4 = #t1.{core::Map::[]=}(#t2, #t3){(self::MapLike::K*, self::MapLike::V*) →* void} in #t3;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -27,9 +27,9 @@
   operator []= = self::Extension|[]=;
 }
 static method Extension|[]<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(lowered final self::MapLike<self::Extension|[]::K*, self::Extension|[]::V*>* #this, core::Object* key) → self::Extension|[]::V*
-  return #this.{self::MapLike::get}(key);
+  return #this.{self::MapLike::get}(key){(core::Object*) →* self::Extension|[]::V*};
 static method Extension|[]=<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(lowered final self::MapLike<self::Extension|[]=::K*, self::Extension|[]=::V*>* #this, self::Extension|[]=::K* key, self::Extension|[]=::V* value) → void
-  return #this.{self::MapLike::put}(key, value);
+  return #this.{self::MapLike::put}(key, value){(self::Extension|[]=::K*, self::Extension|[]=::V*) →* self::Extension|[]=::V*};
 static method main() → dynamic {
   self::implicit();
   self::explicitWithTypeArguments();
@@ -38,86 +38,86 @@
 static method implicit() → dynamic {
   self::MapLike<core::int*, core::String*>* map1 = new self::MapLike::•<core::int*, core::String*>();
   self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 0));
-  map1.{self::MapLike::put}(0, "0");
+  map1.{self::MapLike::put}(0, "0"){(core::int*, core::String*) →* core::String*};
   self::expect("0", self::Extension|[]<core::int*, core::String*>(map1, 0));
   self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 1));
   self::Extension|[]=<core::int*, core::String*>(map1, 1, "1");
   self::expect("1", self::Extension|[]<core::int*, core::String*>(map1, 1));
   self::expect("2", let final self::MapLike<core::int*, core::String*>* #t5 = map1 in let final core::int* #t6 = 1 in let final core::String* #t7 = "2" in let final void #t8 = self::Extension|[]=<core::int*, core::String*>(#t5, #t6, #t7) in #t7);
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  let final self::MapLike<core::int*, core::String*>* #t9 = map1 in let final core::int* #t10 = 1 in self::Extension|[]<core::int*, core::String*>(#t9, #t10).{core::String::==}(null) ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t9, #t10, "3") : null;
+  let final self::MapLike<core::int*, core::String*>* #t9 = map1 in let final core::int* #t10 = 1 in self::Extension|[]<core::int*, core::String*>(#t9, #t10) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t9, #t10, "3") : null;
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t11 = map1 in let final core::int* #t12 = 1 in let final core::String* #t13 = self::Extension|[]<core::int*, core::String*>(#t11, #t12) in #t13.{core::String::==}(null) ?{core::String*} let final core::String* #t14 = "4" in let final void #t15 = self::Extension|[]=<core::int*, core::String*>(#t11, #t12, #t14) in #t14 : #t13);
+  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t11 = map1 in let final core::int* #t12 = 1 in let final core::String* #t13 = self::Extension|[]<core::int*, core::String*>(#t11, #t12) in #t13 == null ?{core::String*} let final core::String* #t14 = "4" in let final void #t15 = self::Extension|[]=<core::int*, core::String*>(#t11, #t12, #t14) in #t14 : #t13);
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  let final self::MapLike<core::int*, core::String*>* #t16 = map1 in let final core::int* #t17 = 2 in self::Extension|[]<core::int*, core::String*>(#t16, #t17).{core::String::==}(null) ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t16, #t17, "2") : null;
+  let final self::MapLike<core::int*, core::String*>* #t16 = map1 in let final core::int* #t17 = 2 in self::Extension|[]<core::int*, core::String*>(#t16, #t17) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t16, #t17, "2") : null;
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 2));
-  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t18 = map1 in let final core::int* #t19 = 3 in let final core::String* #t20 = self::Extension|[]<core::int*, core::String*>(#t18, #t19) in #t20.{core::String::==}(null) ?{core::String*} let final core::String* #t21 = "3" in let final void #t22 = self::Extension|[]=<core::int*, core::String*>(#t18, #t19, #t21) in #t21 : #t20);
+  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t18 = map1 in let final core::int* #t19 = 3 in let final core::String* #t20 = self::Extension|[]<core::int*, core::String*>(#t18, #t19) in #t20 == null ?{core::String*} let final core::String* #t21 = "3" in let final void #t22 = self::Extension|[]=<core::int*, core::String*>(#t18, #t19, #t21) in #t21 : #t20);
   self::expect("3", self::Extension|[]<core::int*, core::String*>(map1, 3));
   self::MapLike<core::int*, core::int*>* map2 = new self::MapLike::•<core::int*, core::int*>();
   self::expect(1, let final self::MapLike<core::int*, core::int*>* #t23 = map2 in let final core::int* #t24 = 0 in let final core::int* #t25 = 1 in let final void #t26 = self::Extension|[]=<core::int*, core::int*>(#t23, #t24, #t25) in #t25);
-  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t27 = map2 in let final core::int* #t28 = 0 in let final core::int* #t29 = self::Extension|[]<core::int*, core::int*>(#t27, #t28).{core::num::+}(2) in let final void #t30 = self::Extension|[]=<core::int*, core::int*>(#t27, #t28, #t29) in #t29);
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t31 = map2 in let final core::int* #t32 = 0 in let final core::int* #t33 = self::Extension|[]<core::int*, core::int*>(#t31, #t32).{core::num::+}(2) in let final void #t34 = self::Extension|[]=<core::int*, core::int*>(#t31, #t32, #t33) in #t33);
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t35 = map2 in let final core::int* #t36 = 0 in let final core::int* #t37 = self::Extension|[]<core::int*, core::int*>(#t35, #t36) in let final void #t38 = self::Extension|[]=<core::int*, core::int*>(#t35, #t36, #t37.{core::num::+}(1)) in #t37);
+  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t27 = map2 in let final core::int* #t28 = 0 in let final core::int* #t29 = self::Extension|[]<core::int*, core::int*>(#t27, #t28).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t30 = self::Extension|[]=<core::int*, core::int*>(#t27, #t28, #t29) in #t29);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t31 = map2 in let final core::int* #t32 = 0 in let final core::int* #t33 = self::Extension|[]<core::int*, core::int*>(#t31, #t32).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t34 = self::Extension|[]=<core::int*, core::int*>(#t31, #t32, #t33) in #t33);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t35 = map2 in let final core::int* #t36 = 0 in let final core::int* #t37 = self::Extension|[]<core::int*, core::int*>(#t35, #t36) in let final void #t38 = self::Extension|[]=<core::int*, core::int*>(#t35, #t36, #t37.{core::num::+}(1){(core::num*) →* core::int*}) in #t37);
   self::expect(6, self::Extension|[]<core::int*, core::int*>(map2, 0));
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t39 = map2 in let final core::int* #t40 = 0 in let final core::int* #t41 = self::Extension|[]<core::int*, core::int*>(#t39, #t40).{core::num::-}(1) in let final void #t42 = self::Extension|[]=<core::int*, core::int*>(#t39, #t40, #t41) in #t41);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t39 = map2 in let final core::int* #t40 = 0 in let final core::int* #t41 = self::Extension|[]<core::int*, core::int*>(#t39, #t40).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t42 = self::Extension|[]=<core::int*, core::int*>(#t39, #t40, #t41) in #t41);
   self::expect(5, self::Extension|[]<core::int*, core::int*>(map2, 0));
 }
 static method explicitWithTypeArguments() → dynamic {
   self::MapLike<core::int*, core::String*>* map1 = new self::MapLike::•<core::int*, core::String*>();
   self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 0));
-  map1.{self::MapLike::put}(0, "0");
+  map1.{self::MapLike::put}(0, "0"){(core::int*, core::String*) →* core::String*};
   self::expect("0", self::Extension|[]<core::int*, core::String*>(map1, 0));
   self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 1));
   self::Extension|[]=<core::int*, core::String*>(map1, 1, "1");
   self::expect("1", self::Extension|[]<core::int*, core::String*>(map1, 1));
   self::expect("2", let final self::MapLike<core::int*, core::String*>* #t43 = map1 in let final core::String* #t44 = "2" in let final void #t45 = self::Extension|[]=<core::int*, core::String*>(#t43, 1, #t44) in #t44);
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  let final self::MapLike<core::int*, core::String*>* #t46 = map1 in let final core::int* #t47 = 1 in self::Extension|[]<core::int*, core::String*>(#t46, #t47).{core::String::==}(null) ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t46, #t47, "3") : null;
+  let final self::MapLike<core::int*, core::String*>* #t46 = map1 in let final core::int* #t47 = 1 in self::Extension|[]<core::int*, core::String*>(#t46, #t47) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t46, #t47, "3") : null;
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t48 = map1 in let final core::int* #t49 = 1 in let final core::String* #t50 = self::Extension|[]<core::int*, core::String*>(#t48, #t49) in #t50.{core::String::==}(null) ?{core::String*} let final core::String* #t51 = "4" in let final void #t52 = self::Extension|[]=<core::int*, core::String*>(#t48, #t49, #t51) in #t51 : #t50);
+  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t48 = map1 in let final core::int* #t49 = 1 in let final core::String* #t50 = self::Extension|[]<core::int*, core::String*>(#t48, #t49) in #t50 == null ?{core::String*} let final core::String* #t51 = "4" in let final void #t52 = self::Extension|[]=<core::int*, core::String*>(#t48, #t49, #t51) in #t51 : #t50);
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  let final self::MapLike<core::int*, core::String*>* #t53 = map1 in let final core::int* #t54 = 2 in self::Extension|[]<core::int*, core::String*>(#t53, #t54).{core::String::==}(null) ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t53, #t54, "2") : null;
+  let final self::MapLike<core::int*, core::String*>* #t53 = map1 in let final core::int* #t54 = 2 in self::Extension|[]<core::int*, core::String*>(#t53, #t54) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t53, #t54, "2") : null;
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 2));
-  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t55 = map1 in let final core::int* #t56 = 3 in let final core::String* #t57 = self::Extension|[]<core::int*, core::String*>(#t55, #t56) in #t57.{core::String::==}(null) ?{core::String*} let final core::String* #t58 = "3" in let final void #t59 = self::Extension|[]=<core::int*, core::String*>(#t55, #t56, #t58) in #t58 : #t57);
+  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t55 = map1 in let final core::int* #t56 = 3 in let final core::String* #t57 = self::Extension|[]<core::int*, core::String*>(#t55, #t56) in #t57 == null ?{core::String*} let final core::String* #t58 = "3" in let final void #t59 = self::Extension|[]=<core::int*, core::String*>(#t55, #t56, #t58) in #t58 : #t57);
   self::expect("3", self::Extension|[]<core::int*, core::String*>(map1, 3));
   self::MapLike<core::int*, core::int*>* map2 = new self::MapLike::•<core::int*, core::int*>();
   self::expect(1, let final self::MapLike<core::int*, core::int*>* #t60 = map2 in let final core::int* #t61 = 1 in let final void #t62 = self::Extension|[]=<core::int*, core::int*>(#t60, 0, #t61) in #t61);
-  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t63 = map2 in let final core::int* #t64 = 0 in let final core::int* #t65 = self::Extension|[]<core::int*, core::int*>(#t63, #t64).{core::num::+}(2) in let final void #t66 = self::Extension|[]=<core::int*, core::int*>(#t63, #t64, #t65) in #t65);
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t67 = map2 in let final core::int* #t68 = 0 in let final core::int* #t69 = self::Extension|[]<core::int*, core::int*>(#t67, #t68).{core::num::+}(2) in let final void #t70 = self::Extension|[]=<core::int*, core::int*>(#t67, #t68, #t69) in #t69);
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t71 = map2 in let final core::int* #t72 = 0 in let final core::int* #t73 = self::Extension|[]<core::int*, core::int*>(#t71, #t72) in let final void #t74 = self::Extension|[]=<core::int*, core::int*>(#t71, #t72, #t73.{core::num::+}(1)) in #t73);
+  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t63 = map2 in let final core::int* #t64 = 0 in let final core::int* #t65 = self::Extension|[]<core::int*, core::int*>(#t63, #t64).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t66 = self::Extension|[]=<core::int*, core::int*>(#t63, #t64, #t65) in #t65);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t67 = map2 in let final core::int* #t68 = 0 in let final core::int* #t69 = self::Extension|[]<core::int*, core::int*>(#t67, #t68).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t70 = self::Extension|[]=<core::int*, core::int*>(#t67, #t68, #t69) in #t69);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t71 = map2 in let final core::int* #t72 = 0 in let final core::int* #t73 = self::Extension|[]<core::int*, core::int*>(#t71, #t72) in let final void #t74 = self::Extension|[]=<core::int*, core::int*>(#t71, #t72, #t73.{core::num::+}(1){(core::num*) →* core::int*}) in #t73);
   self::expect(6, self::Extension|[]<core::int*, core::int*>(map2, 0));
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t75 = map2 in let final core::int* #t76 = 0 in let final core::int* #t77 = self::Extension|[]<core::int*, core::int*>(#t75, #t76).{core::num::-}(1) in let final void #t78 = self::Extension|[]=<core::int*, core::int*>(#t75, #t76, #t77) in #t77);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t75 = map2 in let final core::int* #t76 = 0 in let final core::int* #t77 = self::Extension|[]<core::int*, core::int*>(#t75, #t76).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t78 = self::Extension|[]=<core::int*, core::int*>(#t75, #t76, #t77) in #t77);
   self::expect(5, self::Extension|[]<core::int*, core::int*>(map2, 0));
 }
 static method explicitInferredTypeArguments() → dynamic {
   self::MapLike<core::int*, core::String*>* map1 = new self::MapLike::•<core::int*, core::String*>();
   self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 0));
-  map1.{self::MapLike::put}(0, "0");
+  map1.{self::MapLike::put}(0, "0"){(core::int*, core::String*) →* core::String*};
   self::expect("0", self::Extension|[]<core::int*, core::String*>(map1, 0));
   self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 1));
   self::Extension|[]=<core::int*, core::String*>(map1, 1, "1");
   self::expect("1", self::Extension|[]<core::int*, core::String*>(map1, 1));
   self::expect("2", let final self::MapLike<core::int*, core::String*>* #t79 = map1 in let final core::String* #t80 = "2" in let final void #t81 = self::Extension|[]=<core::int*, core::String*>(#t79, 1, #t80) in #t80);
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  let final self::MapLike<core::int*, core::String*>* #t82 = map1 in let final core::int* #t83 = 1 in self::Extension|[]<core::int*, core::String*>(#t82, #t83).{core::String::==}(null) ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t82, #t83, "3") : null;
+  let final self::MapLike<core::int*, core::String*>* #t82 = map1 in let final core::int* #t83 = 1 in self::Extension|[]<core::int*, core::String*>(#t82, #t83) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t82, #t83, "3") : null;
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t84 = map1 in let final core::int* #t85 = 1 in let final core::String* #t86 = self::Extension|[]<core::int*, core::String*>(#t84, #t85) in #t86.{core::String::==}(null) ?{core::String*} let final core::String* #t87 = "4" in let final void #t88 = self::Extension|[]=<core::int*, core::String*>(#t84, #t85, #t87) in #t87 : #t86);
+  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t84 = map1 in let final core::int* #t85 = 1 in let final core::String* #t86 = self::Extension|[]<core::int*, core::String*>(#t84, #t85) in #t86 == null ?{core::String*} let final core::String* #t87 = "4" in let final void #t88 = self::Extension|[]=<core::int*, core::String*>(#t84, #t85, #t87) in #t87 : #t86);
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  let final self::MapLike<core::int*, core::String*>* #t89 = map1 in let final core::int* #t90 = 2 in self::Extension|[]<core::int*, core::String*>(#t89, #t90).{core::String::==}(null) ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t89, #t90, "2") : null;
+  let final self::MapLike<core::int*, core::String*>* #t89 = map1 in let final core::int* #t90 = 2 in self::Extension|[]<core::int*, core::String*>(#t89, #t90) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t89, #t90, "2") : null;
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 2));
-  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t91 = map1 in let final core::int* #t92 = 3 in let final core::String* #t93 = self::Extension|[]<core::int*, core::String*>(#t91, #t92) in #t93.{core::String::==}(null) ?{core::String*} let final core::String* #t94 = "3" in let final void #t95 = self::Extension|[]=<core::int*, core::String*>(#t91, #t92, #t94) in #t94 : #t93);
+  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t91 = map1 in let final core::int* #t92 = 3 in let final core::String* #t93 = self::Extension|[]<core::int*, core::String*>(#t91, #t92) in #t93 == null ?{core::String*} let final core::String* #t94 = "3" in let final void #t95 = self::Extension|[]=<core::int*, core::String*>(#t91, #t92, #t94) in #t94 : #t93);
   self::expect("3", self::Extension|[]<core::int*, core::String*>(map1, 3));
   self::MapLike<core::int*, core::int*>* map2 = new self::MapLike::•<core::int*, core::int*>();
   self::expect(1, let final self::MapLike<core::int*, core::int*>* #t96 = map2 in let final core::int* #t97 = 1 in let final void #t98 = self::Extension|[]=<core::int*, core::int*>(#t96, 0, #t97) in #t97);
-  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t99 = map2 in let final core::int* #t100 = 0 in let final core::int* #t101 = self::Extension|[]<core::int*, core::int*>(#t99, #t100).{core::num::+}(2) in let final void #t102 = self::Extension|[]=<core::int*, core::int*>(#t99, #t100, #t101) in #t101);
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t103 = map2 in let final core::int* #t104 = 0 in let final core::int* #t105 = self::Extension|[]<core::int*, core::int*>(#t103, #t104).{core::num::+}(2) in let final void #t106 = self::Extension|[]=<core::int*, core::int*>(#t103, #t104, #t105) in #t105);
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t107 = map2 in let final core::int* #t108 = 0 in let final core::int* #t109 = self::Extension|[]<core::int*, core::int*>(#t107, #t108) in let final void #t110 = self::Extension|[]=<core::int*, core::int*>(#t107, #t108, #t109.{core::num::+}(1)) in #t109);
+  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t99 = map2 in let final core::int* #t100 = 0 in let final core::int* #t101 = self::Extension|[]<core::int*, core::int*>(#t99, #t100).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t102 = self::Extension|[]=<core::int*, core::int*>(#t99, #t100, #t101) in #t101);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t103 = map2 in let final core::int* #t104 = 0 in let final core::int* #t105 = self::Extension|[]<core::int*, core::int*>(#t103, #t104).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t106 = self::Extension|[]=<core::int*, core::int*>(#t103, #t104, #t105) in #t105);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t107 = map2 in let final core::int* #t108 = 0 in let final core::int* #t109 = self::Extension|[]<core::int*, core::int*>(#t107, #t108) in let final void #t110 = self::Extension|[]=<core::int*, core::int*>(#t107, #t108, #t109.{core::num::+}(1){(core::num*) →* core::int*}) in #t109);
   self::expect(6, self::Extension|[]<core::int*, core::int*>(map2, 0));
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t111 = map2 in let final core::int* #t112 = 0 in let final core::int* #t113 = self::Extension|[]<core::int*, core::int*>(#t111, #t112).{core::num::-}(1) in let final void #t114 = self::Extension|[]=<core::int*, core::int*>(#t111, #t112, #t113) in #t113);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t111 = map2 in let final core::int* #t112 = 0 in let final core::int* #t113 = self::Extension|[]<core::int*, core::int*>(#t111, #t112).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t114 = self::Extension|[]=<core::int*, core::int*>(#t111, #t112, #t113) in #t113);
   self::expect(5, self::Extension|[]<core::int*, core::int*>(map2, 0));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/index.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/index.dart.weak.transformed.expect
index e570b06..fd7413f 100644
--- a/pkg/front_end/testcases/extensions/index.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/index.dart.weak.transformed.expect
@@ -8,9 +8,9 @@
     : super core::Object::•()
     ;
   method get(core::Object* key) → self::MapLike::V*
-    return this.{self::MapLike::_map}.{core::Map::[]}(key);
+    return this.{self::MapLike::_map}{core::Map<self::MapLike::K*, self::MapLike::V*>*}.{core::Map::[]}(key){(core::Object*) →* self::MapLike::V*};
   method put(generic-covariant-impl self::MapLike::K* key, generic-covariant-impl self::MapLike::V* value) → self::MapLike::V*
-    return let final core::Map<self::MapLike::K*, self::MapLike::V*>* #t1 = this.{self::MapLike::_map} in let final self::MapLike::K* #t2 = key in let final self::MapLike::V* #t3 = value in let final void #t4 = #t1.{core::Map::[]=}(#t2, #t3) in #t3;
+    return let final core::Map<self::MapLike::K*, self::MapLike::V*>* #t1 = this.{self::MapLike::_map}{core::Map<self::MapLike::K*, self::MapLike::V*>*} in let final self::MapLike::K* #t2 = key in let final self::MapLike::V* #t3 = value in let final void #t4 = #t1.{core::Map::[]=}(#t2, #t3){(self::MapLike::K*, self::MapLike::V*) →* void} in #t3;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -27,9 +27,9 @@
   operator []= = self::Extension|[]=;
 }
 static method Extension|[]<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(lowered final self::MapLike<self::Extension|[]::K*, self::Extension|[]::V*>* #this, core::Object* key) → self::Extension|[]::V*
-  return #this.{self::MapLike::get}(key);
+  return #this.{self::MapLike::get}(key){(core::Object*) →* self::Extension|[]::V*};
 static method Extension|[]=<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(lowered final self::MapLike<self::Extension|[]=::K*, self::Extension|[]=::V*>* #this, self::Extension|[]=::K* key, self::Extension|[]=::V* value) → void
-  return #this.{self::MapLike::put}(key, value);
+  return #this.{self::MapLike::put}(key, value){(self::Extension|[]=::K*, self::Extension|[]=::V*) →* self::Extension|[]=::V*};
 static method main() → dynamic {
   self::implicit();
   self::explicitWithTypeArguments();
@@ -38,86 +38,86 @@
 static method implicit() → dynamic {
   self::MapLike<core::int*, core::String*>* map1 = new self::MapLike::•<core::int*, core::String*>();
   self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 0));
-  map1.{self::MapLike::put}(0, "0");
+  map1.{self::MapLike::put}(0, "0"){(core::int*, core::String*) →* core::String*};
   self::expect("0", self::Extension|[]<core::int*, core::String*>(map1, 0));
   self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 1));
   self::Extension|[]=<core::int*, core::String*>(map1, 1, "1");
   self::expect("1", self::Extension|[]<core::int*, core::String*>(map1, 1));
   self::expect("2", let final self::MapLike<core::int*, core::String*>* #t5 = map1 in let final core::int* #t6 = 1 in let final core::String* #t7 = "2" in let final void #t8 = self::Extension|[]=<core::int*, core::String*>(#t5, #t6, #t7) in #t7);
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  let final self::MapLike<core::int*, core::String*>* #t9 = map1 in let final core::int* #t10 = 1 in self::Extension|[]<core::int*, core::String*>(#t9, #t10).{core::String::==}(null) ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t9, #t10, "3") : null;
+  let final self::MapLike<core::int*, core::String*>* #t9 = map1 in let final core::int* #t10 = 1 in self::Extension|[]<core::int*, core::String*>(#t9, #t10) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t9, #t10, "3") : null;
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t11 = map1 in let final core::int* #t12 = 1 in let final core::String* #t13 = self::Extension|[]<core::int*, core::String*>(#t11, #t12) in #t13.{core::String::==}(null) ?{core::String*} let final core::String* #t14 = "4" in let final void #t15 = self::Extension|[]=<core::int*, core::String*>(#t11, #t12, #t14) in #t14 : #t13);
+  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t11 = map1 in let final core::int* #t12 = 1 in let final core::String* #t13 = self::Extension|[]<core::int*, core::String*>(#t11, #t12) in #t13 == null ?{core::String*} let final core::String* #t14 = "4" in let final void #t15 = self::Extension|[]=<core::int*, core::String*>(#t11, #t12, #t14) in #t14 : #t13);
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  let final self::MapLike<core::int*, core::String*>* #t16 = map1 in let final core::int* #t17 = 2 in self::Extension|[]<core::int*, core::String*>(#t16, #t17).{core::String::==}(null) ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t16, #t17, "2") : null;
+  let final self::MapLike<core::int*, core::String*>* #t16 = map1 in let final core::int* #t17 = 2 in self::Extension|[]<core::int*, core::String*>(#t16, #t17) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t16, #t17, "2") : null;
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 2));
-  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t18 = map1 in let final core::int* #t19 = 3 in let final core::String* #t20 = self::Extension|[]<core::int*, core::String*>(#t18, #t19) in #t20.{core::String::==}(null) ?{core::String*} let final core::String* #t21 = "3" in let final void #t22 = self::Extension|[]=<core::int*, core::String*>(#t18, #t19, #t21) in #t21 : #t20);
+  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t18 = map1 in let final core::int* #t19 = 3 in let final core::String* #t20 = self::Extension|[]<core::int*, core::String*>(#t18, #t19) in #t20 == null ?{core::String*} let final core::String* #t21 = "3" in let final void #t22 = self::Extension|[]=<core::int*, core::String*>(#t18, #t19, #t21) in #t21 : #t20);
   self::expect("3", self::Extension|[]<core::int*, core::String*>(map1, 3));
   self::MapLike<core::int*, core::int*>* map2 = new self::MapLike::•<core::int*, core::int*>();
   self::expect(1, let final self::MapLike<core::int*, core::int*>* #t23 = map2 in let final core::int* #t24 = 0 in let final core::int* #t25 = 1 in let final void #t26 = self::Extension|[]=<core::int*, core::int*>(#t23, #t24, #t25) in #t25);
-  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t27 = map2 in let final core::int* #t28 = 0 in let final core::int* #t29 = self::Extension|[]<core::int*, core::int*>(#t27, #t28).{core::num::+}(2) in let final void #t30 = self::Extension|[]=<core::int*, core::int*>(#t27, #t28, #t29) in #t29);
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t31 = map2 in let final core::int* #t32 = 0 in let final core::int* #t33 = self::Extension|[]<core::int*, core::int*>(#t31, #t32).{core::num::+}(2) in let final void #t34 = self::Extension|[]=<core::int*, core::int*>(#t31, #t32, #t33) in #t33);
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t35 = map2 in let final core::int* #t36 = 0 in let final core::int* #t37 = self::Extension|[]<core::int*, core::int*>(#t35, #t36) in let final void #t38 = self::Extension|[]=<core::int*, core::int*>(#t35, #t36, #t37.{core::num::+}(1)) in #t37);
+  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t27 = map2 in let final core::int* #t28 = 0 in let final core::int* #t29 = self::Extension|[]<core::int*, core::int*>(#t27, #t28).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t30 = self::Extension|[]=<core::int*, core::int*>(#t27, #t28, #t29) in #t29);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t31 = map2 in let final core::int* #t32 = 0 in let final core::int* #t33 = self::Extension|[]<core::int*, core::int*>(#t31, #t32).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t34 = self::Extension|[]=<core::int*, core::int*>(#t31, #t32, #t33) in #t33);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t35 = map2 in let final core::int* #t36 = 0 in let final core::int* #t37 = self::Extension|[]<core::int*, core::int*>(#t35, #t36) in let final void #t38 = self::Extension|[]=<core::int*, core::int*>(#t35, #t36, #t37.{core::num::+}(1){(core::num*) →* core::int*}) in #t37);
   self::expect(6, self::Extension|[]<core::int*, core::int*>(map2, 0));
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t39 = map2 in let final core::int* #t40 = 0 in let final core::int* #t41 = self::Extension|[]<core::int*, core::int*>(#t39, #t40).{core::num::-}(1) in let final void #t42 = self::Extension|[]=<core::int*, core::int*>(#t39, #t40, #t41) in #t41);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t39 = map2 in let final core::int* #t40 = 0 in let final core::int* #t41 = self::Extension|[]<core::int*, core::int*>(#t39, #t40).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t42 = self::Extension|[]=<core::int*, core::int*>(#t39, #t40, #t41) in #t41);
   self::expect(5, self::Extension|[]<core::int*, core::int*>(map2, 0));
 }
 static method explicitWithTypeArguments() → dynamic {
   self::MapLike<core::int*, core::String*>* map1 = new self::MapLike::•<core::int*, core::String*>();
   self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 0));
-  map1.{self::MapLike::put}(0, "0");
+  map1.{self::MapLike::put}(0, "0"){(core::int*, core::String*) →* core::String*};
   self::expect("0", self::Extension|[]<core::int*, core::String*>(map1, 0));
   self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 1));
   self::Extension|[]=<core::int*, core::String*>(map1, 1, "1");
   self::expect("1", self::Extension|[]<core::int*, core::String*>(map1, 1));
   self::expect("2", let final self::MapLike<core::int*, core::String*>* #t43 = map1 in let final core::String* #t44 = "2" in let final void #t45 = self::Extension|[]=<core::int*, core::String*>(#t43, 1, #t44) in #t44);
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  let final self::MapLike<core::int*, core::String*>* #t46 = map1 in let final core::int* #t47 = 1 in self::Extension|[]<core::int*, core::String*>(#t46, #t47).{core::String::==}(null) ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t46, #t47, "3") : null;
+  let final self::MapLike<core::int*, core::String*>* #t46 = map1 in let final core::int* #t47 = 1 in self::Extension|[]<core::int*, core::String*>(#t46, #t47) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t46, #t47, "3") : null;
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t48 = map1 in let final core::int* #t49 = 1 in let final core::String* #t50 = self::Extension|[]<core::int*, core::String*>(#t48, #t49) in #t50.{core::String::==}(null) ?{core::String*} let final core::String* #t51 = "4" in let final void #t52 = self::Extension|[]=<core::int*, core::String*>(#t48, #t49, #t51) in #t51 : #t50);
+  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t48 = map1 in let final core::int* #t49 = 1 in let final core::String* #t50 = self::Extension|[]<core::int*, core::String*>(#t48, #t49) in #t50 == null ?{core::String*} let final core::String* #t51 = "4" in let final void #t52 = self::Extension|[]=<core::int*, core::String*>(#t48, #t49, #t51) in #t51 : #t50);
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  let final self::MapLike<core::int*, core::String*>* #t53 = map1 in let final core::int* #t54 = 2 in self::Extension|[]<core::int*, core::String*>(#t53, #t54).{core::String::==}(null) ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t53, #t54, "2") : null;
+  let final self::MapLike<core::int*, core::String*>* #t53 = map1 in let final core::int* #t54 = 2 in self::Extension|[]<core::int*, core::String*>(#t53, #t54) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t53, #t54, "2") : null;
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 2));
-  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t55 = map1 in let final core::int* #t56 = 3 in let final core::String* #t57 = self::Extension|[]<core::int*, core::String*>(#t55, #t56) in #t57.{core::String::==}(null) ?{core::String*} let final core::String* #t58 = "3" in let final void #t59 = self::Extension|[]=<core::int*, core::String*>(#t55, #t56, #t58) in #t58 : #t57);
+  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t55 = map1 in let final core::int* #t56 = 3 in let final core::String* #t57 = self::Extension|[]<core::int*, core::String*>(#t55, #t56) in #t57 == null ?{core::String*} let final core::String* #t58 = "3" in let final void #t59 = self::Extension|[]=<core::int*, core::String*>(#t55, #t56, #t58) in #t58 : #t57);
   self::expect("3", self::Extension|[]<core::int*, core::String*>(map1, 3));
   self::MapLike<core::int*, core::int*>* map2 = new self::MapLike::•<core::int*, core::int*>();
   self::expect(1, let final self::MapLike<core::int*, core::int*>* #t60 = map2 in let final core::int* #t61 = 1 in let final void #t62 = self::Extension|[]=<core::int*, core::int*>(#t60, 0, #t61) in #t61);
-  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t63 = map2 in let final core::int* #t64 = 0 in let final core::int* #t65 = self::Extension|[]<core::int*, core::int*>(#t63, #t64).{core::num::+}(2) in let final void #t66 = self::Extension|[]=<core::int*, core::int*>(#t63, #t64, #t65) in #t65);
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t67 = map2 in let final core::int* #t68 = 0 in let final core::int* #t69 = self::Extension|[]<core::int*, core::int*>(#t67, #t68).{core::num::+}(2) in let final void #t70 = self::Extension|[]=<core::int*, core::int*>(#t67, #t68, #t69) in #t69);
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t71 = map2 in let final core::int* #t72 = 0 in let final core::int* #t73 = self::Extension|[]<core::int*, core::int*>(#t71, #t72) in let final void #t74 = self::Extension|[]=<core::int*, core::int*>(#t71, #t72, #t73.{core::num::+}(1)) in #t73);
+  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t63 = map2 in let final core::int* #t64 = 0 in let final core::int* #t65 = self::Extension|[]<core::int*, core::int*>(#t63, #t64).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t66 = self::Extension|[]=<core::int*, core::int*>(#t63, #t64, #t65) in #t65);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t67 = map2 in let final core::int* #t68 = 0 in let final core::int* #t69 = self::Extension|[]<core::int*, core::int*>(#t67, #t68).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t70 = self::Extension|[]=<core::int*, core::int*>(#t67, #t68, #t69) in #t69);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t71 = map2 in let final core::int* #t72 = 0 in let final core::int* #t73 = self::Extension|[]<core::int*, core::int*>(#t71, #t72) in let final void #t74 = self::Extension|[]=<core::int*, core::int*>(#t71, #t72, #t73.{core::num::+}(1){(core::num*) →* core::int*}) in #t73);
   self::expect(6, self::Extension|[]<core::int*, core::int*>(map2, 0));
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t75 = map2 in let final core::int* #t76 = 0 in let final core::int* #t77 = self::Extension|[]<core::int*, core::int*>(#t75, #t76).{core::num::-}(1) in let final void #t78 = self::Extension|[]=<core::int*, core::int*>(#t75, #t76, #t77) in #t77);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t75 = map2 in let final core::int* #t76 = 0 in let final core::int* #t77 = self::Extension|[]<core::int*, core::int*>(#t75, #t76).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t78 = self::Extension|[]=<core::int*, core::int*>(#t75, #t76, #t77) in #t77);
   self::expect(5, self::Extension|[]<core::int*, core::int*>(map2, 0));
 }
 static method explicitInferredTypeArguments() → dynamic {
   self::MapLike<core::int*, core::String*>* map1 = new self::MapLike::•<core::int*, core::String*>();
   self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 0));
-  map1.{self::MapLike::put}(0, "0");
+  map1.{self::MapLike::put}(0, "0"){(core::int*, core::String*) →* core::String*};
   self::expect("0", self::Extension|[]<core::int*, core::String*>(map1, 0));
   self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 1));
   self::Extension|[]=<core::int*, core::String*>(map1, 1, "1");
   self::expect("1", self::Extension|[]<core::int*, core::String*>(map1, 1));
   self::expect("2", let final self::MapLike<core::int*, core::String*>* #t79 = map1 in let final core::String* #t80 = "2" in let final void #t81 = self::Extension|[]=<core::int*, core::String*>(#t79, 1, #t80) in #t80);
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  let final self::MapLike<core::int*, core::String*>* #t82 = map1 in let final core::int* #t83 = 1 in self::Extension|[]<core::int*, core::String*>(#t82, #t83).{core::String::==}(null) ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t82, #t83, "3") : null;
+  let final self::MapLike<core::int*, core::String*>* #t82 = map1 in let final core::int* #t83 = 1 in self::Extension|[]<core::int*, core::String*>(#t82, #t83) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t82, #t83, "3") : null;
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t84 = map1 in let final core::int* #t85 = 1 in let final core::String* #t86 = self::Extension|[]<core::int*, core::String*>(#t84, #t85) in #t86.{core::String::==}(null) ?{core::String*} let final core::String* #t87 = "4" in let final void #t88 = self::Extension|[]=<core::int*, core::String*>(#t84, #t85, #t87) in #t87 : #t86);
+  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t84 = map1 in let final core::int* #t85 = 1 in let final core::String* #t86 = self::Extension|[]<core::int*, core::String*>(#t84, #t85) in #t86 == null ?{core::String*} let final core::String* #t87 = "4" in let final void #t88 = self::Extension|[]=<core::int*, core::String*>(#t84, #t85, #t87) in #t87 : #t86);
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
-  let final self::MapLike<core::int*, core::String*>* #t89 = map1 in let final core::int* #t90 = 2 in self::Extension|[]<core::int*, core::String*>(#t89, #t90).{core::String::==}(null) ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t89, #t90, "2") : null;
+  let final self::MapLike<core::int*, core::String*>* #t89 = map1 in let final core::int* #t90 = 2 in self::Extension|[]<core::int*, core::String*>(#t89, #t90) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t89, #t90, "2") : null;
   self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 2));
-  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t91 = map1 in let final core::int* #t92 = 3 in let final core::String* #t93 = self::Extension|[]<core::int*, core::String*>(#t91, #t92) in #t93.{core::String::==}(null) ?{core::String*} let final core::String* #t94 = "3" in let final void #t95 = self::Extension|[]=<core::int*, core::String*>(#t91, #t92, #t94) in #t94 : #t93);
+  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t91 = map1 in let final core::int* #t92 = 3 in let final core::String* #t93 = self::Extension|[]<core::int*, core::String*>(#t91, #t92) in #t93 == null ?{core::String*} let final core::String* #t94 = "3" in let final void #t95 = self::Extension|[]=<core::int*, core::String*>(#t91, #t92, #t94) in #t94 : #t93);
   self::expect("3", self::Extension|[]<core::int*, core::String*>(map1, 3));
   self::MapLike<core::int*, core::int*>* map2 = new self::MapLike::•<core::int*, core::int*>();
   self::expect(1, let final self::MapLike<core::int*, core::int*>* #t96 = map2 in let final core::int* #t97 = 1 in let final void #t98 = self::Extension|[]=<core::int*, core::int*>(#t96, 0, #t97) in #t97);
-  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t99 = map2 in let final core::int* #t100 = 0 in let final core::int* #t101 = self::Extension|[]<core::int*, core::int*>(#t99, #t100).{core::num::+}(2) in let final void #t102 = self::Extension|[]=<core::int*, core::int*>(#t99, #t100, #t101) in #t101);
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t103 = map2 in let final core::int* #t104 = 0 in let final core::int* #t105 = self::Extension|[]<core::int*, core::int*>(#t103, #t104).{core::num::+}(2) in let final void #t106 = self::Extension|[]=<core::int*, core::int*>(#t103, #t104, #t105) in #t105);
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t107 = map2 in let final core::int* #t108 = 0 in let final core::int* #t109 = self::Extension|[]<core::int*, core::int*>(#t107, #t108) in let final void #t110 = self::Extension|[]=<core::int*, core::int*>(#t107, #t108, #t109.{core::num::+}(1)) in #t109);
+  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t99 = map2 in let final core::int* #t100 = 0 in let final core::int* #t101 = self::Extension|[]<core::int*, core::int*>(#t99, #t100).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t102 = self::Extension|[]=<core::int*, core::int*>(#t99, #t100, #t101) in #t101);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t103 = map2 in let final core::int* #t104 = 0 in let final core::int* #t105 = self::Extension|[]<core::int*, core::int*>(#t103, #t104).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t106 = self::Extension|[]=<core::int*, core::int*>(#t103, #t104, #t105) in #t105);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t107 = map2 in let final core::int* #t108 = 0 in let final core::int* #t109 = self::Extension|[]<core::int*, core::int*>(#t107, #t108) in let final void #t110 = self::Extension|[]=<core::int*, core::int*>(#t107, #t108, #t109.{core::num::+}(1){(core::num*) →* core::int*}) in #t109);
   self::expect(6, self::Extension|[]<core::int*, core::int*>(map2, 0));
-  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t111 = map2 in let final core::int* #t112 = 0 in let final core::int* #t113 = self::Extension|[]<core::int*, core::int*>(#t111, #t112).{core::num::-}(1) in let final void #t114 = self::Extension|[]=<core::int*, core::int*>(#t111, #t112, #t113) in #t113);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t111 = map2 in let final core::int* #t112 = 0 in let final core::int* #t113 = self::Extension|[]<core::int*, core::int*>(#t111, #t112).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t114 = self::Extension|[]=<core::int*, core::int*>(#t111, #t112, #t113) in #t113);
   self::expect(5, self::Extension|[]<core::int*, core::int*>(map2, 0));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart.weak.expect b/pkg/front_end/testcases/extensions/instance_access.dart.weak.expect
index acfd4c8..215028e 100644
--- a/pkg/front_end/testcases/extensions/instance_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/instance_access.dart.weak.expect
@@ -8,7 +8,7 @@
     : self::Class1::field = field, super core::Object::•()
     ;
   method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}})";
+    return "Class1(${this.{self::Class1::field}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -25,7 +25,7 @@
     : self::Class2::field = field, super core::Object::•()
     ;
   method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}})";
+    return "Class2(${this.{self::Class2::field}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -54,44 +54,44 @@
 }
 static method Extension1|method(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.method on ${#this}");
-  return #this.{self::Class1::field};
+  return #this.{self::Class1::field}{core::int*};
 }
 static method Extension1|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
 static method Extension1|genericMethod<T extends core::num*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
   core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T*}>(${t}) on ${#this}");
-  return #this.{self::Class1::field}.{core::num::+}(t) as{TypeError} core::int*;
+  return #this.{self::Class1::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
 static method Extension1|get#property(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.property get on ${#this}");
-  return #this.{self::Class1::field};
+  return #this.{self::Class1::field}{core::int*};
 }
 static method Extension1|set#property(lowered final self::Class1* #this, core::int* value) → void {
   #this.{self::Class1::field} = value;
   core::print("Extension1.property set(${value}) on ${#this}");
-  value = value.{core::num::+}(1);
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
 }
 static method Extension2|method(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.method on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(3);
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*};
 }
 static method Extension2|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
 static method Extension2|genericMethod<T extends core::num*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
   core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T*}>(${t}) on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(t).{core::num::+}(4) as{TypeError} core::int*;
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(4){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
 static method Extension2|get#property(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.property get on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(5);
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(5){(core::num*) →* core::int*};
 }
 static method Extension2|set#property(lowered final self::Class2* #this, core::int* value) → void {
   core::print("Extension2.property set(${value}) on ${#this}");
-  value = value.{core::num::+}(1);
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
@@ -103,13 +103,13 @@
   self::Class1* c1 = new self::Class1::•(1);
   self::expect(0, self::Extension1|method(c0));
   self::expect(1, self::Extension1|method(c1));
-  self::expect(1, let final self::Class1* #t1 = c1 in #t1.{self::Class1::==}(null) ?{core::int*} null : self::Extension1|method(#t1));
+  self::expect(1, let final self::Class1* #t1 = c1 in #t1 == null ?{core::int*} null : self::Extension1|method(#t1));
   self::expect(42, self::Extension1|genericMethod<core::int*>(c0, 42));
   self::expect(43, self::Extension1|genericMethod<core::num*>(c0, 43));
   self::expect(88, self::Extension1|genericMethod<core::int*>(c1, 87));
   self::expect(89, self::Extension1|genericMethod<core::num*>(c1, 88));
   self::expect(0, self::Extension1|get#property(c0));
-  self::expect(0, let final self::Class1* #t2 = c0 in #t2.{self::Class1::==}(null) ?{core::int*} null : self::Extension1|get#property(#t2));
+  self::expect(0, let final self::Class1* #t2 = c0 in #t2 == null ?{core::int*} null : self::Extension1|get#property(#t2));
   self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::Extension1|set#property(c0, #t3) in #t3);
   self::expect(1, self::Extension1|get#property(c1));
   self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::Extension1|set#property(c0, #t5) in #t5);
@@ -122,14 +122,14 @@
   self::Class2* c0 = new self::Class2::•(0);
   self::Class2* c1 = new self::Class2::•(1);
   self::expect(3, self::Extension2|method(c0));
-  self::expect(3, let final self::Class2* #t27 = c0 in #t27.{self::Class2::==}(null) ?{core::int*} null : self::Extension2|method(#t27));
+  self::expect(3, let final self::Class2* #t27 = c0 in #t27 == null ?{core::int*} null : self::Extension2|method(#t27));
   self::expect(4, self::Extension2|method(c1));
   self::expect(46, self::Extension2|genericMethod<core::int*>(c0, 42));
   self::expect(47, self::Extension2|genericMethod<core::num*>(c0, 43));
   self::expect(92, self::Extension2|genericMethod<core::int*>(c1, 87));
   self::expect(93, self::Extension2|genericMethod<core::num*>(c1, 88));
   self::expect(5, self::Extension2|get#property(c0));
-  self::expect(5, let final self::Class2* #t28 = c0 in #t28.{self::Class2::==}(null) ?{core::int*} null : self::Extension2|get#property(#t28));
+  self::expect(5, let final self::Class2* #t28 = c0 in #t28 == null ?{core::int*} null : self::Extension2|get#property(#t28));
   self::expect(42, let final core::int* #t29 = 42 in let final void #t30 = self::Extension2|set#property(c0, #t29) in #t29);
   self::expect(48, self::Extension2|get#property(c0));
   self::expect(6, self::Extension2|get#property(c1));
@@ -141,7 +141,7 @@
   self::expect(67, let final core::int* #t41 = let final core::int* #t42 = self::Extension2|get#property(c0) in let final void #t43 = self::Extension2|set#property(c1, #t42) in #t42 in let final void #t44 = self::Extension2|set#property(c0, #t41) in #t41);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/instance_access.dart.weak.transformed.expect
index c022d12..a0cad7e 100644
--- a/pkg/front_end/testcases/extensions/instance_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/instance_access.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     : self::Class1::field = field, super core::Object::•()
     ;
   method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}})";
+    return "Class1(${this.{self::Class1::field}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -25,7 +25,7 @@
     : self::Class2::field = field, super core::Object::•()
     ;
   method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}})";
+    return "Class2(${this.{self::Class2::field}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -54,44 +54,44 @@
 }
 static method Extension1|method(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.method on ${#this}");
-  return #this.{self::Class1::field};
+  return #this.{self::Class1::field}{core::int*};
 }
 static method Extension1|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
 static method Extension1|genericMethod<T extends core::num*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
   core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T*}>(${t}) on ${#this}");
-  return #this.{self::Class1::field}.{core::num::+}(t) as{TypeError} core::int*;
+  return #this.{self::Class1::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
 static method Extension1|get#property(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.property get on ${#this}");
-  return #this.{self::Class1::field};
+  return #this.{self::Class1::field}{core::int*};
 }
 static method Extension1|set#property(lowered final self::Class1* #this, core::int* value) → void {
   #this.{self::Class1::field} = value;
   core::print("Extension1.property set(${value}) on ${#this}");
-  value = value.{core::num::+}(1);
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
 }
 static method Extension2|method(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.method on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(3);
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*};
 }
 static method Extension2|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
 static method Extension2|genericMethod<T extends core::num*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
   core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T*}>(${t}) on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(t).{core::num::+}(4) as{TypeError} core::int*;
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(4){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
 static method Extension2|get#property(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.property get on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(5);
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(5){(core::num*) →* core::int*};
 }
 static method Extension2|set#property(lowered final self::Class2* #this, core::int* value) → void {
   core::print("Extension2.property set(${value}) on ${#this}");
-  value = value.{core::num::+}(1);
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
@@ -103,13 +103,13 @@
   self::Class1* c1 = new self::Class1::•(1);
   self::expect(0, self::Extension1|method(c0));
   self::expect(1, self::Extension1|method(c1));
-  self::expect(1, let final self::Class1* #t1 = c1 in #t1.{self::Class1::==}(null) ?{core::int*} null : self::Extension1|method(#t1));
+  self::expect(1, let final self::Class1* #t1 = c1 in #t1 == null ?{core::int*} null : self::Extension1|method(#t1));
   self::expect(42, self::Extension1|genericMethod<core::int*>(c0, 42));
   self::expect(43, self::Extension1|genericMethod<core::num*>(c0, 43));
   self::expect(88, self::Extension1|genericMethod<core::int*>(c1, 87));
   self::expect(89, self::Extension1|genericMethod<core::num*>(c1, 88));
   self::expect(0, self::Extension1|get#property(c0));
-  self::expect(0, let final self::Class1* #t2 = c0 in #t2.{self::Class1::==}(null) ?{core::int*} null : self::Extension1|get#property(#t2));
+  self::expect(0, let final self::Class1* #t2 = c0 in #t2 == null ?{core::int*} null : self::Extension1|get#property(#t2));
   self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::Extension1|set#property(c0, #t3) in #t3);
   self::expect(1, self::Extension1|get#property(c1));
   self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::Extension1|set#property(c0, #t5) in #t5);
@@ -122,14 +122,14 @@
   self::Class2* c0 = new self::Class2::•(0);
   self::Class2* c1 = new self::Class2::•(1);
   self::expect(3, self::Extension2|method(c0));
-  self::expect(3, let final self::Class2* #t27 = c0 in #t27.{self::Class2::==}(null) ?{core::int*} null : self::Extension2|method(#t27));
+  self::expect(3, let final self::Class2* #t27 = c0 in #t27 == null ?{core::int*} null : self::Extension2|method(#t27));
   self::expect(4, self::Extension2|method(c1));
   self::expect(46, self::Extension2|genericMethod<core::int*>(c0, 42));
   self::expect(47, self::Extension2|genericMethod<core::num*>(c0, 43));
   self::expect(92, self::Extension2|genericMethod<core::int*>(c1, 87));
   self::expect(93, self::Extension2|genericMethod<core::num*>(c1, 88));
   self::expect(5, self::Extension2|get#property(c0));
-  self::expect(5, let final self::Class2* #t28 = c0 in #t28.{self::Class2::==}(null) ?{core::int*} null : self::Extension2|get#property(#t28));
+  self::expect(5, let final self::Class2* #t28 = c0 in #t28 == null ?{core::int*} null : self::Extension2|get#property(#t28));
   self::expect(42, let final core::int* #t29 = 42 in let final void #t30 = self::Extension2|set#property(c0, #t29) in #t29);
   self::expect(48, self::Extension2|get#property(c0));
   self::expect(6, self::Extension2|get#property(c1));
@@ -141,7 +141,7 @@
   self::expect(67, let final core::int* #t41 = let final core::int* #t42 = self::Extension2|get#property(c0) in let final void #t43 = self::Extension2|set#property(c1, #t42) in #t42 in let final void #t44 = self::Extension2|set#property(c0, #t41) in #t41);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.expect b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.expect
index 948d21b..42cf217 100644
--- a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.expect
@@ -71,7 +71,7 @@
 }
 static set Extension1|staticProperty(core::int* value) → void {
   core::print("Extension1.staticProperty(${value})");
-  value = value.{core::num::+}(1);
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
 }
 static method main() → dynamic {
   self::Class1* c = new self::Class1::•();
diff --git a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.transformed.expect
index 948d21b..42cf217 100644
--- a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.transformed.expect
@@ -71,7 +71,7 @@
 }
 static set Extension1|staticProperty(core::int* value) → void {
   core::print("Extension1.staticProperty(${value})");
-  value = value.{core::num::+}(1);
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
 }
 static method main() → dynamic {
   self::Class1* c = new self::Class1::•();
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.expect b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.expect
index 7ff18f4..1240994 100644
--- a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.expect
@@ -8,7 +8,7 @@
     : self::Class1::field = field, super core::Object::•()
     ;
   method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}})";
+    return "Class1(${this.{self::Class1::field}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -25,7 +25,7 @@
     : self::Class2::field = field, super core::Object::•()
     ;
   method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}})";
+    return "Class2(${this.{self::Class2::field}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -50,25 +50,25 @@
 }
 static method Extension1|method(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.method on ${#this}");
-  return #this.{self::Class1::field};
+  return #this.{self::Class1::field}{core::int*};
 }
 static method Extension1|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
 static method Extension1|genericMethod<T extends core::num*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
   core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T*}>(${t}) on ${#this}");
-  return #this.{self::Class1::field}.{core::num::+}(t) as{TypeError} core::int*;
+  return #this.{self::Class1::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
 static method Extension2|method(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.method on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(2);
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(2){(core::num*) →* core::int*};
 }
 static method Extension2|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
 static method Extension2|genericMethod<T extends core::num*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
   core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T*}>(${t}) on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(t).{core::num::+}(3) as{TypeError} core::int*;
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(3){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
@@ -80,40 +80,40 @@
   self::Class1* c0 = new self::Class1::•(0);
   self::Class1* c1 = new self::Class1::•(1);
   () →* core::int* tearOff0 = self::Extension1|get#method(c0);
-  self::expect(0, tearOff0.call());
-  c0 = new self::Class1::•(4.{core::int::unary-}());
-  self::expect(0, tearOff0.call());
+  self::expect(0, tearOff0(){() →* core::int*});
+  c0 = new self::Class1::•(4.{core::int::unary-}(){() →* core::int*});
+  self::expect(0, tearOff0(){() →* core::int*});
   () →* core::int* tearOff1 = self::Extension1|get#method(c1);
-  self::expect(1, tearOff1.call());
-  c1 = new self::Class1::•(7.{core::int::unary-}());
-  self::expect(1, tearOff1.call());
+  self::expect(1, tearOff1(){() →* core::int*});
+  c1 = new self::Class1::•(7.{core::int::unary-}(){() →* core::int*});
+  self::expect(1, tearOff1(){() →* core::int*});
   <T extends core::num*>(T*) →* core::int* genericTearOff0 = self::Extension1|get#genericMethod(c0);
-  self::expect(38, genericTearOff0.call<core::int*>(42));
-  self::expect(38, genericTearOff0.call<core::num*>(42));
+  self::expect(38, genericTearOff0<core::int*>(42){(core::int*) →* core::int*});
+  self::expect(38, genericTearOff0<core::num*>(42){(core::num*) →* core::int*});
   <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c1);
-  self::expect(35, genericTearOff1.call<core::int*>(42));
-  self::expect(35, genericTearOff1.call<core::num*>(42));
+  self::expect(35, genericTearOff1<core::int*>(42){(core::int*) →* core::int*});
+  self::expect(35, genericTearOff1<core::num*>(42){(core::num*) →* core::int*});
 }
 static method testExtension2() → dynamic {
   self::Class2* c0 = new self::Class2::•(0);
   self::Class2* c1 = new self::Class2::•(1);
   () →* core::int* tearOff0 = self::Extension2|get#method(c0);
-  self::expect(2, tearOff0.call());
-  c0 = new self::Class2::•(4.{core::int::unary-}());
-  self::expect(2, tearOff0.call());
+  self::expect(2, tearOff0(){() →* core::int*});
+  c0 = new self::Class2::•(4.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, tearOff0(){() →* core::int*});
   () →* core::int* tearOff1 = self::Extension2|get#method(c1);
-  self::expect(3, tearOff1.call());
-  c1 = new self::Class2::•(7.{core::int::unary-}());
-  self::expect(3, tearOff1.call());
+  self::expect(3, tearOff1(){() →* core::int*});
+  c1 = new self::Class2::•(7.{core::int::unary-}(){() →* core::int*});
+  self::expect(3, tearOff1(){() →* core::int*});
   <T extends core::num*>(T*) →* core::int* genericTearOff0 = self::Extension2|get#genericMethod(c0);
-  self::expect(41, genericTearOff0.call<core::int*>(42));
-  self::expect(41, genericTearOff0.call<core::num*>(42));
+  self::expect(41, genericTearOff0<core::int*>(42){(core::int*) →* core::int*});
+  self::expect(41, genericTearOff0<core::num*>(42){(core::num*) →* core::int*});
   <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension2|get#genericMethod(c1);
-  self::expect(38, genericTearOff1.call<core::int*>(42));
-  self::expect(38, genericTearOff1.call<core::num*>(42));
+  self::expect(38, genericTearOff1<core::int*>(42){(core::int*) →* core::int*});
+  self::expect(38, genericTearOff1<core::num*>(42){(core::num*) →* core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.transformed.expect
index 1c79b12..c14a689 100644
--- a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     : self::Class1::field = field, super core::Object::•()
     ;
   method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}})";
+    return "Class1(${this.{self::Class1::field}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -25,7 +25,7 @@
     : self::Class2::field = field, super core::Object::•()
     ;
   method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}})";
+    return "Class2(${this.{self::Class2::field}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -50,25 +50,25 @@
 }
 static method Extension1|method(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.method on ${#this}");
-  return #this.{self::Class1::field};
+  return #this.{self::Class1::field}{core::int*};
 }
 static method Extension1|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::Extension1|method(#this);
 static method Extension1|genericMethod<T extends core::num*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
   core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T*}>(${t}) on ${#this}");
-  return #this.{self::Class1::field}.{core::num::+}(t) as{TypeError} core::int*;
+  return #this.{self::Class1::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
 static method Extension2|method(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.method on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(2);
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(2){(core::num*) →* core::int*};
 }
 static method Extension2|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::Extension2|method(#this);
 static method Extension2|genericMethod<T extends core::num*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
   core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T*}>(${t}) on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(t).{core::num::+}(3) as{TypeError} core::int*;
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(3){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
@@ -80,48 +80,48 @@
   self::Class1* c0 = new self::Class1::•(0);
   self::Class1* c1 = new self::Class1::•(1);
   () →* core::int* tearOff0 = self::Extension1|get#method(c0);
-  self::expect(0, tearOff0.call());
-  c0 = new self::Class1::•(4.{core::int::unary-}());
-  self::expect(0, tearOff0.call());
+  self::expect(0, tearOff0(){() →* core::int*});
+  c0 = new self::Class1::•(4.{core::int::unary-}(){() →* core::int*});
+  self::expect(0, tearOff0(){() →* core::int*});
   () →* core::int* tearOff1 = self::Extension1|get#method(c1);
-  self::expect(1, tearOff1.call());
-  c1 = new self::Class1::•(7.{core::int::unary-}());
-  self::expect(1, tearOff1.call());
+  self::expect(1, tearOff1(){() →* core::int*});
+  c1 = new self::Class1::•(7.{core::int::unary-}(){() →* core::int*});
+  self::expect(1, tearOff1(){() →* core::int*});
   <T extends core::num*>(T*) →* core::int* genericTearOff0 = self::Extension1|get#genericMethod(c0);
-  self::expect(38, genericTearOff0.call<core::int*>(42));
-  self::expect(38, genericTearOff0.call<core::num*>(42));
+  self::expect(38, genericTearOff0<core::int*>(42){(core::int*) →* core::int*});
+  self::expect(38, genericTearOff0<core::num*>(42){(core::num*) →* core::int*});
   <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c1);
-  self::expect(35, genericTearOff1.call<core::int*>(42));
-  self::expect(35, genericTearOff1.call<core::num*>(42));
+  self::expect(35, genericTearOff1<core::int*>(42){(core::int*) →* core::int*});
+  self::expect(35, genericTearOff1<core::num*>(42){(core::num*) →* core::int*});
 }
 static method testExtension2() → dynamic {
   self::Class2* c0 = new self::Class2::•(0);
   self::Class2* c1 = new self::Class2::•(1);
   () →* core::int* tearOff0 = self::Extension2|get#method(c0);
-  self::expect(2, tearOff0.call());
-  c0 = new self::Class2::•(4.{core::int::unary-}());
-  self::expect(2, tearOff0.call());
+  self::expect(2, tearOff0(){() →* core::int*});
+  c0 = new self::Class2::•(4.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, tearOff0(){() →* core::int*});
   () →* core::int* tearOff1 = self::Extension2|get#method(c1);
-  self::expect(3, tearOff1.call());
-  c1 = new self::Class2::•(7.{core::int::unary-}());
-  self::expect(3, tearOff1.call());
+  self::expect(3, tearOff1(){() →* core::int*});
+  c1 = new self::Class2::•(7.{core::int::unary-}(){() →* core::int*});
+  self::expect(3, tearOff1(){() →* core::int*});
   <T extends core::num*>(T*) →* core::int* genericTearOff0 = self::Extension2|get#genericMethod(c0);
-  self::expect(41, genericTearOff0.call<core::int*>(42));
-  self::expect(41, genericTearOff0.call<core::num*>(42));
+  self::expect(41, genericTearOff0<core::int*>(42){(core::int*) →* core::int*});
+  self::expect(41, genericTearOff0<core::num*>(42){(core::num*) →* core::int*});
   <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension2|get#genericMethod(c1);
-  self::expect(38, genericTearOff1.call<core::int*>(42));
-  self::expect(38, genericTearOff1.call<core::num*>(42));
+  self::expect(38, genericTearOff1<core::int*>(42){(core::int*) →* core::int*});
+  self::expect(38, genericTearOff1<core::num*>(42){(core::num*) →* core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///instance_tearoff.dart:54:19 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///instance_tearoff.dart:58:19 -> IntConstant(-7)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///instance_tearoff.dart:73:19 -> IntConstant(-4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///instance_tearoff.dart:77:19 -> IntConstant(-7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///instance_tearoff.dart:54:19 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///instance_tearoff.dart:58:19 -> IntConstant(-7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///instance_tearoff.dart:73:19 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///instance_tearoff.dart:77:19 -> IntConstant(-7)
 Extra constant evaluation: evaluated: 144, effectively constant: 4
diff --git a/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.expect b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.expect
index 810c73b..80f8e09 100644
--- a/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.expect
@@ -31,7 +31,7 @@
 static method _extension#0|set#property1(lowered final self::Class* #this, core::int* value) → void
   return #this.{self::Class::field} = value;
 static method _extension#1|get#property2(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method _extension#1|set#property2(lowered final self::Class* #this, core::int* value) → void
   return let final core::int* #t1 = value in let final void #t2 = self::_extension#0|set#property1(#this, #t1) in #t1;
 static method main() → dynamic {
@@ -44,7 +44,7 @@
   self::expect(87, self::_extension#0|get#property1(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.transformed.expect
index ee08d45..faaf375 100644
--- a/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.transformed.expect
@@ -31,7 +31,7 @@
 static method _extension#0|set#property1(lowered final self::Class* #this, core::int* value) → void
   return #this.{self::Class::field} = value;
 static method _extension#1|get#property2(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method _extension#1|set#property2(lowered final self::Class* #this, core::int* value) → void
   return let final core::int* #t1 = value in let final void #t2 = self::_extension#0|set#property1(#this, #t1) in #t1;
 static method main() → dynamic {
@@ -44,7 +44,7 @@
   self::expect(87, self::_extension#0|get#property1(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect
index 3dfc9a6..b85efb2 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect
@@ -173,19 +173,19 @@
   self::Class* c1 = new self::Class::•();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:23:3: Error: Explicit extension application requires exactly 1 positional argument.
   Extension().method(null);
-  ^^^^^^^^^".method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:24:3: Error: Explicit extension application requires exactly 1 positional argument.
   Extension(c1, null).method(null);
-  ^^^^^^^^^".method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:25:3: Error: Explicit extension application requires exactly 1 positional argument.
   Extension(receiver: c1).method(null);
-  ^^^^^^^^^".method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:26:3: Error: Explicit extension application requires exactly 1 positional argument.
   Extension(c1, receiver: null).method(null);
-  ^^^^^^^^^".method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:27:3: Error: Explicit extension application of extension 'Extension' takes '0' type argument(s).
   Extension<int>(c1).method(null);
-  ^^^^^^^^^".method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
   self::Extension|method(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:28:13: Error: The argument type 'String' can't be assigned to the parameter type 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   Extension(s).method(null);
@@ -218,31 +218,31 @@
   self::GenericClass<core::int*>* c2 = new self::GenericClass::•<core::int*>();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:42:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension().method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:43:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension<int>().method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:44:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension(c2, null).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:45:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension<int>(c2, null).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:46:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension(receiver: c2).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:47:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension<int>(receiver: c2).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:48:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension(c2, receiver: null).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:49:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension<int>(c2, receiver: null).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:50:3: Error: Explicit extension application of extension 'GenericExtension' takes '1' type argument(s).
   GenericExtension<int, String>(c2).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   self::GenericExtension|method<dynamic>(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:51:20: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<dynamic>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   GenericExtension(s).method();
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect
index 3dfc9a6..b85efb2 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect
@@ -173,19 +173,19 @@
   self::Class* c1 = new self::Class::•();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:23:3: Error: Explicit extension application requires exactly 1 positional argument.
   Extension().method(null);
-  ^^^^^^^^^".method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:24:3: Error: Explicit extension application requires exactly 1 positional argument.
   Extension(c1, null).method(null);
-  ^^^^^^^^^".method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:25:3: Error: Explicit extension application requires exactly 1 positional argument.
   Extension(receiver: c1).method(null);
-  ^^^^^^^^^".method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:26:3: Error: Explicit extension application requires exactly 1 positional argument.
   Extension(c1, receiver: null).method(null);
-  ^^^^^^^^^".method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:27:3: Error: Explicit extension application of extension 'Extension' takes '0' type argument(s).
   Extension<int>(c1).method(null);
-  ^^^^^^^^^".method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
   self::Extension|method(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:28:13: Error: The argument type 'String' can't be assigned to the parameter type 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   Extension(s).method(null);
@@ -218,31 +218,31 @@
   self::GenericClass<core::int*>* c2 = new self::GenericClass::•<core::int*>();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:42:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension().method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:43:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension<int>().method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:44:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension(c2, null).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:45:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension<int>(c2, null).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:46:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension(receiver: c2).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:47:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension<int>(receiver: c2).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:48:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension(c2, receiver: null).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:49:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension<int>(c2, receiver: null).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:50:3: Error: Explicit extension application of extension 'GenericExtension' takes '1' type argument(s).
   GenericExtension<int, String>(c2).method();
-  ^^^^^^^^^^^^^^^^".method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
   self::GenericExtension|method<dynamic>(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:51:20: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<dynamic>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   GenericExtension(s).method();
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.weak.expect b/pkg/front_end/testcases/extensions/issue38750.dart.weak.expect
index 3935f4db..1a16509 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.weak.expect
@@ -35,7 +35,7 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Method not found: 'C._staticFoo'.
   C._staticFoo();
     ^^^^^^^^^^";
-  c.{iss::C::foo}();
+  c.{iss::C::foo}(){() →* dynamic};
   iss::C::staticFoo();
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:16:5: Error: The method '_bar' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
@@ -53,7 +53,7 @@
     : super core::Object::•()
     ;
   method foo() → dynamic
-    return this.{iss::C::_foo}();
+    return this.{iss::C::_foo}(){() →* dynamic};
   method _foo() → dynamic {
     try {
       throw "producing a stack trace";
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue38750.dart.weak.transformed.expect
index 3935f4db..1a16509 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Method not found: 'C._staticFoo'.
   C._staticFoo();
     ^^^^^^^^^^";
-  c.{iss::C::foo}();
+  c.{iss::C::foo}(){() →* dynamic};
   iss::C::staticFoo();
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:16:5: Error: The method '_bar' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
@@ -53,7 +53,7 @@
     : super core::Object::•()
     ;
   method foo() → dynamic
-    return this.{iss::C::_foo}();
+    return this.{iss::C::_foo}(){() →* dynamic};
   method _foo() → dynamic {
     try {
       throw "producing a stack trace";
diff --git a/pkg/front_end/testcases/extensions/issue38755.dart.weak.expect b/pkg/front_end/testcases/extensions/issue38755.dart.weak.expect
index 724ef26..8be9036 100644
--- a/pkg/front_end/testcases/extensions/issue38755.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue38755.dart.weak.expect
@@ -8,7 +8,7 @@
 }
 static final field core::List<core::String*>* list = self::A|myMap<core::String*, core::String*>(<core::String*>["a", "b", "c"], (core::String* it) → core::String* => it);
 static method A|myMap<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(lowered final core::List<self::A|myMap::T*>* #this, (self::A|myMap::T*) →* self::A|myMap::R* block) → core::List<self::A|myMap::R*>* {
-  return #this.{core::Iterable::map}<self::A|myMap::R*>(block).{core::Iterable::toList}();
+  return #this.{core::Iterable::map}<self::A|myMap::R*>(block){((self::A|myMap::T*) →* self::A|myMap::R*) →* core::Iterable<self::A|myMap::R*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<self::A|myMap::R*>*};
 }
 static method A|get#myMap<T extends core::Object* = dynamic>(lowered final core::List<self::A|get#myMap::T*>* #this) → <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R*) →* core::List<R*>*
   return <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R* block) → core::List<R*>* => self::A|myMap<self::A|get#myMap::T*, R*>(#this, block);
diff --git a/pkg/front_end/testcases/extensions/issue38755.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue38755.dart.weak.transformed.expect
index a04ed8e..b5537fa 100644
--- a/pkg/front_end/testcases/extensions/issue38755.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38755.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
 }
 static final field core::List<core::String*>* list = self::A|myMap<core::String*, core::String*>(core::_GrowableList::_literal3<core::String*>("a", "b", "c"), (core::String* it) → core::String* => it);
 static method A|myMap<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(lowered final core::List<self::A|myMap::T*>* #this, (self::A|myMap::T*) →* self::A|myMap::R* block) → core::List<self::A|myMap::R*>* {
-  return #this.{core::Iterable::map}<self::A|myMap::R*>(block).{core::Iterable::toList}();
+  return #this.{core::Iterable::map}<self::A|myMap::R*>(block){((self::A|myMap::T*) →* self::A|myMap::R*) →* core::Iterable<self::A|myMap::R*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<self::A|myMap::R*>*};
 }
 static method A|get#myMap<T extends core::Object* = dynamic>(lowered final core::List<self::A|get#myMap::T*>* #this) → <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R*) →* core::List<R*>*
   return <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R* block) → core::List<R*>* => self::A|myMap<self::A|get#myMap::T*, R*>(#this, block);
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.weak.expect b/pkg/front_end/testcases/extensions/issue39527.dart.weak.expect
index 16896b4..7d9415b 100644
--- a/pkg/front_end/testcases/extensions/issue39527.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.weak.expect
@@ -25,10 +25,10 @@
 }
 static method Extension1|[](lowered final self::C* #this, core::int* index) → self::C*
   return let final self::C* #t1 = #this in block {
-    #t1.{self::C::value} = #t1.{self::C::value}.{core::num::+}(index.{core::num::+}(1));
+    #t1.{self::C::value} = #t1.{self::C::value}{core::int*}.{core::num::+}(index.{core::num::+}(1){(core::num*) →* core::int*}){(core::num*) →* core::int*};
   } =>#t1;
 static method Extension1|[]=(lowered final self::C* #this, core::int* index, self::C* other) → void
-  return #this.{self::C::value} = #this.{self::C::value}.{core::num::+}(other.{self::C::value}.{core::num::+}(index).{core::num::+}(1));
+  return #this.{self::C::value} = #this.{self::C::value}{core::int*}.{core::num::+}(other.{self::C::value}{core::int*}.{core::num::+}(index){(core::num*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*}){(core::num*) →* core::int*};
 static method Extension1|-(lowered final self::C* #this, core::int* val) → self::C*
   return #this;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue39527.dart.weak.transformed.expect
index 59b0317..f952880 100644
--- a/pkg/front_end/testcases/extensions/issue39527.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.weak.transformed.expect
@@ -25,10 +25,10 @@
 }
 static method Extension1|[](lowered final self::C* #this, core::int* index) → self::C*
   return let final self::C* #t1 = #this in block {
-    #t1.{self::C::value} = #t1.{self::C::value}.{core::num::+}(index.{core::num::+}(1));
+    #t1.{self::C::value} = #t1.{self::C::value}{core::int*}.{core::num::+}(index.{core::num::+}(1){(core::num*) →* core::int*}){(core::num*) →* core::int*};
   } =>#t1;
 static method Extension1|[]=(lowered final self::C* #this, core::int* index, self::C* other) → void
-  return #this.{self::C::value} = #this.{self::C::value}.{core::num::+}(other.{self::C::value}.{core::num::+}(index).{core::num::+}(1));
+  return #this.{self::C::value} = #this.{self::C::value}{core::int*}.{core::num::+}(other.{self::C::value}{core::int*}.{core::num::+}(index){(core::num*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*}){(core::num*) →* core::int*};
 static method Extension1|-(lowered final self::C* #this, core::int* val) → self::C*
   return #this;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.expect b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.expect
index 687f686..aef46a0 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.expect
@@ -16,7 +16,7 @@
   self::expect(false, iss::Extension|+(false, false));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}.";
 }
 
@@ -28,4 +28,4 @@
   operator + = iss::Extension|+;
 }
 static method Extension|+(lowered final core::bool* #this, core::bool* other) → core::bool*
-  return #this.{core::bool::|}(other);
+  return #this.{core::bool::|}(other){(core::bool*) →* core::bool*};
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.transformed.expect
index 687f686..aef46a0 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
   self::expect(false, iss::Extension|+(false, false));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}.";
 }
 
@@ -28,4 +28,4 @@
   operator + = iss::Extension|+;
 }
 static method Extension|+(lowered final core::bool* #this, core::bool* other) → core::bool*
-  return #this.{core::bool::|}(other);
+  return #this.{core::bool::|}(other){(core::bool*) →* core::bool*};
diff --git a/pkg/front_end/testcases/extensions/issue40596.dart.weak.expect b/pkg/front_end/testcases/extensions/issue40596.dart.weak.expect
index 7a2fd83..4f80fad 100644
--- a/pkg/front_end/testcases/extensions/issue40596.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue40596.dart.weak.expect
@@ -13,12 +13,12 @@
   asy::StreamController<core::String*>* controller = asy::StreamController::•<core::String*>();
   let final asy::StreamController<core::String*>* #t1 = controller in let final (dynamic) →* Null #t2 = (dynamic s) → Null {
     core::print(s);
-  } in self::Extension|call<core::String*>(#t1.{asy::StreamController::stream}, #t2);
+  } in self::Extension|call<core::String*>(#t1.{asy::StreamController::stream}{asy::Stream<core::String*>*}, #t2);
 }
 static method Extension|call<T extends core::Object* = dynamic>(lowered final asy::Stream<self::Extension|call::T*>* #this, core::Function* onData) → asy::StreamSubscription<self::Extension|call::T*>* {
   return #this.{asy::Stream::listen}((self::Extension|call::T* d) → Null {
-    onData.call(d);
-  });
+    onData(d);
+  }){((self::Extension|call::T*) →* void, {cancelOnError: core::bool*, onDone: () →* void, onError: core::Function*}) →* asy::StreamSubscription<self::Extension|call::T*>*};
 }
 static method Extension|get#call<T extends core::Object* = dynamic>(lowered final asy::Stream<self::Extension|get#call::T*>* #this) → (core::Function*) →* asy::StreamSubscription<self::Extension|get#call::T*>*
   return (core::Function* onData) → asy::StreamSubscription<self::Extension|get#call::T*>* => self::Extension|call<self::Extension|get#call::T*>(#this, onData);
diff --git a/pkg/front_end/testcases/extensions/issue40596.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue40596.dart.weak.transformed.expect
index 7a2fd83..4f80fad 100644
--- a/pkg/front_end/testcases/extensions/issue40596.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue40596.dart.weak.transformed.expect
@@ -13,12 +13,12 @@
   asy::StreamController<core::String*>* controller = asy::StreamController::•<core::String*>();
   let final asy::StreamController<core::String*>* #t1 = controller in let final (dynamic) →* Null #t2 = (dynamic s) → Null {
     core::print(s);
-  } in self::Extension|call<core::String*>(#t1.{asy::StreamController::stream}, #t2);
+  } in self::Extension|call<core::String*>(#t1.{asy::StreamController::stream}{asy::Stream<core::String*>*}, #t2);
 }
 static method Extension|call<T extends core::Object* = dynamic>(lowered final asy::Stream<self::Extension|call::T*>* #this, core::Function* onData) → asy::StreamSubscription<self::Extension|call::T*>* {
   return #this.{asy::Stream::listen}((self::Extension|call::T* d) → Null {
-    onData.call(d);
-  });
+    onData(d);
+  }){((self::Extension|call::T*) →* void, {cancelOnError: core::bool*, onDone: () →* void, onError: core::Function*}) →* asy::StreamSubscription<self::Extension|call::T*>*};
 }
 static method Extension|get#call<T extends core::Object* = dynamic>(lowered final asy::Stream<self::Extension|get#call::T*>* #this) → (core::Function*) →* asy::StreamSubscription<self::Extension|get#call::T*>*
   return (core::Function* onData) → asy::StreamSubscription<self::Extension|get#call::T*>* => self::Extension|call<self::Extension|get#call::T*>(#this, onData);
diff --git a/pkg/front_end/testcases/extensions/issue40713.dart.weak.expect b/pkg/front_end/testcases/extensions/issue40713.dart.weak.expect
index f44a847..5609379 100644
--- a/pkg/front_end/testcases/extensions/issue40713.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue40713.dart.weak.expect
@@ -17,14 +17,14 @@
   get safeFirst = self::SafeAccess|get#safeFirst;
 }
 static method SafeAccess|get#safeFirst<T extends core::Object* = dynamic>(lowered final core::Iterable<self::SafeAccess|get#safeFirst::T*>* #this) → self::SafeAccess|get#safeFirst::T* {
-  return #this.{core::Iterable::isNotEmpty} ?{self::SafeAccess|get#safeFirst::T*} #this.{core::Iterable::first} : null;
+  return #this.{core::Iterable::isNotEmpty}{core::bool*} ?{self::SafeAccess|get#safeFirst::T*} #this.{core::Iterable::first}{self::SafeAccess|get#safeFirst::T*} : null;
 }
 static method main() → dynamic {}
 static method test() → void {
   final core::List<dynamic>* list = <dynamic>[];
-  self::SafeAccess|get#safeFirst<dynamic>(list).call();
+  self::SafeAccess|get#safeFirst<dynamic>(list){dynamic}.call();
   final core::List<(core::int*) →* void>* list2 = <(core::int*) →* void>[];
-  self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2).call(0);
+  self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2)(0){(core::int*) →* void};
 }
 static method errors() → void {
   final core::List<core::Object*>* list = <core::Object*>[];
@@ -34,5 +34,5 @@
   final core::List<(core::int*) →* void>* list2 = <(core::int*) →* void>[];
   let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
   list2.safeFirst();
-                 ^" in self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2).call();
+                 ^" in self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2){<inapplicable>}.();
 }
diff --git a/pkg/front_end/testcases/extensions/issue40713.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue40713.dart.weak.transformed.expect
new file mode 100644
index 0000000..4627c59
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue40713.dart.weak.transformed.expect
@@ -0,0 +1,38 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue40713.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+//   list.safeFirst();
+//        ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+//   list2.safeFirst();
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension SafeAccess<T extends core::Object* = dynamic> on core::Iterable<T*>* {
+  get safeFirst = self::SafeAccess|get#safeFirst;
+}
+static method SafeAccess|get#safeFirst<T extends core::Object* = dynamic>(lowered final core::Iterable<self::SafeAccess|get#safeFirst::T*>* #this) → self::SafeAccess|get#safeFirst::T* {
+  return #this.{core::Iterable::isNotEmpty}{core::bool*} ?{self::SafeAccess|get#safeFirst::T*} #this.{core::Iterable::first}{self::SafeAccess|get#safeFirst::T*} : null;
+}
+static method main() → dynamic {}
+static method test() → void {
+  final core::List<dynamic>* list = core::_GrowableList::•<dynamic>(0);
+  self::SafeAccess|get#safeFirst<dynamic>(list){dynamic}.call();
+  final core::List<(core::int*) →* void>* list2 = core::_GrowableList::•<(core::int*) →* void>(0);
+  self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2)(0){(core::int*) →* void};
+}
+static method errors() → void {
+  final core::List<core::Object*>* list = core::_GrowableList::•<core::Object*>(0);
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+  list.safeFirst();
+       ^^^^^^^^^";
+  final core::List<(core::int*) →* void>* list2 = core::_GrowableList::•<(core::int*) →* void>(0);
+  let final Never* #t1 = invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+  list2.safeFirst();
+                 ^" in self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2){<inapplicable>}.();
+}
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.weak.expect b/pkg/front_end/testcases/extensions/issue43218.dart.weak.expect
index fd80b29..26ad712 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.weak.expect
@@ -18,7 +18,7 @@
     this.{self::C::value} = 0;
   }
   get id() → core::int*
-    return this.{self::C::value};
+    return this.{self::C::value}{core::int*};
   set id(core::int* v) → void {
     this.{self::C::value} = v;
   }
@@ -37,7 +37,7 @@
   get id = self::Ext|get#id;
 }
 static method Ext|get#id(lowered final self::C* #this) → core::int*
-  return #this.{self::C::value}.{core::num::+}(1);
+  return #this.{self::C::value}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
 static method test() → dynamic {
   self::C* c = new self::C::•();
   let final self::C* #t1 = c in invalid-expression "pkg/front_end/testcases/extensions/issue43218.dart:24:10: Error: The setter 'id' isn't defined for the class 'int'.
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue43218.dart.weak.transformed.expect
index fd80b29..26ad712 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
     this.{self::C::value} = 0;
   }
   get id() → core::int*
-    return this.{self::C::value};
+    return this.{self::C::value}{core::int*};
   set id(core::int* v) → void {
     this.{self::C::value} = v;
   }
@@ -37,7 +37,7 @@
   get id = self::Ext|get#id;
 }
 static method Ext|get#id(lowered final self::C* #this) → core::int*
-  return #this.{self::C::value}.{core::num::+}(1);
+  return #this.{self::C::value}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
 static method test() → dynamic {
   self::C* c = new self::C::•();
   let final self::C* #t1 = c in invalid-expression "pkg/front_end/testcases/extensions/issue43218.dart:24:10: Error: The setter 'id' isn't defined for the class 'int'.
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.expect
index c79acde..e492265 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.expect
@@ -34,6 +34,6 @@
  - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
-                      ^^^^^^".+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
+                      ^^^^^^"{dynamic}.+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
 static method Extension|set#setter(lowered final self::Class* #this, core::int* value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.transformed.expect
index 0a31620..d71c075 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.transformed.expect
@@ -34,6 +34,6 @@
  - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
-                      ^^^^^^".+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
+                      ^^^^^^"{dynamic}.+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
 static method Extension|set#setter(lowered final self::Class* #this, core::int* value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/null_aware.dart.weak.expect b/pkg/front_end/testcases/extensions/null_aware.dart.weak.expect
index 9cff1f1..31cc462 100644
--- a/pkg/front_end/testcases/extensions/null_aware.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/null_aware.dart.weak.expect
@@ -27,61 +27,61 @@
   set property = self::Extension|set#property;
 }
 static method Extension|get#property(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|set#property(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field} = value;
 }
 static method Extension|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
 static method Extension|testImplicitThis(lowered final self::Class* #this) → dynamic {
   self::expect(null, self::Extension|get#property(#this));
-  self::expect(42, let final core::int* #t1 = self::Extension|get#property(#this) in #t1.{core::num::==}(null) ?{core::int*} let final core::int* #t2 = 42 in let final void #t3 = self::Extension|set#property(#this, #t2) in #t2 : #t1);
-  self::expect(42, let final core::int* #t4 = self::Extension|get#property(#this) in #t4.{core::num::==}(null) ?{core::int*} let final core::int* #t5 = 87 in let final void #t6 = self::Extension|set#property(#this, #t5) in #t5 : #t4);
+  self::expect(42, let final core::int* #t1 = self::Extension|get#property(#this) in #t1 == null ?{core::int*} let final core::int* #t2 = 42 in let final void #t3 = self::Extension|set#property(#this, #t2) in #t2 : #t1);
+  self::expect(42, let final core::int* #t4 = self::Extension|get#property(#this) in #t4 == null ?{core::int*} let final core::int* #t5 = 87 in let final void #t6 = self::Extension|set#property(#this, #t5) in #t5 : #t4);
 }
 static method Extension|get#testImplicitThis(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|testImplicitThis(#this);
 static method main() → dynamic {
   self::Class* c;
-  self::expect(null, let final self::Class* #t7 = c in #t7.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t7));
-  self::expect(null, let final self::Class* #t8 = c in #t8.{self::Class::==}(null) ?{() →* core::int*} null : self::Extension|get#method(#t8));
-  self::expect(null, let final self::Class* #t9 = c in #t9.{self::Class::==}(null) ?{core::int*} null : self::Extension|method(#t9));
-  self::expect(null, let final self::Class* #t10 = c in #t10.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10, #t11) in #t11);
-  self::expect(null, let final self::Class* #t13 = c in #t13.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t14 = self::Extension|get#property(#t13) in #t14.{core::num::==}(null) ?{core::int*} let final core::int* #t15 = 42 in let final void #t16 = self::Extension|set#property(#t13, #t15) in #t15 : #t14);
+  self::expect(null, let final self::Class* #t7 = c in #t7 == null ?{core::int*} null : self::Extension|get#property(#t7));
+  self::expect(null, let final self::Class* #t8 = c in #t8 == null ?{() →* core::int*} null : self::Extension|get#method(#t8));
+  self::expect(null, let final self::Class* #t9 = c in #t9 == null ?{core::int*} null : self::Extension|method(#t9));
+  self::expect(null, let final self::Class* #t10 = c in #t10 == null ?{core::int*} null : let final core::int* #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10, #t11) in #t11);
+  self::expect(null, let final self::Class* #t13 = c in #t13 == null ?{core::int*} null : let final core::int* #t14 = self::Extension|get#property(#t13) in #t14 == null ?{core::int*} let final core::int* #t15 = 42 in let final void #t16 = self::Extension|set#property(#t13, #t15) in #t15 : #t14);
   c = new self::Class::•();
-  self::expect(null, let final self::Class* #t17 = c in #t17.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t17));
-  self::expect(null, let final self::Class* #t18 = c in #t18.{self::Class::==}(null) ?{core::int*} null : self::Extension|method(#t18));
-  () →* core::int* tearOff = let final self::Class* #t19 = c in #t19.{self::Class::==}(null) ?{() →* core::int*} null : self::Extension|get#method(#t19);
-  self::expect(null, tearOff.call());
-  self::expect(42, let final self::Class* #t20 = c in #t20.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t21 = 42 in let final void #t22 = self::Extension|set#property(#t20, #t21) in #t21);
-  self::expect(42, tearOff.call());
-  self::expect(null, let final self::Class* #t23 = c in #t23.{self::Class::==}(null) ?{Null} null : let final Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23, #t24) in #t24);
-  self::expect(42, let final self::Class* #t26 = c in #t26.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26, #t27) in #t27);
-  let final self::Class* #t29 = c in #t29.{self::Class::==}(null) ?{Null} null : self::Extension|set#property(#t29, null);
-  self::expect(null, let final self::Class* #t30 = c in #t30.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t30));
-  self::expect(42, let final self::Class* #t31 = c in let final core::int* #t32 = self::Extension|get#property(#t31) in #t32.{core::num::==}(null) ?{core::int*} let final core::int* #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32);
-  self::expect(42, let final self::Class* #t35 = c in let final core::int* #t36 = self::Extension|get#property(#t35) in #t36.{core::num::==}(null) ?{core::int*} let final core::int* #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36);
-  self::expect(null, let final self::Class* #t39 = c in #t39.{self::Class::==}(null) ?{Null} null : let final Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39, #t40) in #t40);
-  let final self::Class* #t42 = c in self::Extension|get#property(#t42).{core::num::==}(null) ?{core::int*} self::Extension|set#property(#t42, 42) : null;
-  self::expect(42, let final self::Class* #t43 = c in #t43.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t43));
-  let final self::Class* #t44 = c in self::Extension|get#property(#t44).{core::num::==}(null) ?{core::int*} self::Extension|set#property(#t44, 87) : null;
-  self::expect(42, let final self::Class* #t45 = c in #t45.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t45));
-  let final self::Class* #t46 = c in #t46.{self::Class::==}(null) ?{Null} null : self::Extension|set#property(#t46, null);
-  self::expect(null, let final self::Class* #t47 = c in #t47.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t47));
-  self::expect(42, let final self::Class* #t48 = c in let final core::int* #t49 = self::Extension|get#property(#t48) in #t49.{core::num::==}(null) ?{core::int*} let final core::int* #t50 = 42 in let final void #t51 = self::Extension|set#property(#t48, #t50) in #t50 : #t49);
-  self::expect(42, let final self::Class* #t52 = c in let final core::int* #t53 = self::Extension|get#property(#t52) in #t53.{core::num::==}(null) ?{core::int*} let final core::int* #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52, #t54) in #t54 : #t53);
-  let final self::Class* #t56 = c in #t56.{self::Class::==}(null) ?{Null} null : self::Extension|set#property(#t56, null);
-  self::expect(null, let final self::Class* #t57 = c in #t57.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t57));
-  let final self::Class* #t58 = c in self::Extension|get#property(#t58).{core::num::==}(null) ?{core::int*} self::Extension|set#property(#t58, 42) : null;
-  self::expect(42, let final self::Class* #t59 = c in #t59.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t59));
-  let final self::Class* #t60 = c in self::Extension|get#property(#t60).{core::num::==}(null) ?{core::int*} self::Extension|set#property(#t60, 87) : null;
-  self::expect(42, let final self::Class* #t61 = c in #t61.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t61));
-  let final self::Class* #t62 = c in #t62.{self::Class::==}(null) ?{Null} null : self::Extension|set#property(#t62, null);
+  self::expect(null, let final self::Class* #t17 = c in #t17 == null ?{core::int*} null : self::Extension|get#property(#t17));
+  self::expect(null, let final self::Class* #t18 = c in #t18 == null ?{core::int*} null : self::Extension|method(#t18));
+  () →* core::int* tearOff = let final self::Class* #t19 = c in #t19 == null ?{() →* core::int*} null : self::Extension|get#method(#t19);
+  self::expect(null, tearOff(){() →* core::int*});
+  self::expect(42, let final self::Class* #t20 = c in #t20 == null ?{core::int*} null : let final core::int* #t21 = 42 in let final void #t22 = self::Extension|set#property(#t20, #t21) in #t21);
+  self::expect(42, tearOff(){() →* core::int*});
+  self::expect(null, let final self::Class* #t23 = c in #t23 == null ?{Null} null : let final Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23, #t24) in #t24);
+  self::expect(42, let final self::Class* #t26 = c in #t26 == null ?{core::int*} null : let final core::int* #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26, #t27) in #t27);
+  let final self::Class* #t29 = c in #t29 == null ?{Null} null : self::Extension|set#property(#t29, null);
+  self::expect(null, let final self::Class* #t30 = c in #t30 == null ?{core::int*} null : self::Extension|get#property(#t30));
+  self::expect(42, let final self::Class* #t31 = c in let final core::int* #t32 = self::Extension|get#property(#t31) in #t32 == null ?{core::int*} let final core::int* #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32);
+  self::expect(42, let final self::Class* #t35 = c in let final core::int* #t36 = self::Extension|get#property(#t35) in #t36 == null ?{core::int*} let final core::int* #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36);
+  self::expect(null, let final self::Class* #t39 = c in #t39 == null ?{Null} null : let final Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39, #t40) in #t40);
+  let final self::Class* #t42 = c in self::Extension|get#property(#t42) == null ?{core::int*} self::Extension|set#property(#t42, 42) : null;
+  self::expect(42, let final self::Class* #t43 = c in #t43 == null ?{core::int*} null : self::Extension|get#property(#t43));
+  let final self::Class* #t44 = c in self::Extension|get#property(#t44) == null ?{core::int*} self::Extension|set#property(#t44, 87) : null;
+  self::expect(42, let final self::Class* #t45 = c in #t45 == null ?{core::int*} null : self::Extension|get#property(#t45));
+  let final self::Class* #t46 = c in #t46 == null ?{Null} null : self::Extension|set#property(#t46, null);
+  self::expect(null, let final self::Class* #t47 = c in #t47 == null ?{core::int*} null : self::Extension|get#property(#t47));
+  self::expect(42, let final self::Class* #t48 = c in let final core::int* #t49 = self::Extension|get#property(#t48) in #t49 == null ?{core::int*} let final core::int* #t50 = 42 in let final void #t51 = self::Extension|set#property(#t48, #t50) in #t50 : #t49);
+  self::expect(42, let final self::Class* #t52 = c in let final core::int* #t53 = self::Extension|get#property(#t52) in #t53 == null ?{core::int*} let final core::int* #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52, #t54) in #t54 : #t53);
+  let final self::Class* #t56 = c in #t56 == null ?{Null} null : self::Extension|set#property(#t56, null);
+  self::expect(null, let final self::Class* #t57 = c in #t57 == null ?{core::int*} null : self::Extension|get#property(#t57));
+  let final self::Class* #t58 = c in self::Extension|get#property(#t58) == null ?{core::int*} self::Extension|set#property(#t58, 42) : null;
+  self::expect(42, let final self::Class* #t59 = c in #t59 == null ?{core::int*} null : self::Extension|get#property(#t59));
+  let final self::Class* #t60 = c in self::Extension|get#property(#t60) == null ?{core::int*} self::Extension|set#property(#t60, 87) : null;
+  self::expect(42, let final self::Class* #t61 = c in #t61 == null ?{core::int*} null : self::Extension|get#property(#t61));
+  let final self::Class* #t62 = c in #t62 == null ?{Null} null : self::Extension|set#property(#t62, null);
   self::Extension|testImplicitThis(c);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/null_aware.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/null_aware.dart.weak.transformed.expect
index afe8026..6ea809e 100644
--- a/pkg/front_end/testcases/extensions/null_aware.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/null_aware.dart.weak.transformed.expect
@@ -27,61 +27,61 @@
   set property = self::Extension|set#property;
 }
 static method Extension|get#property(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|set#property(lowered final self::Class* #this, core::int* value) → void {
   #this.{self::Class::field} = value;
 }
 static method Extension|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field};
+  return #this.{self::Class::field}{core::int*};
 static method Extension|get#method(lowered final self::Class* #this) → () →* core::int*
   return () → core::int* => self::Extension|method(#this);
 static method Extension|testImplicitThis(lowered final self::Class* #this) → dynamic {
   self::expect(null, self::Extension|get#property(#this));
-  self::expect(42, let final core::int* #t1 = self::Extension|get#property(#this) in #t1.{core::num::==}(null) ?{core::int*} let final core::int* #t2 = 42 in let final void #t3 = self::Extension|set#property(#this, #t2) in #t2 : #t1);
-  self::expect(42, let final core::int* #t4 = self::Extension|get#property(#this) in #t4.{core::num::==}(null) ?{core::int*} let final core::int* #t5 = 87 in let final void #t6 = self::Extension|set#property(#this, #t5) in #t5 : #t4);
+  self::expect(42, let final core::int* #t1 = self::Extension|get#property(#this) in #t1 == null ?{core::int*} let final core::int* #t2 = 42 in let final void #t3 = self::Extension|set#property(#this, #t2) in #t2 : #t1);
+  self::expect(42, let final core::int* #t4 = self::Extension|get#property(#this) in #t4 == null ?{core::int*} let final core::int* #t5 = 87 in let final void #t6 = self::Extension|set#property(#this, #t5) in #t5 : #t4);
 }
 static method Extension|get#testImplicitThis(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|testImplicitThis(#this);
 static method main() → dynamic {
   self::Class* c;
-  self::expect(null, let final self::Class* #t7 = c in #t7.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t7));
-  self::expect(null, let final self::Class* #t8 = c in #t8.{self::Class::==}(null) ?{() →* core::int*} null : self::Extension|get#method(#t8));
-  self::expect(null, let final self::Class* #t9 = c in #t9.{self::Class::==}(null) ?{core::int*} null : self::Extension|method(#t9));
-  self::expect(null, let final self::Class* #t10 = c in #t10.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10, #t11) in #t11);
-  self::expect(null, let final self::Class* #t13 = c in #t13.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t14 = self::Extension|get#property(#t13) in #t14.{core::num::==}(null) ?{core::int*} let final core::int* #t15 = 42 in let final void #t16 = self::Extension|set#property(#t13, #t15) in #t15 : #t14);
+  self::expect(null, let final self::Class* #t7 = c in #t7 == null ?{core::int*} null : self::Extension|get#property(#t7));
+  self::expect(null, let final self::Class* #t8 = c in #t8 == null ?{() →* core::int*} null : self::Extension|get#method(#t8));
+  self::expect(null, let final self::Class* #t9 = c in #t9 == null ?{core::int*} null : self::Extension|method(#t9));
+  self::expect(null, let final self::Class* #t10 = c in #t10 == null ?{core::int*} null : let final core::int* #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10, #t11) in #t11);
+  self::expect(null, let final self::Class* #t13 = c in #t13 == null ?{core::int*} null : let final core::int* #t14 = self::Extension|get#property(#t13) in #t14 == null ?{core::int*} let final core::int* #t15 = 42 in let final void #t16 = self::Extension|set#property(#t13, #t15) in #t15 : #t14);
   c = new self::Class::•();
-  self::expect(null, let final self::Class* #t17 = c in #t17.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t17));
-  self::expect(null, let final self::Class* #t18 = c in #t18.{self::Class::==}(null) ?{core::int*} null : self::Extension|method(#t18));
-  () →* core::int* tearOff = let final self::Class* #t19 = c in #t19.{self::Class::==}(null) ?{() →* core::int*} null : self::Extension|get#method(#t19);
-  self::expect(null, tearOff.call());
-  self::expect(42, let final self::Class* #t20 = c in #t20.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t21 = 42 in let final void #t22 = self::Extension|set#property(#t20, #t21) in #t21);
-  self::expect(42, tearOff.call());
-  self::expect(null, let final self::Class* #t23 = c in #t23.{self::Class::==}(null) ?{Null} null : let final Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23, #t24) in #t24);
-  self::expect(42, let final self::Class* #t26 = c in #t26.{self::Class::==}(null) ?{core::int*} null : let final core::int* #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26, #t27) in #t27);
-  let final self::Class* #t29 = c in #t29.{self::Class::==}(null) ?{Null} null : self::Extension|set#property(#t29, null);
-  self::expect(null, let final self::Class* #t30 = c in #t30.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t30));
-  self::expect(42, let final self::Class* #t31 = c in let final core::int* #t32 = self::Extension|get#property(#t31) in #t32.{core::num::==}(null) ?{core::int*} let final core::int* #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32);
-  self::expect(42, let final self::Class* #t35 = c in let final core::int* #t36 = self::Extension|get#property(#t35) in #t36.{core::num::==}(null) ?{core::int*} let final core::int* #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36);
-  self::expect(null, let final self::Class* #t39 = c in #t39.{self::Class::==}(null) ?{Null} null : let final Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39, #t40) in #t40);
-  let final self::Class* #t42 = c in self::Extension|get#property(#t42).{core::num::==}(null) ?{core::int*} self::Extension|set#property(#t42, 42) : null;
-  self::expect(42, let final self::Class* #t43 = c in #t43.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t43));
-  let final self::Class* #t44 = c in self::Extension|get#property(#t44).{core::num::==}(null) ?{core::int*} self::Extension|set#property(#t44, 87) : null;
-  self::expect(42, let final self::Class* #t45 = c in #t45.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t45));
-  let final self::Class* #t46 = c in #t46.{self::Class::==}(null) ?{Null} null : self::Extension|set#property(#t46, null);
-  self::expect(null, let final self::Class* #t47 = c in #t47.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t47));
-  self::expect(42, let final self::Class* #t48 = c in let final core::int* #t49 = self::Extension|get#property(#t48) in #t49.{core::num::==}(null) ?{core::int*} let final core::int* #t50 = 42 in let final void #t51 = self::Extension|set#property(#t48, #t50) in #t50 : #t49);
-  self::expect(42, let final self::Class* #t52 = c in let final core::int* #t53 = self::Extension|get#property(#t52) in #t53.{core::num::==}(null) ?{core::int*} let final core::int* #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52, #t54) in #t54 : #t53);
-  let final self::Class* #t56 = c in #t56.{self::Class::==}(null) ?{Null} null : self::Extension|set#property(#t56, null);
-  self::expect(null, let final self::Class* #t57 = c in #t57.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t57));
-  let final self::Class* #t58 = c in self::Extension|get#property(#t58).{core::num::==}(null) ?{core::int*} self::Extension|set#property(#t58, 42) : null;
-  self::expect(42, let final self::Class* #t59 = c in #t59.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t59));
-  let final self::Class* #t60 = c in self::Extension|get#property(#t60).{core::num::==}(null) ?{core::int*} self::Extension|set#property(#t60, 87) : null;
-  self::expect(42, let final self::Class* #t61 = c in #t61.{self::Class::==}(null) ?{core::int*} null : self::Extension|get#property(#t61));
-  let final self::Class* #t62 = c in #t62.{self::Class::==}(null) ?{Null} null : self::Extension|set#property(#t62, null);
+  self::expect(null, let final self::Class* #t17 = c in #t17 == null ?{core::int*} null : self::Extension|get#property(#t17));
+  self::expect(null, let final self::Class* #t18 = c in #t18 == null ?{core::int*} null : self::Extension|method(#t18));
+  () →* core::int* tearOff = let final self::Class* #t19 = c in #t19 == null ?{() →* core::int*} null : self::Extension|get#method(#t19);
+  self::expect(null, tearOff(){() →* core::int*});
+  self::expect(42, let final self::Class* #t20 = c in #t20 == null ?{core::int*} null : let final core::int* #t21 = 42 in let final void #t22 = self::Extension|set#property(#t20, #t21) in #t21);
+  self::expect(42, tearOff(){() →* core::int*});
+  self::expect(null, let final self::Class* #t23 = c in #t23 == null ?{Null} null : let final Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23, #t24) in #t24);
+  self::expect(42, let final self::Class* #t26 = c in #t26 == null ?{core::int*} null : let final core::int* #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26, #t27) in #t27);
+  let final self::Class* #t29 = c in #t29 == null ?{Null} null : self::Extension|set#property(#t29, null);
+  self::expect(null, let final self::Class* #t30 = c in #t30 == null ?{core::int*} null : self::Extension|get#property(#t30));
+  self::expect(42, let final self::Class* #t31 = c in let final core::int* #t32 = self::Extension|get#property(#t31) in #t32 == null ?{core::int*} let final core::int* #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32);
+  self::expect(42, let final self::Class* #t35 = c in let final core::int* #t36 = self::Extension|get#property(#t35) in #t36 == null ?{core::int*} let final core::int* #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36);
+  self::expect(null, let final self::Class* #t39 = c in #t39 == null ?{Null} null : let final Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39, #t40) in #t40);
+  let final self::Class* #t42 = c in self::Extension|get#property(#t42) == null ?{core::int*} self::Extension|set#property(#t42, 42) : null;
+  self::expect(42, let final self::Class* #t43 = c in #t43 == null ?{core::int*} null : self::Extension|get#property(#t43));
+  let final self::Class* #t44 = c in self::Extension|get#property(#t44) == null ?{core::int*} self::Extension|set#property(#t44, 87) : null;
+  self::expect(42, let final self::Class* #t45 = c in #t45 == null ?{core::int*} null : self::Extension|get#property(#t45));
+  let final self::Class* #t46 = c in #t46 == null ?{Null} null : self::Extension|set#property(#t46, null);
+  self::expect(null, let final self::Class* #t47 = c in #t47 == null ?{core::int*} null : self::Extension|get#property(#t47));
+  self::expect(42, let final self::Class* #t48 = c in let final core::int* #t49 = self::Extension|get#property(#t48) in #t49 == null ?{core::int*} let final core::int* #t50 = 42 in let final void #t51 = self::Extension|set#property(#t48, #t50) in #t50 : #t49);
+  self::expect(42, let final self::Class* #t52 = c in let final core::int* #t53 = self::Extension|get#property(#t52) in #t53 == null ?{core::int*} let final core::int* #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52, #t54) in #t54 : #t53);
+  let final self::Class* #t56 = c in #t56 == null ?{Null} null : self::Extension|set#property(#t56, null);
+  self::expect(null, let final self::Class* #t57 = c in #t57 == null ?{core::int*} null : self::Extension|get#property(#t57));
+  let final self::Class* #t58 = c in self::Extension|get#property(#t58) == null ?{core::int*} self::Extension|set#property(#t58, 42) : null;
+  self::expect(42, let final self::Class* #t59 = c in #t59 == null ?{core::int*} null : self::Extension|get#property(#t59));
+  let final self::Class* #t60 = c in self::Extension|get#property(#t60) == null ?{core::int*} self::Extension|set#property(#t60, 87) : null;
+  self::expect(42, let final self::Class* #t61 = c in #t61 == null ?{core::int*} null : self::Extension|get#property(#t61));
+  let final self::Class* #t62 = c in #t62 == null ?{Null} null : self::Extension|set#property(#t62, null);
   self::Extension|testImplicitThis(c);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/operators.dart.weak.expect b/pkg/front_end/testcases/extensions/operators.dart.weak.expect
index 271cbb1..d97d9f4 100644
--- a/pkg/front_end/testcases/extensions/operators.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/operators.dart.weak.expect
@@ -20,23 +20,23 @@
     : self::Complex::real = real, self::Complex::imaginary = imaginary, super core::Object::•()
     ;
   method add(self::Complex* other) → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}.{core::double::+}(other.{self::Complex::real}), this.{self::Complex::imaginary}.{core::double::+}(other.{self::Complex::imaginary}));
+    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::+}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::+}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
   }
   method sub(self::Complex* other) → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}.{core::double::-}(other.{self::Complex::real}), this.{self::Complex::imaginary}.{core::double::-}(other.{self::Complex::imaginary}));
+    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::-}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::-}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
   }
   method negate() → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}.{core::double::unary-}(), this.{self::Complex::imaginary}.{core::double::unary-}());
+    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::unary-}(){() →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::unary-}(){() →* core::double*});
   }
   get hashCode() → core::int*
-    return this.{self::Complex::real}.{core::num::hashCode}.{core::num::*}(13).{core::num::+}(this.{self::Complex::imaginary}.{core::num::hashCode}.{core::num::*}(19));
+    return this.{self::Complex::real}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(13){(core::num*) →* core::int*}.{core::num::+}(this.{self::Complex::imaginary}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(19){(core::num*) →* core::int*}){(core::num*) →* core::int*};
   operator ==(core::Object* other) → core::bool* {
     if(core::identical(this, other))
       return true;
-    return other is self::Complex* && this.{self::Complex::real}.{core::num::==}(other{self::Complex*}.{self::Complex::real}) && this.{self::Complex::imaginary}.{core::num::==}(other{self::Complex*}.{self::Complex::imaginary});
+    return other is self::Complex* && this.{self::Complex::real}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::real}{core::double*} && this.{self::Complex::imaginary}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::imaginary}{core::double*};
   }
   method toString() → core::String*
-    return "Complex(${this.{self::Complex::real}},${this.{self::Complex::imaginary}})";
+    return "Complex(${this.{self::Complex::real}{core::double*}},${this.{self::Complex::imaginary}{core::double*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -51,11 +51,11 @@
   operator unary- = self::Operators|unary-;
 }
 static method Operators|+(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
-  return #this.{self::Complex::add}(other);
+  return #this.{self::Complex::add}(other){(self::Complex*) →* self::Complex*};
 static method Operators|-(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
-  return #this.{self::Complex::sub}(other);
+  return #this.{self::Complex::sub}(other){(self::Complex*) →* self::Complex*};
 static method Operators|unary-(lowered final self::Complex* #this) → self::Complex*
-  return #this.{self::Complex::negate}();
+  return #this.{self::Complex::negate}(){() →* self::Complex*};
 static method main() → dynamic {
   self::implicit();
   self::explicit();
@@ -135,13 +135,13 @@
 static method errors(self::Complex* c) → void {
   invalid-expression "pkg/front_end/testcases/extensions/operators.dart:125:3: Error: Explicit extension application cannot be used as an expression.
   Operators(c) == c;
-  ^^^^^^^^^".{core::Object::==}(c);
-  !invalid-expression "pkg/front_end/testcases/extensions/operators.dart:126:3: Error: Explicit extension application cannot be used as an expression.
+  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c;
+  !(invalid-expression "pkg/front_end/testcases/extensions/operators.dart:126:3: Error: Explicit extension application cannot be used as an expression.
   Operators(c) != c;
-  ^^^^^^^^^".{core::Object::==}(c);
+  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/operators.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/operators.dart.weak.transformed.expect
index 271cbb1..d97d9f4 100644
--- a/pkg/front_end/testcases/extensions/operators.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/operators.dart.weak.transformed.expect
@@ -20,23 +20,23 @@
     : self::Complex::real = real, self::Complex::imaginary = imaginary, super core::Object::•()
     ;
   method add(self::Complex* other) → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}.{core::double::+}(other.{self::Complex::real}), this.{self::Complex::imaginary}.{core::double::+}(other.{self::Complex::imaginary}));
+    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::+}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::+}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
   }
   method sub(self::Complex* other) → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}.{core::double::-}(other.{self::Complex::real}), this.{self::Complex::imaginary}.{core::double::-}(other.{self::Complex::imaginary}));
+    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::-}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::-}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
   }
   method negate() → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}.{core::double::unary-}(), this.{self::Complex::imaginary}.{core::double::unary-}());
+    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::unary-}(){() →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::unary-}(){() →* core::double*});
   }
   get hashCode() → core::int*
-    return this.{self::Complex::real}.{core::num::hashCode}.{core::num::*}(13).{core::num::+}(this.{self::Complex::imaginary}.{core::num::hashCode}.{core::num::*}(19));
+    return this.{self::Complex::real}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(13){(core::num*) →* core::int*}.{core::num::+}(this.{self::Complex::imaginary}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(19){(core::num*) →* core::int*}){(core::num*) →* core::int*};
   operator ==(core::Object* other) → core::bool* {
     if(core::identical(this, other))
       return true;
-    return other is self::Complex* && this.{self::Complex::real}.{core::num::==}(other{self::Complex*}.{self::Complex::real}) && this.{self::Complex::imaginary}.{core::num::==}(other{self::Complex*}.{self::Complex::imaginary});
+    return other is self::Complex* && this.{self::Complex::real}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::real}{core::double*} && this.{self::Complex::imaginary}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::imaginary}{core::double*};
   }
   method toString() → core::String*
-    return "Complex(${this.{self::Complex::real}},${this.{self::Complex::imaginary}})";
+    return "Complex(${this.{self::Complex::real}{core::double*}},${this.{self::Complex::imaginary}{core::double*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -51,11 +51,11 @@
   operator unary- = self::Operators|unary-;
 }
 static method Operators|+(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
-  return #this.{self::Complex::add}(other);
+  return #this.{self::Complex::add}(other){(self::Complex*) →* self::Complex*};
 static method Operators|-(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
-  return #this.{self::Complex::sub}(other);
+  return #this.{self::Complex::sub}(other){(self::Complex*) →* self::Complex*};
 static method Operators|unary-(lowered final self::Complex* #this) → self::Complex*
-  return #this.{self::Complex::negate}();
+  return #this.{self::Complex::negate}(){() →* self::Complex*};
 static method main() → dynamic {
   self::implicit();
   self::explicit();
@@ -135,13 +135,13 @@
 static method errors(self::Complex* c) → void {
   invalid-expression "pkg/front_end/testcases/extensions/operators.dart:125:3: Error: Explicit extension application cannot be used as an expression.
   Operators(c) == c;
-  ^^^^^^^^^".{core::Object::==}(c);
-  !invalid-expression "pkg/front_end/testcases/extensions/operators.dart:126:3: Error: Explicit extension application cannot be used as an expression.
+  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c;
+  !(invalid-expression "pkg/front_end/testcases/extensions/operators.dart:126:3: Error: Explicit extension application cannot be used as an expression.
   Operators(c) != c;
-  ^^^^^^^^^".{core::Object::==}(c);
+  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.expect
index c83a5d1..5a567f7 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
   method getInstanceField() → core::int*
-    return this.{self::A1::_instanceField};
+    return this.{self::A1::_instanceField}{core::int*};
   method setInstanceField(core::int* value) → void {
     this.{self::A1::_instanceField} = value;
   }
@@ -41,18 +41,18 @@
 }
 static field core::int* A2|staticField = self::A1::getStaticField();
 static method A2|get#instanceProperty(lowered final self::A1* #this) → core::int*
-  return #this.{self::A1::getInstanceField}();
+  return #this.{self::A1::getInstanceField}(){() →* core::int*};
 static method A2|set#instanceProperty(lowered final self::A1* #this, core::int* value) → void {
-  #this.{self::A1::setInstanceField}(value);
+  #this.{self::A1::setInstanceField}(value){(core::int*) →* void};
 }
 static method A2|+(lowered final self::A1* #this, core::int* value) → core::int* {
-  return #this.{self::A1::getInstanceField}().{core::num::+}(value);
+  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::num::+}(value){(core::num*) →* core::int*};
 }
 static method A2|-(lowered final self::A1* #this, core::int* value) → core::int* {
-  return #this.{self::A1::getInstanceField}().{core::num::-}(value);
+  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::num::-}(value){(core::num*) →* core::int*};
 }
 static method A2|unary-(lowered final self::A1* #this) → core::int* {
-  return #this.{self::A1::getInstanceField}().{core::int::unary-}();
+  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::int::unary-}(){() →* core::int*};
 }
 static get A2|staticProperty() → core::int*
   return self::A1::getStaticField();
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.transformed.expect
index c83a5d1..5a567f7 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
   method getInstanceField() → core::int*
-    return this.{self::A1::_instanceField};
+    return this.{self::A1::_instanceField}{core::int*};
   method setInstanceField(core::int* value) → void {
     this.{self::A1::_instanceField} = value;
   }
@@ -41,18 +41,18 @@
 }
 static field core::int* A2|staticField = self::A1::getStaticField();
 static method A2|get#instanceProperty(lowered final self::A1* #this) → core::int*
-  return #this.{self::A1::getInstanceField}();
+  return #this.{self::A1::getInstanceField}(){() →* core::int*};
 static method A2|set#instanceProperty(lowered final self::A1* #this, core::int* value) → void {
-  #this.{self::A1::setInstanceField}(value);
+  #this.{self::A1::setInstanceField}(value){(core::int*) →* void};
 }
 static method A2|+(lowered final self::A1* #this, core::int* value) → core::int* {
-  return #this.{self::A1::getInstanceField}().{core::num::+}(value);
+  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::num::+}(value){(core::num*) →* core::int*};
 }
 static method A2|-(lowered final self::A1* #this, core::int* value) → core::int* {
-  return #this.{self::A1::getInstanceField}().{core::num::-}(value);
+  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::num::-}(value){(core::num*) →* core::int*};
 }
 static method A2|unary-(lowered final self::A1* #this) → core::int* {
-  return #this.{self::A1::getInstanceField}().{core::int::unary-}();
+  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::int::unary-}(){() →* core::int*};
 }
 static get A2|staticProperty() → core::int*
   return self::A1::getStaticField();
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.weak.expect b/pkg/front_end/testcases/extensions/private_members.dart.weak.expect
index 344b0e7..4a003d0 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.weak.expect
@@ -85,19 +85,19 @@
                  ^^^^^^^^^^^^^^^");
   pri::expect(42, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:23:14: Error: Method not found: '_PrivateExtension'.
   expect(42, _PrivateExtension(\"\").publicMethod1());
-             ^^^^^^^^^^^^^^^^^".publicMethod1());
+             ^^^^^^^^^^^^^^^^^"{dynamic}.publicMethod1());
   pri::expect(87, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:24:14: Error: Method not found: '_PrivateExtension'.
   expect(87, _PrivateExtension(\"\")._privateMethod1());
-             ^^^^^^^^^^^^^^^^^"._privateMethod1());
+             ^^^^^^^^^^^^^^^^^"{dynamic}._privateMethod1());
   pri::expect(237, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:25:35: Error: Method not found: '_privateMethod2'.
   expect(237, PublicExtension(\"\")._privateMethod2());
                                   ^^^^^^^^^^^^^^^");
   pri::expect(24, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:27:14: Error: Getter not found: '_PrivateExtension'.
   expect(24, _PrivateExtension.publicStaticMethod1());
-             ^^^^^^^^^^^^^^^^^".publicStaticMethod1());
+             ^^^^^^^^^^^^^^^^^"{dynamic}.publicStaticMethod1());
   pri::expect(78, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:28:14: Error: Getter not found: '_PrivateExtension'.
   expect(78, _PrivateExtension._privateStaticMethod1());
-             ^^^^^^^^^^^^^^^^^"._privateStaticMethod1());
+             ^^^^^^^^^^^^^^^^^"{dynamic}._privateStaticMethod1());
   pri::expect(732, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:29:31: Error: Method not found: 'PublicExtension._privateStaticMethod2'.
   expect(732, PublicExtension._privateStaticMethod2());
                               ^^^^^^^^^^^^^^^^^^^^^");
@@ -217,7 +217,7 @@
   pri::_extension#0|test3("");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/private_members.dart.weak.transformed.expect
index 344b0e7..4a003d0 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.weak.transformed.expect
@@ -85,19 +85,19 @@
                  ^^^^^^^^^^^^^^^");
   pri::expect(42, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:23:14: Error: Method not found: '_PrivateExtension'.
   expect(42, _PrivateExtension(\"\").publicMethod1());
-             ^^^^^^^^^^^^^^^^^".publicMethod1());
+             ^^^^^^^^^^^^^^^^^"{dynamic}.publicMethod1());
   pri::expect(87, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:24:14: Error: Method not found: '_PrivateExtension'.
   expect(87, _PrivateExtension(\"\")._privateMethod1());
-             ^^^^^^^^^^^^^^^^^"._privateMethod1());
+             ^^^^^^^^^^^^^^^^^"{dynamic}._privateMethod1());
   pri::expect(237, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:25:35: Error: Method not found: '_privateMethod2'.
   expect(237, PublicExtension(\"\")._privateMethod2());
                                   ^^^^^^^^^^^^^^^");
   pri::expect(24, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:27:14: Error: Getter not found: '_PrivateExtension'.
   expect(24, _PrivateExtension.publicStaticMethod1());
-             ^^^^^^^^^^^^^^^^^".publicStaticMethod1());
+             ^^^^^^^^^^^^^^^^^"{dynamic}.publicStaticMethod1());
   pri::expect(78, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:28:14: Error: Getter not found: '_PrivateExtension'.
   expect(78, _PrivateExtension._privateStaticMethod1());
-             ^^^^^^^^^^^^^^^^^"._privateStaticMethod1());
+             ^^^^^^^^^^^^^^^^^"{dynamic}._privateStaticMethod1());
   pri::expect(732, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:29:31: Error: Method not found: 'PublicExtension._privateStaticMethod2'.
   expect(732, PublicExtension._privateStaticMethod2());
                               ^^^^^^^^^^^^^^^^^^^^^");
@@ -217,7 +217,7 @@
   pri::_extension#0|test3("");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound.dart.weak.expect b/pkg/front_end/testcases/extensions/type_variable_bound.dart.weak.expect
index 5b11e7e..20bfb57 100644
--- a/pkg/front_end/testcases/extensions/type_variable_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/type_variable_bound.dart.weak.expect
@@ -45,7 +45,7 @@
   return new self::Class::•();
 }
 static method test2<T extends self::Class*>(self::test2::T* t2) → dynamic {
-  if(self::test2::T*.{core::Type::==}(#C1)) {
+  if(self::test2::T* =={core::Type::==}{(core::Object*) →* core::bool*} (#C1)) {
     self::SubClass* subClass = self::BoundExtension|method2<self::Class*>(t2) as{TypeError} self::SubClass*;
   }
 }
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/type_variable_bound.dart.weak.transformed.expect
index 5b11e7e..20bfb57 100644
--- a/pkg/front_end/testcases/extensions/type_variable_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/type_variable_bound.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
   return new self::Class::•();
 }
 static method test2<T extends self::Class*>(self::test2::T* t2) → dynamic {
-  if(self::test2::T*.{core::Type::==}(#C1)) {
+  if(self::test2::T* =={core::Type::==}{(core::Object*) →* core::bool*} (#C1)) {
     self::SubClass* subClass = self::BoundExtension|method2<self::Class*>(t2) as{TypeError} self::SubClass*;
   }
 }
diff --git a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.expect b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.expect
index 932e48a..6532400 100644
--- a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.expect
@@ -8,7 +8,7 @@
     : self::Class1::field = field, super core::Object::•()
     ;
   method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}})";
+    return "Class1(${this.{self::Class1::field}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -25,7 +25,7 @@
     : self::Class2::field = field, super core::Object::•()
     ;
   method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}})";
+    return "Class2(${this.{self::Class2::field}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -54,44 +54,44 @@
 }
 static method _extension#0|method(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.method on ${#this}");
-  return #this.{self::Class1::field};
+  return #this.{self::Class1::field}{core::int*};
 }
 static method _extension#0|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::_extension#0|method(#this);
 static method _extension#0|genericMethod<T extends core::num*>(lowered final self::Class1* #this, self::_extension#0|genericMethod::T* t) → core::int* {
   core::print("Extension1.genericMethod<${self::_extension#0|genericMethod::T*}>(${t}) on ${#this}");
-  return #this.{self::Class1::field}.{core::num::+}(t) as{TypeError} core::int*;
+  return #this.{self::Class1::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 static method _extension#0|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::_extension#0|genericMethod<T*>(#this, t);
 static method _extension#0|get#property(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.property get on ${#this}");
-  return #this.{self::Class1::field};
+  return #this.{self::Class1::field}{core::int*};
 }
 static method _extension#0|set#property(lowered final self::Class1* #this, core::int* value) → void {
   #this.{self::Class1::field} = value;
   core::print("Extension1.property set(${value}) on ${#this}");
-  value = value.{core::num::+}(1);
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
 }
 static method _extension#1|method(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.method on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(3);
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*};
 }
 static method _extension#1|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::_extension#1|method(#this);
 static method _extension#1|genericMethod<T extends core::num*>(lowered final self::Class2* #this, self::_extension#1|genericMethod::T* t) → core::int* {
   core::print("Extension2.genericMethod<${self::_extension#1|genericMethod::T*}>(${t}) on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(t).{core::num::+}(4) as{TypeError} core::int*;
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(4){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 static method _extension#1|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::_extension#1|genericMethod<T*>(#this, t);
 static method _extension#1|get#property(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.property get on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(5);
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(5){(core::num*) →* core::int*};
 }
 static method _extension#1|set#property(lowered final self::Class2* #this, core::int* value) → void {
   core::print("Extension2.property set(${value}) on ${#this}");
-  value = value.{core::num::+}(1);
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
@@ -103,13 +103,13 @@
   self::Class1* c1 = new self::Class1::•(1);
   self::expect(0, self::_extension#0|method(c0));
   self::expect(1, self::_extension#0|method(c1));
-  self::expect(1, let final self::Class1* #t1 = c1 in #t1.{self::Class1::==}(null) ?{core::int*} null : self::_extension#0|method(#t1));
+  self::expect(1, let final self::Class1* #t1 = c1 in #t1 == null ?{core::int*} null : self::_extension#0|method(#t1));
   self::expect(42, self::_extension#0|genericMethod<core::int*>(c0, 42));
   self::expect(43, self::_extension#0|genericMethod<core::num*>(c0, 43));
   self::expect(88, self::_extension#0|genericMethod<core::int*>(c1, 87));
   self::expect(89, self::_extension#0|genericMethod<core::num*>(c1, 88));
   self::expect(0, self::_extension#0|get#property(c0));
-  self::expect(0, let final self::Class1* #t2 = c0 in #t2.{self::Class1::==}(null) ?{core::int*} null : self::_extension#0|get#property(#t2));
+  self::expect(0, let final self::Class1* #t2 = c0 in #t2 == null ?{core::int*} null : self::_extension#0|get#property(#t2));
   self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::_extension#0|set#property(c0, #t3) in #t3);
   self::expect(1, self::_extension#0|get#property(c1));
   self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::_extension#0|set#property(c0, #t5) in #t5);
@@ -122,14 +122,14 @@
   self::Class2* c0 = new self::Class2::•(0);
   self::Class2* c1 = new self::Class2::•(1);
   self::expect(3, self::_extension#1|method(c0));
-  self::expect(3, let final self::Class2* #t27 = c0 in #t27.{self::Class2::==}(null) ?{core::int*} null : self::_extension#1|method(#t27));
+  self::expect(3, let final self::Class2* #t27 = c0 in #t27 == null ?{core::int*} null : self::_extension#1|method(#t27));
   self::expect(4, self::_extension#1|method(c1));
   self::expect(46, self::_extension#1|genericMethod<core::int*>(c0, 42));
   self::expect(47, self::_extension#1|genericMethod<core::num*>(c0, 43));
   self::expect(92, self::_extension#1|genericMethod<core::int*>(c1, 87));
   self::expect(93, self::_extension#1|genericMethod<core::num*>(c1, 88));
   self::expect(5, self::_extension#1|get#property(c0));
-  self::expect(5, let final self::Class2* #t28 = c0 in #t28.{self::Class2::==}(null) ?{core::int*} null : self::_extension#1|get#property(#t28));
+  self::expect(5, let final self::Class2* #t28 = c0 in #t28 == null ?{core::int*} null : self::_extension#1|get#property(#t28));
   self::expect(42, let final core::int* #t29 = 42 in let final void #t30 = self::_extension#1|set#property(c0, #t29) in #t29);
   self::expect(48, self::_extension#1|get#property(c0));
   self::expect(6, self::_extension#1|get#property(c1));
@@ -141,7 +141,7 @@
   self::expect(67, let final core::int* #t41 = let final core::int* #t42 = self::_extension#1|get#property(c0) in let final void #t43 = self::_extension#1|set#property(c1, #t42) in #t42 in let final void #t44 = self::_extension#1|set#property(c0, #t41) in #t41);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.transformed.expect
index bfc173d..f3b4c97 100644
--- a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     : self::Class1::field = field, super core::Object::•()
     ;
   method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}})";
+    return "Class1(${this.{self::Class1::field}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -25,7 +25,7 @@
     : self::Class2::field = field, super core::Object::•()
     ;
   method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}})";
+    return "Class2(${this.{self::Class2::field}{core::int*}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -54,44 +54,44 @@
 }
 static method _extension#0|method(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.method on ${#this}");
-  return #this.{self::Class1::field};
+  return #this.{self::Class1::field}{core::int*};
 }
 static method _extension#0|get#method(lowered final self::Class1* #this) → () →* core::int*
   return () → core::int* => self::_extension#0|method(#this);
 static method _extension#0|genericMethod<T extends core::num*>(lowered final self::Class1* #this, self::_extension#0|genericMethod::T* t) → core::int* {
   core::print("Extension1.genericMethod<${self::_extension#0|genericMethod::T*}>(${t}) on ${#this}");
-  return #this.{self::Class1::field}.{core::num::+}(t) as{TypeError} core::int*;
+  return #this.{self::Class1::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 static method _extension#0|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::_extension#0|genericMethod<T*>(#this, t);
 static method _extension#0|get#property(lowered final self::Class1* #this) → core::int* {
   core::print("Extension1.property get on ${#this}");
-  return #this.{self::Class1::field};
+  return #this.{self::Class1::field}{core::int*};
 }
 static method _extension#0|set#property(lowered final self::Class1* #this, core::int* value) → void {
   #this.{self::Class1::field} = value;
   core::print("Extension1.property set(${value}) on ${#this}");
-  value = value.{core::num::+}(1);
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
 }
 static method _extension#1|method(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.method on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(3);
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*};
 }
 static method _extension#1|get#method(lowered final self::Class2* #this) → () →* core::int*
   return () → core::int* => self::_extension#1|method(#this);
 static method _extension#1|genericMethod<T extends core::num*>(lowered final self::Class2* #this, self::_extension#1|genericMethod::T* t) → core::int* {
   core::print("Extension2.genericMethod<${self::_extension#1|genericMethod::T*}>(${t}) on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(t).{core::num::+}(4) as{TypeError} core::int*;
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(4){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 static method _extension#1|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
   return <T extends core::num*>(T* t) → core::int* => self::_extension#1|genericMethod<T*>(#this, t);
 static method _extension#1|get#property(lowered final self::Class2* #this) → core::int* {
   core::print("Extension2.property get on ${#this}");
-  return #this.{self::Class2::field}.{core::num::+}(5);
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(5){(core::num*) →* core::int*};
 }
 static method _extension#1|set#property(lowered final self::Class2* #this, core::int* value) → void {
   core::print("Extension2.property set(${value}) on ${#this}");
-  value = value.{core::num::+}(1);
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
@@ -103,13 +103,13 @@
   self::Class1* c1 = new self::Class1::•(1);
   self::expect(0, self::_extension#0|method(c0));
   self::expect(1, self::_extension#0|method(c1));
-  self::expect(1, let final self::Class1* #t1 = c1 in #t1.{self::Class1::==}(null) ?{core::int*} null : self::_extension#0|method(#t1));
+  self::expect(1, let final self::Class1* #t1 = c1 in #t1 == null ?{core::int*} null : self::_extension#0|method(#t1));
   self::expect(42, self::_extension#0|genericMethod<core::int*>(c0, 42));
   self::expect(43, self::_extension#0|genericMethod<core::num*>(c0, 43));
   self::expect(88, self::_extension#0|genericMethod<core::int*>(c1, 87));
   self::expect(89, self::_extension#0|genericMethod<core::num*>(c1, 88));
   self::expect(0, self::_extension#0|get#property(c0));
-  self::expect(0, let final self::Class1* #t2 = c0 in #t2.{self::Class1::==}(null) ?{core::int*} null : self::_extension#0|get#property(#t2));
+  self::expect(0, let final self::Class1* #t2 = c0 in #t2 == null ?{core::int*} null : self::_extension#0|get#property(#t2));
   self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::_extension#0|set#property(c0, #t3) in #t3);
   self::expect(1, self::_extension#0|get#property(c1));
   self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::_extension#0|set#property(c0, #t5) in #t5);
@@ -122,14 +122,14 @@
   self::Class2* c0 = new self::Class2::•(0);
   self::Class2* c1 = new self::Class2::•(1);
   self::expect(3, self::_extension#1|method(c0));
-  self::expect(3, let final self::Class2* #t27 = c0 in #t27.{self::Class2::==}(null) ?{core::int*} null : self::_extension#1|method(#t27));
+  self::expect(3, let final self::Class2* #t27 = c0 in #t27 == null ?{core::int*} null : self::_extension#1|method(#t27));
   self::expect(4, self::_extension#1|method(c1));
   self::expect(46, self::_extension#1|genericMethod<core::int*>(c0, 42));
   self::expect(47, self::_extension#1|genericMethod<core::num*>(c0, 43));
   self::expect(92, self::_extension#1|genericMethod<core::int*>(c1, 87));
   self::expect(93, self::_extension#1|genericMethod<core::num*>(c1, 88));
   self::expect(5, self::_extension#1|get#property(c0));
-  self::expect(5, let final self::Class2* #t28 = c0 in #t28.{self::Class2::==}(null) ?{core::int*} null : self::_extension#1|get#property(#t28));
+  self::expect(5, let final self::Class2* #t28 = c0 in #t28 == null ?{core::int*} null : self::_extension#1|get#property(#t28));
   self::expect(42, let final core::int* #t29 = 42 in let final void #t30 = self::_extension#1|set#property(c0, #t29) in #t29);
   self::expect(48, self::_extension#1|get#property(c0));
   self::expect(6, self::_extension#1|get#property(c1));
@@ -141,7 +141,7 @@
   self::expect(67, let final core::int* #t41 = let final core::int* #t42 = self::_extension#1|get#property(c0) in let final void #t43 = self::_extension#1|set#property(c1, #t42) in #t42 in let final void #t44 = self::_extension#1|set#property(c0, #t41) in #t41);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.expect
index 9e26317..5754a1b 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.expect
@@ -28,12 +28,12 @@
     : self::Strength::value = value, self::Strength::name = name, super core::Object::•()
     ;
   method nextWeaker() → self::Strength*
-    return (#C19).{core::List::[]}(this.{self::Strength::value});
+    return (#C19).{core::List::[]}(this.{self::Strength::value}{core::int*}){(core::int*) →* self::Strength*};
   static method stronger(self::Strength* s1, self::Strength* s2) → core::bool* {
-    return s1.{self::Strength::value}.{core::num::<}(s2.{self::Strength::value});
+    return s1.{self::Strength::value}{core::int*}.{core::num::<}(s2.{self::Strength::value}{core::int*}){(core::num*) →* core::bool*};
   }
   static method weaker(self::Strength* s1, self::Strength* s2) → core::bool* {
-    return s1.{self::Strength::value}.{core::num::>}(s2.{self::Strength::value});
+    return s1.{self::Strength::value}{core::int*}.{core::num::>}(s2.{self::Strength::value}{core::int*}){(core::num*) →* core::bool*};
   }
   static method weakest(self::Strength* s1, self::Strength* s2) → self::Strength* {
     return self::Strength::weaker(s1, s2) ?{self::Strength*} s1 : s2;
@@ -68,32 +68,32 @@
   abstract method execute() → void;
   abstract method recalculate() → void;
   method addConstraint() → void {
-    this.{self::Constraint::addToGraph}();
-    self::planner.{self::Planner::incrementalAdd}(this);
+    this.{self::Constraint::addToGraph}(){() →* void};
+    self::planner.{self::Planner::incrementalAdd}(this){(self::Constraint*) →* void};
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
-    if(!this.{self::Constraint::isSatisfied}()) {
-      if(this.{self::Constraint::strength}.{self::Strength::==}(#C22)) {
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+    if(!this.{self::Constraint::isSatisfied}(){() →* core::bool*}) {
+      if(this.{self::Constraint::strength}{self::Strength*} =={self::Strength::==}{(dynamic) →* core::bool*} (#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
-    self::Variable* out = this.{self::Constraint::output}();
-    self::Constraint* overridden = out.{self::Variable::determinedBy};
-    if(!overridden.{self::Constraint::==}(null))
-      overridden.{self::Constraint::markUnsatisfied}();
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+    self::Variable* out = this.{self::Constraint::output}(){() →* self::Variable*};
+    self::Constraint* overridden = out.{self::Variable::determinedBy}{self::Constraint*};
+    if(!(overridden == null))
+      overridden.{self::Constraint::markUnsatisfied}(){() →* void};
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*){(self::Constraint*, core::int*) →* core::bool*})
       core::print("Cycle encountered");
     out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
-    if(this.{self::Constraint::isSatisfied}())
-      self::planner.{self::Planner::incrementalRemove}(this);
-    this.{self::Constraint::removeFromGraph}();
+    if(this.{self::Constraint::isSatisfied}(){() →* core::bool*})
+      self::planner.{self::Planner::incrementalRemove}(this){(self::Constraint*) →* void};
+    this.{self::Constraint::removeFromGraph}(){() →* void};
   }
   method isInput() → core::bool*
     return false;
@@ -113,25 +113,25 @@
   field core::bool* satisfied = false;
   constructor •(self::Variable* myOutput, self::Strength* strength) → self::UnaryConstraint*
     : self::UnaryConstraint::myOutput = myOutput, super self::Constraint::•(strength) {
-    this.{self::Constraint::addConstraint}();
+    this.{self::Constraint::addConstraint}(){() →* void};
   }
   method addToGraph() → void {
-    this.{self::UnaryConstraint::myOutput}.{self::Variable::addConstraint}(this);
+    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
     this.{self::UnaryConstraint::satisfied} = false;
   }
   method chooseMethod(core::int* mark) → void {
-    this.{self::UnaryConstraint::satisfied} = !this.{self::UnaryConstraint::myOutput}.{self::Variable::mark}.{core::num::==}(mark) && self::Strength::stronger(this.{self::Constraint::strength}, this.{self::UnaryConstraint::myOutput}.{self::Variable::walkStrength});
+    this.{self::UnaryConstraint::satisfied} = !(this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*});
   }
   method isSatisfied() → core::bool*
-    return this.{self::UnaryConstraint::satisfied};
+    return this.{self::UnaryConstraint::satisfied}{core::bool*};
   method markInputs(core::int* mark) → void {}
   method output() → self::Variable*
-    return this.{self::UnaryConstraint::myOutput};
+    return this.{self::UnaryConstraint::myOutput}{self::Variable*};
   method recalculate() → void {
-    this.{self::UnaryConstraint::myOutput}.{self::Variable::walkStrength} = this.{self::Constraint::strength};
-    this.{self::UnaryConstraint::myOutput}.{self::Variable::stay} = !this.{self::Constraint::isInput}();
-    if(this.{self::UnaryConstraint::myOutput}.{self::Variable::stay})
-      this.{self::Constraint::execute}();
+    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::walkStrength} = this.{self::Constraint::strength}{self::Strength*};
+    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::stay} = !this.{self::Constraint::isInput}(){() →* core::bool*};
+    if(this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::stay}{core::bool*})
+      this.{self::Constraint::execute}(){() →* void};
   }
   method markUnsatisfied() → void {
     this.{self::UnaryConstraint::satisfied} = false;
@@ -139,8 +139,8 @@
   method inputsKnown(core::int* mark) → core::bool*
     return true;
   method removeFromGraph() → void {
-    if(!this.{self::UnaryConstraint::myOutput}.{self::Variable::==}(null))
-      this.{self::UnaryConstraint::myOutput}.{self::Variable::removeConstraint}(this);
+    if(!(this.{self::UnaryConstraint::myOutput}{self::Variable*} == null))
+      this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
     this.{self::UnaryConstraint::satisfied} = false;
   }
 }
@@ -164,56 +164,56 @@
   field core::int* direction = #C1;
   constructor •(self::Variable* v1, self::Variable* v2, self::Strength* strength) → self::BinaryConstraint*
     : self::BinaryConstraint::v1 = v1, self::BinaryConstraint::v2 = v2, super self::Constraint::•(strength) {
-    this.{self::Constraint::addConstraint}();
+    this.{self::Constraint::addConstraint}(){() →* void};
   }
   method chooseMethod(core::int* mark) → void {
-    if(this.{self::BinaryConstraint::v1}.{self::Variable::mark}.{core::num::==}(mark)) {
-      this.{self::BinaryConstraint::direction} = !this.{self::BinaryConstraint::v2}.{self::Variable::mark}.{core::num::==}(mark) && self::Strength::stronger(this.{self::Constraint::strength}, this.{self::BinaryConstraint::v2}.{self::Variable::walkStrength}) ?{core::int*} #C4 : #C1;
+    if(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
+      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C4 : #C1;
     }
-    if(this.{self::BinaryConstraint::v2}.{self::Variable::mark}.{core::num::==}(mark)) {
-      this.{self::BinaryConstraint::direction} = !this.{self::BinaryConstraint::v1}.{self::Variable::mark}.{core::num::==}(mark) && self::Strength::stronger(this.{self::Constraint::strength}, this.{self::BinaryConstraint::v1}.{self::Variable::walkStrength}) ?{core::int*} #C20 : #C1;
+    if(this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
+      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C20 : #C1;
     }
-    if(self::Strength::weaker(this.{self::BinaryConstraint::v1}.{self::Variable::walkStrength}, this.{self::BinaryConstraint::v2}.{self::Variable::walkStrength})) {
-      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}, this.{self::BinaryConstraint::v1}.{self::Variable::walkStrength}) ?{core::int*} #C20 : #C1;
+    if(self::Strength::weaker(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*})) {
+      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C20 : #C1;
     }
     else {
-      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}, this.{self::BinaryConstraint::v2}.{self::Variable::walkStrength}) ?{core::int*} #C4 : #C20;
+      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C4 : #C20;
     }
   }
   method addToGraph() → void {
-    this.{self::BinaryConstraint::v1}.{self::Variable::addConstraint}(this);
-    this.{self::BinaryConstraint::v2}.{self::Variable::addConstraint}(this);
+    this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
     this.{self::BinaryConstraint::direction} = #C1;
   }
   method isSatisfied() → core::bool*
-    return !this.{self::BinaryConstraint::direction}.{core::num::==}(#C1);
+    return !(this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} (#C1));
   method markInputs(core::int* mark) → void {
-    this.{self::BinaryConstraint::input}().{self::Variable::mark} = mark;
+    this.{self::BinaryConstraint::input}(){() →* self::Variable*}.{self::Variable::mark} = mark;
   }
   method input() → self::Variable*
-    return this.{self::BinaryConstraint::direction}.{core::num::==}(#C4) ?{self::Variable*} this.{self::BinaryConstraint::v1} : this.{self::BinaryConstraint::v2};
+    return this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} (#C4) ?{self::Variable*} this.{self::BinaryConstraint::v1}{self::Variable*} : this.{self::BinaryConstraint::v2}{self::Variable*};
   method output() → self::Variable*
-    return this.{self::BinaryConstraint::direction}.{core::num::==}(#C4) ?{self::Variable*} this.{self::BinaryConstraint::v2} : this.{self::BinaryConstraint::v1};
+    return this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} (#C4) ?{self::Variable*} this.{self::BinaryConstraint::v2}{self::Variable*} : this.{self::BinaryConstraint::v1}{self::Variable*};
   method recalculate() → void {
-    self::Variable* ihn = this.{self::BinaryConstraint::input}();
-    self::Variable* out = this.{self::BinaryConstraint::output}();
-    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}, ihn.{self::Variable::walkStrength});
-    out.{self::Variable::stay} = ihn.{self::Variable::stay};
-    if(out.{self::Variable::stay})
-      this.{self::Constraint::execute}();
+    self::Variable* ihn = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
+    self::Variable* out = this.{self::BinaryConstraint::output}(){() →* self::Variable*};
+    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength*}, ihn.{self::Variable::walkStrength}{self::Strength*});
+    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool*};
+    if(out.{self::Variable::stay}{core::bool*})
+      this.{self::Constraint::execute}(){() →* void};
   }
   method markUnsatisfied() → void {
     this.{self::BinaryConstraint::direction} = #C1;
   }
   method inputsKnown(core::int* mark) → core::bool* {
-    self::Variable* i = this.{self::BinaryConstraint::input}();
-    return i.{self::Variable::mark}.{core::num::==}(mark) || i.{self::Variable::stay} || i.{self::Variable::determinedBy}.{self::Constraint::==}(null);
+    self::Variable* i = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
+    return i.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark || i.{self::Variable::stay}{core::bool*} || i.{self::Variable::determinedBy}{self::Constraint*} == null;
   }
   method removeFromGraph() → void {
-    if(!this.{self::BinaryConstraint::v1}.{self::Variable::==}(null))
-      this.{self::BinaryConstraint::v1}.{self::Variable::removeConstraint}(this);
-    if(!this.{self::BinaryConstraint::v2}.{self::Variable::==}(null))
-      this.{self::BinaryConstraint::v2}.{self::Variable::removeConstraint}(this);
+    if(!(this.{self::BinaryConstraint::v1}{self::Variable*} == null))
+      this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::BinaryConstraint::v2}{self::Variable*} == null))
+      this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
     this.{self::BinaryConstraint::direction} = #C1;
   }
 }
@@ -225,35 +225,35 @@
     ;
   method addToGraph() → void {
     super.{self::BinaryConstraint::addToGraph}();
-    this.{self::ScaleConstraint::scale}.{self::Variable::addConstraint}(this);
-    this.{self::ScaleConstraint::offset}.{self::Variable::addConstraint}(this);
+    this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
   }
   method removeFromGraph() → void {
     super.{self::BinaryConstraint::removeFromGraph}();
-    if(!this.{self::ScaleConstraint::scale}.{self::Variable::==}(null))
-      this.{self::ScaleConstraint::scale}.{self::Variable::removeConstraint}(this);
-    if(!this.{self::ScaleConstraint::offset}.{self::Variable::==}(null))
-      this.{self::ScaleConstraint::offset}.{self::Variable::removeConstraint}(this);
+    if(!(this.{self::ScaleConstraint::scale}{self::Variable*} == null))
+      this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::ScaleConstraint::offset}{self::Variable*} == null))
+      this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
   }
   method markInputs(core::int* mark) → void {
     super.{self::BinaryConstraint::markInputs}(mark);
-    this.{self::ScaleConstraint::scale}.{self::Variable::mark} = this.{self::ScaleConstraint::offset}.{self::Variable::mark} = mark;
+    this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::mark} = this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::mark} = mark;
   }
   method execute() → void {
-    if(this.{self::BinaryConstraint::direction}.{core::num::==}(#C4)) {
-      this.{self::BinaryConstraint::v2}.{self::Variable::value} = this.{self::BinaryConstraint::v1}.{self::Variable::value}.{core::num::*}(this.{self::ScaleConstraint::scale}.{self::Variable::value}).{core::num::+}(this.{self::ScaleConstraint::offset}.{self::Variable::value});
+    if(this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} (#C4)) {
+      this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::value}{core::int*}.{core::num::*}(this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*}.{core::num::+}(this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*};
     }
     else {
-      this.{self::BinaryConstraint::v1}.{self::Variable::value} = this.{self::BinaryConstraint::v2}.{self::Variable::value}.{core::num::-}(this.{self::ScaleConstraint::offset}.{self::Variable::value}).{core::num::~/}(this.{self::ScaleConstraint::scale}.{self::Variable::value});
+      this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::value}{core::int*}.{core::num::-}(this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*}.{core::num::~/}(this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*};
     }
   }
   method recalculate() → void {
-    self::Variable* ihn = this.{self::BinaryConstraint::input}();
-    self::Variable* out = this.{self::BinaryConstraint::output}();
-    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}, ihn.{self::Variable::walkStrength});
-    out.{self::Variable::stay} = ihn.{self::Variable::stay} && this.{self::ScaleConstraint::scale}.{self::Variable::stay} && this.{self::ScaleConstraint::offset}.{self::Variable::stay};
-    if(out.{self::Variable::stay})
-      this.{self::ScaleConstraint::execute}();
+    self::Variable* ihn = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
+    self::Variable* out = this.{self::BinaryConstraint::output}(){() →* self::Variable*};
+    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength*}, ihn.{self::Variable::walkStrength}{self::Strength*});
+    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool*} && this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::stay}{core::bool*} && this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::stay}{core::bool*};
+    if(out.{self::Variable::stay}{core::bool*})
+      this.{self::ScaleConstraint::execute}(){() →* void};
   }
 }
 class EqualityConstraint extends self::BinaryConstraint {
@@ -261,7 +261,7 @@
     : super self::BinaryConstraint::•(v1, v2, strength)
     ;
   method execute() → void {
-    this.{self::BinaryConstraint::output}().{self::Variable::value} = this.{self::BinaryConstraint::input}().{self::Variable::value};
+    this.{self::BinaryConstraint::output}(){() →* self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::input}(){() →* self::Variable*}.{self::Variable::value}{core::int*};
   }
 }
 class Variable extends core::Object {
@@ -276,11 +276,11 @@
     : self::Variable::name = name, self::Variable::value = value, super core::Object::•()
     ;
   method addConstraint(self::Constraint* c) → void {
-    this.{self::Variable::constraints}.{core::List::add}(c);
+    this.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::add}(c){(self::Constraint*) →* void};
   }
   method removeConstraint(self::Constraint* c) → void {
-    this.{self::Variable::constraints}.{core::List::remove}(c);
-    if(this.{self::Variable::determinedBy}.{self::Constraint::==}(c))
+    this.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::remove}(c){(core::Object*) →* core::bool*};
+    if(this.{self::Variable::determinedBy}{self::Constraint*} =={self::Constraint::==}{(dynamic) →* core::bool*} c)
       this.{self::Variable::determinedBy} = null;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -300,61 +300,61 @@
     : super core::Object::•()
     ;
   method incrementalAdd(self::Constraint* c) → void {
-    core::int* mark = this.{self::Planner::newMark}();
-    for (self::Constraint* overridden = c.{self::Constraint::satisfy}(mark); !overridden.{self::Constraint::==}(null); overridden = overridden.{self::Constraint::satisfy}(mark))
+    core::int* mark = this.{self::Planner::newMark}(){() →* core::int*};
+    for (self::Constraint* overridden = c.{self::Constraint::satisfy}(mark){(dynamic) →* self::Constraint*}; !(overridden == null); overridden = overridden.{self::Constraint::satisfy}(mark){(dynamic) →* self::Constraint*})
       ;
   }
   method incrementalRemove(self::Constraint* c) → void {
-    self::Variable* out = c.{self::Constraint::output}();
-    c.{self::Constraint::markUnsatisfied}();
-    c.{self::Constraint::removeFromGraph}();
-    core::List<self::Constraint*>* unsatisfied = this.{self::Planner::removePropagateFrom}(out);
+    self::Variable* out = c.{self::Constraint::output}(){() →* self::Variable*};
+    c.{self::Constraint::markUnsatisfied}(){() →* void};
+    c.{self::Constraint::removeFromGraph}(){() →* void};
+    core::List<self::Constraint*>* unsatisfied = this.{self::Planner::removePropagateFrom}(out){(self::Variable*) →* core::List<self::Constraint*>*};
     self::Strength* strength = #C22;
     do {
-      for (core::int* i = 0; i.{core::num::<}(unsatisfied.{core::List::length}); i = i.{core::num::+}(1)) {
-        self::Constraint* u = unsatisfied.{core::List::[]}(i);
-        if(u.{self::Constraint::strength}.{self::Strength::==}(strength))
-          this.{self::Planner::incrementalAdd}(u);
+      for (core::int* i = 0; i.{core::num::<}(unsatisfied.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+        self::Constraint* u = unsatisfied.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+        if(u.{self::Constraint::strength}{self::Strength*} =={self::Strength::==}{(dynamic) →* core::bool*} strength)
+          this.{self::Planner::incrementalAdd}(u){(self::Constraint*) →* void};
       }
-      strength = strength.{self::Strength::nextWeaker}();
+      strength = strength.{self::Strength::nextWeaker}(){() →* self::Strength*};
     }
-    while (!strength.{self::Strength::==}(#C18))
+    while (!(strength =={self::Strength::==}{(dynamic) →* core::bool*} (#C18)))
   }
   method newMark() → core::int*
-    return this.{self::Planner::currentMark} = this.{self::Planner::currentMark}.{core::num::+}(1);
+    return this.{self::Planner::currentMark} = this.{self::Planner::currentMark}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
   method makePlan(core::List<self::Constraint*>* sources) → self::Plan* {
-    core::int* mark = this.{self::Planner::newMark}();
+    core::int* mark = this.{self::Planner::newMark}(){() →* core::int*};
     self::Plan* plan = new self::Plan::•();
     core::List<self::Constraint*>* todo = sources;
-    while (todo.{core::List::length}.{core::num::>}(0)) {
-      self::Constraint* c = todo.{core::List::removeLast}();
-      if(!c.{self::Constraint::output}().{self::Variable::mark}.{core::num::==}(mark) && c.{self::Constraint::inputsKnown}(mark)) {
-        plan.{self::Plan::addConstraint}(c);
-        c.{self::Constraint::output}().{self::Variable::mark} = mark;
-        this.{self::Planner::addConstraintsConsumingTo}(c.{self::Constraint::output}(), todo);
+    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
+      self::Constraint* c = todo.{core::List::removeLast}(){() →* self::Constraint*};
+      if(!(c.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && c.{self::Constraint::inputsKnown}(mark){(core::int*) →* core::bool*}) {
+        plan.{self::Plan::addConstraint}(c){(self::Constraint*) →* void};
+        c.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark} = mark;
+        this.{self::Planner::addConstraintsConsumingTo}(c.{self::Constraint::output}(){() →* self::Variable*}, todo){(self::Variable*, core::List<self::Constraint*>*) →* void};
       }
     }
     return plan;
   }
   method extractPlanFromConstraints(core::List<self::Constraint*>* constraints) → self::Plan* {
     core::List<self::Constraint*>* sources = <self::Constraint*>[];
-    for (core::int* i = 0; i.{core::num::<}(constraints.{core::List::length}); i = i.{core::num::+}(1)) {
-      self::Constraint* c = constraints.{core::List::[]}(i);
-      if(c.{self::Constraint::isInput}() && c.{self::Constraint::isSatisfied}())
-        sources.{core::List::add}(c);
+    for (core::int* i = 0; i.{core::num::<}(constraints.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      self::Constraint* c = constraints.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+      if(c.{self::Constraint::isInput}(){() →* core::bool*} && c.{self::Constraint::isSatisfied}(){() →* core::bool*})
+        sources.{core::List::add}(c){(self::Constraint*) →* void};
     }
-    return this.{self::Planner::makePlan}(sources);
+    return this.{self::Planner::makePlan}(sources){(core::List<self::Constraint*>*) →* self::Plan*};
   }
   method addPropagate(self::Constraint* c, core::int* mark) → core::bool* {
     core::List<self::Constraint*>* todo = <self::Constraint*>[c];
-    while (todo.{core::List::length}.{core::num::>}(0)) {
-      self::Constraint* d = todo.{core::List::removeLast}();
-      if(d.{self::Constraint::output}().{self::Variable::mark}.{core::num::==}(mark)) {
-        this.{self::Planner::incrementalRemove}(c);
+    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
+      self::Constraint* d = todo.{core::List::removeLast}(){() →* self::Constraint*};
+      if(d.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
+        this.{self::Planner::incrementalRemove}(c){(self::Constraint*) →* void};
         return false;
       }
-      d.{self::Constraint::recalculate}();
-      this.{self::Planner::addConstraintsConsumingTo}(d.{self::Constraint::output}(), todo);
+      d.{self::Constraint::recalculate}(){() →* void};
+      this.{self::Planner::addConstraintsConsumingTo}(d.{self::Constraint::output}(){() →* self::Variable*}, todo){(self::Variable*, core::List<self::Constraint*>*) →* void};
     }
     return true;
   }
@@ -364,30 +364,30 @@
     out.{self::Variable::stay} = true;
     core::List<self::Constraint*>* unsatisfied = <self::Constraint*>[];
     core::List<self::Variable*>* todo = <self::Variable*>[out];
-    while (todo.{core::List::length}.{core::num::>}(0)) {
-      self::Variable* v = todo.{core::List::removeLast}();
-      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}.{core::List::length}); i = i.{core::num::+}(1)) {
-        self::Constraint* c = v.{self::Variable::constraints}.{core::List::[]}(i);
-        if(!c.{self::Constraint::isSatisfied}())
-          unsatisfied.{core::List::add}(c);
+    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
+      self::Variable* v = todo.{core::List::removeLast}(){() →* self::Variable*};
+      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+        self::Constraint* c = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+        if(!c.{self::Constraint::isSatisfied}(){() →* core::bool*})
+          unsatisfied.{core::List::add}(c){(self::Constraint*) →* void};
       }
-      self::Constraint* determining = v.{self::Variable::determinedBy};
-      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}.{core::List::length}); i = i.{core::num::+}(1)) {
-        self::Constraint* next = v.{self::Variable::constraints}.{core::List::[]}(i);
-        if(!next.{self::Constraint::==}(determining) && next.{self::Constraint::isSatisfied}()) {
-          next.{self::Constraint::recalculate}();
-          todo.{core::List::add}(next.{self::Constraint::output}());
+      self::Constraint* determining = v.{self::Variable::determinedBy}{self::Constraint*};
+      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+        self::Constraint* next = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+        if(!(next =={self::Constraint::==}{(dynamic) →* core::bool*} determining) && next.{self::Constraint::isSatisfied}(){() →* core::bool*}) {
+          next.{self::Constraint::recalculate}(){() →* void};
+          todo.{core::List::add}(next.{self::Constraint::output}(){() →* self::Variable*}){(self::Variable*) →* void};
         }
       }
     }
     return unsatisfied;
   }
   method addConstraintsConsumingTo(self::Variable* v, core::List<self::Constraint*>* coll) → void {
-    self::Constraint* determining = v.{self::Variable::determinedBy};
-    for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}.{core::List::length}); i = i.{core::num::+}(1)) {
-      self::Constraint* c = v.{self::Variable::constraints}.{core::List::[]}(i);
-      if(!c.{self::Constraint::==}(determining) && c.{self::Constraint::isSatisfied}())
-        coll.{core::List::add}(c);
+    self::Constraint* determining = v.{self::Variable::determinedBy}{self::Constraint*};
+    for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      self::Constraint* c = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+      if(!(c =={self::Constraint::==}{(dynamic) →* core::bool*} determining) && c.{self::Constraint::isSatisfied}(){() →* core::bool*})
+        coll.{core::List::add}(c){(self::Constraint*) →* void};
     }
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -407,13 +407,13 @@
     : super core::Object::•()
     ;
   method addConstraint(self::Constraint* c) → void {
-    this.{self::Plan::list}.{core::List::add}(c);
+    this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::add}(c){(self::Constraint*) →* void};
   }
   method size() → core::int*
-    return this.{self::Plan::list}.{core::List::length};
+    return this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::length}{core::int*};
   method execute() → void {
-    for (core::int* i = 0; i.{core::num::<}(this.{self::Plan::list}.{core::List::length}); i = i.{core::num::+}(1)) {
-      this.{self::Plan::list}.{core::List::[]}(i).{self::Constraint::execute}();
+    for (core::int* i = 0; i.{core::num::<}(this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*}.{self::Constraint::execute}(){() →* void};
     }
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -439,32 +439,32 @@
 static const field core::int* BACKWARD = #C20;
 static field self::Planner* planner;
 static method main() → dynamic {
-  new self::DeltaBlue::•().{self::DeltaBlue::run}();
+  new self::DeltaBlue::•().{self::DeltaBlue::run}(){() →* void};
 }
 static method chainTest(core::int* n) → void {
   self::planner = new self::Planner::•();
   self::Variable* prev = null;
   self::Variable* first = null;
   self::Variable* last = null;
-  for (core::int* i = 0; i.{core::num::<=}(n); i = i.{core::num::+}(1)) {
+  for (core::int* i = 0; i.{core::num::<=}(n){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     self::Variable* v = new self::Variable::•("v${i}", 0);
-    if(!prev.{self::Variable::==}(null))
+    if(!(prev == null))
       new self::EqualityConstraint::•(prev, v, #C22);
-    if(i.{core::num::==}(0))
+    if(i =={core::num::==}{(core::Object*) →* core::bool*} 0)
       first = v;
-    if(i.{core::num::==}(n))
+    if(i =={core::num::==}{(core::Object*) →* core::bool*} n)
       last = v;
     prev = v;
   }
   new self::StayConstraint::•(last, #C9);
   self::EditConstraint* edit = new self::EditConstraint::•(first, #C6);
-  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::Constraint*>[edit]);
-  for (core::int* i = 0; i.{core::num::<}(100); i = i.{core::num::+}(1)) {
+  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::Constraint*>[edit]){(core::List<self::Constraint*>*) →* self::Plan*};
+  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     first.{self::Variable::value} = i;
-    plan.{self::Plan::execute}();
-    if(!last.{self::Variable::value}.{core::num::==}(i)) {
+    plan.{self::Plan::execute}(){() →* void};
+    if(!(last.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i)) {
       core::print("Chain test failed:");
-      core::print("Expected last value to be ${i} but it was ${last.{self::Variable::value}}.");
+      core::print("Expected last value to be ${i} but it was ${last.{self::Variable::value}{core::int*}}.");
     }
   }
 }
@@ -475,38 +475,38 @@
   self::Variable* src = null;
   self::Variable* dst = null;
   core::List<self::Variable*>* dests = <self::Variable*>[];
-  for (core::int* i = 0; i.{core::num::<}(n); i = i.{core::num::+}(1)) {
+  for (core::int* i = 0; i.{core::num::<}(n){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     src = new self::Variable::•("src", i);
     dst = new self::Variable::•("dst", i);
-    dests.{core::List::add}(dst);
+    dests.{core::List::add}(dst){(self::Variable*) →* void};
     new self::StayConstraint::•(src, #C12);
     new self::ScaleConstraint::•(src, scale, offset, dst, #C22);
   }
   self::change(src, 17);
-  if(!dst.{self::Variable::value}.{core::num::==}(1170))
+  if(!(dst.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 1170))
     core::print("Projection 1 failed");
   self::change(dst, 1050);
-  if(!src.{self::Variable::value}.{core::num::==}(5))
+  if(!(src.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 5))
     core::print("Projection 2 failed");
   self::change(scale, 5);
-  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1)); i = i.{core::num::+}(1)) {
-    if(!dests.{core::List::[]}(i).{self::Variable::value}.{core::num::==}(i.{core::num::*}(5).{core::num::+}(1000)))
+  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num*) →* core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if(!(dests.{core::List::[]}(i){(core::int*) →* self::Variable*}.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i.{core::num::*}(5){(core::num*) →* core::int*}.{core::num::+}(1000){(core::num*) →* core::int*}))
       core::print("Projection 3 failed");
   }
   self::change(offset, 2000);
-  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1)); i = i.{core::num::+}(1)) {
-    if(!dests.{core::List::[]}(i).{self::Variable::value}.{core::num::==}(i.{core::num::*}(5).{core::num::+}(2000)))
+  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num*) →* core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if(!(dests.{core::List::[]}(i){(core::int*) →* self::Variable*}.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i.{core::num::*}(5){(core::num*) →* core::int*}.{core::num::+}(2000){(core::num*) →* core::int*}))
       core::print("Projection 4 failed");
   }
 }
 static method change(self::Variable* v, core::int* newValue) → void {
   self::EditConstraint* edit = new self::EditConstraint::•(v, #C6);
-  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::EditConstraint*>[edit]);
-  for (core::int* i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::EditConstraint*>[edit]){(core::List<self::Constraint*>*) →* self::Plan*};
+  for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     v.{self::Variable::value} = newValue;
-    plan.{self::Plan::execute}();
+    plan.{self::Plan::execute}(){() →* void};
   }
-  edit.{self::Constraint::destroyConstraint}();
+  edit.{self::Constraint::destroyConstraint}(){() →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.transformed.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.transformed.expect
index a21d5791..8ce41ca 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.transformed.expect
@@ -28,12 +28,12 @@
     : self::Strength::value = value, self::Strength::name = name, super core::Object::•()
     ;
   method nextWeaker() → self::Strength*
-    return (#C19).{core::List::[]}(this.{self::Strength::value});
+    return (#C19).{core::List::[]}(this.{self::Strength::value}{core::int*}){(core::int*) →* self::Strength*};
   static method stronger(self::Strength* s1, self::Strength* s2) → core::bool* {
-    return s1.{self::Strength::value}.{core::num::<}(s2.{self::Strength::value});
+    return s1.{self::Strength::value}{core::int*}.{core::num::<}(s2.{self::Strength::value}{core::int*}){(core::num*) →* core::bool*};
   }
   static method weaker(self::Strength* s1, self::Strength* s2) → core::bool* {
-    return s1.{self::Strength::value}.{core::num::>}(s2.{self::Strength::value});
+    return s1.{self::Strength::value}{core::int*}.{core::num::>}(s2.{self::Strength::value}{core::int*}){(core::num*) →* core::bool*};
   }
   static method weakest(self::Strength* s1, self::Strength* s2) → self::Strength* {
     return self::Strength::weaker(s1, s2) ?{self::Strength*} s1 : s2;
@@ -68,32 +68,32 @@
   abstract method execute() → void;
   abstract method recalculate() → void;
   method addConstraint() → void {
-    this.{self::Constraint::addToGraph}();
-    self::planner.{self::Planner::incrementalAdd}(this);
+    this.{self::Constraint::addToGraph}(){() →* void};
+    self::planner.{self::Planner::incrementalAdd}(this){(self::Constraint*) →* void};
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
-    if(!this.{self::Constraint::isSatisfied}()) {
-      if(this.{self::Constraint::strength}.{self::Strength::==}(#C22)) {
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+    if(!this.{self::Constraint::isSatisfied}(){() →* core::bool*}) {
+      if(this.{self::Constraint::strength}{self::Strength*} =={self::Strength::==}{(dynamic) →* core::bool*} (#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
-    self::Variable* out = this.{self::Constraint::output}();
-    self::Constraint* overridden = out.{self::Variable::determinedBy};
-    if(!overridden.{self::Constraint::==}(null))
-      overridden.{self::Constraint::markUnsatisfied}();
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+    self::Variable* out = this.{self::Constraint::output}(){() →* self::Variable*};
+    self::Constraint* overridden = out.{self::Variable::determinedBy}{self::Constraint*};
+    if(!(overridden == null))
+      overridden.{self::Constraint::markUnsatisfied}(){() →* void};
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*){(self::Constraint*, core::int*) →* core::bool*})
       core::print("Cycle encountered");
     out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
-    if(this.{self::Constraint::isSatisfied}())
-      self::planner.{self::Planner::incrementalRemove}(this);
-    this.{self::Constraint::removeFromGraph}();
+    if(this.{self::Constraint::isSatisfied}(){() →* core::bool*})
+      self::planner.{self::Planner::incrementalRemove}(this){(self::Constraint*) →* void};
+    this.{self::Constraint::removeFromGraph}(){() →* void};
   }
   method isInput() → core::bool*
     return false;
@@ -113,25 +113,25 @@
   field core::bool* satisfied = false;
   constructor •(self::Variable* myOutput, self::Strength* strength) → self::UnaryConstraint*
     : self::UnaryConstraint::myOutput = myOutput, super self::Constraint::•(strength) {
-    this.{self::Constraint::addConstraint}();
+    this.{self::Constraint::addConstraint}(){() →* void};
   }
   method addToGraph() → void {
-    this.{self::UnaryConstraint::myOutput}.{self::Variable::addConstraint}(this);
+    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
     this.{self::UnaryConstraint::satisfied} = false;
   }
   method chooseMethod(core::int* mark) → void {
-    this.{self::UnaryConstraint::satisfied} = !this.{self::UnaryConstraint::myOutput}.{self::Variable::mark}.{core::num::==}(mark) && self::Strength::stronger(this.{self::Constraint::strength}, this.{self::UnaryConstraint::myOutput}.{self::Variable::walkStrength});
+    this.{self::UnaryConstraint::satisfied} = !(this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*});
   }
   method isSatisfied() → core::bool*
-    return this.{self::UnaryConstraint::satisfied};
+    return this.{self::UnaryConstraint::satisfied}{core::bool*};
   method markInputs(core::int* mark) → void {}
   method output() → self::Variable*
-    return this.{self::UnaryConstraint::myOutput};
+    return this.{self::UnaryConstraint::myOutput}{self::Variable*};
   method recalculate() → void {
-    this.{self::UnaryConstraint::myOutput}.{self::Variable::walkStrength} = this.{self::Constraint::strength};
-    this.{self::UnaryConstraint::myOutput}.{self::Variable::stay} = !this.{self::Constraint::isInput}();
-    if(this.{self::UnaryConstraint::myOutput}.{self::Variable::stay})
-      this.{self::Constraint::execute}();
+    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::walkStrength} = this.{self::Constraint::strength}{self::Strength*};
+    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::stay} = !this.{self::Constraint::isInput}(){() →* core::bool*};
+    if(this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::stay}{core::bool*})
+      this.{self::Constraint::execute}(){() →* void};
   }
   method markUnsatisfied() → void {
     this.{self::UnaryConstraint::satisfied} = false;
@@ -139,8 +139,8 @@
   method inputsKnown(core::int* mark) → core::bool*
     return true;
   method removeFromGraph() → void {
-    if(!this.{self::UnaryConstraint::myOutput}.{self::Variable::==}(null))
-      this.{self::UnaryConstraint::myOutput}.{self::Variable::removeConstraint}(this);
+    if(!(this.{self::UnaryConstraint::myOutput}{self::Variable*} == null))
+      this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
     this.{self::UnaryConstraint::satisfied} = false;
   }
 }
@@ -164,56 +164,56 @@
   field core::int* direction = #C1;
   constructor •(self::Variable* v1, self::Variable* v2, self::Strength* strength) → self::BinaryConstraint*
     : self::BinaryConstraint::v1 = v1, self::BinaryConstraint::v2 = v2, super self::Constraint::•(strength) {
-    this.{self::Constraint::addConstraint}();
+    this.{self::Constraint::addConstraint}(){() →* void};
   }
   method chooseMethod(core::int* mark) → void {
-    if(this.{self::BinaryConstraint::v1}.{self::Variable::mark}.{core::num::==}(mark)) {
-      this.{self::BinaryConstraint::direction} = !this.{self::BinaryConstraint::v2}.{self::Variable::mark}.{core::num::==}(mark) && self::Strength::stronger(this.{self::Constraint::strength}, this.{self::BinaryConstraint::v2}.{self::Variable::walkStrength}) ?{core::int*} #C4 : #C1;
+    if(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
+      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C4 : #C1;
     }
-    if(this.{self::BinaryConstraint::v2}.{self::Variable::mark}.{core::num::==}(mark)) {
-      this.{self::BinaryConstraint::direction} = !this.{self::BinaryConstraint::v1}.{self::Variable::mark}.{core::num::==}(mark) && self::Strength::stronger(this.{self::Constraint::strength}, this.{self::BinaryConstraint::v1}.{self::Variable::walkStrength}) ?{core::int*} #C20 : #C1;
+    if(this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
+      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C20 : #C1;
     }
-    if(self::Strength::weaker(this.{self::BinaryConstraint::v1}.{self::Variable::walkStrength}, this.{self::BinaryConstraint::v2}.{self::Variable::walkStrength})) {
-      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}, this.{self::BinaryConstraint::v1}.{self::Variable::walkStrength}) ?{core::int*} #C20 : #C1;
+    if(self::Strength::weaker(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*})) {
+      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C20 : #C1;
     }
     else {
-      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}, this.{self::BinaryConstraint::v2}.{self::Variable::walkStrength}) ?{core::int*} #C4 : #C20;
+      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C4 : #C20;
     }
   }
   method addToGraph() → void {
-    this.{self::BinaryConstraint::v1}.{self::Variable::addConstraint}(this);
-    this.{self::BinaryConstraint::v2}.{self::Variable::addConstraint}(this);
+    this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
     this.{self::BinaryConstraint::direction} = #C1;
   }
   method isSatisfied() → core::bool*
-    return !this.{self::BinaryConstraint::direction}.{core::num::==}(#C1);
+    return !(this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} (#C1));
   method markInputs(core::int* mark) → void {
-    this.{self::BinaryConstraint::input}().{self::Variable::mark} = mark;
+    this.{self::BinaryConstraint::input}(){() →* self::Variable*}.{self::Variable::mark} = mark;
   }
   method input() → self::Variable*
-    return this.{self::BinaryConstraint::direction}.{core::num::==}(#C4) ?{self::Variable*} this.{self::BinaryConstraint::v1} : this.{self::BinaryConstraint::v2};
+    return this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} (#C4) ?{self::Variable*} this.{self::BinaryConstraint::v1}{self::Variable*} : this.{self::BinaryConstraint::v2}{self::Variable*};
   method output() → self::Variable*
-    return this.{self::BinaryConstraint::direction}.{core::num::==}(#C4) ?{self::Variable*} this.{self::BinaryConstraint::v2} : this.{self::BinaryConstraint::v1};
+    return this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} (#C4) ?{self::Variable*} this.{self::BinaryConstraint::v2}{self::Variable*} : this.{self::BinaryConstraint::v1}{self::Variable*};
   method recalculate() → void {
-    self::Variable* ihn = this.{self::BinaryConstraint::input}();
-    self::Variable* out = this.{self::BinaryConstraint::output}();
-    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}, ihn.{self::Variable::walkStrength});
-    out.{self::Variable::stay} = ihn.{self::Variable::stay};
-    if(out.{self::Variable::stay})
-      this.{self::Constraint::execute}();
+    self::Variable* ihn = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
+    self::Variable* out = this.{self::BinaryConstraint::output}(){() →* self::Variable*};
+    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength*}, ihn.{self::Variable::walkStrength}{self::Strength*});
+    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool*};
+    if(out.{self::Variable::stay}{core::bool*})
+      this.{self::Constraint::execute}(){() →* void};
   }
   method markUnsatisfied() → void {
     this.{self::BinaryConstraint::direction} = #C1;
   }
   method inputsKnown(core::int* mark) → core::bool* {
-    self::Variable* i = this.{self::BinaryConstraint::input}();
-    return i.{self::Variable::mark}.{core::num::==}(mark) || i.{self::Variable::stay} || i.{self::Variable::determinedBy}.{self::Constraint::==}(null);
+    self::Variable* i = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
+    return i.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark || i.{self::Variable::stay}{core::bool*} || i.{self::Variable::determinedBy}{self::Constraint*} == null;
   }
   method removeFromGraph() → void {
-    if(!this.{self::BinaryConstraint::v1}.{self::Variable::==}(null))
-      this.{self::BinaryConstraint::v1}.{self::Variable::removeConstraint}(this);
-    if(!this.{self::BinaryConstraint::v2}.{self::Variable::==}(null))
-      this.{self::BinaryConstraint::v2}.{self::Variable::removeConstraint}(this);
+    if(!(this.{self::BinaryConstraint::v1}{self::Variable*} == null))
+      this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::BinaryConstraint::v2}{self::Variable*} == null))
+      this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
     this.{self::BinaryConstraint::direction} = #C1;
   }
 }
@@ -225,35 +225,35 @@
     ;
   method addToGraph() → void {
     super.{self::BinaryConstraint::addToGraph}();
-    this.{self::ScaleConstraint::scale}.{self::Variable::addConstraint}(this);
-    this.{self::ScaleConstraint::offset}.{self::Variable::addConstraint}(this);
+    this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
   }
   method removeFromGraph() → void {
     super.{self::BinaryConstraint::removeFromGraph}();
-    if(!this.{self::ScaleConstraint::scale}.{self::Variable::==}(null))
-      this.{self::ScaleConstraint::scale}.{self::Variable::removeConstraint}(this);
-    if(!this.{self::ScaleConstraint::offset}.{self::Variable::==}(null))
-      this.{self::ScaleConstraint::offset}.{self::Variable::removeConstraint}(this);
+    if(!(this.{self::ScaleConstraint::scale}{self::Variable*} == null))
+      this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::ScaleConstraint::offset}{self::Variable*} == null))
+      this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
   }
   method markInputs(core::int* mark) → void {
     super.{self::BinaryConstraint::markInputs}(mark);
-    this.{self::ScaleConstraint::scale}.{self::Variable::mark} = this.{self::ScaleConstraint::offset}.{self::Variable::mark} = mark;
+    this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::mark} = this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::mark} = mark;
   }
   method execute() → void {
-    if(this.{self::BinaryConstraint::direction}.{core::num::==}(#C4)) {
-      this.{self::BinaryConstraint::v2}.{self::Variable::value} = this.{self::BinaryConstraint::v1}.{self::Variable::value}.{core::num::*}(this.{self::ScaleConstraint::scale}.{self::Variable::value}).{core::num::+}(this.{self::ScaleConstraint::offset}.{self::Variable::value});
+    if(this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} (#C4)) {
+      this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::value}{core::int*}.{core::num::*}(this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*}.{core::num::+}(this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*};
     }
     else {
-      this.{self::BinaryConstraint::v1}.{self::Variable::value} = this.{self::BinaryConstraint::v2}.{self::Variable::value}.{core::num::-}(this.{self::ScaleConstraint::offset}.{self::Variable::value}).{core::num::~/}(this.{self::ScaleConstraint::scale}.{self::Variable::value});
+      this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::value}{core::int*}.{core::num::-}(this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*}.{core::num::~/}(this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*};
     }
   }
   method recalculate() → void {
-    self::Variable* ihn = this.{self::BinaryConstraint::input}();
-    self::Variable* out = this.{self::BinaryConstraint::output}();
-    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}, ihn.{self::Variable::walkStrength});
-    out.{self::Variable::stay} = ihn.{self::Variable::stay} && this.{self::ScaleConstraint::scale}.{self::Variable::stay} && this.{self::ScaleConstraint::offset}.{self::Variable::stay};
-    if(out.{self::Variable::stay})
-      this.{self::ScaleConstraint::execute}();
+    self::Variable* ihn = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
+    self::Variable* out = this.{self::BinaryConstraint::output}(){() →* self::Variable*};
+    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength*}, ihn.{self::Variable::walkStrength}{self::Strength*});
+    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool*} && this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::stay}{core::bool*} && this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::stay}{core::bool*};
+    if(out.{self::Variable::stay}{core::bool*})
+      this.{self::ScaleConstraint::execute}(){() →* void};
   }
 }
 class EqualityConstraint extends self::BinaryConstraint {
@@ -261,7 +261,7 @@
     : super self::BinaryConstraint::•(v1, v2, strength)
     ;
   method execute() → void {
-    this.{self::BinaryConstraint::output}().{self::Variable::value} = this.{self::BinaryConstraint::input}().{self::Variable::value};
+    this.{self::BinaryConstraint::output}(){() →* self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::input}(){() →* self::Variable*}.{self::Variable::value}{core::int*};
   }
 }
 class Variable extends core::Object {
@@ -276,11 +276,11 @@
     : self::Variable::name = name, self::Variable::value = value, super core::Object::•()
     ;
   method addConstraint(self::Constraint* c) → void {
-    this.{self::Variable::constraints}.{core::List::add}(c);
+    this.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::add}(c){(self::Constraint*) →* void};
   }
   method removeConstraint(self::Constraint* c) → void {
-    this.{self::Variable::constraints}.{core::List::remove}(c);
-    if(this.{self::Variable::determinedBy}.{self::Constraint::==}(c))
+    this.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::remove}(c){(core::Object*) →* core::bool*};
+    if(this.{self::Variable::determinedBy}{self::Constraint*} =={self::Constraint::==}{(dynamic) →* core::bool*} c)
       this.{self::Variable::determinedBy} = null;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -300,61 +300,61 @@
     : super core::Object::•()
     ;
   method incrementalAdd(self::Constraint* c) → void {
-    core::int* mark = this.{self::Planner::newMark}();
-    for (self::Constraint* overridden = c.{self::Constraint::satisfy}(mark); !overridden.{self::Constraint::==}(null); overridden = overridden.{self::Constraint::satisfy}(mark))
+    core::int* mark = this.{self::Planner::newMark}(){() →* core::int*};
+    for (self::Constraint* overridden = c.{self::Constraint::satisfy}(mark){(dynamic) →* self::Constraint*}; !(overridden == null); overridden = overridden.{self::Constraint::satisfy}(mark){(dynamic) →* self::Constraint*})
       ;
   }
   method incrementalRemove(self::Constraint* c) → void {
-    self::Variable* out = c.{self::Constraint::output}();
-    c.{self::Constraint::markUnsatisfied}();
-    c.{self::Constraint::removeFromGraph}();
-    core::List<self::Constraint*>* unsatisfied = this.{self::Planner::removePropagateFrom}(out);
+    self::Variable* out = c.{self::Constraint::output}(){() →* self::Variable*};
+    c.{self::Constraint::markUnsatisfied}(){() →* void};
+    c.{self::Constraint::removeFromGraph}(){() →* void};
+    core::List<self::Constraint*>* unsatisfied = this.{self::Planner::removePropagateFrom}(out){(self::Variable*) →* core::List<self::Constraint*>*};
     self::Strength* strength = #C22;
     do {
-      for (core::int* i = 0; i.{core::num::<}(unsatisfied.{core::List::length}); i = i.{core::num::+}(1)) {
-        self::Constraint* u = unsatisfied.{core::List::[]}(i);
-        if(u.{self::Constraint::strength}.{self::Strength::==}(strength))
-          this.{self::Planner::incrementalAdd}(u);
+      for (core::int* i = 0; i.{core::num::<}(unsatisfied.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+        self::Constraint* u = unsatisfied.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+        if(u.{self::Constraint::strength}{self::Strength*} =={self::Strength::==}{(dynamic) →* core::bool*} strength)
+          this.{self::Planner::incrementalAdd}(u){(self::Constraint*) →* void};
       }
-      strength = strength.{self::Strength::nextWeaker}();
+      strength = strength.{self::Strength::nextWeaker}(){() →* self::Strength*};
     }
-    while (!strength.{self::Strength::==}(#C18))
+    while (!(strength =={self::Strength::==}{(dynamic) →* core::bool*} (#C18)))
   }
   method newMark() → core::int*
-    return this.{self::Planner::currentMark} = this.{self::Planner::currentMark}.{core::num::+}(1);
+    return this.{self::Planner::currentMark} = this.{self::Planner::currentMark}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
   method makePlan(core::List<self::Constraint*>* sources) → self::Plan* {
-    core::int* mark = this.{self::Planner::newMark}();
+    core::int* mark = this.{self::Planner::newMark}(){() →* core::int*};
     self::Plan* plan = new self::Plan::•();
     core::List<self::Constraint*>* todo = sources;
-    while (todo.{core::List::length}.{core::num::>}(0)) {
-      self::Constraint* c = todo.{core::List::removeLast}();
-      if(!c.{self::Constraint::output}().{self::Variable::mark}.{core::num::==}(mark) && c.{self::Constraint::inputsKnown}(mark)) {
-        plan.{self::Plan::addConstraint}(c);
-        c.{self::Constraint::output}().{self::Variable::mark} = mark;
-        this.{self::Planner::addConstraintsConsumingTo}(c.{self::Constraint::output}(), todo);
+    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
+      self::Constraint* c = todo.{core::List::removeLast}(){() →* self::Constraint*};
+      if(!(c.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && c.{self::Constraint::inputsKnown}(mark){(core::int*) →* core::bool*}) {
+        plan.{self::Plan::addConstraint}(c){(self::Constraint*) →* void};
+        c.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark} = mark;
+        this.{self::Planner::addConstraintsConsumingTo}(c.{self::Constraint::output}(){() →* self::Variable*}, todo){(self::Variable*, core::List<self::Constraint*>*) →* void};
       }
     }
     return plan;
   }
   method extractPlanFromConstraints(core::List<self::Constraint*>* constraints) → self::Plan* {
     core::List<self::Constraint*>* sources = core::_GrowableList::•<self::Constraint*>(0);
-    for (core::int* i = 0; i.{core::num::<}(constraints.{core::List::length}); i = i.{core::num::+}(1)) {
-      self::Constraint* c = constraints.{core::List::[]}(i);
-      if(c.{self::Constraint::isInput}() && c.{self::Constraint::isSatisfied}())
-        sources.{core::List::add}(c);
+    for (core::int* i = 0; i.{core::num::<}(constraints.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      self::Constraint* c = constraints.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+      if(c.{self::Constraint::isInput}(){() →* core::bool*} && c.{self::Constraint::isSatisfied}(){() →* core::bool*})
+        sources.{core::List::add}(c){(self::Constraint*) →* void};
     }
-    return this.{self::Planner::makePlan}(sources);
+    return this.{self::Planner::makePlan}(sources){(core::List<self::Constraint*>*) →* self::Plan*};
   }
   method addPropagate(self::Constraint* c, core::int* mark) → core::bool* {
     core::List<self::Constraint*>* todo = core::_GrowableList::_literal1<self::Constraint*>(c);
-    while (todo.{core::List::length}.{core::num::>}(0)) {
-      self::Constraint* d = todo.{core::List::removeLast}();
-      if(d.{self::Constraint::output}().{self::Variable::mark}.{core::num::==}(mark)) {
-        this.{self::Planner::incrementalRemove}(c);
+    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
+      self::Constraint* d = todo.{core::List::removeLast}(){() →* self::Constraint*};
+      if(d.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
+        this.{self::Planner::incrementalRemove}(c){(self::Constraint*) →* void};
         return false;
       }
-      d.{self::Constraint::recalculate}();
-      this.{self::Planner::addConstraintsConsumingTo}(d.{self::Constraint::output}(), todo);
+      d.{self::Constraint::recalculate}(){() →* void};
+      this.{self::Planner::addConstraintsConsumingTo}(d.{self::Constraint::output}(){() →* self::Variable*}, todo){(self::Variable*, core::List<self::Constraint*>*) →* void};
     }
     return true;
   }
@@ -364,30 +364,30 @@
     out.{self::Variable::stay} = true;
     core::List<self::Constraint*>* unsatisfied = core::_GrowableList::•<self::Constraint*>(0);
     core::List<self::Variable*>* todo = core::_GrowableList::_literal1<self::Variable*>(out);
-    while (todo.{core::List::length}.{core::num::>}(0)) {
-      self::Variable* v = todo.{core::List::removeLast}();
-      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}.{core::List::length}); i = i.{core::num::+}(1)) {
-        self::Constraint* c = v.{self::Variable::constraints}.{core::List::[]}(i);
-        if(!c.{self::Constraint::isSatisfied}())
-          unsatisfied.{core::List::add}(c);
+    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
+      self::Variable* v = todo.{core::List::removeLast}(){() →* self::Variable*};
+      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+        self::Constraint* c = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+        if(!c.{self::Constraint::isSatisfied}(){() →* core::bool*})
+          unsatisfied.{core::List::add}(c){(self::Constraint*) →* void};
       }
-      self::Constraint* determining = v.{self::Variable::determinedBy};
-      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}.{core::List::length}); i = i.{core::num::+}(1)) {
-        self::Constraint* next = v.{self::Variable::constraints}.{core::List::[]}(i);
-        if(!next.{self::Constraint::==}(determining) && next.{self::Constraint::isSatisfied}()) {
-          next.{self::Constraint::recalculate}();
-          todo.{core::List::add}(next.{self::Constraint::output}());
+      self::Constraint* determining = v.{self::Variable::determinedBy}{self::Constraint*};
+      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+        self::Constraint* next = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+        if(!(next =={self::Constraint::==}{(dynamic) →* core::bool*} determining) && next.{self::Constraint::isSatisfied}(){() →* core::bool*}) {
+          next.{self::Constraint::recalculate}(){() →* void};
+          todo.{core::List::add}(next.{self::Constraint::output}(){() →* self::Variable*}){(self::Variable*) →* void};
         }
       }
     }
     return unsatisfied;
   }
   method addConstraintsConsumingTo(self::Variable* v, core::List<self::Constraint*>* coll) → void {
-    self::Constraint* determining = v.{self::Variable::determinedBy};
-    for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}.{core::List::length}); i = i.{core::num::+}(1)) {
-      self::Constraint* c = v.{self::Variable::constraints}.{core::List::[]}(i);
-      if(!c.{self::Constraint::==}(determining) && c.{self::Constraint::isSatisfied}())
-        coll.{core::List::add}(c);
+    self::Constraint* determining = v.{self::Variable::determinedBy}{self::Constraint*};
+    for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      self::Constraint* c = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+      if(!(c =={self::Constraint::==}{(dynamic) →* core::bool*} determining) && c.{self::Constraint::isSatisfied}(){() →* core::bool*})
+        coll.{core::List::add}(c){(self::Constraint*) →* void};
     }
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -407,13 +407,13 @@
     : super core::Object::•()
     ;
   method addConstraint(self::Constraint* c) → void {
-    this.{self::Plan::list}.{core::List::add}(c);
+    this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::add}(c){(self::Constraint*) →* void};
   }
   method size() → core::int*
-    return this.{self::Plan::list}.{core::List::length};
+    return this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::length}{core::int*};
   method execute() → void {
-    for (core::int* i = 0; i.{core::num::<}(this.{self::Plan::list}.{core::List::length}); i = i.{core::num::+}(1)) {
-      this.{self::Plan::list}.{core::List::[]}(i).{self::Constraint::execute}();
+    for (core::int* i = 0; i.{core::num::<}(this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*}.{self::Constraint::execute}(){() →* void};
     }
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -439,32 +439,32 @@
 static const field core::int* BACKWARD = #C20;
 static field self::Planner* planner;
 static method main() → dynamic {
-  new self::DeltaBlue::•().{self::DeltaBlue::run}();
+  new self::DeltaBlue::•().{self::DeltaBlue::run}(){() →* void};
 }
 static method chainTest(core::int* n) → void {
   self::planner = new self::Planner::•();
   self::Variable* prev = null;
   self::Variable* first = null;
   self::Variable* last = null;
-  for (core::int* i = 0; i.{core::num::<=}(n); i = i.{core::num::+}(1)) {
+  for (core::int* i = 0; i.{core::num::<=}(n){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     self::Variable* v = new self::Variable::•("v${i}", 0);
-    if(!prev.{self::Variable::==}(null))
+    if(!(prev == null))
       new self::EqualityConstraint::•(prev, v, #C22);
-    if(i.{core::num::==}(0))
+    if(i =={core::num::==}{(core::Object*) →* core::bool*} 0)
       first = v;
-    if(i.{core::num::==}(n))
+    if(i =={core::num::==}{(core::Object*) →* core::bool*} n)
       last = v;
     prev = v;
   }
   new self::StayConstraint::•(last, #C9);
   self::EditConstraint* edit = new self::EditConstraint::•(first, #C6);
-  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(core::_GrowableList::_literal1<self::Constraint*>(edit));
-  for (core::int* i = 0; i.{core::num::<}(100); i = i.{core::num::+}(1)) {
+  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(core::_GrowableList::_literal1<self::Constraint*>(edit)){(core::List<self::Constraint*>*) →* self::Plan*};
+  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     first.{self::Variable::value} = i;
-    plan.{self::Plan::execute}();
-    if(!last.{self::Variable::value}.{core::num::==}(i)) {
+    plan.{self::Plan::execute}(){() →* void};
+    if(!(last.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i)) {
       core::print("Chain test failed:");
-      core::print("Expected last value to be ${i} but it was ${last.{self::Variable::value}}.");
+      core::print("Expected last value to be ${i} but it was ${last.{self::Variable::value}{core::int*}}.");
     }
   }
 }
@@ -475,38 +475,38 @@
   self::Variable* src = null;
   self::Variable* dst = null;
   core::List<self::Variable*>* dests = core::_GrowableList::•<self::Variable*>(0);
-  for (core::int* i = 0; i.{core::num::<}(n); i = i.{core::num::+}(1)) {
+  for (core::int* i = 0; i.{core::num::<}(n){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     src = new self::Variable::•("src", i);
     dst = new self::Variable::•("dst", i);
-    dests.{core::List::add}(dst);
+    dests.{core::List::add}(dst){(self::Variable*) →* void};
     new self::StayConstraint::•(src, #C12);
     new self::ScaleConstraint::•(src, scale, offset, dst, #C22);
   }
   self::change(src, 17);
-  if(!dst.{self::Variable::value}.{core::num::==}(1170))
+  if(!(dst.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 1170))
     core::print("Projection 1 failed");
   self::change(dst, 1050);
-  if(!src.{self::Variable::value}.{core::num::==}(5))
+  if(!(src.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 5))
     core::print("Projection 2 failed");
   self::change(scale, 5);
-  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1)); i = i.{core::num::+}(1)) {
-    if(!dests.{core::List::[]}(i).{self::Variable::value}.{core::num::==}(i.{core::num::*}(5).{core::num::+}(1000)))
+  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num*) →* core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if(!(dests.{core::List::[]}(i){(core::int*) →* self::Variable*}.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i.{core::num::*}(5){(core::num*) →* core::int*}.{core::num::+}(1000){(core::num*) →* core::int*}))
       core::print("Projection 3 failed");
   }
   self::change(offset, 2000);
-  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1)); i = i.{core::num::+}(1)) {
-    if(!dests.{core::List::[]}(i).{self::Variable::value}.{core::num::==}(i.{core::num::*}(5).{core::num::+}(2000)))
+  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num*) →* core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if(!(dests.{core::List::[]}(i){(core::int*) →* self::Variable*}.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i.{core::num::*}(5){(core::num*) →* core::int*}.{core::num::+}(2000){(core::num*) →* core::int*}))
       core::print("Projection 4 failed");
   }
 }
 static method change(self::Variable* v, core::int* newValue) → void {
   self::EditConstraint* edit = new self::EditConstraint::•(v, #C6);
-  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(core::_GrowableList::_literal1<self::EditConstraint*>(edit));
-  for (core::int* i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(core::_GrowableList::_literal1<self::EditConstraint*>(edit)){(core::List<self::Constraint*>*) →* self::Plan*};
+  for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     v.{self::Variable::value} = newValue;
-    plan.{self::Plan::execute}();
+    plan.{self::Plan::execute}(){() →* void};
   }
-  edit.{self::Constraint::destroyConstraint}();
+  edit.{self::Constraint::destroyConstraint}(){() →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.weak.expect b/pkg/front_end/testcases/general/abstract_members.dart.weak.expect
index a798711..b4b8531 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.weak.expect
@@ -279,21 +279,21 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return null;
   no-such-method-forwarder method interfaceMethod2() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method interfaceMethod3() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set property3(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set property1(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set property2(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 class MyMock2 extends self::MyMock1 {
   synthetic constructor •() → self::MyMock2*
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect
index d4b2ca4..e5153b7 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect
@@ -282,21 +282,21 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     ;
   no-such-method-forwarder method interfaceMethod2() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#abstractMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#abstractMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method interfaceMethod3() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod3, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod3, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set property3(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#property3=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#property3=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set property1(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#property1=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#property1=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set property2(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#property2=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#property2=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 class MyMock2 extends self::MyMock1 {
   synthetic constructor •() → self::MyMock2*
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
index c52e1a4..da16394 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
@@ -46,7 +46,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.outline.expect
index c9348b9..db26f68 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.outline.expect
@@ -42,7 +42,7 @@
   synthetic constructor •() → self::D*
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
index c52e1a4..da16394 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
@@ -46,7 +46,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/accessors.dart.weak.expect b/pkg/front_end/testcases/general/accessors.dart.weak.expect
index cd1b3ea..b57abd58 100644
--- a/pkg/front_end/testcases/general/accessors.dart.weak.expect
+++ b/pkg/front_end/testcases/general/accessors.dart.weak.expect
@@ -85,6 +85,6 @@
     core::print("Expected error: ${e}");
   }
   self::onlySetter = "fisk";
-  new self::C::•().{self::C::testC}();
-  new self::D::•().{self::C::testD}();
+  new self::C::•().{self::C::testC}(){() →* dynamic};
+  new self::D::•().{self::C::testD}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/accessors.dart.weak.transformed.expect b/pkg/front_end/testcases/general/accessors.dart.weak.transformed.expect
index cd1b3ea..b57abd58 100644
--- a/pkg/front_end/testcases/general/accessors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/accessors.dart.weak.transformed.expect
@@ -85,6 +85,6 @@
     core::print("Expected error: ${e}");
   }
   self::onlySetter = "fisk";
-  new self::C::•().{self::C::testC}();
-  new self::D::•().{self::C::testD}();
+  new self::C::•().{self::C::testC}(){() →* dynamic};
+  new self::D::•().{self::C::testD}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
index e27f5c8..8a535a9 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
@@ -31,7 +31,7 @@
     : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Foo::_name};
+    return this.{self::Foo::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.outline.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.outline.expect
index f8b77c2..9467f32 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.outline.expect
@@ -31,7 +31,7 @@
     : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Foo::_name};
+    return this.{self::Foo::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
index e27f5c8..8a535a9 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
@@ -31,7 +31,7 @@
     : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Foo::_name};
+    return this.{self::Foo::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/argument.dart.weak.expect b/pkg/front_end/testcases/general/argument.dart.weak.expect
index 4afa1a6..90b185e 100644
--- a/pkg/front_end/testcases/general/argument.dart.weak.expect
+++ b/pkg/front_end/testcases/general/argument.dart.weak.expect
@@ -37,7 +37,7 @@
 static method foo_escaped(dynamic x) → void {}
 static method bar_escaped(dynamic x) → void {}
 static method escape(dynamic fn) → void {
-  fn.call(new self::Baz::•());
+  fn{dynamic}.call(new self::Baz::•());
 }
 static method main() → dynamic {
   self::foo(new self::Foo::•());
diff --git a/pkg/front_end/testcases/general/argument.dart.weak.transformed.expect b/pkg/front_end/testcases/general/argument.dart.weak.transformed.expect
index 4afa1a6..90b185e 100644
--- a/pkg/front_end/testcases/general/argument.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/argument.dart.weak.transformed.expect
@@ -37,7 +37,7 @@
 static method foo_escaped(dynamic x) → void {}
 static method bar_escaped(dynamic x) → void {}
 static method escape(dynamic fn) → void {
-  fn.call(new self::Baz::•());
+  fn{dynamic}.call(new self::Baz::•());
 }
 static method main() → dynamic {
   self::foo(new self::Foo::•());
diff --git a/pkg/front_end/testcases/general/arithmetic.dart.weak.expect b/pkg/front_end/testcases/general/arithmetic.dart.weak.expect
index ed95ed2..0e703fd 100644
--- a/pkg/front_end/testcases/general/arithmetic.dart.weak.expect
+++ b/pkg/front_end/testcases/general/arithmetic.dart.weak.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 static method foo(core::int* x, core::int* y) → core::int* {
-  core::int* z = x.{core::num::+}(y);
-  return z.{core::int::<<}(4);
+  core::int* z = x.{core::num::+}(y){(core::num*) →* core::int*};
+  return z.{core::int::<<}(4){(core::int*) →* core::int*};
 }
 static method loop(core::List<dynamic>* xs) → void {
-  core::int* _ = xs.{core::List::length};
-  for (core::int* i = 0; i.{core::num::<}(xs.{core::List::length}); i = i.{core::num::+}(1)) {
+  core::int* _ = xs.{core::List::length}{core::int*};
+  for (core::int* i = 0; i.{core::num::<}(xs.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/arithmetic.dart.weak.transformed.expect b/pkg/front_end/testcases/general/arithmetic.dart.weak.transformed.expect
index 0f2a3e1..595172d 100644
--- a/pkg/front_end/testcases/general/arithmetic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/arithmetic.dart.weak.transformed.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 static method foo(core::int* x, core::int* y) → core::int* {
-  core::int* z = x.{core::num::+}(y);
-  return z.{core::int::<<}(4);
+  core::int* z = x.{core::num::+}(y){(core::num*) →* core::int*};
+  return z.{core::int::<<}(4){(core::int*) →* core::int*};
 }
 static method loop(core::List<dynamic>* xs) → void {
-  core::int* _ = xs.{core::List::length};
-  for (core::int* i = 0; i.{core::num::<}(xs.{core::List::length}); i = i.{core::num::+}(1)) {
+  core::int* _ = xs.{core::List::length}{core::int*};
+  for (core::int* i = 0; i.{core::num::<}(xs.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.expect
index 92b2ed2..5472a32 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.expect
@@ -10,7 +10,7 @@
 
 static method foo() → dynamic async {
   invalid-type x;
-  for (dynamic y in x.z) {
+  for (dynamic y in x{<invalid>}.z) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
index c6b4aa6..fc34d1a 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
@@ -23,13 +23,6 @@
       #L1:
       {
         invalid-type x;
-        {
-          core::Iterator<invalid-type>* :sync-for-iterator = x.z.{core::Iterable::iterator};
-          for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
-            dynamic y = :sync-for-iterator.{core::Iterator::current};
-            {}
-          }
-        }
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
diff --git a/pkg/front_end/testcases/general/async_nested.dart.weak.expect b/pkg/front_end/testcases/general/async_nested.dart.weak.expect
index 25bc8dc..48269f1 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.weak.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.weak.expect
@@ -11,10 +11,10 @@
   constructor •(core::String* name, [core::List<self::Node*>* nested = #C1]) → self::Node*
     : self::Node::name = name, self::Node::nested = nested, super core::Object::•() {}
   method toString() → core::String*
-    return "<${this.{self::Node::name}}:[${let final core::List<self::Node*>* #t1 = this.{self::Node::nested} in #t1.{core::List::==}(null) ?{core::String*} null : #t1.{core::Iterable::join}(", ")}]>";
+    return "<${this.{self::Node::name}{core::String*}}:[${let final core::List<self::Node*>* #t1 = this.{self::Node::nested}{core::List<self::Node*>*} in #t1 == null ?{core::String*} null : #t1.{core::Iterable::join}(", "){([core::String*]) →* core::String*}}]>";
   method toSimpleString() → dynamic {
-    core::Iterable<dynamic>* tmp = let final core::List<self::Node*>* #t2 = this.{self::Node::nested} in #t2.{core::List::==}(null) ?{core::Iterable<dynamic>*} null : #t2.{core::Iterable::map}<dynamic>((self::Node* child) → dynamic => child.{self::Node::toSimpleString}());
-    return "${this.{self::Node::name}} ${let final core::Iterable<dynamic>* #t3 = tmp in #t3.{core::Object::==}(null) ?{core::String*} null : #t3.{core::Iterable::join}(" ")}".{core::String::trim}();
+    core::Iterable<dynamic>* tmp = let final core::List<self::Node*>* #t2 = this.{self::Node::nested}{core::List<self::Node*>*} in #t2 == null ?{core::Iterable<dynamic>*} null : #t2.{core::Iterable::map}<dynamic>((self::Node* child) → dynamic => child.{self::Node::toSimpleString}(){() →* dynamic}){((self::Node*) →* dynamic) →* core::Iterable<dynamic>*};
+    return "${this.{self::Node::name}{core::String*}} ${let final core::Iterable<dynamic>* #t3 = tmp in #t3 == null ?{core::String*} null : #t3.{core::Iterable::join}(" "){([core::String*]) →* core::String*}}".{core::String::trim}(){() →* core::String*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -29,9 +29,9 @@
 static method main() → void async {
   core::String* expected = "1 2 3 4 5 6 7 8 9 10";
   self::Node* node = new self::Node::•("1", <self::Node*>[new self::Node::•("2", <self::Node*>[]), await asy::Future::value<self::Node*>(new self::Node::•("3", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("4", <self::Node*>[new self::Node::•("5", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("6", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("7", <self::Node*>[]))])), await asy::Future::value<self::Node*>(new self::Node::•("8", <self::Node*>[])), await asy::Future::value<self::Node*>(new self::Node::•("9", <self::Node*>[]))])]))])), await asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[]))]);
-  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
+  core::String* actual = node.{self::Node::toSimpleString}(){() →* dynamic} as{TypeError,ForDynamic} core::String*;
   core::print(actual);
-  if(!actual.{core::String::==}(expected)) {
+  if(!(actual =={core::String::==}{(core::Object*) →* core::bool*} expected)) {
     throw "Expected '${expected}' but got '${actual}'";
   }
 }
diff --git a/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect
index 760f00e..8b7a059 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect
@@ -12,10 +12,10 @@
   constructor •(core::String* name, [core::List<self::Node*>* nested = #C1]) → self::Node*
     : self::Node::name = name, self::Node::nested = nested, super core::Object::•() {}
   method toString() → core::String*
-    return "<${this.{self::Node::name}}:[${let final core::List<self::Node*>* #t1 = this.{self::Node::nested} in #t1.{core::List::==}(null) ?{core::String*} null : #t1.{core::Iterable::join}(", ")}]>";
+    return "<${this.{self::Node::name}{core::String*}}:[${let final core::List<self::Node*>* #t1 = this.{self::Node::nested}{core::List<self::Node*>*} in #t1 == null ?{core::String*} null : #t1.{core::Iterable::join}(", "){([core::String*]) →* core::String*}}]>";
   method toSimpleString() → dynamic {
-    core::Iterable<dynamic>* tmp = let final core::List<self::Node*>* #t2 = this.{self::Node::nested} in #t2.{core::List::==}(null) ?{core::Iterable<dynamic>*} null : #t2.{core::Iterable::map}<dynamic>((self::Node* child) → dynamic => child.{self::Node::toSimpleString}());
-    return "${this.{self::Node::name}} ${let final core::Iterable<dynamic>* #t3 = tmp in #t3.{core::Object::==}(null) ?{core::String*} null : #t3.{core::Iterable::join}(" ")}".{core::String::trim}();
+    core::Iterable<dynamic>* tmp = let final core::List<self::Node*>* #t2 = this.{self::Node::nested}{core::List<self::Node*>*} in #t2 == null ?{core::Iterable<dynamic>*} null : #t2.{core::Iterable::map}<dynamic>((self::Node* child) → dynamic => child.{self::Node::toSimpleString}(){() →* dynamic}){((self::Node*) →* dynamic) →* core::Iterable<dynamic>*};
+    return "${this.{self::Node::name}{core::String*}} ${let final core::Iterable<dynamic>* #t3 = tmp in #t3 == null ?{core::String*} null : #t3.{core::Iterable::join}(" "){([core::String*]) →* core::String*}}".{core::String::trim}(){() →* core::String*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -56,9 +56,9 @@
         :async_temporary_0 = _in::unsafeCast<self::Node*>(:result);
         [yield] let dynamic #t10 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("10", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error, :async_op) in null;
         self::Node* node = new self::Node::•("1", core::_GrowableList::_literal3<self::Node*>(_in::unsafeCast<self::Node*>(:async_temporary_2), _in::unsafeCast<self::Node*>(:async_temporary_0), _in::unsafeCast<self::Node*>(:result)));
-        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
+        core::String* actual = node.{self::Node::toSimpleString}(){() →* dynamic} as{TypeError,ForDynamic} core::String*;
         core::print(actual);
-        if(!actual.{core::String::==}(expected)) {
+        if(!(actual =={core::String::==}{(core::Object*) →* core::bool*} expected)) {
           throw "Expected '${expected}' but got '${actual}'";
         }
       }
diff --git a/pkg/front_end/testcases/general/await_complex.dart.weak.expect b/pkg/front_end/testcases/general/await_complex.dart.weak.expect
index efab03a..df8fc27 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.weak.expect
@@ -19,7 +19,7 @@
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
-    return this.{self::C::field};
+    return this.{self::C::field}{core::int*};
   set setter(dynamic val) → void {
     this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
@@ -45,7 +45,7 @@
   on dynamic catch(final dynamic _) {
     return true;
   }
-}).call();
+})(){() →* core::bool*};
 static method topLevelFoo(core::int* param) → core::int*
   return 1;
 static get topLevelGetter() → core::int*
@@ -56,54 +56,54 @@
 static method dummy() → dynamic
   return 1;
 static method staticMembers() → dynamic async {
-  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, a);
-  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, f);
-  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, b);
-  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, c);
-  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(3, d);
-  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter){(core::num*) →* core::int*}.{core::num::+}(self::C::staticSetter = 1){(core::num*) →* core::int*}.{core::num::+}(self::C::staticFoo(1)){(core::num*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(5, e);
 }
 static method topLevelMembers() → dynamic async {
-  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, a);
-  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, b);
-  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, c);
-  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, d);
-  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter){(core::num*) →* core::int*}.{core::num::+}(self::topLevelSetter = 1){(core::num*) →* core::int*}.{core::num::+}(self::topLevelFoo(1)){(core::num*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(5, e);
 }
 static method instanceMembers() → dynamic async {
   self::C* inst = new self::C::•();
-  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* a = inst.{self::C::field}{core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, a);
-  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* b = inst.{self::C::getter}{core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, b);
-  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, c);
-  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* d = inst.{self::C::foo}(1){(core::int*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, d);
-  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* e = inst.{self::C::field}{core::int*}.{core::num::+}(inst.{self::C::getter}{core::int*}){(core::num*) →* core::int*}.{core::num::+}(inst.{self::C::setter} = 1){(core::num*) →* core::int*}.{core::num::+}(inst.{self::C::foo}(1){(core::int*) →* core::int*}){(core::num*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(5, e);
 }
 static method others() → dynamic async {
-  core::String* a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString");
+  core::String* a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString"){(core::String*) →* core::String*};
   self::expect("1 1 someString", a);
   self::C* c = new self::C::•();
-  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  core::num* d = c.{self::C::field}{core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   core::int* cnt = 2;
   core::List<core::int*>* b = <core::int*>[1, 2, 3];
-  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic} core::int*);
-  self::expect(1, b.{core::List::[]}(cnt));
-  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
+  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic} core::int*){(core::int*, core::int*) →* void};
+  self::expect(1, b.{core::List::[]}(cnt){(core::int*) →* core::int*});
+  core::num* e = b.{core::List::[]}(0){(core::int*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   self::expect(2, e);
 }
 static method conditionals() → dynamic async {
@@ -124,16 +124,16 @@
 static method asserts() → dynamic async {
   for (final core::Function* #t1 in <core::Function*>[#C1, #C2]) {
     final <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>* func = #t1 as{TypeError} <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>*;
-    assert(await func.call<core::bool*>(true));
-    assert(self::id<core::bool*>(true) as{TypeError} core::bool*, await func.call<core::String*>("message"));
-    assert(await func.call<core::bool*>(true), await func.call<core::String*>("message"));
+    assert(await func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*});
+    assert(self::id<core::bool*>(true) as{TypeError} core::bool*, await func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*});
+    assert(await func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*}, await func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*});
     try {
-      assert(await func.call<core::bool*>(false), await func.call<core::String*>("message"));
+      assert(await func<core::bool*>(false){(core::bool*) →* FutureOr<core::bool*>*}, await func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*});
       if(self::assertStatementsEnabled)
         throw "Didn't throw";
     }
     on core::AssertionError* catch(final core::AssertionError* e) {
-      self::expect("message", e.{core::AssertionError::message});
+      self::expect("message", e.{core::AssertionError::message}{core::Object*});
     }
   }
 }
@@ -141,28 +141,28 @@
   for (final core::Function* #t2 in <core::Function*>[#C1, #C2]) {
     final <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>* func = #t2 as{TypeError} <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>*;
     core::int* c = 0;
-    for (core::int* i = await func.call<core::int*>(0); await func.call<core::bool*>(i.{core::num::<}(5)); await func.call<core::int*>(let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1) in #t3)) {
-      c = c.{core::num::+}(1);
+    for (core::int* i = await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}; await func<core::bool*>(i.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}; await func<core::int*>(let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3){(core::int*) →* FutureOr<core::int*>*}) {
+      c = c.{core::num::+}(1){(core::num*) →* core::int*};
     }
     self::expect(5, c);
     c = 0;
-    while (await func.call<core::bool*>(c.{core::num::<}(5)))
-      c = c.{core::num::+}(1);
+    while (await func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*})
+      c = c.{core::num::+}(1){(core::num*) →* core::int*};
     self::expect(5, c);
     c = 0;
     do {
-      c = c.{core::num::+}(1);
+      c = c.{core::num::+}(1){(core::num*) →* core::int*};
     }
-    while (await func.call<core::bool*>(c.{core::num::<}(5)))
+    while (await func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*})
     self::expect(5, c);
-    if(await func.call<core::bool*>(c.{core::num::==}(5))) {
+    if(await func<core::bool*>(c =={core::num::==}{(core::Object*) →* core::bool*} 5){(core::bool*) →* FutureOr<core::bool*>*}) {
       self::expect(5, c);
     }
     else {
       throw "unreachable";
     }
     try {
-      throw await func.call<core::String*>("string");
+      throw await func<core::String*>("string"){(core::String*) →* FutureOr<core::String*>*};
     }
     on core::String* catch(no-exception-var) {
     }
@@ -179,22 +179,22 @@
           }
           on dynamic catch(final dynamic e) {
             self::expect("string", e);
-            self::expect(0, await func.call<core::int*>(0));
+            self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
             rethrow;
           }
         finally {
-          self::expect(0, await func.call<core::int*>(0));
+          self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
         }
       }
       on dynamic catch(final dynamic e) {
-        self::expect(0, await func.call<core::int*>(0));
+        self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
         self::expect("string", e);
       }
     finally {
-      self::expect(0, await func.call<core::int*>(0));
+      self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
     }
     #L1:
-    switch(await func.call<core::int*>(2)) {
+    switch(await func<core::int*>(2){(core::int*) →* FutureOr<core::int*>*}) {
       #L2:
       case #C3:
         {
@@ -207,19 +207,19 @@
         }
     }
     self::expect(42, await(() → asy::Future<dynamic>* async {
-      return await func.call<dynamic>(42);
-    }).call());
+      return await func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*};
+    })(){() →* asy::Future<dynamic>*});
     self::expect(42, await(() → asy::Future<dynamic>* async {
-      return func.call<dynamic>(42);
-    }).call());
+      return func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*};
+    })(){() →* asy::Future<dynamic>*});
     function testStream1() → asy::Stream<core::int*>* async* {
-      yield await func.call<core::int*>(42);
+      yield await func<core::int*>(42){(core::int*) →* FutureOr<core::int*>*};
     }
-    self::expectList(<dynamic>[42], await testStream1.call().{asy::Stream::toList}());
+    self::expectList(<dynamic>[42], await testStream1(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*});
     function testStream2() → asy::Stream<core::int*>* async* {
-      yield* await func.call<asy::Stream<core::int*>*>(self::intStream());
+      yield* await func<asy::Stream<core::int*>*>(self::intStream()){(asy::Stream<core::int*>*) →* FutureOr<asy::Stream<core::int*>*>*};
     }
-    self::expectList(<dynamic>[42], await testStream2.call().{asy::Stream::toList}());
+    self::expectList(<dynamic>[42], await testStream2(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*});
   }
 }
 static method future<T extends core::Object* = dynamic>(self::future::T* value) → FutureOr<self::future::T*>* async 
@@ -230,7 +230,7 @@
   yield 42;
 }
 static method main() → dynamic async {
-  for (core::int* i = 0; i.{core::num::<}(11); i = i.{core::num::+}(1)) {
+  for (core::int* i = 0; i.{core::num::<}(11){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     await self::staticMembers();
     await self::topLevelMembers();
     await self::instanceMembers();
@@ -241,15 +241,15 @@
   }
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method expectList(core::List<dynamic>* expected, core::List<dynamic>* actual) → dynamic {
-  if(!expected.{core::List::length}.{core::num::==}(actual.{core::List::length})) {
+  if(!(expected.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} actual.{core::List::length}{core::int*})) {
     throw "Expected ${expected}, actual ${actual}";
   }
-  for (core::int* i = 0; i.{core::num::<}(expected.{core::List::length}); i = i.{core::num::+}(1)) {
-    self::expect(expected.{core::List::[]}(i), actual.{core::List::[]}(i));
+  for (core::int* i = 0; i.{core::num::<}(expected.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    self::expect(expected.{core::List::[]}(i){(core::int*) →* dynamic}, actual.{core::List::[]}(i){(core::int*) →* dynamic});
   }
 }
 
diff --git a/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
index 48306e5..42aed06 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
-    return this.{self::C::field};
+    return this.{self::C::field}{core::int*};
   set setter(dynamic val) → void {
     this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
@@ -46,7 +46,7 @@
   on dynamic catch(final dynamic _) {
     return true;
   }
-}).call();
+})(){() →* core::bool*};
 static method topLevelFoo(core::int* param) → core::int*
   return 1;
 static get topLevelGetter() → core::int*
@@ -77,27 +77,27 @@
       {
         :async_temporary_0 = self::C::staticField;
         [yield] let dynamic #t1 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, a);
         :async_temporary_1 = self::C::staticField = 1;
         [yield] let dynamic #t2 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* f = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* f = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, f);
         :async_temporary_2 = self::C::staticGetter;
         [yield] let dynamic #t3 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, b);
         :async_temporary_3 = self::C::staticSetter = 1;
         [yield] let dynamic #t4 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, c);
         :async_temporary_4 = self::C::staticFoo(2);
         [yield] let dynamic #t5 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(3, d);
-        :async_temporary_5 = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1));
+        :async_temporary_5 = self::C::staticField.{core::num::+}(self::C::staticGetter){(core::num*) →* core::int*}.{core::num::+}(self::C::staticSetter = 1){(core::num*) →* core::int*}.{core::num::+}(self::C::staticFoo(1)){(core::num*) →* core::int*};
         [yield] let dynamic #t6 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_5).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_5).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -132,23 +132,23 @@
       {
         :async_temporary_0 = self::globalVariable;
         [yield] let dynamic #t7 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, a);
         :async_temporary_1 = self::topLevelGetter;
         [yield] let dynamic #t8 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, b);
         :async_temporary_2 = self::topLevelSetter = 1;
         [yield] let dynamic #t9 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, c);
         :async_temporary_3 = self::topLevelFoo(1);
         [yield] let dynamic #t10 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, d);
-        :async_temporary_4 = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1));
+        :async_temporary_4 = self::globalVariable.{core::num::+}(self::topLevelGetter){(core::num*) →* core::int*}.{core::num::+}(self::topLevelSetter = 1){(core::num*) →* core::int*}.{core::num::+}(self::topLevelFoo(1)){(core::num*) →* core::int*};
         [yield] let dynamic #t11 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -182,25 +182,25 @@
       #L3:
       {
         self::C* inst = new self::C::•();
-        :async_temporary_0 = inst.{self::C::field};
+        :async_temporary_0 = inst.{self::C::field}{core::int*};
         [yield] let dynamic #t12 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, a);
-        :async_temporary_1 = inst.{self::C::getter};
+        :async_temporary_1 = inst.{self::C::getter}{core::int*};
         [yield] let dynamic #t13 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, b);
         :async_temporary_2 = inst.{self::C::setter} = 1;
         [yield] let dynamic #t14 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, c);
-        :async_temporary_3 = inst.{self::C::foo}(1);
+        :async_temporary_3 = inst.{self::C::foo}(1){(core::int*) →* core::int*};
         [yield] let dynamic #t15 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, d);
-        :async_temporary_4 = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1));
+        :async_temporary_4 = inst.{self::C::field}{core::int*}.{core::num::+}(inst.{self::C::getter}{core::int*}){(core::num*) →* core::int*}.{core::num::+}(inst.{self::C::setter} = 1){(core::num*) →* core::int*}.{core::num::+}(inst.{self::C::foo}(1){(core::int*) →* core::int*}){(core::num*) →* core::int*};
         [yield] let dynamic #t16 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -237,22 +237,22 @@
         [yield] let dynamic #t17 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
         :async_temporary_0 = "${_in::unsafeCast<core::int*>(:async_temporary_0)} ${:result} ";
         [yield] let dynamic #t18 = asy::_awaitHelper("someString", :async_op_then, :async_op_error, :async_op) in null;
-        core::String* a = _in::unsafeCast<core::String*>(:async_temporary_0).{core::String::+}(_in::unsafeCast<core::String*>(:result));
+        core::String* a = _in::unsafeCast<core::String*>(:async_temporary_0).{core::String::+}(_in::unsafeCast<core::String*>(:result)){(core::String*) →* core::String*};
         self::expect("1 1 someString", a);
         self::C* c = new self::C::•();
-        :async_temporary_1 = c.{self::C::field};
+        :async_temporary_1 = c.{self::C::field}{core::int*};
         [yield] let dynamic #t19 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         core::int* cnt = 2;
         core::List<core::int*>* b = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
         :async_temporary_3 = b;
         :async_temporary_2 = cnt;
         [yield] let dynamic #t20 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::List<core::int*>*>(:async_temporary_3).{core::List::[]=}(_in::unsafeCast<core::int*>(:async_temporary_2), :result as{TypeError,ForDynamic} core::int*);
-        self::expect(1, b.{core::List::[]}(cnt));
-        :async_temporary_4 = b.{core::List::[]}(0);
+        _in::unsafeCast<core::List<core::int*>*>(:async_temporary_3).{core::List::[]=}(_in::unsafeCast<core::int*>(:async_temporary_2), :result as{TypeError,ForDynamic} core::int*){(core::int*, core::int*) →* void};
+        self::expect(1, b.{core::List::[]}(cnt){(core::int*) →* core::int*});
+        :async_temporary_4 = b.{core::List::[]}(0){(core::int*) →* core::int*};
         [yield] let dynamic #t21 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
+        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
         self::expect(2, e);
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -360,33 +360,33 @@
             {
               final <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>* func = #t26 as{TypeError} <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>*;
               assert {
-                [yield] let dynamic #t27 = asy::_awaitHelper(func.call<core::bool*>(true), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t27 = asy::_awaitHelper(func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
                 assert(_in::unsafeCast<core::bool*>(:result));
               }
               assert {
                 if(self::id<core::bool*>(true) as{TypeError} core::bool*)
                   ;
                 else {
-                  [yield] let dynamic #t28 = asy::_awaitHelper(func.call<core::String*>("message"), :async_op_then, :async_op_error, :async_op) in null;
+                  [yield] let dynamic #t28 = asy::_awaitHelper(func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error, :async_op) in null;
                   assert(false, _in::unsafeCast<core::String*>(:result));
                 }
               }
               assert {
-                [yield] let dynamic #t29 = asy::_awaitHelper(func.call<core::bool*>(true), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t29 = asy::_awaitHelper(func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
                 if(_in::unsafeCast<core::bool*>(:result))
                   ;
                 else {
-                  [yield] let dynamic #t30 = asy::_awaitHelper(func.call<core::String*>("message"), :async_op_then, :async_op_error, :async_op) in null;
+                  [yield] let dynamic #t30 = asy::_awaitHelper(func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error, :async_op) in null;
                   assert(false, _in::unsafeCast<core::String*>(:result));
                 }
               }
               try {
                 assert {
-                  [yield] let dynamic #t31 = asy::_awaitHelper(func.call<core::bool*>(false), :async_op_then, :async_op_error, :async_op) in null;
+                  [yield] let dynamic #t31 = asy::_awaitHelper(func<core::bool*>(false){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
                   if(_in::unsafeCast<core::bool*>(:result))
                     ;
                   else {
-                    [yield] let dynamic #t32 = asy::_awaitHelper(func.call<core::String*>("message"), :async_op_then, :async_op_error, :async_op) in null;
+                    [yield] let dynamic #t32 = asy::_awaitHelper(func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error, :async_op) in null;
                     assert(false, _in::unsafeCast<core::String*>(:result));
                   }
                 }
@@ -394,7 +394,7 @@
                   throw "Didn't throw";
               }
               on core::AssertionError* catch(final core::AssertionError* e) {
-                self::expect("message", e.{core::AssertionError::message});
+                self::expect("message", e.{core::AssertionError::message}{core::Object*});
               }
             }
           }
@@ -447,18 +447,18 @@
                   core::int* i;
                   if(#t34) {
                     #t34 = false;
-                    [yield] let dynamic #t36 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
+                    [yield] let dynamic #t36 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
                     i = _in::unsafeCast<core::int*>(:result);
                   }
                   else {
                     i = #t35;
-                    [yield] let dynamic #t37 = asy::_awaitHelper(func.call<core::int*>(let final core::int* #t38 = i in let final core::int* #t39 = i = #t38.{core::num::+}(1) in #t38), :async_op_then, :async_op_error, :async_op) in null;
+                    [yield] let dynamic #t37 = asy::_awaitHelper(func<core::int*>(let final core::int* #t38 = i in let final core::int* #t39 = i = #t38.{core::num::+}(1){(core::num*) →* core::int*} in #t38){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
                     _in::unsafeCast<core::int*>(:result);
                   }
-                  [yield] let dynamic #t40 = asy::_awaitHelper(func.call<core::bool*>(i.{core::num::<}(5)), :async_op_then, :async_op_error, :async_op) in null;
+                  [yield] let dynamic #t40 = asy::_awaitHelper(func<core::bool*>(i.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
                   if(_in::unsafeCast<core::bool*>(:result)) {
                     {
-                      c = c.{core::num::+}(1);
+                      c = c.{core::num::+}(1){(core::num*) →* core::int*};
                     }
                     #t35 = i;
                   }
@@ -470,21 +470,21 @@
               c = 0;
               #L9:
               while (true) {
-                [yield] let dynamic #t41 = asy::_awaitHelper(func.call<core::bool*>(c.{core::num::<}(5)), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t41 = asy::_awaitHelper(func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
                 if(_in::unsafeCast<core::bool*>(:result))
-                  c = c.{core::num::+}(1);
+                  c = c.{core::num::+}(1){(core::num*) →* core::int*};
                 else
                   break #L9;
               }
               self::expect(5, c);
               c = 0;
               do {
-                c = c.{core::num::+}(1);
-                [yield] let dynamic #t42 = asy::_awaitHelper(func.call<core::bool*>(c.{core::num::<}(5)), :async_op_then, :async_op_error, :async_op) in null;
+                c = c.{core::num::+}(1){(core::num*) →* core::int*};
+                [yield] let dynamic #t42 = asy::_awaitHelper(func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
               }
               while (_in::unsafeCast<core::bool*>(:result))
               self::expect(5, c);
-              [yield] let dynamic #t43 = asy::_awaitHelper(func.call<core::bool*>(c.{core::num::==}(5)), :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t43 = asy::_awaitHelper(func<core::bool*>(c =={core::num::==}{(core::Object*) →* core::bool*} 5){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool*>(:result)) {
                 self::expect(5, c);
               }
@@ -492,7 +492,7 @@
                 throw "unreachable";
               }
               try {
-                [yield] let dynamic #t44 = asy::_awaitHelper(func.call<core::String*>("string"), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t44 = asy::_awaitHelper(func<core::String*>("string"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error, :async_op) in null;
                 throw _in::unsafeCast<core::String*>(:result);
               }
               on core::String* catch(no-exception-var) {
@@ -511,27 +511,27 @@
                     }
                     on dynamic catch(final dynamic e) {
                       self::expect("string", e);
-                      [yield] let dynamic #t46 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
+                      [yield] let dynamic #t46 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
                       self::expect(0, _in::unsafeCast<core::int*>(:result));
                       rethrow;
                     }
                   finally {
-                    [yield] let dynamic #t47 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
+                    [yield] let dynamic #t47 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
                     self::expect(0, _in::unsafeCast<core::int*>(:result));
                   }
                 }
                 on dynamic catch(final dynamic e) {
-                  [yield] let dynamic #t48 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
+                  [yield] let dynamic #t48 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
                   self::expect(0, _in::unsafeCast<core::int*>(:result));
                   self::expect("string", e);
                 }
               finally {
-                [yield] let dynamic #t49 = asy::_awaitHelper(func.call<core::int*>(0), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t49 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
                 self::expect(0, _in::unsafeCast<core::int*>(:result));
               }
               #L10:
               {
-                [yield] let dynamic #t50 = asy::_awaitHelper(func.call<core::int*>(2), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t50 = asy::_awaitHelper(func<core::int*>(2){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
                 switch(_in::unsafeCast<core::int*>(:result)) {
                   #L11:
                   case #C3:
@@ -558,7 +558,7 @@
                   try {
                     #L13:
                     {
-                      [yield] let dynamic #t52 = asy::_awaitHelper(func.call<dynamic>(42), :async_op_then, :async_op_error, :async_op) in null;
+                      [yield] let dynamic #t52 = asy::_awaitHelper(func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*}, :async_op_then, :async_op_error, :async_op) in null;
                       :return_value = :result;
                       break #L13;
                     }
@@ -573,7 +573,7 @@
                 :async_op.call();
                 :is_sync = true;
                 return :async_future;
-              }).call(), :async_op_then, :async_op_error, :async_op) in null;
+              })(){() →* asy::Future<dynamic>*}, :async_op_then, :async_op_error, :async_op) in null;
               self::expect(42, :result);
               [yield] let dynamic #t53 = asy::_awaitHelper((() → asy::Future<dynamic>* /* originally async */ {
                 final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
@@ -587,7 +587,7 @@
                   try {
                     #L14:
                     {
-                      :return_value = func.call<dynamic>(42);
+                      :return_value = func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*};
                       break #L14;
                     }
                     asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -601,7 +601,7 @@
                 :async_op.call();
                 :is_sync = true;
                 return :async_future;
-              }).call(), :async_op_then, :async_op_error, :async_op) in null;
+              })(){() →* asy::Future<dynamic>*}, :async_op_then, :async_op_error, :async_op) in null;
               self::expect(42, :result);
               function testStream1() → asy::Stream<core::int*>* /* originally async* */ {
                 asy::_AsyncStarStreamController<core::int*>* :controller;
@@ -617,7 +617,7 @@
                     try {
                       #L15:
                       {
-                        [yield] let dynamic #t54 = asy::_awaitHelper(func.call<core::int*>(42), :async_op_then, :async_op_error, :async_op) in null;
+                        [yield] let dynamic #t54 = asy::_awaitHelper(func<core::int*>(42){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
                         if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::int*>(:result)))
                           return null;
                         else
@@ -638,8 +638,8 @@
                 return :controller_stream;
               }
               :async_temporary_0 = core::_GrowableList::_literal1<dynamic>(42);
-              [yield] let dynamic #t55 = asy::_awaitHelper(testStream1.call().{asy::Stream::toList}(), :async_op_then, :async_op_error, :async_op) in null;
-              self::expectList(_in::unsafeCast<core::List<dynamic>*>(:async_temporary_0), _in::unsafeCast<core::List<core::int*>>(:result));
+              [yield] let dynamic #t55 = asy::_awaitHelper(testStream1(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*}, :async_op_then, :async_op_error, :async_op) in null;
+              self::expectList(_in::unsafeCast<core::List<dynamic>*>(:async_temporary_0), _in::unsafeCast<core::List<core::int*>*>(:result));
               function testStream2() → asy::Stream<core::int*>* /* originally async* */ {
                 asy::_AsyncStarStreamController<core::int*>* :controller;
                 dynamic :controller_stream;
@@ -654,7 +654,7 @@
                     try {
                       #L16:
                       {
-                        [yield] let dynamic #t56 = asy::_awaitHelper(func.call<asy::Stream<core::int*>*>(self::intStream()), :async_op_then, :async_op_error, :async_op) in null;
+                        [yield] let dynamic #t56 = asy::_awaitHelper(func<asy::Stream<core::int*>*>(self::intStream()){(asy::Stream<core::int*>*) →* FutureOr<asy::Stream<core::int*>*>*}, :async_op_then, :async_op_error, :async_op) in null;
                         if(:controller.{asy::_AsyncStarStreamController::addStream}(_in::unsafeCast<asy::Stream<core::int*>*>(:result)))
                           return null;
                         else
@@ -675,8 +675,8 @@
                 return :controller_stream;
               }
               :async_temporary_1 = core::_GrowableList::_literal1<dynamic>(42);
-              [yield] let dynamic #t57 = asy::_awaitHelper(testStream2.call().{asy::Stream::toList}(), :async_op_then, :async_op_error, :async_op) in null;
-              self::expectList(_in::unsafeCast<core::List<dynamic>*>(:async_temporary_1), _in::unsafeCast<core::List<core::int*>>(:result));
+              [yield] let dynamic #t57 = asy::_awaitHelper(testStream2(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*}, :async_op_then, :async_op_error, :async_op) in null;
+              self::expectList(_in::unsafeCast<core::List<dynamic>*>(:async_temporary_1), _in::unsafeCast<core::List<core::int*>*>(:result));
             }
           }
         }
@@ -768,7 +768,7 @@
     try {
       #L19:
       {
-        for (core::int* i = 0; i.{core::num::<}(11); i = i.{core::num::+}(1)) {
+        for (core::int* i = 0; i.{core::num::<}(11){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
           [yield] let dynamic #t58 = asy::_awaitHelper(self::staticMembers(), :async_op_then, :async_op_error, :async_op) in null;
           :result;
           [yield] let dynamic #t59 = asy::_awaitHelper(self::topLevelMembers(), :async_op_then, :async_op_error, :async_op) in null;
@@ -798,15 +798,15 @@
   return :async_future;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method expectList(core::List<dynamic>* expected, core::List<dynamic>* actual) → dynamic {
-  if(!expected.{core::List::length}.{core::num::==}(actual.{core::List::length})) {
+  if(!(expected.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} actual.{core::List::length}{core::int*})) {
     throw "Expected ${expected}, actual ${actual}";
   }
-  for (core::int* i = 0; i.{core::num::<}(expected.{core::List::length}); i = i.{core::num::+}(1)) {
-    self::expect(expected.{core::List::[]}(i), actual.{core::List::[]}(i));
+  for (core::int* i = 0; i.{core::num::<}(expected.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    self::expect(expected.{core::List::[]}(i){(core::int*) →* dynamic}, actual.{core::List::[]}(i){(core::int*) →* dynamic});
   }
 }
 
diff --git a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.expect
index 6042b1f..8a57698 100644
--- a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.expect
+++ b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.expect
@@ -11,7 +11,7 @@
     ;
   method m() → asy::Future<core::List<core::int*>*>* async 
     return let final core::List<core::int*>* #t1 = <core::int*>[] in block {
-      #t1.{core::List::add}(await this.{self::C::_m}());
+      #t1.{core::List::add}(await this.{self::C::_m}(){() →* asy::Future<core::int*>*}){(core::int*) →* void};
     } =>#t1;
   method _m() → asy::Future<core::int*>* async 
     return 42;
@@ -27,9 +27,9 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic async {
-  self::expect(42, (await new self::C::•().{self::C::m}()).{core::Iterable::first});
+  self::expect(42, (await new self::C::•().{self::C::m}(){() →* asy::Future<core::List<core::int*>*>*}).{core::Iterable::first}{core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
index c96fec3e..744e8a3 100644
--- a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
@@ -24,8 +24,8 @@
         #L1:
         {
           final core::List<core::int*>* #t1 = core::_GrowableList::•<core::int*>(0);
-          [yield] let dynamic #t2 = asy::_awaitHelper(this.{self::C::_m}(), :async_op_then, :async_op_error, :async_op) in null;
-          #t1.{core::List::add}(_in::unsafeCast<core::int*>(:result));
+          [yield] let dynamic #t2 = asy::_awaitHelper(this.{self::C::_m}(){() →* asy::Future<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
+          #t1.{core::List::add}(_in::unsafeCast<core::int*>(:result)){(core::int*) →* void};
           :return_value = block {} =>#t1;
           break #L1;
         }
@@ -92,8 +92,8 @@
     try {
       #L3:
       {
-        [yield] let dynamic #t3 = asy::_awaitHelper(new self::C::•().{self::C::m}(), :async_op_then, :async_op_error, :async_op) in null;
-        self::expect(42, _in::unsafeCast<core::List<core::int*>*>(:result).{core::Iterable::first});
+        [yield] let dynamic #t3 = asy::_awaitHelper(new self::C::•().{self::C::m}(){() →* asy::Future<core::List<core::int*>*>*}, :async_op_then, :async_op_error, :async_op) in null;
+        self::expect(42, _in::unsafeCast<core::List<core::int*>*>(:result).{core::Iterable::first}{core::int*});
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -108,6 +108,6 @@
   return :async_future;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/general/bad_store.dart.weak.expect b/pkg/front_end/testcases/general/bad_store.dart.weak.expect
index 0567f70..f25c04b 100644
--- a/pkg/front_end/testcases/general/bad_store.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bad_store.dart.weak.expect
@@ -23,12 +23,12 @@
 static method use(dynamic x) → void {}
 static method main(core::List<core::String*>* args) → dynamic {
   dynamic foo = self::identity(new self::Foo::•());
-  if(args.{core::List::length}.{core::num::>}(1)) {
-    foo.field = "string";
-    dynamic first = foo.field;
+  if(args.{core::List::length}{core::int*}.{core::num::>}(1){(core::num*) →* core::bool*}) {
+    foo{dynamic}.field = "string";
+    dynamic first = foo{dynamic}.field;
     self::use(first);
-    foo.noField = "string";
-    dynamic second = foo.noField;
+    foo{dynamic}.noField = "string";
+    dynamic second = foo{dynamic}.noField;
     self::use(second);
   }
 }
diff --git a/pkg/front_end/testcases/general/bad_store.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bad_store.dart.weak.transformed.expect
index 0567f70..f25c04b 100644
--- a/pkg/front_end/testcases/general/bad_store.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bad_store.dart.weak.transformed.expect
@@ -23,12 +23,12 @@
 static method use(dynamic x) → void {}
 static method main(core::List<core::String*>* args) → dynamic {
   dynamic foo = self::identity(new self::Foo::•());
-  if(args.{core::List::length}.{core::num::>}(1)) {
-    foo.field = "string";
-    dynamic first = foo.field;
+  if(args.{core::List::length}{core::int*}.{core::num::>}(1){(core::num*) →* core::bool*}) {
+    foo{dynamic}.field = "string";
+    dynamic first = foo{dynamic}.field;
     self::use(first);
-    foo.noField = "string";
-    dynamic second = foo.noField;
+    foo{dynamic}.noField = "string";
+    dynamic second = foo{dynamic}.noField;
     self::use(second);
   }
 }
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.expect
index cd1a183..8ca1bc7 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.expect
@@ -37,6 +37,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method baz() → dynamic {
-  self::B::foo<core::Object*>().{self::A::bar}<core::String*>();
+  self::B::foo<core::Object*>().{self::A::bar}<core::String*>(){() →* dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.transformed.expect
index cd1a183..8ca1bc7 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.transformed.expect
@@ -37,6 +37,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method baz() → dynamic {
-  self::B::foo<core::Object*>().{self::A::bar}<core::String*>();
+  self::B::foo<core::Object*>().{self::A::bar}<core::String*>(){() →* dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug21938.dart.weak.expect b/pkg/front_end/testcases/general/bug21938.dart.weak.expect
index 5a51904..0fce68f 100644
--- a/pkg/front_end/testcases/general/bug21938.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug21938.dart.weak.expect
@@ -36,13 +36,13 @@
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x(3);
    ^";
-  f.call(5, 2);
+  f(5, 2);
   invalid-expression "pkg/front_end/testcases/general/bug21938.dart:11:5: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x.call();
     ^^^^";
   f.call;
-  f.call(5, 2);
+  f(5, 2);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug21938.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug21938.dart.weak.transformed.expect
index 5a51904..0fce68f 100644
--- a/pkg/front_end/testcases/general/bug21938.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug21938.dart.weak.transformed.expect
@@ -36,13 +36,13 @@
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x(3);
    ^";
-  f.call(5, 2);
+  f(5, 2);
   invalid-expression "pkg/front_end/testcases/general/bug21938.dart:11:5: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x.call();
     ^^^^";
   f.call;
-  f.call(5, 2);
+  f(5, 2);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug32414a.dart.weak.expect b/pkg/front_end/testcases/general/bug32414a.dart.weak.expect
index 4176ad4..a688e6b 100644
--- a/pkg/front_end/testcases/general/bug32414a.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug32414a.dart.weak.expect
@@ -11,7 +11,7 @@
 
 static method test() → void {
   dynamic a = 5;
-  core::String* b = a.{core::Object::toString}();
+  core::String* b = a.{core::Object::toString}(){() →* core::String*};
   b = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/bug32414a.dart:10:7: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   b = 42;
       ^" in 42 as{TypeError} core::String*;
diff --git a/pkg/front_end/testcases/general/bug32414a.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug32414a.dart.weak.transformed.expect
index 4176ad4..a688e6b 100644
--- a/pkg/front_end/testcases/general/bug32414a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug32414a.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 
 static method test() → void {
   dynamic a = 5;
-  core::String* b = a.{core::Object::toString}();
+  core::String* b = a.{core::Object::toString}(){() →* core::String*};
   b = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/bug32414a.dart:10:7: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   b = 42;
       ^" in 42 as{TypeError} core::String*;
diff --git a/pkg/front_end/testcases/general/bug32414b.dart.weak.expect b/pkg/front_end/testcases/general/bug32414b.dart.weak.expect
index 1422239..f09b3fe 100644
--- a/pkg/front_end/testcases/general/bug32414b.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug32414b.dart.weak.expect
@@ -4,6 +4,6 @@
 
 static method test() → void {
   core::List<dynamic>* l = <dynamic>[1, "hello"];
-  core::List<core::String*>* l2 = l.{core::Iterable::map}<core::String*>((dynamic element) → core::String* => element.{core::Object::toString}()).{core::Iterable::toList}();
+  core::List<core::String*>* l2 = l.{core::Iterable::map}<core::String*>((dynamic element) → core::String* => element.{core::Object::toString}(){() →* core::String*}){((dynamic) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/bug32414b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug32414b.dart.weak.transformed.expect
index 6378088..474232b 100644
--- a/pkg/front_end/testcases/general/bug32414b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug32414b.dart.weak.transformed.expect
@@ -4,6 +4,6 @@
 
 static method test() → void {
   core::List<dynamic>* l = core::_GrowableList::_literal2<dynamic>(1, "hello");
-  core::List<core::String*>* l2 = l.{core::Iterable::map}<core::String*>((dynamic element) → core::String* => element.{core::Object::toString}()).{core::Iterable::toList}();
+  core::List<core::String*>* l2 = l.{core::Iterable::map}<core::String*>((dynamic element) → core::String* => element.{core::Object::toString}(){() →* core::String*}){((dynamic) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/bug32426.dart.weak.expect b/pkg/front_end/testcases/general/bug32426.dart.weak.expect
index cb6d7d6..5a79b65 100644
--- a/pkg/front_end/testcases/general/bug32426.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug32426.dart.weak.expect
@@ -36,7 +36,7 @@
 }
 static method main() → dynamic {
   self::I* i = new self::C::•();
-  ([core::int*]) →* void f = (let final self::I* #t1 = i in #t1.==(null) ?{() →* void} null : #t1.{self::I::call}) as{TypeError} ([core::int*]) →* void;
+  ([core::int*]) →* void f = (let final self::I* #t1 = i in #t1 == null ?{() →* void} null : #t1.{self::I::call}) as{TypeError} ([core::int*]) →* void;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/bug32426.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug32426.dart.weak.transformed.expect
index cb6d7d6..5a79b65 100644
--- a/pkg/front_end/testcases/general/bug32426.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug32426.dart.weak.transformed.expect
@@ -36,7 +36,7 @@
 }
 static method main() → dynamic {
   self::I* i = new self::C::•();
-  ([core::int*]) →* void f = (let final self::I* #t1 = i in #t1.==(null) ?{() →* void} null : #t1.{self::I::call}) as{TypeError} ([core::int*]) →* void;
+  ([core::int*]) →* void f = (let final self::I* #t1 = i in #t1 == null ?{() →* void} null : #t1.{self::I::call}) as{TypeError} ([core::int*]) →* void;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/bug32629.dart.weak.expect b/pkg/front_end/testcases/general/bug32629.dart.weak.expect
index 15d74a5..4965806 100644
--- a/pkg/front_end/testcases/general/bug32629.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug32629.dart.weak.expect
@@ -32,6 +32,6 @@
 static method test() → void {
   self::foo<core::String*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
   foo<String>(new A());
-                  ^" in (let final self::A* #t2 = new self::A::•() in #t2.==(null) ?{(dynamic, dynamic) →* dynamic} null : #t2.{self::A::call}) as{TypeError} (core::String*, dynamic) →* core::String*);
+                  ^" in (let final self::A* #t2 = new self::A::•() in #t2 == null ?{(dynamic, dynamic) →* dynamic} null : #t2.{self::A::call}) as{TypeError} (core::String*, dynamic) →* core::String*);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug32629.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug32629.dart.weak.transformed.expect
index 15d74a5..4965806 100644
--- a/pkg/front_end/testcases/general/bug32629.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug32629.dart.weak.transformed.expect
@@ -32,6 +32,6 @@
 static method test() → void {
   self::foo<core::String*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
   foo<String>(new A());
-                  ^" in (let final self::A* #t2 = new self::A::•() in #t2.==(null) ?{(dynamic, dynamic) →* dynamic} null : #t2.{self::A::call}) as{TypeError} (core::String*, dynamic) →* core::String*);
+                  ^" in (let final self::A* #t2 = new self::A::•() in #t2 == null ?{(dynamic, dynamic) →* dynamic} null : #t2.{self::A::call}) as{TypeError} (core::String*, dynamic) →* core::String*);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug33099.dart.weak.expect b/pkg/front_end/testcases/general/bug33099.dart.weak.expect
index 7fb694a..5df3838 100644
--- a/pkg/front_end/testcases/general/bug33099.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug33099.dart.weak.expect
@@ -62,12 +62,12 @@
 static const field self::_FailingTest* failingTest = #C1;
 static method main() → dynamic {
   mir::ClassMirror* classMirror = mir::reflectClass(#C2);
-  classMirror.{mir::ClassMirror::instanceMembers}.{core::Map::forEach}((core::Symbol* symbol, mir::MethodMirror* memberMirror) → Null {
-    if(memberMirror.{mir::DeclarationMirror::simpleName}.{core::Symbol::==}(#C3)) {
+  classMirror.{mir::ClassMirror::instanceMembers}{core::Map<core::Symbol*, mir::MethodMirror*>*}.{core::Map::forEach}((core::Symbol* symbol, mir::MethodMirror* memberMirror) → Null {
+    if(memberMirror.{mir::DeclarationMirror::simpleName}{core::Symbol*} =={core::Symbol::==}{(core::Object*) →* core::bool*} (#C3)) {
       core::print(memberMirror);
       core::print(self::_hasFailingTestAnnotation(memberMirror));
     }
-  });
+  }){((core::Symbol*, mir::MethodMirror*) →* void) →* void};
 }
 static method _hasFailingTestAnnotation(mir::MethodMirror* method) → core::bool* {
   core::bool* r = self::_hasAnnotationInstance(method, #C1);
@@ -75,10 +75,10 @@
   return r;
 }
 static method _hasAnnotationInstance(mir::DeclarationMirror* declaration, dynamic instance) → core::bool*
-  return declaration.{mir::DeclarationMirror::metadata}.{core::Iterable::any}((mir::InstanceMirror* annotation) → core::bool* {
-    core::print("annotation: ${annotation.{mir::InstanceMirror::reflectee}}");
-    return core::identical(annotation.{mir::InstanceMirror::reflectee}, instance);
-  });
+  return declaration.{mir::DeclarationMirror::metadata}{core::List<mir::InstanceMirror*>*}.{core::Iterable::any}((mir::InstanceMirror* annotation) → core::bool* {
+    core::print("annotation: ${annotation.{mir::InstanceMirror::reflectee}{dynamic}}");
+    return core::identical(annotation.{mir::InstanceMirror::reflectee}{dynamic}, instance);
+  }){((mir::InstanceMirror*) →* core::bool*) →* core::bool*};
 
 constants  {
   #C1 = self::_FailingTest {}
diff --git a/pkg/front_end/testcases/general/bug33099.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33099.dart.weak.transformed.expect
index 188bd50..79f0586 100644
--- a/pkg/front_end/testcases/general/bug33099.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33099.dart.weak.transformed.expect
@@ -62,12 +62,12 @@
 static const field self::_FailingTest* failingTest = #C1;
 static method main() → dynamic {
   mir::ClassMirror* classMirror = mir::reflectClass(#C2);
-  classMirror.{mir::ClassMirror::instanceMembers}.{core::Map::forEach}((core::Symbol* symbol, mir::MethodMirror* memberMirror) → Null {
-    if(memberMirror.{mir::DeclarationMirror::simpleName}.{core::Symbol::==}(#C3)) {
+  classMirror.{mir::ClassMirror::instanceMembers}{core::Map<core::Symbol*, mir::MethodMirror*>*}.{core::Map::forEach}((core::Symbol* symbol, mir::MethodMirror* memberMirror) → Null {
+    if(memberMirror.{mir::DeclarationMirror::simpleName}{core::Symbol*} =={core::Symbol::==}{(core::Object*) →* core::bool*} (#C3)) {
       core::print(memberMirror);
       core::print(self::_hasFailingTestAnnotation(memberMirror));
     }
-  });
+  }){((core::Symbol*, mir::MethodMirror*) →* void) →* void};
 }
 static method _hasFailingTestAnnotation(mir::MethodMirror* method) → core::bool* {
   core::bool* r = self::_hasAnnotationInstance(method, #C1);
@@ -75,10 +75,10 @@
   return r;
 }
 static method _hasAnnotationInstance(mir::DeclarationMirror* declaration, dynamic instance) → core::bool*
-  return declaration.{mir::DeclarationMirror::metadata}.{core::Iterable::any}((mir::InstanceMirror* annotation) → core::bool* {
-    core::print("annotation: ${annotation.{mir::InstanceMirror::reflectee}}");
-    return core::identical(annotation.{mir::InstanceMirror::reflectee}, instance);
-  });
+  return declaration.{mir::DeclarationMirror::metadata}{core::List<mir::InstanceMirror*>*}.{core::Iterable::any}((mir::InstanceMirror* annotation) → core::bool* {
+    core::print("annotation: ${annotation.{mir::InstanceMirror::reflectee}{dynamic}}");
+    return core::identical(annotation.{mir::InstanceMirror::reflectee}{dynamic}, instance);
+  }){((mir::InstanceMirror*) →* core::bool*) →* core::bool*};
 
 constants  {
   #C1 = self::_FailingTest {}
diff --git a/pkg/front_end/testcases/general/bug33196.dart.weak.expect b/pkg/front_end/testcases/general/bug33196.dart.weak.expect
index f76933a..306df2a 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug33196.dart.weak.expect
@@ -6,7 +6,7 @@
 
 static method main() → dynamic {
   FutureOr<core::String*>* result = self::returnsString();
-  core::print(result.{core::Object::runtimeType});
+  core::print(result.{core::Object::runtimeType}{core::Type*});
 }
 static method returnsString() → FutureOr<core::String*>* async {
   return "oh no";
diff --git a/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
index ea1347a..1121533 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {
   FutureOr<core::String*>* result = self::returnsString();
-  core::print(result.{core::Object::runtimeType});
+  core::print(result.{core::Object::runtimeType}{core::Type*});
 }
 static method returnsString() → FutureOr<core::String*>* /* originally async */ {
   final asy::_Future<core::String*>* :async_future = new asy::_Future::•<core::String*>();
diff --git a/pkg/front_end/testcases/general/bug33206.dart.weak.expect b/pkg/front_end/testcases/general/bug33206.dart.weak.expect
index f4075a0..b73a7ce 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug33206.dart.weak.expect
@@ -12,7 +12,7 @@
     : self::X::x = x, self::X::y = y, super core::Object::•()
     ;
   method toString() → core::String*
-    return "X(${this.{self::X::x}}, ${this.{self::X::y}})";
+    return "X(${this.{self::X::x}{dynamic}}, ${this.{self::X::y}{dynamic}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -49,8 +49,8 @@
 }
 static method foo() → asy::Future<self::X*>* async {
   return new self::X::•(let final self::Y* #t1 = new self::Y::•() in block {
-    #t1.{self::Y::f}(await self::f1());
-    #t1.{self::Y::f}(self::f2());
+    #t1.{self::Y::f}(await self::f1()){(dynamic) →* dynamic};
+    #t1.{self::Y::f}(self::f2()){(dynamic) →* dynamic};
   } =>#t1, await self::f3());
 }
 static method main() → asy::Future<void>* async {
diff --git a/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
index 2ca85ca..36aee3f 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
     : self::X::x = x, self::X::y = y, super core::Object::•()
     ;
   method toString() → core::String*
-    return "X(${this.{self::X::x}}, ${this.{self::X::y}})";
+    return "X(${this.{self::X::x}{dynamic}}, ${this.{self::X::y}{dynamic}})";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -112,9 +112,9 @@
       {
         final self::Y* #t1 = new self::Y::•();
         [yield] let dynamic #t2 = asy::_awaitHelper(self::f1(), :async_op_then, :async_op_error, :async_op) in null;
-        #t1.{self::Y::f}(_in::unsafeCast<core::List<core::Object*>*>(:result));
+        #t1.{self::Y::f}(_in::unsafeCast<core::List<core::Object*>*>(:result)){(dynamic) →* dynamic};
         :async_temporary_0 = block {
-          #t1.{self::Y::f}(self::f2());
+          #t1.{self::Y::f}(self::f2()){(dynamic) →* dynamic};
         } =>#t1;
         [yield] let dynamic #t3 = asy::_awaitHelper(self::f3(), :async_op_then, :async_op_error, :async_op) in null;
         :return_value = new self::X::•(_in::unsafeCast<self::Y*>(:async_temporary_0), _in::unsafeCast<core::Object*>(:result));
diff --git a/pkg/front_end/testcases/general/bug33298.dart.weak.expect b/pkg/front_end/testcases/general/bug33298.dart.weak.expect
index dc41d48..aec468a 100644
--- a/pkg/front_end/testcases/general/bug33298.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug33298.dart.weak.expect
@@ -62,15 +62,15 @@
 }
 static method test() → dynamic {
   self::A* a = new self::A::•();
-  core::List<core::String*>* list1 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(a.{self::A::call}).{core::Iterable::toList}();
-  core::List<core::String*>* list2 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(let final self::A* #t1 = a in #t1.==(null) ?{(core::String*) →* core::String*} null : #t1.{self::A::call}).{core::Iterable::toList}();
+  core::List<core::String*>* list1 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(a.{self::A::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+  core::List<core::String*>* list2 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(let final self::A* #t1 = a in #t1 == null ?{(core::String*) →* core::String*} null : #t1.{self::A::call}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
   self::B<core::String*>* b = new self::B::•<core::String*>();
-  core::List<core::String*>* list3 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(b.{self::B::call}).{core::Iterable::toList}();
-  core::List<core::String*>* list4 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(let final self::B<core::String*>* #t2 = b in #t2.==(null) ?{(core::String*) →* core::String*} null : #t2.{self::B::call}).{core::Iterable::toList}();
+  core::List<core::String*>* list3 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(b.{self::B::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+  core::List<core::String*>* list4 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(let final self::B<core::String*>* #t2 = b in #t2 == null ?{(core::String*) →* core::String*} null : #t2.{self::B::call}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
   self::C* c = new self::C::•();
-  core::List<core::String*>* list5 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(c.{self::C::call}<core::String*>).{core::Iterable::toList}();
+  core::List<core::String*>* list5 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(c.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}<core::String*>){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
   core::List<core::String*>* list6 = <core::String*>["a", "b", "c"].{core::Iterable::map}<dynamic>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
-                                           ^" in (let final self::C* #t4 = c in #t4.==(null) ?{<T extends core::Object* = dynamic>(T*) →* T*} null : #t4.{self::C::call}) as{TypeError} (core::String*) →* dynamic).{core::Iterable::toList}() as{TypeError} core::List<core::String*>*;
+                                           ^" in (let final self::C* #t4 = c in #t4 == null ?{<T extends core::Object* = dynamic>(T*) →* T*} null : #t4.{self::C::call}) as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*} as{TypeError} core::List<core::String*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect
index 733a698..842cb5d 100644
--- a/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect
@@ -62,15 +62,15 @@
 }
 static method test() → dynamic {
   self::A* a = new self::A::•();
-  core::List<core::String*>* list1 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(a.{self::A::call}).{core::Iterable::toList}();
-  core::List<core::String*>* list2 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(let final self::A* #t1 = a in #t1.==(null) ?{(core::String*) →* core::String*} null : #t1.{self::A::call}).{core::Iterable::toList}();
+  core::List<core::String*>* list1 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(a.{self::A::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+  core::List<core::String*>* list2 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(let final self::A* #t1 = a in #t1 == null ?{(core::String*) →* core::String*} null : #t1.{self::A::call}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
   self::B<core::String*>* b = new self::B::•<core::String*>();
-  core::List<core::String*>* list3 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(b.{self::B::call}).{core::Iterable::toList}();
-  core::List<core::String*>* list4 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(let final self::B<core::String*>* #t2 = b in #t2.==(null) ?{(core::String*) →* core::String*} null : #t2.{self::B::call}).{core::Iterable::toList}();
+  core::List<core::String*>* list3 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(b.{self::B::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+  core::List<core::String*>* list4 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(let final self::B<core::String*>* #t2 = b in #t2 == null ?{(core::String*) →* core::String*} null : #t2.{self::B::call}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
   self::C* c = new self::C::•();
-  core::List<core::String*>* list5 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(c.{self::C::call}<core::String*>).{core::Iterable::toList}();
+  core::List<core::String*>* list5 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(c.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}<core::String*>){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
   core::List<core::String*>* list6 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<dynamic>(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
-                                           ^" in (let final self::C* #t4 = c in #t4.==(null) ?{<T extends core::Object* = dynamic>(T*) →* T*} null : #t4.{self::C::call}) as{TypeError} (core::String*) →* dynamic).{core::Iterable::toList}() as{TypeError} core::List<core::String*>*;
+                                           ^" in (let final self::C* #t4 = c in #t4 == null ?{<T extends core::Object* = dynamic>(T*) →* T*} null : #t4.{self::C::call}) as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*} as{TypeError} core::List<core::String*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug35470.dart.weak.expect b/pkg/front_end/testcases/general/bug35470.dart.weak.expect
index 42009f8..d840067 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.weak.expect
@@ -24,6 +24,6 @@
     ;
 }
 static method bar(self::B* b) → dynamic {
-  b.{self::A::foo}<dynamic>();
+  b.{self::A::foo}<dynamic>(){() →* dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug35470.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug35470.dart.weak.transformed.expect
index 42009f8..d840067 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.weak.transformed.expect
@@ -24,6 +24,6 @@
     ;
 }
 static method bar(self::B* b) → dynamic {
-  b.{self::A::foo}<dynamic>();
+  b.{self::A::foo}<dynamic>(){() →* dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug37476.dart.weak.expect b/pkg/front_end/testcases/general/bug37476.dart.weak.expect
index bd16297..6cc98ca 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.weak.expect
@@ -44,14 +44,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}(){() →* <S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
+    self::b.{self::B::foo}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general/bug37476.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug37476.dart.weak.transformed.expect
index bd16297..6cc98ca 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.weak.transformed.expect
@@ -44,14 +44,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}(){() →* <S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
+    self::b.{self::B::foo}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general/call.dart.weak.expect b/pkg/front_end/testcases/general/call.dart.weak.expect
index 64836fb..bb3fe1b 100644
--- a/pkg/front_end/testcases/general/call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/call.dart.weak.expect
@@ -129,106 +129,106 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field (dynamic) →* dynamic closure = (dynamic x) → dynamic => x;
-static field dynamic int1 = self::closure.call(1);
-static field dynamic int2 = self::closure.call(1);
-static field dynamic int3 = self::closure.call.call(1);
-static field dynamic int4 = self::closure.call.call.call(1);
+static field dynamic int1 = self::closure(1){(dynamic) →* dynamic};
+static field dynamic int2 = self::closure(1){(dynamic) →* dynamic};
+static field dynamic int3 = self::closure.call(1){(dynamic) →* dynamic};
+static field dynamic int4 = self::closure.call.call(1){(dynamic) →* dynamic};
 static field self::Callable* callable = new self::Callable::•();
-static field dynamic string1 = self::callable.{self::Callable::call}(1);
-static field dynamic string2 = self::callable.{self::Callable::call}(1);
-static field dynamic string3 = self::callable.{self::Callable::call}.call(1);
-static field dynamic string4 = self::callable.{self::Callable::call}.call.call(1);
+static field dynamic string1 = self::callable.{self::Callable::call}(1){(dynamic) →* dynamic};
+static field dynamic string2 = self::callable.{self::Callable::call}(1){(dynamic) →* dynamic};
+static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
+static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
 static field self::CallableGetter* callableGetter = new self::CallableGetter::•();
 static field dynamic string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var string5 = callableGetter(1);
                             ^";
-static field dynamic string6 = let final self::CallableGetter* #t1 = self::callableGetter in let final core::int* #t2 = 1 in #t1.{self::CallableGetter::call}.call(#t2);
-static field dynamic string7 = self::callableGetter.{self::CallableGetter::call}.call(1);
-static field dynamic string8 = self::callableGetter.{self::CallableGetter::call}.call.call(1);
+static field dynamic string6 = let final self::CallableGetter* #t1 = self::callableGetter in let final core::int* #t2 = 1 in #t1.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t2);
+static field dynamic string7 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
+static field dynamic string8 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
 static field dynamic nothing1 = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/call.dart:68:23: Error: Too few positional arguments: 1 required, 0 given.
 var nothing1 = closure();
-                      ^" in self::closure.call();
+                      ^" in self::closure{<inapplicable>}.();
 static field dynamic nothing2 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/call.dart:69:28: Error: Too few positional arguments: 1 required, 0 given.
 var nothing2 = closure.call();
-                           ^" in self::closure.call();
+                           ^" in self::closure{<inapplicable>}.();
 static field dynamic nothing3 = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/call.dart:70:33: Error: Too few positional arguments: 1 required, 0 given.
 var nothing3 = closure.call.call();
-                                ^" in self::closure.call.call();
+                                ^" in self::closure.call{<inapplicable>}.();
 static field dynamic nothing4 = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/call.dart:71:38: Error: Too few positional arguments: 1 required, 0 given.
 var nothing4 = closure.call.call.call();
-                                     ^" in self::closure.call.call.call();
+                                     ^" in self::closure.call.call{<inapplicable>}.();
 static field dynamic nothing5 = let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/call.dart:73:24: Error: Too few positional arguments: 1 required, 0 given.
 var nothing5 = callable();
-                       ^" in self::callable.{self::Callable::call}();
+                       ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
 static field dynamic nothing6 = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/call.dart:74:29: Error: Too few positional arguments: 1 required, 0 given.
 var nothing6 = callable.call();
-                            ^" in self::callable.{self::Callable::call}();
+                            ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
 static field dynamic nothing7 = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/call.dart:75:34: Error: Too few positional arguments: 1 required, 0 given.
 var nothing7 = callable.call.call();
-                                 ^" in self::callable.{self::Callable::call}.call();
+                                 ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
 static field dynamic nothing8 = let final Never* #t10 = invalid-expression "pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
 var nothing8 = callable.call.call.call();
-                                      ^" in self::callable.{self::Callable::call}.call.call();
+                                      ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
 static field dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var nothing9 = callableGetter();
                              ^";
-static field dynamic nothing10 = self::callableGetter.{self::CallableGetter::call}.call();
-static field dynamic nothing11 = self::callableGetter.{self::CallableGetter::call}.call();
-static field dynamic nothing12 = self::callableGetter.{self::CallableGetter::call}.call.call();
+static field dynamic nothing10 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
+static field dynamic nothing11 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
+static field dynamic nothing12 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call();
 static method main() → dynamic {
   (dynamic) →* dynamic closure = (dynamic x) → dynamic => x;
-  dynamic int1 = closure.call(1);
-  dynamic int2 = closure.call(1);
-  dynamic int3 = closure.call.call(1);
-  dynamic int4 = closure.call.call.call(1);
+  dynamic int1 = closure(1){(dynamic) →* dynamic};
+  dynamic int2 = closure(1){(dynamic) →* dynamic};
+  dynamic int3 = closure.call(1){(dynamic) →* dynamic};
+  dynamic int4 = closure.call.call(1){(dynamic) →* dynamic};
   self::Callable* callable = new self::Callable::•();
-  dynamic string1 = callable.{self::Callable::call}(1);
-  dynamic string2 = callable.{self::Callable::call}(1);
-  dynamic string3 = callable.{self::Callable::call}.call(1);
-  dynamic string4 = callable.{self::Callable::call}.call.call(1);
+  dynamic string1 = callable.{self::Callable::call}(1){(dynamic) →* dynamic};
+  dynamic string2 = callable.{self::Callable::call}(1){(dynamic) →* dynamic};
+  dynamic string3 = callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
+  dynamic string4 = callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
   self::CallableGetter* callableGetter = new self::CallableGetter::•();
   dynamic string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
   var string5 = callableGetter(1);
                               ^";
-  dynamic string6 = let final self::CallableGetter* #t11 = callableGetter in let final core::int* #t12 = 1 in #t11.{self::CallableGetter::call}.call(#t12);
-  dynamic string7 = callableGetter.{self::CallableGetter::call}.call(1);
-  dynamic string8 = callableGetter.{self::CallableGetter::call}.call.call(1);
+  dynamic string6 = let final self::CallableGetter* #t11 = callableGetter in let final core::int* #t12 = 1 in #t11.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t12);
+  dynamic string7 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
+  dynamic string8 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
   invalid-type nothing1 = let final Never* #t13 = invalid-expression "pkg/front_end/testcases/general/call.dart:34:25: Error: Too few positional arguments: 1 required, 0 given.
   var nothing1 = closure();
-                        ^" in closure.call();
+                        ^" in closure{<inapplicable>}.();
   invalid-type nothing2 = let final Never* #t14 = invalid-expression "pkg/front_end/testcases/general/call.dart:35:30: Error: Too few positional arguments: 1 required, 0 given.
   var nothing2 = closure.call();
-                             ^" in closure.call();
+                             ^" in closure{<inapplicable>}.();
   invalid-type nothing3 = let final Never* #t15 = invalid-expression "pkg/front_end/testcases/general/call.dart:36:35: Error: Too few positional arguments: 1 required, 0 given.
   var nothing3 = closure.call.call();
-                                  ^" in closure.call.call();
+                                  ^" in closure.call{<inapplicable>}.();
   invalid-type nothing4 = let final Never* #t16 = invalid-expression "pkg/front_end/testcases/general/call.dart:37:40: Error: Too few positional arguments: 1 required, 0 given.
   var nothing4 = closure.call.call.call();
-                                       ^" in closure.call.call.call();
+                                       ^" in closure.call.call{<inapplicable>}.();
   invalid-type nothing5 = let final Never* #t17 = invalid-expression "pkg/front_end/testcases/general/call.dart:39:26: Error: Too few positional arguments: 1 required, 0 given.
   var nothing5 = callable();
-                         ^" in callable.{self::Callable::call}();
+                         ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
   invalid-type nothing6 = let final Never* #t18 = invalid-expression "pkg/front_end/testcases/general/call.dart:40:31: Error: Too few positional arguments: 1 required, 0 given.
   var nothing6 = callable.call();
-                              ^" in callable.{self::Callable::call}();
+                              ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
   invalid-type nothing7 = let final Never* #t19 = invalid-expression "pkg/front_end/testcases/general/call.dart:41:36: Error: Too few positional arguments: 1 required, 0 given.
   var nothing7 = callable.call.call();
-                                   ^" in callable.{self::Callable::call}.call();
+                                   ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
   invalid-type nothing8 = let final Never* #t20 = invalid-expression "pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
   var nothing8 = callable.call.call.call();
-                                        ^" in callable.{self::Callable::call}.call.call();
+                                        ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
   dynamic nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
   var nothing9 = callableGetter();
                                ^";
-  dynamic nothing10 = callableGetter.{self::CallableGetter::call}.call();
-  dynamic nothing11 = callableGetter.{self::CallableGetter::call}.call();
-  dynamic nothing12 = callableGetter.{self::CallableGetter::call}.call.call();
+  dynamic nothing10 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
+  dynamic nothing11 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
+  dynamic nothing12 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call();
 }
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect
index c56828e..f7d01d7 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect
@@ -19,11 +19,11 @@
     : self::Class1::field = field, super core::Object::•()
     ;
   method method() → dynamic {
-    dynamic v1 = this.{self::Class1::field}.call();
-    dynamic v2 = let final core::int* #t1 = 0 in this.{self::Class1::field}.call(#t1);
-    self::Class1::T* v3 = this.{self::Class1::field}.call;
-    dynamic v4 = this.{self::Class1::field}.call();
-    dynamic v5 = this.{self::Class1::field}.call(0);
+    dynamic v1 = this.{self::Class1::field}{self::Class1::T*}();
+    dynamic v2 = let final core::int* #t1 = 0 in this.{self::Class1::field}{self::Class1::T*}(#t1);
+    self::Class1::T* v3 = this.{self::Class1::field}{self::Class1::T*}.call;
+    dynamic v4 = this.{self::Class1::field}{self::Class1::T*}();
+    dynamic v5 = this.{self::Class1::field}{self::Class1::T*}(0);
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -44,13 +44,13 @@
   method method() → dynamic {
     invalid-type v1 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:25:19: Error: Too few positional arguments: 1 required, 0 given.
     var v1 = field(); // error
-                  ^" in this.{self::Class2::field}.call();
-    core::String* v2 = let final core::int* #t3 = 0 in this.{self::Class2::field}.call(#t3);
-    self::Class2::T* v3 = this.{self::Class2::field}.call;
+                  ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
+    core::String* v2 = let final core::int* #t3 = 0 in this.{self::Class2::field}{self::Class2::T*}(#t3){(core::int*) →* core::String*};
+    self::Class2::T* v3 = this.{self::Class2::field}{self::Class2::T*}.call;
     invalid-type v4 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:28:24: Error: Too few positional arguments: 1 required, 0 given.
     var v4 = field.call(); // error
-                       ^" in this.{self::Class2::field}.call();
-    core::String* v5 = this.{self::Class2::field}.call(0);
+                       ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
+    core::String* v5 = this.{self::Class2::field}{self::Class2::T*}(0){(core::int*) →* core::String*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect
index f7b5cfc..cd3a7b7 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect
@@ -19,11 +19,11 @@
     : self::Class1::field = field, super core::Object::•()
     ;
   method method() → dynamic {
-    dynamic v1 = this.{self::Class1::field}.call();
-    dynamic v2 = let final core::int* #t1 = 0 in this.{self::Class1::field}.call(#t1);
-    self::Class1::T* v3 = this.{self::Class1::field}.call;
-    dynamic v4 = this.{self::Class1::field}.call();
-    dynamic v5 = this.{self::Class1::field}.call(0);
+    dynamic v1 = this.{self::Class1::field}{self::Class1::T*}();
+    dynamic v2 = let final core::int* #t1 = 0 in this.{self::Class1::field}{self::Class1::T*}(#t1);
+    self::Class1::T* v3 = this.{self::Class1::field}{self::Class1::T*}.call;
+    dynamic v4 = this.{self::Class1::field}{self::Class1::T*}();
+    dynamic v5 = this.{self::Class1::field}{self::Class1::T*}(0);
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -44,13 +44,13 @@
   method method() → dynamic {
     invalid-type v1 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:25:19: Error: Too few positional arguments: 1 required, 0 given.
     var v1 = field(); // error
-                  ^" in this.{self::Class2::field}.call();
-    core::String* v2 = let final core::int* #t3 = 0 in this.{self::Class2::field}.call(#t3);
-    self::Class2::T* v3 = this.{self::Class2::field}.call;
+                  ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
+    core::String* v2 = let final core::int* #t3 = 0 in this.{self::Class2::field}{self::Class2::T*}(#t3){(core::int*) →* core::String*};
+    self::Class2::T* v3 = this.{self::Class2::field}{self::Class2::T*}.call;
     invalid-type v4 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:28:24: Error: Too few positional arguments: 1 required, 0 given.
     var v4 = field.call(); // error
-                       ^" in this.{self::Class2::field}.call();
-    core::String* v5 = this.{self::Class2::field}.call(0);
+                       ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
+    core::String* v5 = this.{self::Class2::field}{self::Class2::T*}(0){(core::int*) →* core::String*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/candidate_found.dart.weak.expect b/pkg/front_end/testcases/general/candidate_found.dart.weak.expect
index 1d6442b..b1e197c 100644
--- a/pkg/front_end/testcases/general/candidate_found.dart.weak.expect
+++ b/pkg/front_end/testcases/general/candidate_found.dart.weak.expect
@@ -80,6 +80,6 @@
                    ^";
   let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:21:24: Error: Too few positional arguments: 1 required, 0 given.
   (null as Fisk).method();
-                       ^" in (null as self::Fisk*).{self::Fisk::method}();
+                       ^" in (null as self::Fisk*).{self::Fisk::method}{<inapplicable>}.(){() →* invalid-type};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/cascade.dart.weak.expect b/pkg/front_end/testcases/general/cascade.dart.weak.expect
index 11c0d89..bfd70cc 100644
--- a/pkg/front_end/testcases/general/cascade.dart.weak.expect
+++ b/pkg/front_end/testcases/general/cascade.dart.weak.expect
@@ -27,21 +27,21 @@
 
 static method main() → dynamic {
   core::List<core::int*>* list = let final core::List<core::int*>* #t1 = <core::int*>[1] in block {
-    #t1.{core::List::add}(2);
-    #t1.{core::List::add}(3);
-    #t1.{core::List::addAll}(<core::int*>[4, 5]);
+    #t1.{core::List::add}(2){(core::int*) →* void};
+    #t1.{core::List::add}(3){(core::int*) →* void};
+    #t1.{core::List::addAll}(<core::int*>[4, 5]){(core::Iterable<core::int*>*) →* void};
   } =>#t1;
   core::print(list);
   let final core::List<core::int*>* #t2 = list in block {
-    #t2.{core::List::add}(2);
-    #t2.{core::List::length};
+    #t2.{core::List::add}(2){(core::int*) →* void};
+    #t2.{core::List::length}{core::int*};
     #t2.{core::List::length} = 0;
   } =>#t2;
   core::print(list);
   let final core::List<core::int*>* #t3 = list in block {
-    #t3.{core::List::add}(2);
-    #t3.{core::List::[]}(0);
-    #t3.{core::List::[]=}(0, 87);
+    #t3.{core::List::add}(2){(core::int*) →* void};
+    #t3.{core::List::[]}(0){(core::int*) →* core::int*};
+    #t3.{core::List::[]=}(0, 87){(core::int*, core::int*) →* void};
   } =>#t3;
   core::print(list);
   list = let final core::List<core::int*>* #t4 = <core::int*>[let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
@@ -51,15 +51,15 @@
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:28:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^".{core::Object::toString}();
+            ^^^^".{core::Object::toString}(){() →* core::String*};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
-           ^".{core::Object::toString}();
+           ^".{core::Object::toString}(){() →* core::String*};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:30:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..[0].last.toString();
-          ^^^^".{core::Object::toString}();
+          ^^^^".{core::Object::toString}(){() →* core::String*};
   } =>#t4;
   core::print(list);
 }
diff --git a/pkg/front_end/testcases/general/cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/general/cascade.dart.weak.transformed.expect
index 92c7e4c..5ae4b4c 100644
--- a/pkg/front_end/testcases/general/cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/cascade.dart.weak.transformed.expect
@@ -27,21 +27,21 @@
 
 static method main() → dynamic {
   core::List<core::int*>* list = let final core::List<core::int*>* #t1 = core::_GrowableList::_literal1<core::int*>(1) in block {
-    #t1.{core::List::add}(2);
-    #t1.{core::List::add}(3);
-    #t1.{core::List::addAll}(core::_GrowableList::_literal2<core::int*>(4, 5));
+    #t1.{core::List::add}(2){(core::int*) →* void};
+    #t1.{core::List::add}(3){(core::int*) →* void};
+    #t1.{core::List::addAll}(core::_GrowableList::_literal2<core::int*>(4, 5)){(core::Iterable<core::int*>*) →* void};
   } =>#t1;
   core::print(list);
   let final core::List<core::int*>* #t2 = list in block {
-    #t2.{core::List::add}(2);
-    #t2.{core::List::length};
+    #t2.{core::List::add}(2){(core::int*) →* void};
+    #t2.{core::List::length}{core::int*};
     #t2.{core::List::length} = 0;
   } =>#t2;
   core::print(list);
   let final core::List<core::int*>* #t3 = list in block {
-    #t3.{core::List::add}(2);
-    #t3.{core::List::[]}(0);
-    #t3.{core::List::[]=}(0, 87);
+    #t3.{core::List::add}(2){(core::int*) →* void};
+    #t3.{core::List::[]}(0){(core::int*) →* core::int*};
+    #t3.{core::List::[]=}(0, 87){(core::int*, core::int*) →* void};
   } =>#t3;
   core::print(list);
   list = let final core::List<core::int*>* #t4 = core::_GrowableList::_literal1<core::int*>(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
@@ -51,15 +51,15 @@
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:28:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^".{core::Object::toString}();
+            ^^^^".{core::Object::toString}(){() →* core::String*};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
-           ^".{core::Object::toString}();
+           ^".{core::Object::toString}(){() →* core::String*};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:30:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..[0].last.toString();
-          ^^^^".{core::Object::toString}();
+          ^^^^".{core::Object::toString}(){() →* core::String*};
   } =>#t4;
   core::print(list);
 }
diff --git a/pkg/front_end/testcases/general/cascade_context.dart.weak.expect b/pkg/front_end/testcases/general/cascade_context.dart.weak.expect
index 309a682..11f2c0b 100644
--- a/pkg/front_end/testcases/general/cascade_context.dart.weak.expect
+++ b/pkg/front_end/testcases/general/cascade_context.dart.weak.expect
@@ -7,11 +7,11 @@
 static method test() → dynamic {
   core::int* v1 = self::f<core::int*>();
   core::int* v2 = let final core::int* #t1 = self::f<core::int*>() in block {
-    #t1.{core::int::isEven};
+    #t1.{core::int::isEven}{core::bool*};
   } =>#t1;
   core::int* v3 = let final core::int* #t2 = self::f<core::int*>() in block {
-    #t2.{core::int::isEven};
-    #t2.{core::int::isEven};
+    #t2.{core::int::isEven}{core::bool*};
+    #t2.{core::int::isEven}{core::bool*};
   } =>#t2;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/cascade_context.dart.weak.transformed.expect b/pkg/front_end/testcases/general/cascade_context.dart.weak.transformed.expect
index 309a682..11f2c0b 100644
--- a/pkg/front_end/testcases/general/cascade_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/cascade_context.dart.weak.transformed.expect
@@ -7,11 +7,11 @@
 static method test() → dynamic {
   core::int* v1 = self::f<core::int*>();
   core::int* v2 = let final core::int* #t1 = self::f<core::int*>() in block {
-    #t1.{core::int::isEven};
+    #t1.{core::int::isEven}{core::bool*};
   } =>#t1;
   core::int* v3 = let final core::int* #t2 = self::f<core::int*>() in block {
-    #t2.{core::int::isEven};
-    #t2.{core::int::isEven};
+    #t2.{core::int::isEven}{core::bool*};
+    #t2.{core::int::isEven}{core::bool*};
   } =>#t2;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.expect
index e27d859b..d298cb9 100644
--- a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  core::print((let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x).{core::num::+}(1));
+  core::print((let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x).{core::num::+}(1){(core::num*) →* core::int*});
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.transformed.expect
index bb01419..6962eb7 100644
--- a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  core::print((let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x).{core::num::+}(1));
+  core::print((let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x).{core::num::+}(1){(core::num*) →* core::int*});
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/classes.dart.weak.expect b/pkg/front_end/testcases/general/classes.dart.weak.expect
index fd0d329..288e237 100644
--- a/pkg/front_end/testcases/general/classes.dart.weak.expect
+++ b/pkg/front_end/testcases/general/classes.dart.weak.expect
@@ -9,9 +9,9 @@
     : self::A::y = y, self::A::x = 42, super core::Object::•()
     ;
   method method() → dynamic {
-    core::print("A.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
+    core::print("A.method x: ${this.{self::A::x}{core::int*}} y: ${this.{self::A::y}{core::int*}}");
     core::print(this);
-    core::print(this.{self::A::runtimeType});
+    core::print(this.{self::A::runtimeType}{core::Type*});
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -29,13 +29,13 @@
     : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
-    core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
+    core::print("B.method x: ${this.{self::A::x}{core::int*}} y: ${this.{self::A::y}{core::int*}}");
     super.{self::A::method}();
   }
 }
 static method main() → dynamic {
   self::A* a = new self::A::•(87);
   self::B* b = new self::B::•(117);
-  a.{self::A::method}();
-  b.{self::B::method}();
+  a.{self::A::method}(){() →* dynamic};
+  b.{self::B::method}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/classes.dart.weak.transformed.expect b/pkg/front_end/testcases/general/classes.dart.weak.transformed.expect
index fd0d329..288e237 100644
--- a/pkg/front_end/testcases/general/classes.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/classes.dart.weak.transformed.expect
@@ -9,9 +9,9 @@
     : self::A::y = y, self::A::x = 42, super core::Object::•()
     ;
   method method() → dynamic {
-    core::print("A.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
+    core::print("A.method x: ${this.{self::A::x}{core::int*}} y: ${this.{self::A::y}{core::int*}}");
     core::print(this);
-    core::print(this.{self::A::runtimeType});
+    core::print(this.{self::A::runtimeType}{core::Type*});
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -29,13 +29,13 @@
     : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
-    core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
+    core::print("B.method x: ${this.{self::A::x}{core::int*}} y: ${this.{self::A::y}{core::int*}}");
     super.{self::A::method}();
   }
 }
 static method main() → dynamic {
   self::A* a = new self::A::•(87);
   self::B* b = new self::B::•(117);
-  a.{self::A::method}();
-  b.{self::B::method}();
+  a.{self::A::method}(){() →* dynamic};
+  b.{self::B::method}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/closure.dart.weak.expect b/pkg/front_end/testcases/general/closure.dart.weak.expect
index a4c2d9f..2d530e8 100644
--- a/pkg/front_end/testcases/general/closure.dart.weak.expect
+++ b/pkg/front_end/testcases/general/closure.dart.weak.expect
@@ -34,7 +34,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method useCallback(dynamic callback) → dynamic {
-  dynamic _ = callback.call();
+  dynamic _ = callback{dynamic}.call();
 }
 static method main() → dynamic {
   dynamic x;
@@ -43,5 +43,5 @@
     return new self::Foo::•();
   }
   self::useCallback(inner);
-  self::Bar* _ = inner.call().{self::Foo::_field};
+  self::Bar* _ = inner(){() →* self::Foo*}.{self::Foo::_field}{self::Bar*};
 }
diff --git a/pkg/front_end/testcases/general/closure.dart.weak.transformed.expect b/pkg/front_end/testcases/general/closure.dart.weak.transformed.expect
index a4c2d9f..2d530e8 100644
--- a/pkg/front_end/testcases/general/closure.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/closure.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method useCallback(dynamic callback) → dynamic {
-  dynamic _ = callback.call();
+  dynamic _ = callback{dynamic}.call();
 }
 static method main() → dynamic {
   dynamic x;
@@ -43,5 +43,5 @@
     return new self::Foo::•();
   }
   self::useCallback(inner);
-  self::Bar* _ = inner.call().{self::Foo::_field};
+  self::Bar* _ = inner(){() →* self::Foo*}.{self::Foo::_field}{self::Bar*};
 }
diff --git a/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.expect b/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.expect
index c425212..19b1b00 100644
--- a/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.expect
+++ b/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.expect
@@ -32,7 +32,7 @@
 static method main() → dynamic {
   core::Map<core::int*, self::B*>* map = <core::int*, self::B*>{0: new self::B::•()};
   try {
-    let final core::Map<core::int*, self::B*>* #t1 = map in let final core::int* #t2 = 0 in #t1.{core::Map::[]=}(#t2, #t1.{core::Map::[]}(#t2).{self::B::+}(new self::B::•()) as{TypeError} self::B*);
+    let final core::Map<core::int*, self::B*>* #t1 = map in let final core::int* #t2 = 0 in #t1.{core::Map::[]=}(#t2, #t1.{core::Map::[]}(#t2){(core::Object*) →* self::B*}.{self::B::+}(new self::B::•()){(self::B*) →* self::A*} as{TypeError} self::B*){(core::int*, self::B*) →* void};
     throw "Expected type error";
   }
   on dynamic catch(final dynamic _) {
diff --git a/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.transformed.expect b/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.transformed.expect
index 2c3a4c0..f8d6d80 100644
--- a/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.transformed.expect
@@ -32,7 +32,7 @@
 static method main() → dynamic {
   core::Map<core::int*, self::B*>* map = <core::int*, self::B*>{0: new self::B::•()};
   try {
-    let final core::Map<core::int*, self::B*>* #t1 = map in let final core::int* #t2 = 0 in #t1.{core::Map::[]=}(#t2, #t1.{core::Map::[]}(#t2).{self::B::+}(new self::B::•()) as{TypeError} self::B*);
+    let final core::Map<core::int*, self::B*>* #t1 = map in let final core::int* #t2 = 0 in #t1.{core::Map::[]=}(#t2, #t1.{core::Map::[]}(#t2){(core::Object*) →* self::B*}.{self::B::+}(new self::B::•()){(self::B*) →* self::A*} as{TypeError} self::B*){(core::int*, self::B*) →* void};
     throw "Expected type error";
   }
   on dynamic catch(final dynamic _) {
diff --git a/pkg/front_end/testcases/general/constant_truncate.dart.weak.expect b/pkg/front_end/testcases/general/constant_truncate.dart.weak.expect
index c07b061..f87f7ba 100644
--- a/pkg/front_end/testcases/general/constant_truncate.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constant_truncate.dart.weak.expect
@@ -344,37 +344,37 @@
 static method main() → dynamic {
   self::test(0, 0, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
   self::test(0.0, 0, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(), 0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
   self::test(#C2, 0, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
   self::test(#C3, 0, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
   self::test(#C4, 0, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
   self::test(0, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
   self::test(0.0, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(), 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
   self::test(#C2, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
   self::test(#C3, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
   self::test(#C4, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(0, 0.0.{core::double::unary-}(), () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0, 0.0.{core::double::unary-}(), () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(), 0.0.{core::double::unary-}(), () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C2, 0.0.{core::double::unary-}(), () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C3, 0.0.{core::double::unary-}(), () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C4, 0.0.{core::double::unary-}(), () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
   self::test(0, #C2, () → core::int* => invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.");
   self::test(0.0, #C2, () → core::int* => invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.");
-  self::test(0.0.{core::double::unary-}(), #C2, () → core::int* => invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.");
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C2, () → core::int* => invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.");
   self::test(#C2, #C2, () → core::int* => invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.");
   self::test(#C3, #C2, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.");
   self::test(#C4, #C2, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.");
   self::test(0, #C3, () → core::int* => #C1);
   self::test(0.0, #C3, () → core::int* => #C1);
-  self::test(0.0.{core::double::unary-}(), #C3, () → core::int* => #C1);
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C3, () → core::int* => #C1);
   self::test(#C2, #C3, () → core::int* => invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.");
   self::test(#C3, #C3, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.");
   self::test(#C4, #C3, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.");
   self::test(0, #C4, () → core::int* => #C1);
   self::test(0.0, #C4, () → core::int* => #C1);
-  self::test(0.0.{core::double::unary-}(), #C4, () → core::int* => #C1);
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C4, () → core::int* => #C1);
   self::test(#C2, #C4, () → core::int* => invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.");
   self::test(#C3, #C4, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.");
   self::test(#C4, #C4, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.");
@@ -382,7 +382,7 @@
 static method test(core::num* a, core::num* b, () →* core::num* f) → void {
   core::num* result;
   try {
-    result = a.{core::num::~/}(b);
+    result = a.{core::num::~/}(b){(core::num*) →* core::int*};
     core::print("${a} ~/ ${b} = ${result}");
   }
   on dynamic catch(final dynamic e) {
@@ -390,16 +390,16 @@
     self::throws(f);
     return;
   }
-  self::expect(f.call(), result);
+  self::expect(f(){() →* core::num*}, result);
 }
 static method expect(dynamic expected, dynamic actual) → void {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Expected ${expected}, actual ${actual}";
   }
 }
 static method throws(() →* core::num* f) → void {
   try {
-    f.call();
+    f(){() →* core::num*};
   }
   on dynamic catch(final dynamic e) {
     return;
diff --git a/pkg/front_end/testcases/general/constant_truncate.dart.weak.outline.expect b/pkg/front_end/testcases/general/constant_truncate.dart.weak.outline.expect
index 0dde286..ddc3a1d 100644
--- a/pkg/front_end/testcases/general/constant_truncate.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constant_truncate.dart.weak.outline.expect
@@ -2,42 +2,42 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* a0 = 0.{core::num::~/}(0);
-static const field core::int* a1 = 0.0.{core::double::~/}(0);
-static const field core::int* a2 = 0.0.{core::double::unary-}().{core::double::~/}(0);
-static const field core::int* a3 = core::double::nan.{core::double::~/}(0);
-static const field core::int* a4 = core::double::infinity.{core::double::~/}(0);
-static const field core::int* a5 = core::double::negativeInfinity.{core::double::~/}(0);
-static const field core::int* b0 = 0.{core::num::~/}(0.0);
-static const field core::int* b1 = 0.0.{core::double::~/}(0.0);
-static const field core::int* b2 = 0.0.{core::double::unary-}().{core::double::~/}(0.0);
-static const field core::int* b3 = core::double::nan.{core::double::~/}(0.0);
-static const field core::int* b4 = core::double::infinity.{core::double::~/}(0.0);
-static const field core::int* b5 = core::double::negativeInfinity.{core::double::~/}(0.0);
-static const field core::int* c0 = 0.{core::num::~/}(0.0.{core::double::unary-}());
-static const field core::int* c1 = 0.0.{core::double::~/}(0.0.{core::double::unary-}());
-static const field core::int* c2 = 0.0.{core::double::unary-}().{core::double::~/}(0.0.{core::double::unary-}());
-static const field core::int* c3 = core::double::nan.{core::double::~/}(0.0.{core::double::unary-}());
-static const field core::int* c4 = core::double::infinity.{core::double::~/}(0.0.{core::double::unary-}());
-static const field core::int* c5 = core::double::negativeInfinity.{core::double::~/}(0.0.{core::double::unary-}());
-static const field core::int* d0 = 0.{core::num::~/}(core::double::nan);
-static const field core::int* d1 = 0.0.{core::double::~/}(core::double::nan);
-static const field core::int* d2 = 0.0.{core::double::unary-}().{core::double::~/}(core::double::nan);
-static const field core::int* d3 = core::double::nan.{core::double::~/}(core::double::nan);
-static const field core::int* d4 = core::double::infinity.{core::double::~/}(core::double::nan);
-static const field core::int* d5 = core::double::negativeInfinity.{core::double::~/}(core::double::nan);
-static const field core::int* e0 = 0.{core::num::~/}(core::double::infinity);
-static const field core::int* e1 = 0.0.{core::double::~/}(core::double::infinity);
-static const field core::int* e2 = 0.0.{core::double::unary-}().{core::double::~/}(core::double::infinity);
-static const field core::int* e3 = core::double::nan.{core::double::~/}(core::double::infinity);
-static const field core::int* e4 = core::double::infinity.{core::double::~/}(core::double::infinity);
-static const field core::int* e5 = core::double::negativeInfinity.{core::double::~/}(core::double::infinity);
-static const field core::int* f0 = 0.{core::num::~/}(core::double::negativeInfinity);
-static const field core::int* f1 = 0.0.{core::double::~/}(core::double::negativeInfinity);
-static const field core::int* f2 = 0.0.{core::double::unary-}().{core::double::~/}(core::double::negativeInfinity);
-static const field core::int* f3 = core::double::nan.{core::double::~/}(core::double::negativeInfinity);
-static const field core::int* f4 = core::double::infinity.{core::double::~/}(core::double::negativeInfinity);
-static const field core::int* f5 = core::double::negativeInfinity.{core::double::~/}(core::double::negativeInfinity);
+static const field core::int* a0 = 0.{core::num::~/}(0){(core::num*) →* core::int*};
+static const field core::int* a1 = 0.0.{core::double::~/}(0){(core::num*) →* core::int*};
+static const field core::int* a2 = 0.0.{core::double::unary-}(){() →* core::double*}.{core::double::~/}(0){(core::num*) →* core::int*};
+static const field core::int* a3 = core::double::nan.{core::double::~/}(0){(core::num*) →* core::int*};
+static const field core::int* a4 = core::double::infinity.{core::double::~/}(0){(core::num*) →* core::int*};
+static const field core::int* a5 = core::double::negativeInfinity.{core::double::~/}(0){(core::num*) →* core::int*};
+static const field core::int* b0 = 0.{core::num::~/}(0.0){(core::num*) →* core::int*};
+static const field core::int* b1 = 0.0.{core::double::~/}(0.0){(core::num*) →* core::int*};
+static const field core::int* b2 = 0.0.{core::double::unary-}(){() →* core::double*}.{core::double::~/}(0.0){(core::num*) →* core::int*};
+static const field core::int* b3 = core::double::nan.{core::double::~/}(0.0){(core::num*) →* core::int*};
+static const field core::int* b4 = core::double::infinity.{core::double::~/}(0.0){(core::num*) →* core::int*};
+static const field core::int* b5 = core::double::negativeInfinity.{core::double::~/}(0.0){(core::num*) →* core::int*};
+static const field core::int* c0 = 0.{core::num::~/}(0.0.{core::double::unary-}(){() →* core::double*}){(core::num*) →* core::int*};
+static const field core::int* c1 = 0.0.{core::double::~/}(0.0.{core::double::unary-}(){() →* core::double*}){(core::num*) →* core::int*};
+static const field core::int* c2 = 0.0.{core::double::unary-}(){() →* core::double*}.{core::double::~/}(0.0.{core::double::unary-}(){() →* core::double*}){(core::num*) →* core::int*};
+static const field core::int* c3 = core::double::nan.{core::double::~/}(0.0.{core::double::unary-}(){() →* core::double*}){(core::num*) →* core::int*};
+static const field core::int* c4 = core::double::infinity.{core::double::~/}(0.0.{core::double::unary-}(){() →* core::double*}){(core::num*) →* core::int*};
+static const field core::int* c5 = core::double::negativeInfinity.{core::double::~/}(0.0.{core::double::unary-}(){() →* core::double*}){(core::num*) →* core::int*};
+static const field core::int* d0 = 0.{core::num::~/}(core::double::nan){(core::num*) →* core::int*};
+static const field core::int* d1 = 0.0.{core::double::~/}(core::double::nan){(core::num*) →* core::int*};
+static const field core::int* d2 = 0.0.{core::double::unary-}(){() →* core::double*}.{core::double::~/}(core::double::nan){(core::num*) →* core::int*};
+static const field core::int* d3 = core::double::nan.{core::double::~/}(core::double::nan){(core::num*) →* core::int*};
+static const field core::int* d4 = core::double::infinity.{core::double::~/}(core::double::nan){(core::num*) →* core::int*};
+static const field core::int* d5 = core::double::negativeInfinity.{core::double::~/}(core::double::nan){(core::num*) →* core::int*};
+static const field core::int* e0 = 0.{core::num::~/}(core::double::infinity){(core::num*) →* core::int*};
+static const field core::int* e1 = 0.0.{core::double::~/}(core::double::infinity){(core::num*) →* core::int*};
+static const field core::int* e2 = 0.0.{core::double::unary-}(){() →* core::double*}.{core::double::~/}(core::double::infinity){(core::num*) →* core::int*};
+static const field core::int* e3 = core::double::nan.{core::double::~/}(core::double::infinity){(core::num*) →* core::int*};
+static const field core::int* e4 = core::double::infinity.{core::double::~/}(core::double::infinity){(core::num*) →* core::int*};
+static const field core::int* e5 = core::double::negativeInfinity.{core::double::~/}(core::double::infinity){(core::num*) →* core::int*};
+static const field core::int* f0 = 0.{core::num::~/}(core::double::negativeInfinity){(core::num*) →* core::int*};
+static const field core::int* f1 = 0.0.{core::double::~/}(core::double::negativeInfinity){(core::num*) →* core::int*};
+static const field core::int* f2 = 0.0.{core::double::unary-}(){() →* core::double*}.{core::double::~/}(core::double::negativeInfinity){(core::num*) →* core::int*};
+static const field core::int* f3 = core::double::nan.{core::double::~/}(core::double::negativeInfinity){(core::num*) →* core::int*};
+static const field core::int* f4 = core::double::infinity.{core::double::~/}(core::double::negativeInfinity){(core::num*) →* core::int*};
+static const field core::int* f5 = core::double::negativeInfinity.{core::double::~/}(core::double::negativeInfinity){(core::num*) →* core::int*};
 static method main() → dynamic
   ;
 static method test(core::num* a, core::num* b, () →* core::num* f) → void
@@ -49,27 +49,27 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:7:12 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:7:12 -> DoubleConstant(-0.0)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:8:19 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:9:19 -> DoubleConstant(Infinity)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:10:19 -> DoubleConstant(-Infinity)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:14:12 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:14:12 -> DoubleConstant(-0.0)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:15:19 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:16:19 -> DoubleConstant(Infinity)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:17:19 -> DoubleConstant(-Infinity)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:19:17 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:20:19 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:21:12 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:21:20 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:19:17 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:20:19 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:21:12 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:21:20 -> DoubleConstant(-0.0)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:22:19 -> DoubleConstant(NaN)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:22:26 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:22:26 -> DoubleConstant(-0.0)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:23:19 -> DoubleConstant(Infinity)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:23:31 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:23:31 -> DoubleConstant(-0.0)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:24:19 -> DoubleConstant(-Infinity)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:24:39 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:24:39 -> DoubleConstant(-0.0)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:26:24 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:27:26 -> DoubleConstant(NaN)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:28:12 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:28:12 -> DoubleConstant(-0.0)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:28:27 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:29:19 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:29:33 -> DoubleConstant(NaN)
@@ -77,18 +77,18 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:30:38 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:31:19 -> DoubleConstant(-Infinity)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:31:46 -> DoubleConstant(NaN)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:33:14 -> IntConstant(0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:34:16 -> IntConstant(0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:35:17 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:33:14 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:34:16 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:35:17 -> IntConstant(0)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:36:19 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:36:33 -> DoubleConstant(Infinity)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:37:19 -> DoubleConstant(Infinity)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:37:38 -> DoubleConstant(Infinity)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:38:19 -> DoubleConstant(-Infinity)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:38:46 -> DoubleConstant(Infinity)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:40:14 -> IntConstant(0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:41:16 -> IntConstant(0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:42:17 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:40:14 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:41:16 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:42:17 -> IntConstant(0)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:43:19 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:43:33 -> DoubleConstant(-Infinity)
 Evaluated: StaticGet @ org-dartlang-testcase:///constant_truncate.dart:44:19 -> DoubleConstant(Infinity)
diff --git a/pkg/front_end/testcases/general/constant_truncate.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constant_truncate.dart.weak.transformed.expect
index dc0d52e..5bb1e01 100644
--- a/pkg/front_end/testcases/general/constant_truncate.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constant_truncate.dart.weak.transformed.expect
@@ -344,37 +344,37 @@
 static method main() → dynamic {
   self::test(0, 0, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
   self::test(0.0, 0, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(), 0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
   self::test(#C2, 0, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
   self::test(#C3, 0, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
   self::test(#C4, 0, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
   self::test(0, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
   self::test(0.0, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(), 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
   self::test(#C2, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
   self::test(#C3, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
   self::test(#C4, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(0, 0.0.{core::double::unary-}(), () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0, 0.0.{core::double::unary-}(), () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(), 0.0.{core::double::unary-}(), () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C2, 0.0.{core::double::unary-}(), () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C3, 0.0.{core::double::unary-}(), () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C4, 0.0.{core::double::unary-}(), () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
   self::test(0, #C2, () → core::int* => invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.");
   self::test(0.0, #C2, () → core::int* => invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.");
-  self::test(0.0.{core::double::unary-}(), #C2, () → core::int* => invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.");
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C2, () → core::int* => invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.");
   self::test(#C2, #C2, () → core::int* => invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.");
   self::test(#C3, #C2, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.");
   self::test(#C4, #C2, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.");
   self::test(0, #C3, () → core::int* => #C1);
   self::test(0.0, #C3, () → core::int* => #C1);
-  self::test(0.0.{core::double::unary-}(), #C3, () → core::int* => #C1);
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C3, () → core::int* => #C1);
   self::test(#C2, #C3, () → core::int* => invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.");
   self::test(#C3, #C3, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.");
   self::test(#C4, #C3, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.");
   self::test(0, #C4, () → core::int* => #C1);
   self::test(0.0, #C4, () → core::int* => #C1);
-  self::test(0.0.{core::double::unary-}(), #C4, () → core::int* => #C1);
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C4, () → core::int* => #C1);
   self::test(#C2, #C4, () → core::int* => invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.");
   self::test(#C3, #C4, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.");
   self::test(#C4, #C4, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.");
@@ -382,7 +382,7 @@
 static method test(core::num* a, core::num* b, () →* core::num* f) → void {
   core::num* result;
   try {
-    result = a.{core::num::~/}(b);
+    result = a.{core::num::~/}(b){(core::num*) →* core::int*};
     core::print("${a} ~/ ${b} = ${result}");
   }
   on dynamic catch(final dynamic e) {
@@ -390,16 +390,16 @@
     self::throws(f);
     return;
   }
-  self::expect(f.call(), result);
+  self::expect(f(){() →* core::num*}, result);
 }
 static method expect(dynamic expected, dynamic actual) → void {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
     throw "Expected ${expected}, actual ${actual}";
   }
 }
 static method throws(() →* core::num* f) → void {
   try {
-    f.call();
+    f(){() →* core::num*};
   }
   on dynamic catch(final dynamic e) {
     return;
@@ -415,16 +415,16 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:50:8 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:57:8 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:62:11 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:63:13 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:64:8 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:64:14 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:65:20 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:66:25 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:67:33 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:71:8 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:78:8 -> DoubleConstant(-0.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///constant_truncate.dart:85:8 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:50:8 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:57:8 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:62:11 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:63:13 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:64:8 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:64:14 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:65:20 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:66:25 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:67:33 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:71:8 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:78:8 -> DoubleConstant(-0.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///constant_truncate.dart:85:8 -> DoubleConstant(-0.0)
 Extra constant evaluation: evaluated: 115, effectively constant: 12
diff --git a/pkg/front_end/testcases/general/constants/circularity.dart.weak.expect b/pkg/front_end/testcases/general/constants/circularity.dart.weak.expect
index adecbb6..d9ec24f 100644
--- a/pkg/front_end/testcases/general/constants/circularity.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/circularity.dart.weak.expect
@@ -63,7 +63,7 @@
 class Class2 extends core::Object /*hasConstConstructor*/  {
   final field self::Class2* field;
   const constructor •(core::int* value) → self::Class2*
-    : self::Class2::field = value.{core::num::==}(0) ?{self::Class2*} null : #C3, super core::Object::•()
+    : self::Class2::field = value =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Class2*} null : #C3, super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/constants/circularity.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/circularity.dart.weak.outline.expect
index d30b1c7..9c83c85 100644
--- a/pkg/front_end/testcases/general/constants/circularity.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/circularity.dart.weak.outline.expect
@@ -20,7 +20,7 @@
 class Class2 extends core::Object /*hasConstConstructor*/  {
   final field self::Class2* field;
   const constructor •(core::int* value) → self::Class2*
-    : self::Class2::field = value.{core::num::==}(0) ?{self::Class2*} null : const self::Class2::•(0), super core::Object::•()
+    : self::Class2::field = value =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Class2*} null : const self::Class2::•(0), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -66,8 +66,8 @@
 static const field core::int* a = self::b;
 static const field core::int* b = self::a;
 static const field core::int* c = self::d;
-static const field core::int* d = self::e.{core::num::+}(1);
-static const field core::int* e = self::d.{core::num::-}(1);
+static const field core::int* d = self::e.{core::num::+}(1){(core::num*) →* core::int*};
+static const field core::int* e = self::d.{core::num::-}(1){(core::num*) →* core::int*};
 static const field self::Class1* c1_0 = const self::Class1::•();
 static const field self::Class1* c1_1 = const self::Class1::•(c: null);
 static const field self::Class1* c1_2 = const self::Class1::•();
diff --git a/pkg/front_end/testcases/general/constants/circularity.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/circularity.dart.weak.transformed.expect
index adecbb6..d9ec24f 100644
--- a/pkg/front_end/testcases/general/constants/circularity.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/circularity.dart.weak.transformed.expect
@@ -63,7 +63,7 @@
 class Class2 extends core::Object /*hasConstConstructor*/  {
   final field self::Class2* field;
   const constructor •(core::int* value) → self::Class2*
-    : self::Class2::field = value.{core::num::==}(0) ?{self::Class2*} null : #C3, super core::Object::•()
+    : self::Class2::field = value =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Class2*} null : #C3, super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.expect b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.expect
index a438075..606314d 100644
--- a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.expect
@@ -127,13 +127,13 @@
 class Foo extends core::Object /*hasConstConstructor*/  {
   final field core::int* x;
   const constructor •(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(x.{core::num::>}(0), "x is not positive"), assert(x.{core::num::>}(0)), assert(x.{core::num::>}(0), ""), assert((#C1).{core::Object::==}(false), "foo was ${#C1}"), assert((#C1).{core::Object::==}(false)), super core::Object::•()
+    : self::Foo::x = x, assert(x.{core::num::>}(0){(core::num*) →* core::bool*}, "x is not positive"), assert(x.{core::num::>}(0){(core::num*) →* core::bool*}), assert(x.{core::num::>}(0){(core::num*) →* core::bool*}, ""), assert((#C1) =={core::Object::==}{(core::Object*) →* core::bool*} false, "foo was ${#C1}"), assert((#C1) =={core::Object::==}{(core::Object*) →* core::bool*} false), super core::Object::•()
     ;
   const constructor withMessage(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(x.{core::num::<}(0), "btw foo was ${#C1}"), super core::Object::•()
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, "btw foo was ${#C1}"), super core::Object::•()
     ;
   const constructor withInvalidMessage(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(x.{core::num::<}(0), x), super core::Object::•()
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int* x) → self::Foo*
     : self::Foo::x = x, assert(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
@@ -160,13 +160,13 @@
 class Bar extends core::Object /*hasConstConstructor*/  {
   final field core::int* x;
   const constructor withMessage(core::int* x) → self::Bar*
-    : self::Bar::x = x, assert(x.{core::num::<}(0), "x is not negative"), super core::Object::•()
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, "x is not negative"), super core::Object::•()
     ;
   const constructor withoutMessage(core::int* x) → self::Bar*
-    : self::Bar::x = x, assert(x.{core::num::<}(0)), super core::Object::•()
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   const constructor withEmptyMessage(core::int* x) → self::Bar*
-    : self::Bar::x = x, assert(x.{core::num::<}(0)), super core::Object::•()
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.outline.expect
index 229b2bb..001ad6a 100644
--- a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.outline.expect
@@ -17,13 +17,13 @@
 class Foo extends core::Object /*hasConstConstructor*/  {
   final field core::int* x;
   const constructor •(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(x.{core::num::>}(0), "x is not positive"), assert(x.{core::num::>}(0)), assert(x.{core::num::>}(0), ""), assert(const core::bool::fromEnvironment("foo").{core::Object::==}(false), "foo was ${const core::bool::fromEnvironment("foo")}"), assert(const core::bool::fromEnvironment("foo").{core::Object::==}(false)), super core::Object::•()
+    : self::Foo::x = x, assert(x.{core::num::>}(0){(core::num*) →* core::bool*}, "x is not positive"), assert(x.{core::num::>}(0){(core::num*) →* core::bool*}), assert(x.{core::num::>}(0){(core::num*) →* core::bool*}, ""), assert(const core::bool::fromEnvironment("foo") =={core::Object::==}{(core::Object*) →* core::bool*} false, "foo was ${const core::bool::fromEnvironment("foo")}"), assert(const core::bool::fromEnvironment("foo") =={core::Object::==}{(core::Object*) →* core::bool*} false), super core::Object::•()
     ;
   const constructor withMessage(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(x.{core::num::<}(0), "btw foo was ${const core::bool::fromEnvironment("foo")}"), super core::Object::•()
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, "btw foo was ${const core::bool::fromEnvironment("foo")}"), super core::Object::•()
     ;
   const constructor withInvalidMessage(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(x.{core::num::<}(0), x), super core::Object::•()
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int* x) → self::Foo*
     : self::Foo::x = x, assert(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
@@ -50,13 +50,13 @@
 class Bar extends core::Object /*hasConstConstructor*/  {
   final field core::int* x;
   const constructor withMessage(core::int* x) → self::Bar*
-    : self::Bar::x = x, assert(x.{core::num::<}(0), "x is not negative"), super core::Object::•()
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, "x is not negative"), super core::Object::•()
     ;
   const constructor withoutMessage(core::int* x) → self::Bar*
-    : self::Bar::x = x, assert(x.{core::num::<}(0)), super core::Object::•()
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   const constructor withEmptyMessage(core::int* x) → self::Bar*
-    : self::Bar::x = x, assert(x.{core::num::<}(0)), super core::Object::•()
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -87,9 +87,9 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_asserts.dart:11:50 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:11:50 -> BoolConstant(true)
 Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:12:59 -> StringConstant("foo was false")
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_asserts.dart:13:50 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:13:50 -> BoolConstant(true)
 Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:15:73 -> StringConstant("btw foo was false")
 Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_asserts.dart:19:21 -> NullConstant(null)
 Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///const_asserts.dart:21:22 -> NullConstant(null)
diff --git a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.transformed.expect
index 286f81d..4dd3ed9 100644
--- a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.transformed.expect
@@ -127,13 +127,13 @@
 class Foo extends core::Object /*hasConstConstructor*/  {
   final field core::int* x;
   const constructor •(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(x.{core::num::>}(0), "x is not positive"), assert(x.{core::num::>}(0)), assert(x.{core::num::>}(0), ""), assert((#C1).{core::Object::==}(false), "foo was ${#C1}"), assert((#C1).{core::Object::==}(false)), super core::Object::•()
+    : self::Foo::x = x, assert(x.{core::num::>}(0){(core::num*) →* core::bool*}, "x is not positive"), assert(x.{core::num::>}(0){(core::num*) →* core::bool*}), assert(x.{core::num::>}(0){(core::num*) →* core::bool*}, ""), assert((#C1) =={core::Object::==}{(core::Object*) →* core::bool*} false, "foo was ${#C1}"), assert((#C1) =={core::Object::==}{(core::Object*) →* core::bool*} false), super core::Object::•()
     ;
   const constructor withMessage(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(x.{core::num::<}(0), "btw foo was ${#C1}"), super core::Object::•()
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, "btw foo was ${#C1}"), super core::Object::•()
     ;
   const constructor withInvalidMessage(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(x.{core::num::<}(0), x), super core::Object::•()
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int* x) → self::Foo*
     : self::Foo::x = x, assert(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
@@ -160,13 +160,13 @@
 class Bar extends core::Object /*hasConstConstructor*/  {
   final field core::int* x;
   const constructor withMessage(core::int* x) → self::Bar*
-    : self::Bar::x = x, assert(x.{core::num::<}(0), "x is not negative"), super core::Object::•()
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, "x is not negative"), super core::Object::•()
     ;
   const constructor withoutMessage(core::int* x) → self::Bar*
-    : self::Bar::x = x, assert(x.{core::num::<}(0)), super core::Object::•()
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   const constructor withEmptyMessage(core::int* x) → self::Bar*
-    : self::Bar::x = x, assert(x.{core::num::<}(0)), super core::Object::•()
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -206,9 +206,9 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_asserts.dart:11:50 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:11:50 -> BoolConstant(true)
 Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:12:59 -> StringConstant("foo was false")
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_asserts.dart:13:50 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:13:50 -> BoolConstant(true)
 Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:15:73 -> StringConstant("btw foo was false")
 Extra constant evaluation: evaluated: 34, effectively constant: 4
 
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect
index e31f9d4..17e5cd7 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect
@@ -220,7 +220,7 @@
     : super col::IterableBase::•()
     ;
   get iterator() → core::Iterator<core::int*>*
-    return <core::int*>[].{core::Iterable::iterator};
+    return <core::int*>[].{core::Iterable::iterator}{core::Iterator<core::int*>*};
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::cast::R*>*; -> core::Iterable::cast
   abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::int*) →* self::ConstIterable::map::T* toElement) → core::Iterable<self::ConstIterable::map::T*>*; -> core::Iterable::map
@@ -264,7 +264,7 @@
     : self::WithEquals::i = i, super core::Object::•()
     ;
   operator ==(core::Object* o) → core::bool* {
-    return o is self::WithEquals* && (o{self::WithEquals*} as self::WithEquals*).{self::WithEquals::i}.{core::num::==}(this.{self::WithEquals::i});
+    return o is self::WithEquals* && (o{self::WithEquals*} as self::WithEquals*).{self::WithEquals::i}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} this.{self::WithEquals::i}{core::int*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -281,7 +281,7 @@
     : super col::IterableBase::•()
     ;
   get iterator() → core::Iterator<core::String*>*
-    return <core::String*>[].{core::Iterable::iterator};
+    return <core::String*>[].{core::Iterable::iterator}{core::Iterator<core::String*>*};
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::cast::R*>*; -> core::Iterable::cast
   abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::String*) →* self::CustomIterable::map::T* toElement) → core::Iterable<self::CustomIterable::map::T*>*; -> core::Iterable::map
@@ -402,7 +402,7 @@
 static const field core::List<core::String*>* bar = #C10;
 static field core::List<core::String*>* barAsVar = block {
   final core::List<core::String*>* #t1 = core::List::of<core::String*>(#C8);
-  #t1.{core::List::add}{Invariant}("!");
+  #t1.{core::List::add}("!"){(core::String*) →* void};
 } =>#t1;
 static const field core::List<core::String*>* barWithNullSpread = invalid-expression "Null value during constant evaluation.";
 static const field core::List<core::String*>* barWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
@@ -476,7 +476,7 @@
   core::print(#C22);
   core::print( block {
     final core::Set<core::String*>* #t2 = col::LinkedHashSet::•<core::String*>();
-    #t2.{core::Set::add}{Invariant}("hello");
+    #t2.{core::Set::add}("hello"){(core::String*) →* core::bool*};
   } =>#t2);
   core::print(#C26);
 }
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
index eccddae..71909ac 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
@@ -222,7 +222,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static const field core::int* fortyTwo = 42;
-static const field dynamic fortyTwoAsDynamic = (self::fortyTwo as dynamic).*(2).~/(2);
+static const field dynamic fortyTwoAsDynamic = (self::fortyTwo as dynamic){dynamic}.*(2){dynamic}.~/(2);
 static const field core::List<core::String*>* nullList = null;
 static const field core::List<core::String*>* foo = const <core::String*>["hello", "world"];
 static const field core::List<core::String*>* bar = self::foo + const <core::String*>["!"];
@@ -240,7 +240,7 @@
 static const field core::List<core::String*>* barWithCustomIterableSpread2 = self::bar + const self::CustomIterable::•();
 static const field self::CustomIterable* customIterable = const self::CustomIterable::•();
 static const field core::List<core::String*>* barWithCustomIterableSpread3 = self::bar + self::customIterable;
-static const field core::List<core::String*>* listConcat = const <core::String*>["Hello"].{core::List::+}(const <core::String*>["World"]);
+static const field core::List<core::String*>* listConcat = const <core::String*>["Hello"].{core::List::+}(const <core::String*>["World"]){(core::List<core::String*>*) →* core::List<core::String*>*};
 static const field core::Set<core::String*>* nullSet = null;
 static const field core::Set<core::String*>* baz = const <core::String*>{"hello", "world"};
 static const field core::Set<core::String*>* qux = self::baz + const <core::String*>{"!"};
@@ -314,7 +314,7 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:136:4 -> InstanceConstant(const _Override{})
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:140:4 -> InstanceConstant(const _Override{})
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:144:4 -> InstanceConstant(const _Override{})
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_collections.dart:14:63 -> IntConstant(42)
+Evaluated: DynamicInvocation @ org-dartlang-testcase:///const_collections.dart:14:63 -> IntConstant(42)
 Evaluated: ListLiteral @ org-dartlang-testcase:///const_collections.dart:17:26 -> ListConstant(const <String*>["hello", "world"])
 Evaluated: ListConcatenation @ org-dartlang-testcase:///const_collections.dart:19:26 -> ListConstant(const <String*>["hello", "world", "!"])
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:22:44 -> ListConstant(const <String*>["hello", "world"])
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect
index 1b41513..7255d4a 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect
@@ -220,7 +220,7 @@
     : super col::IterableBase::•()
     ;
   get iterator() → core::Iterator<core::int*>*
-    return core::_GrowableList::•<core::int*>(0).{core::Iterable::iterator};
+    return core::_GrowableList::•<core::int*>(0).{core::Iterable::iterator}{core::Iterator<core::int*>*};
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::cast::R*>*; -> core::Iterable::cast
   abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::int*) →* self::ConstIterable::map::T* toElement) → core::Iterable<self::ConstIterable::map::T*>*; -> core::Iterable::map
@@ -264,7 +264,7 @@
     : self::WithEquals::i = i, super core::Object::•()
     ;
   operator ==(core::Object* o) → core::bool* {
-    return o is self::WithEquals* && o{self::WithEquals*}.{self::WithEquals::i}.{core::num::==}(this.{self::WithEquals::i});
+    return o is self::WithEquals* && o{self::WithEquals*}.{self::WithEquals::i}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} this.{self::WithEquals::i}{core::int*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -281,7 +281,7 @@
     : super col::IterableBase::•()
     ;
   get iterator() → core::Iterator<core::String*>*
-    return core::_GrowableList::•<core::String*>(0).{core::Iterable::iterator};
+    return core::_GrowableList::•<core::String*>(0).{core::Iterable::iterator}{core::Iterator<core::String*>*};
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::cast::R*>*; -> core::Iterable::cast
   abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::String*) →* self::CustomIterable::map::T* toElement) → core::Iterable<self::CustomIterable::map::T*>*; -> core::Iterable::map
@@ -402,7 +402,7 @@
 static const field core::List<core::String*>* bar = #C10;
 static field core::List<core::String*>* barAsVar = block {
   final core::List<core::String*>* #t1 = core::List::of<core::String*>(#C8);
-  #t1.{core::List::add}{Invariant}("!");
+  #t1.{core::List::add}("!"){(core::String*) →* void};
 } =>#t1;
 static const field core::List<core::String*>* barWithNullSpread = invalid-expression "Null value during constant evaluation.";
 static const field core::List<core::String*>* barWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
@@ -476,7 +476,7 @@
   core::print(#C22);
   core::print( block {
     final core::Set<core::String*>* #t2 = new col::_CompactLinkedHashSet::•<core::String*>();
-    #t2.{core::Set::add}{Invariant}("hello");
+    #t2.{core::Set::add}("hello"){(core::String*) →* core::bool*};
   } =>#t2);
   core::print(#C26);
 }
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.expect b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.expect
index 6ea8c4e..be60587 100644
--- a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.expect
@@ -61,7 +61,7 @@
     : con::Bar::baz = #C2, super core::Object::•()
     ;
   const constructor named4(core::int* i) → con::Bar*
-    : con::Bar::baz = i.{core::num::>}(0) ?{con2::Baz*} #C2 : #C2, super core::Object::•()
+    : con::Bar::baz = i.{core::num::>}(0){(core::num*) →* core::bool*} ?{con2::Baz*} #C2 : #C2, super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.outline.expect
index ea2f79f..eabea4f 100644
--- a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.outline.expect
@@ -59,7 +59,7 @@
     : con::Bar::baz = const con2::Baz::named1(), super core::Object::•()
     ;
   const constructor named4(core::int* i) → con::Bar*
-    : con::Bar::baz = i.{core::num::>}(0) ?{con2::Baz*} const con2::Baz::named5() : const con2::Baz::named6(), super core::Object::•()
+    : con::Bar::baz = i.{core::num::>}(0){(core::num*) →* core::bool*} ?{con2::Baz*} const con2::Baz::named5() : const con2::Baz::named6(), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.transformed.expect
index 6ea8c4e..be60587 100644
--- a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.transformed.expect
@@ -61,7 +61,7 @@
     : con::Bar::baz = #C2, super core::Object::•()
     ;
   const constructor named4(core::int* i) → con::Bar*
-    : con::Bar::baz = i.{core::num::>}(0) ?{con2::Baz*} #C2 : #C2, super core::Object::•()
+    : con::Bar::baz = i.{core::num::>}(0){(core::num*) →* core::bool*} ?{con2::Baz*} #C2 : #C2, super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/constants/number_folds.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/number_folds.dart.weak.outline.expect
index 83af03a..5840a2f 100644
--- a/pkg/front_end/testcases/general/constants/number_folds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/number_folds.dart.weak.outline.expect
@@ -14,72 +14,72 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int shiftNegative1 = 2.{core::int::<<}(1.{core::int::unary-}());
-static const field core::int shiftNegative2 = 2.{core::int::>>>}(1.{core::int::unary-}());
-static const field core::int shiftNegative3 = 2.{core::int::>>}(1.{core::int::unary-}());
-static const field core::int modZero = 2.{core::num::%}(0);
+static const field core::int shiftNegative1 = 2.{core::int::<<}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
+static const field core::int shiftNegative2 = 2.{core::int::>>>}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
+static const field core::int shiftNegative3 = 2.{core::int::>>}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
+static const field core::int modZero = 2.{core::num::%}(0){(core::num) → core::int};
 static const field core::int divZero = let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/constants/number_folds.dart:9:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 const int divZero = 2 / 0;
-                      ^" in 2.{core::num::/}(0) as{TypeError,ForNonNullableByDefault} core::int;
-static const field core::int intdivZero = 2.{core::num::~/}(0);
-static const field core::int unaryMinus = 2.{core::int::unary-}();
-static const field core::int unaryTilde = 2.{core::int::~}();
+                      ^" in 2.{core::num::/}(0){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+static const field core::int intdivZero = 2.{core::num::~/}(0){(core::num) → core::int};
+static const field core::int unaryMinus = 2.{core::int::unary-}(){() → core::int};
+static const field core::int unaryTilde = 2.{core::int::~}(){() → core::int};
 static const field core::int unaryPlus = invalid-expression "pkg/front_end/testcases/general/constants/number_folds.dart:13:23: Error: This couldn't be parsed.
 const int unaryPlus = +2;
-                      ^".+(2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-static const field core::int binaryPlus = 40.{core::num::+}(2);
-static const field core::int binaryMinus = 44.{core::num::-}(2);
-static const field core::int binaryTimes = 21.{core::num::*}(2);
-static const field core::double binaryDiv = 84.{core::num::/}(2);
-static const field core::int binaryTildeDiv = 84.{core::num::~/}(2);
-static const field core::int binaryMod = 85.{core::num::%}(43);
-static const field core::int binaryOr = 32.{core::int::|}(10);
-static const field core::int binaryAnd = 63.{core::int::&}(106);
-static const field core::int binaryXor = 63.{core::int::^}(21);
-static const field core::int binaryShift1 = 21.{core::int::<<}(1);
-static const field core::int binaryShift2 = 84.{core::int::>>>}(1);
-static const field core::int binaryShift3 = 21.{core::int::>>>}(64);
-static const field core::int binaryShift4 = 84.{core::int::>>}(1);
-static const field core::bool binaryLess = 42.{core::num::<}(42);
-static const field core::bool binaryLessEqual = 42.{core::num::<=}(42);
-static const field core::bool binaryGreaterEqual = 42.{core::num::>=}(42);
-static const field core::bool binaryGreater = 42.{core::num::>}(42);
-static const field core::int doubleTruncateDiv = 84.2.{core::double::~/}(2);
-static const field core::int doubleTruncateDivZero = 84.2.{core::double::~/}(0);
+                      ^"{dynamic}.+(2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+static const field core::int binaryPlus = 40.{core::num::+}(2){(core::num) → core::int};
+static const field core::int binaryMinus = 44.{core::num::-}(2){(core::num) → core::int};
+static const field core::int binaryTimes = 21.{core::num::*}(2){(core::num) → core::int};
+static const field core::double binaryDiv = 84.{core::num::/}(2){(core::num) → core::double};
+static const field core::int binaryTildeDiv = 84.{core::num::~/}(2){(core::num) → core::int};
+static const field core::int binaryMod = 85.{core::num::%}(43){(core::num) → core::int};
+static const field core::int binaryOr = 32.{core::int::|}(10){(core::int) → core::int};
+static const field core::int binaryAnd = 63.{core::int::&}(106){(core::int) → core::int};
+static const field core::int binaryXor = 63.{core::int::^}(21){(core::int) → core::int};
+static const field core::int binaryShift1 = 21.{core::int::<<}(1){(core::int) → core::int};
+static const field core::int binaryShift2 = 84.{core::int::>>>}(1){(core::int) → core::int};
+static const field core::int binaryShift3 = 21.{core::int::>>>}(64){(core::int) → core::int};
+static const field core::int binaryShift4 = 84.{core::int::>>}(1){(core::int) → core::int};
+static const field core::bool binaryLess = 42.{core::num::<}(42){(core::num) → core::bool};
+static const field core::bool binaryLessEqual = 42.{core::num::<=}(42){(core::num) → core::bool};
+static const field core::bool binaryGreaterEqual = 42.{core::num::>=}(42){(core::num) → core::bool};
+static const field core::bool binaryGreater = 42.{core::num::>}(42){(core::num) → core::bool};
+static const field core::int doubleTruncateDiv = 84.2.{core::double::~/}(2){(core::num) → core::int};
+static const field core::int doubleTruncateDivZero = 84.2.{core::double::~/}(0){(core::num) → core::int};
 static const field dynamic nil = null;
-static const field core::int doubleTruncateDivNull = 84.2.{core::double::~/}(self::nil as{TypeError,ForDynamic,ForNonNullableByDefault} core::num);
-static const field core::double doubleNan = 0.{core::num::/}(0);
-static const field core::int doubleTruncateDivNaN = 84.2.{core::double::~/}(self::doubleNan);
+static const field core::int doubleTruncateDivNull = 84.2.{core::double::~/}(self::nil as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::int};
+static const field core::double doubleNan = 0.{core::num::/}(0){(core::num) → core::double};
+static const field core::int doubleTruncateDivNaN = 84.2.{core::double::~/}(self::doubleNan){(core::num) → core::int};
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:5:33 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:6:34 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:7:33 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:9:23 -> DoubleConstant(Infinity)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:11:24 -> IntConstant(-2)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:12:24 -> IntConstant(-3)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:15:27 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:16:28 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:17:28 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:18:29 -> DoubleConstant(42.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:19:30 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:20:26 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:21:25 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:22:26 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:23:26 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:24:29 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:26:29 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:27:29 -> IntConstant(0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:29:29 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:30:28 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:31:33 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:32:36 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:33:31 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:35:36 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:5:33 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:6:34 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:7:33 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:9:23 -> DoubleConstant(Infinity)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:11:24 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:12:24 -> IntConstant(-3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:15:27 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:16:28 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:17:28 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:18:29 -> DoubleConstant(42.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:19:30 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:20:26 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:21:25 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:22:26 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:23:26 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:24:29 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:26:29 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:27:29 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:29:29 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:30:28 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:31:33 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:32:36 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:33:31 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:35:36 -> IntConstant(42)
 Evaluated: AsExpression @ org-dartlang-testcase:///number_folds.dart:38:43 -> NullConstant(null)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds.dart:39:27 -> DoubleConstant(NaN)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds.dart:39:27 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///number_folds.dart:40:42 -> DoubleConstant(NaN)
 Extra constant evaluation: evaluated: 39, effectively constant: 27
diff --git a/pkg/front_end/testcases/general/constants/number_folds_opt_out.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/number_folds_opt_out.dart.weak.outline.expect
index df84569..d84f48c 100644
--- a/pkg/front_end/testcases/general/constants/number_folds_opt_out.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/number_folds_opt_out.dart.weak.outline.expect
@@ -14,64 +14,64 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* shiftNegative1 = 2.{core::int::<<}(1.{core::int::unary-}());
-static const field core::int* shiftNegative3 = 2.{core::int::>>}(1.{core::int::unary-}());
-static const field core::int* modZero = 2.{core::num::%}(0);
+static const field core::int* shiftNegative1 = 2.{core::int::<<}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* core::int*};
+static const field core::int* shiftNegative3 = 2.{core::int::>>}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* core::int*};
+static const field core::int* modZero = 2.{core::num::%}(0){(core::num*) →* core::int*};
 static const field core::int* divZero = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:10:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 const int divZero = 2 / 0;
-                      ^" in 2.{core::num::/}(0) as{TypeError} core::int*;
-static const field core::int* intdivZero = 2.{core::num::~/}(0);
-static const field core::int* unaryMinus = 2.{core::int::unary-}();
-static const field core::int* unaryTilde = 2.{core::int::~}();
+                      ^" in 2.{core::num::/}(0){(core::num*) →* core::double*} as{TypeError} core::int*;
+static const field core::int* intdivZero = 2.{core::num::~/}(0){(core::num*) →* core::int*};
+static const field core::int* unaryMinus = 2.{core::int::unary-}(){() →* core::int*};
+static const field core::int* unaryTilde = 2.{core::int::~}(){() →* core::int*};
 static const field core::int* unaryPlus = invalid-expression "pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:14:23: Error: This couldn't be parsed.
 const int unaryPlus = +2;
-                      ^".+(2) as{TypeError,ForDynamic} core::int*;
-static const field core::int* binaryPlus = 40.{core::num::+}(2);
-static const field core::int* binaryMinus = 44.{core::num::-}(2);
-static const field core::int* binaryTimes = 21.{core::num::*}(2);
-static const field core::double* binaryDiv = 84.{core::num::/}(2);
-static const field core::int* binaryTildeDiv = 84.{core::num::~/}(2);
-static const field core::int* binaryMod = 85.{core::num::%}(43);
-static const field core::int* binaryOr = 32.{core::int::|}(10);
-static const field core::int* binaryAnd = 63.{core::int::&}(106);
-static const field core::int* binaryXor = 63.{core::int::^}(21);
-static const field core::int* binaryShift1 = 21.{core::int::<<}(1);
-static const field core::int* binaryShift4 = 84.{core::int::>>}(1);
-static const field core::bool* binaryLess = 42.{core::num::<}(42);
-static const field core::bool* binaryLessEqual = 42.{core::num::<=}(42);
-static const field core::bool* binaryGreaterEqual = 42.{core::num::>=}(42);
-static const field core::bool* binaryGreater = 42.{core::num::>}(42);
-static const field core::int* doubleTruncateDiv = 84.2.{core::double::~/}(2);
-static const field core::int* doubleTruncateDivZero = 84.2.{core::double::~/}(0);
-static const field core::int* doubleTruncateDivNull = 84.2.{core::double::~/}(null);
-static const field core::double* doubleNan = 0.{core::num::/}(0);
-static const field core::int* doubleTruncateDivNaN = 84.2.{core::double::~/}(self::doubleNan);
+                      ^"{dynamic}.+(2) as{TypeError,ForDynamic} core::int*;
+static const field core::int* binaryPlus = 40.{core::num::+}(2){(core::num*) →* core::int*};
+static const field core::int* binaryMinus = 44.{core::num::-}(2){(core::num*) →* core::int*};
+static const field core::int* binaryTimes = 21.{core::num::*}(2){(core::num*) →* core::int*};
+static const field core::double* binaryDiv = 84.{core::num::/}(2){(core::num*) →* core::double*};
+static const field core::int* binaryTildeDiv = 84.{core::num::~/}(2){(core::num*) →* core::int*};
+static const field core::int* binaryMod = 85.{core::num::%}(43){(core::num*) →* core::int*};
+static const field core::int* binaryOr = 32.{core::int::|}(10){(core::int*) →* core::int*};
+static const field core::int* binaryAnd = 63.{core::int::&}(106){(core::int*) →* core::int*};
+static const field core::int* binaryXor = 63.{core::int::^}(21){(core::int*) →* core::int*};
+static const field core::int* binaryShift1 = 21.{core::int::<<}(1){(core::int*) →* core::int*};
+static const field core::int* binaryShift4 = 84.{core::int::>>}(1){(core::int*) →* core::int*};
+static const field core::bool* binaryLess = 42.{core::num::<}(42){(core::num*) →* core::bool*};
+static const field core::bool* binaryLessEqual = 42.{core::num::<=}(42){(core::num*) →* core::bool*};
+static const field core::bool* binaryGreaterEqual = 42.{core::num::>=}(42){(core::num*) →* core::bool*};
+static const field core::bool* binaryGreater = 42.{core::num::>}(42){(core::num*) →* core::bool*};
+static const field core::int* doubleTruncateDiv = 84.2.{core::double::~/}(2){(core::num*) →* core::int*};
+static const field core::int* doubleTruncateDivZero = 84.2.{core::double::~/}(0){(core::num*) →* core::int*};
+static const field core::int* doubleTruncateDivNull = 84.2.{core::double::~/}(null){(core::num*) →* core::int*};
+static const field core::double* doubleNan = 0.{core::num::/}(0){(core::num*) →* core::double*};
+static const field core::int* doubleTruncateDivNaN = 84.2.{core::double::~/}(self::doubleNan){(core::num*) →* core::int*};
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:7:33 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:8:33 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:10:23 -> DoubleConstant(Infinity)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:12:24 -> IntConstant(-2)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:13:24 -> IntConstant(-3)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:16:27 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:17:28 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:18:28 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:19:29 -> DoubleConstant(42.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:20:30 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:21:26 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:22:25 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:23:26 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:24:26 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:25:29 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:27:29 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:28:28 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:29:33 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:30:36 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:31:31 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:33:36 -> IntConstant(42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:36:27 -> DoubleConstant(NaN)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:7:33 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:8:33 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:10:23 -> DoubleConstant(Infinity)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:12:24 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:13:24 -> IntConstant(-3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:16:27 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:17:28 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:18:28 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:19:29 -> DoubleConstant(42.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:20:30 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:21:26 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:22:25 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:23:26 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:24:26 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:25:29 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:27:29 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:28:28 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:29:33 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:30:36 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:31:31 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:33:36 -> IntConstant(42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///number_folds_opt_out.dart:36:27 -> DoubleConstant(NaN)
 Evaluated: StaticGet @ org-dartlang-testcase:///number_folds_opt_out.dart:37:42 -> DoubleConstant(NaN)
 Extra constant evaluation: evaluated: 34, effectively constant: 23
diff --git a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.outline.expect
index f61a38d..10ad97d 100644
--- a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.outline.expect
@@ -2,10 +2,10 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* foo = 42.{core::num::*}(42);
+static const field core::int* foo = 42.{core::num::*}(42){(core::num*) →* core::int*};
 static const field core::String* bar = "hello ${const core::String::fromEnvironment("baz", defaultValue: "world")}!";
-static const field core::String* bar2 = "hello2 2".{core::String::+}(self::bar);
-static const field core::bool* baz = true && true && (false || true) && 42.{core::num::==}(21.{core::num::*}(4).{core::num::/}(2));
+static const field core::String* bar2 = "hello2 2".{core::String::+}(self::bar){(core::String*) →* core::String*};
+static const field core::bool* baz = true && true && (false || true) && 42 =={core::num::==}{(core::Object*) →* core::bool*} 21.{core::num::*}(4){(core::num*) →* core::int*}.{core::num::/}(2){(core::num*) →* core::double*};
 static const field core::Symbol* blaSymbol = #_x;
 static method main() → dynamic
   ;
@@ -14,9 +14,9 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///rudimentary_test_01.dart:5:20 -> IntConstant(1764)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///rudimentary_test_01.dart:5:20 -> IntConstant(1764)
 Evaluated: StringConcatenation @ org-dartlang-testcase:///rudimentary_test_01.dart:6:18 -> StringConstant("hello 42!")
-Evaluated: MethodInvocation @ org-dartlang-testcase:///rudimentary_test_01.dart:8:35 -> StringConstant("hello2 2hello 42!")
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///rudimentary_test_01.dart:8:35 -> StringConstant("hello2 2hello 42!")
 Evaluated: LogicalExpression @ org-dartlang-testcase:///rudimentary_test_01.dart:9:50 -> BoolConstant(true)
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///rudimentary_test_01.dart:10:19 -> SymbolConstant(#_x)
 Extra constant evaluation: evaluated: 5, effectively constant: 5
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.expect
index 6d3d9c5..8c8d29f 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.expect
@@ -363,7 +363,7 @@
   final field core::int* x;
   final field core::int* y;
   const constructor •(core::int* x) → self::Foo*
-    : self::Foo::x = x, self::Foo::y = "hello".{core::String::length}, super core::Object::•()
+    : self::Foo::x = x, self::Foo::y = "hello".{core::String::length}{core::int*}, super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -452,7 +452,7 @@
 }
 class ConstClassWithFinalFields2 extends core::Object /*hasConstConstructor*/  {
   final field core::int* y = 1;
-  final field dynamic z1 = this.{self::ConstClassWithFinalFields2::y};
+  final field dynamic z1 = this.{self::ConstClassWithFinalFields2::y}{core::int*};
   final field core::int* z2 = self::x;
   const constructor •() → self::ConstClassWithFinalFields2*
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect
index 919d711..4722f57 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect
@@ -144,7 +144,7 @@
   final field core::int* x;
   final field core::int* y;
   const constructor •(core::int* x) → self::Foo*
-    : self::Foo::x = x, self::Foo::y = "hello".{core::String::length}, super core::Object::•()
+    : self::Foo::x = x, self::Foo::y = "hello".{core::String::length}{core::int*}, super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -230,7 +230,7 @@
 }
 class ConstClassWithFinalFields2 extends core::Object /*hasConstConstructor*/  {
   final field core::int* y = 1;
-  final field dynamic z1 = this.{self::ConstClassWithFinalFields2::y};
+  final field dynamic z1 = this.{self::ConstClassWithFinalFields2::y}{core::int*};
   final field core::int* z2 = self::x;
   const constructor •() → self::ConstClassWithFinalFields2*
     : super core::Object::•()
@@ -251,8 +251,8 @@
 static const field core::bool* barFromEnvOrNull = const core::bool::fromEnvironment("bar", defaultValue: null);
 static const field core::bool* notBarFromEnvOrNull = !self::barFromEnvOrNull;
 static const field core::bool* conditionalOnNull = self::barFromEnvOrNull ?{core::bool*} true : false;
-static const field core::bool* nullAwareOnNullTrue = let final core::bool* #t2 = self::barFromEnvOrNull in #t2.{core::Object::==}(null) ?{core::bool*} true : #t2;
-static const field core::bool* nullAwareOnNullFalse = let final core::bool* #t3 = self::barFromEnvOrNull in #t3.{core::Object::==}(null) ?{core::bool*} false : #t3;
+static const field core::bool* nullAwareOnNullTrue = let final core::bool* #t2 = self::barFromEnvOrNull in #t2 == null ?{core::bool*} true : #t2;
+static const field core::bool* nullAwareOnNullFalse = let final core::bool* #t3 = self::barFromEnvOrNull in #t3 == null ?{core::bool*} false : #t3;
 static const field core::bool* andOnFalse = self::nullAwareOnNullFalse && self::nullAwareOnNullTrue;
 static const field core::bool* andOnFalse2 = self::nullAwareOnNullTrue && self::nullAwareOnNullFalse;
 static const field core::bool* andOnNull = self::barFromEnvOrNull && true;
@@ -281,25 +281,25 @@
 static const field core::bool* bazFalseFromEnv = const core::bool::fromEnvironment("bazFalse");
 static const field core::bool* trueBool = true;
 static const field core::bool* falseBool = false;
-static const field core::bool* binaryOnBoolCaret = self::trueBool.{core::bool::^}(self::falseBool);
-static const field core::bool* binaryOnBoolAmpersand = self::trueBool.{core::bool::&}(self::falseBool);
-static const field core::bool* binaryOnBoolBar = self::trueBool.{core::bool::|}(self::falseBool);
-static const field core::bool* binaryOnBoolBar2 = self::falseBool.{core::bool::|}(self::trueBool);
+static const field core::bool* binaryOnBoolCaret = self::trueBool.{core::bool::^}(self::falseBool){(core::bool*) →* core::bool*};
+static const field core::bool* binaryOnBoolAmpersand = self::trueBool.{core::bool::&}(self::falseBool){(core::bool*) →* core::bool*};
+static const field core::bool* binaryOnBoolBar = self::trueBool.{core::bool::|}(self::falseBool){(core::bool*) →* core::bool*};
+static const field core::bool* binaryOnBoolBar2 = self::falseBool.{core::bool::|}(self::trueBool){(core::bool*) →* core::bool*};
 static const field dynamic willBeDouble = const core::bool::fromEnvironment("foo") ?{core::num*} 42 : 42.42;
-static const field dynamic binaryOnDouble = self::willBeDouble.<<(2);
+static const field dynamic binaryOnDouble = self::willBeDouble{dynamic}.<<(2);
 static const field dynamic willBeInt = const core::bool::fromEnvironment("foo") ?{core::num*} 42.42 : 42;
-static const field dynamic binaryOnIntWithDoubleBad = self::willBeInt.<<(self::willBeDouble);
-static const field dynamic binaryOnIntWithDoubleOK = self::willBeInt.+(self::willBeDouble);
-static const field dynamic binaryOnIntWithString = self::willBeInt.<<("hello");
+static const field dynamic binaryOnIntWithDoubleBad = self::willBeInt{dynamic}.<<(self::willBeDouble);
+static const field dynamic binaryOnIntWithDoubleOK = self::willBeInt{dynamic}.+(self::willBeDouble);
+static const field dynamic binaryOnIntWithString = self::willBeInt{dynamic}.<<("hello");
 static const field dynamic willBeString = const core::bool::fromEnvironment("foo") ?{core::Object*} 42.42 : "hello";
-static const field dynamic binaryOnStringWithStringOK = self::willBeString.+(" world");
-static const field dynamic binaryOnStringWithInt = self::willBeString.+(self::willBeInt);
-static const field dynamic binaryOnStringWithStringBad = self::willBeString.-(" world");
+static const field dynamic binaryOnStringWithStringOK = self::willBeString{dynamic}.+(" world");
+static const field dynamic binaryOnStringWithInt = self::willBeString{dynamic}.+(self::willBeInt);
+static const field dynamic binaryOnStringWithStringBad = self::willBeString{dynamic}.-(" world");
 static field core::int* x;
-static const field core::int* x1 = self::x = self::x.{core::num::-}(1);
-static const field core::int* x2 = self::x = self::x.{core::num::+}(1);
-static const field core::int* x3 = let final core::int* #t4 = self::x in let final core::int* #t5 = self::x = #t4.{core::num::-}(1) in #t4;
-static const field core::int* x4 = let final core::int* #t6 = self::x in let final core::int* #t7 = self::x = #t6.{core::num::+}(1) in #t6;
+static const field core::int* x1 = self::x = self::x.{core::num::-}(1){(core::num*) →* core::int*};
+static const field core::int* x2 = self::x = self::x.{core::num::+}(1){(core::num*) →* core::int*};
+static const field core::int* x3 = let final core::int* #t4 = self::x in let final core::int* #t5 = self::x = #t4.{core::num::-}(1){(core::num*) →* core::int*} in #t4;
+static const field core::int* x4 = let final core::int* #t6 = self::x in let final core::int* #t7 = self::x = #t6.{core::num::+}(1){(core::num*) →* core::int*} in #t6;
 static const field core::int* y = 1;
 static const field dynamic y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
 const y1 = --y;
@@ -322,7 +322,7 @@
 static const field self::Foo* foo1 = const self::Foo::•(42);
 static const field self::Foo* foo2 = const self::Foo::•(42);
 static const field core::bool* foosIdentical = core::identical(self::foo1, self::foo2);
-static const field core::bool* foosEqual = self::foo1.{self::Foo::==}(self::foo2);
+static const field core::bool* foosEqual = self::foo1 =={self::Foo::==}{(dynamic) →* core::bool*} self::foo2;
 static const field core::Symbol* barFoo = const _in::Symbol::•("Foo");
 static const field core::Symbol* barFooEqual = const _in::Symbol::•("Foo=");
 static const field core::Symbol* tripleShiftSymbol = const _in::Symbol::•(">>>");
@@ -344,11 +344,11 @@
 static const field core::bool* zeroPointZeroIdentical = core::identical(0.0, 0.0);
 static const field core::bool* zeroPointZeroIdenticalToZero = core::identical(0.0, 0);
 static const field core::bool* zeroIdenticalToZeroPointZero = core::identical(0, 0.0);
-static const field core::bool* nanIdentical = core::identical(0.{core::num::/}(0), 0.{core::num::/}(0));
-static const field core::bool* zeroPointZeroEqual = 0.0.{core::num::==}(0.0);
-static const field core::bool* zeroPointZeroEqualToZero = 0.0.{core::num::==}(0);
-static const field core::bool* zeroEqualToZeroPointZero = 0.{core::num::==}(0.0);
-static const field core::bool* nanEqual = 0.{core::num::/}(0).{core::num::==}(0.{core::num::/}(0));
+static const field core::bool* nanIdentical = core::identical(0.{core::num::/}(0){(core::num*) →* core::double*}, 0.{core::num::/}(0){(core::num*) →* core::double*});
+static const field core::bool* zeroPointZeroEqual = 0.0 =={core::num::==}{(core::Object*) →* core::bool*} 0.0;
+static const field core::bool* zeroPointZeroEqualToZero = 0.0 =={core::num::==}{(core::Object*) →* core::bool*} 0;
+static const field core::bool* zeroEqualToZeroPointZero = 0 =={core::num::==}{(core::Object*) →* core::bool*} 0.0;
+static const field core::bool* nanEqual = 0.{core::num::/}(0){(core::num*) →* core::double*} =={core::num::==}{(core::Object*) →* core::bool*} 0.{core::num::/}(0){(core::num*) →* core::double*};
 static const field dynamic willBecomeNull = const core::bool::fromEnvironment("foo") ?{<T extends core::Object* = dynamic>(T*) →* T*} self::id1 : null;
 static const field (core::int*) →* core::int* willBecomeNullToo = (const core::bool::fromEnvironment("foo") ?{dynamic} self::id1<core::int*> : self::willBecomeNull) as{TypeError,ForDynamic} (core::int*) →* core::int*;
 static const field (core::int*) →* core::int* partialInstantiation = (const core::bool::fromEnvironment("foo") ?{dynamic} self::willBecomeNull : self::id1<core::int*>) as{TypeError,ForDynamic} (core::int*) →* core::int*;
@@ -369,7 +369,7 @@
 
 
 Extra constant evaluation status:
-Evaluated: PropertyGet @ org-dartlang-testcase:///various.dart:111:26 -> IntConstant(5)
+Evaluated: InstanceGet @ org-dartlang-testcase:///various.dart:111:26 -> IntConstant(5)
 Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:6:31 -> BoolConstant(false)
 Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:7:30 -> BoolConstant(false)
 Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:9:11 -> NullConstant(null)
@@ -403,19 +403,19 @@
 Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:49:41 -> StringConstant("42")
 Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:53:35 -> BoolConstant(true)
 Evaluated: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:54:36 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///various.dart:58:41 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///various.dart:59:45 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///various.dart:60:39 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///various.dart:61:41 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:58:41 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:59:45 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:60:39 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:61:41 -> BoolConstant(true)
 Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:63:64 -> DoubleConstant(42.42)
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:64:24 -> DoubleConstant(42.42)
 Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:65:61 -> IntConstant(42)
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:66:34 -> IntConstant(42)
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:66:47 -> DoubleConstant(42.42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///various.dart:67:43 -> DoubleConstant(84.42)
+Evaluated: DynamicInvocation @ org-dartlang-testcase:///various.dart:67:43 -> DoubleConstant(84.42)
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:68:31 -> IntConstant(42)
 Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:70:39 -> StringConstant("hello")
-Evaluated: MethodInvocation @ org-dartlang-testcase:///various.dart:71:49 -> StringConstant("hello world")
+Evaluated: DynamicInvocation @ org-dartlang-testcase:///various.dart:71:49 -> StringConstant("hello world")
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:72:31 -> StringConstant("hello")
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:72:46 -> IntConstant(42)
 Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:73:37 -> StringConstant("hello")
@@ -439,10 +439,10 @@
 Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:188:38 -> BoolConstant(false)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:189:38 -> BoolConstant(false)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:190:22 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///various.dart:192:32 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///various.dart:193:38 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///various.dart:194:36 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///various.dart:195:24 -> BoolConstant(false)
+Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:192:32 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:193:38 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:194:36 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:195:24 -> BoolConstant(false)
 Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:200:66 -> NullConstant(null)
 Evaluated: AsExpression @ org-dartlang-testcase:///various.dart:203:39 -> NullConstant(null)
 Evaluated: AsExpression @ org-dartlang-testcase:///various.dart:205:39 -> PartialInstantiationConstant(id1<int*>)
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect
index 9b064ee..6998464 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect
@@ -363,7 +363,7 @@
   final field core::int* x;
   final field core::int* y;
   const constructor •(core::int* x) → self::Foo*
-    : self::Foo::x = x, self::Foo::y = "hello".{core::String::length}, super core::Object::•()
+    : self::Foo::x = x, self::Foo::y = "hello".{core::String::length}{core::int*}, super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -452,7 +452,7 @@
 }
 class ConstClassWithFinalFields2 extends core::Object /*hasConstConstructor*/  {
   final field core::int* y = 1;
-  final field dynamic z1 = this.{self::ConstClassWithFinalFields2::y};
+  final field dynamic z1 = this.{self::ConstClassWithFinalFields2::y}{core::int*};
   final field core::int* z2 = self::x;
   const constructor •() → self::ConstClassWithFinalFields2*
     : super core::Object::•()
@@ -626,7 +626,7 @@
 }
 
 Extra constant evaluation status:
-Evaluated: PropertyGet @ org-dartlang-testcase:///various.dart:111:26 -> IntConstant(5)
+Evaluated: InstanceGet @ org-dartlang-testcase:///various.dart:111:26 -> IntConstant(5)
 Extra constant evaluation: evaluated: 12, effectively constant: 1
 
 
diff --git a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.expect b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.expect
index a95f0d2..8f994fa 100644
--- a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.expect
@@ -39,9 +39,9 @@
     ;
 }
 static method main() → dynamic {
-  dynamic x = new self::B::•<dynamic>().{self::A::x};
+  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_Y<dynamic>*};
   if(!(x is self::_Y<Null>*)) {
-    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}}, but `_Y<Null>` expected";
+    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}{core::Type*}}, but `_Y<Null>` expected";
   }
 }
 
diff --git a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.transformed.expect
index a95f0d2..8f994fa 100644
--- a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.transformed.expect
@@ -39,9 +39,9 @@
     ;
 }
 static method main() → dynamic {
-  dynamic x = new self::B::•<dynamic>().{self::A::x};
+  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_Y<dynamic>*};
   if(!(x is self::_Y<Null>*)) {
-    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}}, but `_Y<Null>` expected";
+    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}{core::Type*}}, but `_Y<Null>` expected";
   }
 }
 
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.expect
index 5bac8eb..79f1595 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.expect
@@ -79,9 +79,9 @@
 }
 static method main() → dynamic {
   self::C1* c1 = new self::C1::•();
-  c1.{self::C1::toString}();
+  c1.{self::C1::toString}(){() →* core::String*};
   self::C2* c2 = new self::C2::•();
-  c2.{self::C2::toString}();
+  c2.{self::C2::toString}(){() →* core::String*};
   self::C3* c3 = new self::C3::•();
-  c3.{self::C3::toString}();
+  c3.{self::C3::toString}(){() →* core::String*};
 }
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.transformed.expect
index 3fbfe8f..69f8ec9 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.transformed.expect
@@ -79,9 +79,9 @@
 }
 static method main() → dynamic {
   self::C1* c1 = new self::C1::•();
-  c1.{self::C1::toString}();
+  c1.{self::C1::toString}(){() →* core::String*};
   self::C2* c2 = new self::C2::•();
-  c2.{self::C2::toString}();
+  c2.{self::C2::toString}(){() →* core::String*};
   self::C3* c3 = new self::C3::•();
-  c3.{self::C3::toString}();
+  c3.{self::C3::toString}(){() →* core::String*};
 }
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.weak.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.expect
index bc26325..4d5fd14 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.weak.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.expect
@@ -7,61 +7,61 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[1];
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t1.{core::List::add}{Invariant}(2);
+      #t1.{core::List::add}(2){(core::int*) →* void};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t1.{core::List::add}{Invariant}(3);
+      #t1.{core::List::add}(3){(core::int*) →* void};
     else
-      #t1.{core::List::add}{Invariant}(1.{core::int::unary-}());
+      #t1.{core::List::add}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* void};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t1.{core::List::add}{Invariant}(4);
+        #t1.{core::List::add}(4){(core::int*) →* void};
     for (core::int* i in <core::int*>[5, 6, 7])
-      #t1.{core::List::add}{Invariant}(i);
+      #t1.{core::List::add}(i){(core::int*) →* void};
     for (core::int* i in <core::int*>[8, 9, 10])
       if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t1.{core::List::add}{Invariant}(i);
-    for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
-      #t1.{core::List::add}{Invariant}(i);
+        #t1.{core::List::add}(i){(core::int*) →* void};
+    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t1.{core::List::add}(i){(core::int*) →* void};
   } =>#t1;
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
-    #t2.{core::Set::add}{Invariant}(1);
+    #t2.{core::Set::add}(1){(core::int*) →* core::bool*};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t2.{core::Set::add}{Invariant}(2);
+      #t2.{core::Set::add}(2){(core::int*) →* core::bool*};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t2.{core::Set::add}{Invariant}(3);
+      #t2.{core::Set::add}(3){(core::int*) →* core::bool*};
     else
-      #t2.{core::Set::add}{Invariant}(1.{core::int::unary-}());
+      #t2.{core::Set::add}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* core::bool*};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t2.{core::Set::add}{Invariant}(4);
+        #t2.{core::Set::add}(4){(core::int*) →* core::bool*};
     for (core::int* i in <core::int*>[5, 6, 7])
-      #t2.{core::Set::add}{Invariant}(i);
+      #t2.{core::Set::add}(i){(core::int*) →* core::bool*};
     for (core::int* i in <core::int*>[8, 9, 10])
       if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t2.{core::Set::add}{Invariant}(i);
-    for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
-      #t2.{core::Set::add}{Invariant}(i);
+        #t2.{core::Set::add}(i){(core::int*) →* core::bool*};
+    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t2.{core::Set::add}(i){(core::int*) →* core::bool*};
   } =>#t2;
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
-    #t3.{core::Map::[]=}{Invariant}(1, 1);
+    #t3.{core::Map::[]=}(1, 1){(core::int*, core::int*) →* void};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t3.{core::Map::[]=}{Invariant}(2, 2);
+      #t3.{core::Map::[]=}(2, 2){(core::int*, core::int*) →* void};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t3.{core::Map::[]=}{Invariant}(3, 3);
+      #t3.{core::Map::[]=}(3, 3){(core::int*, core::int*) →* void};
     else
-      #t3.{core::Map::[]=}{Invariant}(1.{core::int::unary-}(), 1.{core::int::unary-}());
+      #t3.{core::Map::[]=}(1.{core::int::unary-}(){() →* core::int*}, 1.{core::int::unary-}(){() →* core::int*}){(core::int*, core::int*) →* void};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t3.{core::Map::[]=}{Invariant}(4, 4);
+        #t3.{core::Map::[]=}(4, 4){(core::int*, core::int*) →* void};
     for (core::int* i in <core::int*>[5, 6, 7])
-      #t3.{core::Map::[]=}{Invariant}(i, i);
+      #t3.{core::Map::[]=}(i, i){(core::int*, core::int*) →* void};
     for (core::int* i in <core::int*>[8, 9, 10])
       if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t3.{core::Map::[]=}{Invariant}(i, i);
-    for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
-      #t3.{core::Map::[]=}{Invariant}(i, i);
+        #t3.{core::Map::[]=}(i, i){(core::int*, core::int*) →* void};
+    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t3.{core::Map::[]=}(i, i){(core::int*, core::int*) →* void};
   } =>#t3;
   core::print(aList);
   core::print(aSet);
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.weak.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.transformed.expect
index 2e4b07e..da68741 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.transformed.expect
@@ -7,19 +7,19 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = core::_GrowableList::_literal1<core::int*>(1);
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t1.{core::List::add}{Invariant}(2);
+      #t1.{core::List::add}(2){(core::int*) →* void};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t1.{core::List::add}{Invariant}(3);
+      #t1.{core::List::add}(3){(core::int*) →* void};
     else
-      #t1.{core::List::add}{Invariant}(1.{core::int::unary-}());
+      #t1.{core::List::add}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* void};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t1.{core::List::add}{Invariant}(4);
+        #t1.{core::List::add}(4){(core::int*) →* void};
     {
       core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(5, 6, 7).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        #t1.{core::List::add}{Invariant}(i);
+        #t1.{core::List::add}(i){(core::int*) →* void};
       }
     }
     {
@@ -27,29 +27,29 @@
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
         if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-          #t1.{core::List::add}{Invariant}(i);
+          #t1.{core::List::add}(i){(core::int*) →* void};
       }
     }
-    for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
-      #t1.{core::List::add}{Invariant}(i);
+    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t1.{core::List::add}(i){(core::int*) →* void};
   } =>#t1;
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t2.{core::Set::add}{Invariant}(1);
+    #t2.{core::Set::add}(1){(core::int*) →* core::bool*};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t2.{core::Set::add}{Invariant}(2);
+      #t2.{core::Set::add}(2){(core::int*) →* core::bool*};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t2.{core::Set::add}{Invariant}(3);
+      #t2.{core::Set::add}(3){(core::int*) →* core::bool*};
     else
-      #t2.{core::Set::add}{Invariant}(1.{core::int::unary-}());
+      #t2.{core::Set::add}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* core::bool*};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t2.{core::Set::add}{Invariant}(4);
+        #t2.{core::Set::add}(4){(core::int*) →* core::bool*};
     {
       core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(5, 6, 7).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        #t2.{core::Set::add}{Invariant}(i);
+        #t2.{core::Set::add}(i){(core::int*) →* core::bool*};
       }
     }
     {
@@ -57,29 +57,29 @@
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
         if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-          #t2.{core::Set::add}{Invariant}(i);
+          #t2.{core::Set::add}(i){(core::int*) →* core::bool*};
       }
     }
-    for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
-      #t2.{core::Set::add}{Invariant}(i);
+    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t2.{core::Set::add}(i){(core::int*) →* core::bool*};
   } =>#t2;
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
-    #t3.{core::Map::[]=}{Invariant}(1, 1);
+    #t3.{core::Map::[]=}(1, 1){(core::int*, core::int*) →* void};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t3.{core::Map::[]=}{Invariant}(2, 2);
+      #t3.{core::Map::[]=}(2, 2){(core::int*, core::int*) →* void};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t3.{core::Map::[]=}{Invariant}(3, 3);
+      #t3.{core::Map::[]=}(3, 3){(core::int*, core::int*) →* void};
     else
-      #t3.{core::Map::[]=}{Invariant}(1.{core::int::unary-}(), 1.{core::int::unary-}());
+      #t3.{core::Map::[]=}(1.{core::int::unary-}(){() →* core::int*}, 1.{core::int::unary-}(){() →* core::int*}){(core::int*, core::int*) →* void};
     if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t3.{core::Map::[]=}{Invariant}(4, 4);
+        #t3.{core::Map::[]=}(4, 4){(core::int*, core::int*) →* void};
     {
       core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(5, 6, 7).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        #t3.{core::Map::[]=}{Invariant}(i, i);
+        #t3.{core::Map::[]=}(i, i){(core::int*, core::int*) →* void};
       }
     }
     {
@@ -87,11 +87,11 @@
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
         if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-          #t3.{core::Map::[]=}{Invariant}(i, i);
+          #t3.{core::Map::[]=}(i, i){(core::int*, core::int*) →* void};
       }
     }
-    for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
-      #t3.{core::Map::[]=}{Invariant}(i, i);
+    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t3.{core::Map::[]=}(i, i){(core::int*, core::int*) →* void};
   } =>#t3;
   core::print(aList);
   core::print(aSet);
@@ -102,8 +102,8 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///control_flow_collection.dart:9:26 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///control_flow_collection.dart:18:26 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///control_flow_collection.dart:27:29 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///control_flow_collection.dart:27:33 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///control_flow_collection.dart:9:26 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///control_flow_collection.dart:18:26 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///control_flow_collection.dart:27:29 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///control_flow_collection.dart:27:33 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 158, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect
index 589ee22..6c11dcc 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect
@@ -454,181 +454,181 @@
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t1.{core::List::add}{Invariant}(42);
+      #t1.{core::List::add}(42){(core::int*) →* void};
   } =>#t1;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t2.{core::Set::add}{Invariant}(42);
-    #t2.{core::Set::add}{Invariant}(null);
+      #t2.{core::Set::add}(42){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t2;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t3 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t3.{core::Map::[]=}{Invariant}("bar", 42);
-    #t3.{core::Map::[]=}{Invariant}("baz", null);
+      #t3.{core::Map::[]=}("bar", 42){(core::String*, core::int*) →* void};
+    #t3.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t3;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t4 = <dynamic>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t4.{core::List::add}{Invariant}(dynVar);
+      #t4.{core::List::add}(dynVar){(dynamic) →* void};
   } =>#t4;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t5 = col::LinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t5.{core::Set::add}{Invariant}(dynVar);
-    #t5.{core::Set::add}{Invariant}(null);
+      #t5.{core::Set::add}(dynVar){(dynamic) →* core::bool*};
+    #t5.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t5;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t6 = <core::String*, dynamic>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t6.{core::Map::[]=}{Invariant}("bar", dynVar);
-    #t6.{core::Map::[]=}{Invariant}("baz", null);
+      #t6.{core::Map::[]=}("bar", dynVar){(core::String*, dynamic) →* void};
+    #t6.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t6;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t7 = <core::List<core::int*>*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t7.{core::List::add}{Invariant}(<core::int*>[42]);
+      #t7.{core::List::add}(<core::int*>[42]){(core::List<core::int*>*) →* void};
   } =>#t7;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t8 = col::LinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t8.{core::Set::add}{Invariant}(<core::int*>[42]);
-    #t8.{core::Set::add}{Invariant}(null);
+      #t8.{core::Set::add}(<core::int*>[42]){(core::List<core::int*>*) →* core::bool*};
+    #t8.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t8;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t9 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t9.{core::Map::[]=}{Invariant}("bar", <core::int*>[42]);
-    #t9.{core::Map::[]=}{Invariant}("baz", null);
+      #t9.{core::Map::[]=}("bar", <core::int*>[42]){(core::String*, core::List<core::int*>*) →* void};
+    #t9.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t9;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t10 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t10.{core::List::addAll}{Invariant}(<core::int*>[42]);
+      #t10.{core::List::addAll}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
   } =>#t10;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t11 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t11.{core::Set::addAll}{Invariant}(<core::int*>[42]);
-    #t11.{core::Set::add}{Invariant}(null);
+      #t11.{core::Set::addAll}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+    #t11.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t11;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t12 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::int*>* #t13 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
-        #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}, #t13.{core::MapEntry::value});
-    #t12.{core::Map::[]=}{Invariant}("baz", null);
+      for (final core::MapEntry<core::String*, core::int*>* #t13 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t12.{core::Map::[]=}(#t13.{core::MapEntry::key}{core::String*}, #t13.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t12.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t12;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t14 = <dynamic>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t14.{core::List::addAll}{Invariant}(<dynamic>[dynVar]);
+      #t14.{core::List::addAll}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
   } =>#t14;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t15 = col::LinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t15.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]);
-    #t15.{core::Set::add}{Invariant}(null);
+      #t15.{core::Set::addAll}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+    #t15.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t15;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t16 = <core::String*, dynamic>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, dynamic>* #t17 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
-        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}, #t17.{core::MapEntry::value});
-    #t16.{core::Map::[]=}{Invariant}("baz", null);
+      for (final core::MapEntry<core::String*, dynamic>* #t17 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+        #t16.{core::Map::[]=}(#t17.{core::MapEntry::key}{core::String*}, #t17.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
+    #t16.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t16;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t18 = <core::List<core::int*>*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t18.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]);
+      #t18.{core::List::addAll}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t18;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t19 = col::LinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t19.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]);
-    #t19.{core::Set::add}{Invariant}(null);
+      #t19.{core::Set::addAll}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t19.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t19;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t20 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t21 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
-        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
-    #t20.{core::Map::[]=}{Invariant}("baz", null);
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t21 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t20.{core::Map::[]=}(#t21.{core::MapEntry::key}{core::String*}, #t21.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t20.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t20;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t22 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t22.{core::List::addAll}{Invariant}(<core::int*>[42]);
+        #t22.{core::List::addAll}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
   } =>#t22;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t23 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t23.{core::Set::addAll}{Invariant}(<core::int*>[42]);
-    #t23.{core::Set::add}{Invariant}(null);
+        #t23.{core::Set::addAll}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+    #t23.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t23;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t24 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::int*>* #t25 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
-          #t24.{core::Map::[]=}{Invariant}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
-    #t24.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<core::String*, core::int*>* #t25 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+          #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}{core::String*}, #t25.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t24.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t24;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t26 = <dynamic>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t26.{core::List::addAll}{Invariant}(<dynamic>[dynVar]);
+        #t26.{core::List::addAll}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
   } =>#t26;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t27 = col::LinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t27.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]);
-    #t27.{core::Set::add}{Invariant}(null);
+        #t27.{core::Set::addAll}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+    #t27.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t27;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t28 = <core::String*, dynamic>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, dynamic>* #t29 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
-          #t28.{core::Map::[]=}{Invariant}(#t29.{core::MapEntry::key}, #t29.{core::MapEntry::value});
-    #t28.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<core::String*, dynamic>* #t29 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+          #t28.{core::Map::[]=}(#t29.{core::MapEntry::key}{core::String*}, #t29.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
+    #t28.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t28;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t30 = <core::List<core::int*>*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t30.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]);
+        #t30.{core::List::addAll}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t30;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t31 = col::LinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t31.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]);
-    #t31.{core::Set::add}{Invariant}(null);
+        #t31.{core::Set::addAll}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t31.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t31;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t32 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
-          #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
-    #t32.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t32.{core::Map::[]=}(#t33.{core::MapEntry::key}{core::String*}, #t33.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t32.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t32;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t34 = <core::List<core::int*>*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t34.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
+      #t34.{core::List::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t34;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t35 = col::LinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t35.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
-    #t35.{core::Set::add}{Invariant}(null);
+      #t35.{core::Set::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t35.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t35;
   core::Map<core::String*, core::List<core::int*>*>* map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   Map<String, List<int>> map40 = {if (oracle(\"foo\")) ...{\"bar\", []}, \"baz\": null};
@@ -636,279 +636,279 @@
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t36 = <core::List<core::int*>*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t36.{core::List::addAll}{Invariant}( block {
+      #t36.{core::List::addAll}( block {
         final core::Set<core::List<core::int*>*>* #t37 = col::LinkedHashSet::•<core::List<core::int*>*>();
-        #t37.{core::Set::add}{Invariant}(<core::int*>[]);
-      } =>#t37);
+        #t37.{core::Set::add}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+      } =>#t37){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t36;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t38 = col::LinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t38.{core::Set::addAll}{Invariant}( block {
+      #t38.{core::Set::addAll}( block {
         final core::Set<core::List<core::int*>*>* #t39 = col::LinkedHashSet::•<core::List<core::int*>*>();
-        #t39.{core::Set::add}{Invariant}(<core::int*>[]);
-      } =>#t39);
-    #t38.{core::Set::add}{Invariant}(null);
+        #t39.{core::Set::add}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+      } =>#t39){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t38.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t38;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t40 = <core::List<core::int*>*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t40.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
+        #t40.{core::List::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t40;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t41 = col::LinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t41.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
-    #t41.{core::Set::add}{Invariant}(null);
+        #t41.{core::Set::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t41.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t41;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t42 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t43 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
-          #t42.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}, #t43.{core::MapEntry::value});
-    #t42.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t43 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t42.{core::Map::[]=}(#t43.{core::MapEntry::key}{core::String*}, #t43.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t42.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t42;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t44 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t44.{core::List::addAll}{Invariant}(<core::int*>[]);
+      #t44.{core::List::addAll}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
   } =>#t44;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t45 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t45.{core::Set::addAll}{Invariant}(<core::int*>[]);
-    #t45.{core::Set::add}{Invariant}(null);
+      #t45.{core::Set::addAll}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+    #t45.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t45;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t46 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::int*>* #t47 in <core::String*, core::int*>{}.{core::Map::entries})
-        #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}, #t47.{core::MapEntry::value});
-    #t46.{core::Map::[]=}{Invariant}("baz", null);
+      for (final core::MapEntry<core::String*, core::int*>* #t47 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t46.{core::Map::[]=}(#t47.{core::MapEntry::key}{core::String*}, #t47.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t46.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t46;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t48 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t48.{core::List::addAll}{Invariant}( block {
+      #t48.{core::List::addAll}( block {
         final core::Set<core::int*>* #t49 = col::LinkedHashSet::•<core::int*>();
-      } =>#t49);
+      } =>#t49){(core::Iterable<core::int*>*) →* void};
   } =>#t48;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t50 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t50.{core::Set::addAll}{Invariant}( block {
+      #t50.{core::Set::addAll}( block {
         final core::Set<core::int*>* #t51 = col::LinkedHashSet::•<core::int*>();
-      } =>#t51);
-    #t50.{core::Set::add}{Invariant}(null);
+      } =>#t51){(core::Iterable<core::int*>*) →* void};
+    #t50.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t50;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t52 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t52.{core::List::addAll}{Invariant}(<core::int*>[]);
+        #t52.{core::List::addAll}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
   } =>#t52;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t53 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t53.{core::Set::addAll}{Invariant}(<core::int*>[]);
-    #t53.{core::Set::add}{Invariant}(null);
+        #t53.{core::Set::addAll}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+    #t53.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t53;
   core::Map<core::String*, core::int*>* map52 = block {
     final core::Map<core::String*, core::int*>* #t54 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::int*>* #t55 in <core::String*, core::int*>{}.{core::Map::entries})
-          #t54.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}, #t55.{core::MapEntry::value});
-    #t54.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<core::String*, core::int*>* #t55 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+          #t54.{core::Map::[]=}(#t55.{core::MapEntry::key}{core::String*}, #t55.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t54.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t54;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t56 = <core::List<core::int*>*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t56.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
+      #t56.{core::List::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t56;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t57 = col::LinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t57.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
-    #t57.{core::Set::add}{Invariant}(null);
+      #t57.{core::Set::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t57.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t57;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t58 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t59 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
-        #t58.{core::Map::[]=}{Invariant}(#t59.{core::MapEntry::key}, #t59.{core::MapEntry::value});
-    #t58.{core::Map::[]=}{Invariant}("baz", null);
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t59 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t58.{core::Map::[]=}(#t59.{core::MapEntry::key}{core::String*}, #t59.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t58.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t58;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t60 = <core::List<core::int*>*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t60.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
+        #t60.{core::List::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t60;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t61 = col::LinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t61.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
-    #t61.{core::Set::add}{Invariant}(null);
+        #t61.{core::Set::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t61.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t61;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t62 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
-          #t62.{core::Map::[]=}{Invariant}(#t63.{core::MapEntry::key}, #t63.{core::MapEntry::value});
-    #t62.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t62.{core::Map::[]=}(#t63.{core::MapEntry::key}{core::String*}, #t63.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t62.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t62;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t64 = <core::List<core::int*>*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t64.{core::List::add}{Invariant}(<core::int*>[]);
+      #t64.{core::List::add}(<core::int*>[]){(core::List<core::int*>*) →* void};
   } =>#t64;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t65 = col::LinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t65.{core::Set::add}{Invariant}(<core::int*>[]);
-    #t65.{core::Set::add}{Invariant}(null);
+      #t65.{core::Set::add}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+    #t65.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t65;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t66 = <core::List<core::int*>*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t66.{core::List::add}{Invariant}(<core::int*>[]);
+        #t66.{core::List::add}(<core::int*>[]){(core::List<core::int*>*) →* void};
   } =>#t66;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t67 = col::LinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t67.{core::Set::add}{Invariant}(<core::int*>[]);
-    #t67.{core::Set::add}{Invariant}(null);
+        #t67.{core::Set::add}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+    #t67.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t67;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t68 = <core::num*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t68.{core::List::add}{Invariant}(42);
+      #t68.{core::List::add}(42){(core::num*) →* void};
     else
-      #t68.{core::List::add}{Invariant}(3.14);
+      #t68.{core::List::add}(3.14){(core::num*) →* void};
   } =>#t68;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t69 = col::LinkedHashSet::•<core::num*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t69.{core::Set::add}{Invariant}(42);
+      #t69.{core::Set::add}(42){(core::num*) →* core::bool*};
     else
-      #t69.{core::Set::add}{Invariant}(3.14);
-    #t69.{core::Set::add}{Invariant}(null);
+      #t69.{core::Set::add}(3.14){(core::num*) →* core::bool*};
+    #t69.{core::Set::add}(null){(core::num*) →* core::bool*};
   } =>#t69;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t70 = <core::String*, core::num*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t70.{core::Map::[]=}{Invariant}("bar", 42);
+      #t70.{core::Map::[]=}("bar", 42){(core::String*, core::num*) →* void};
     else
-      #t70.{core::Map::[]=}{Invariant}("bar", 3.14);
-    #t70.{core::Map::[]=}{Invariant}("baz", null);
+      #t70.{core::Map::[]=}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t70.{core::Map::[]=}("baz", null){(core::String*, core::num*) →* void};
   } =>#t70;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t71 = <core::num*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t71.{core::List::addAll}{Invariant}(listInt);
+      #t71.{core::List::addAll}(listInt){(core::Iterable<core::num*>*) →* void};
     else
-      #t71.{core::List::addAll}{Invariant}(listDouble);
+      #t71.{core::List::addAll}(listDouble){(core::Iterable<core::num*>*) →* void};
   } =>#t71;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t72 = col::LinkedHashSet::•<core::num*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t72.{core::Set::addAll}{Invariant}(listInt);
+      #t72.{core::Set::addAll}(listInt){(core::Iterable<core::num*>*) →* void};
     else
-      #t72.{core::Set::addAll}{Invariant}(listDouble);
-    #t72.{core::Set::add}{Invariant}(null);
+      #t72.{core::Set::addAll}(listDouble){(core::Iterable<core::num*>*) →* void};
+    #t72.{core::Set::add}(null){(core::num*) →* core::bool*};
   } =>#t72;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t73 = <core::String*, core::num*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::num*>* #t74 in mapToInt.{core::Map::entries})
-        #t73.{core::Map::[]=}{Invariant}(#t74.{core::MapEntry::key}, #t74.{core::MapEntry::value});
+      for (final core::MapEntry<core::String*, core::num*>* #t74 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+        #t73.{core::Map::[]=}(#t74.{core::MapEntry::key}{core::String*}, #t74.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
     else
-      for (final core::MapEntry<core::String*, core::num*>* #t75 in mapToDouble.{core::Map::entries})
-        #t73.{core::Map::[]=}{Invariant}(#t75.{core::MapEntry::key}, #t75.{core::MapEntry::value});
-    #t73.{core::Map::[]=}{Invariant}("baz", null);
+      for (final core::MapEntry<core::String*, core::num*>* #t75 in mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+        #t73.{core::Map::[]=}(#t75.{core::MapEntry::key}{core::String*}, #t75.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+    #t73.{core::Map::[]=}("baz", null){(core::String*, core::num*) →* void};
   } =>#t73;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t76 = <dynamic>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t76.{core::List::addAll}{Invariant}(listInt);
+      #t76.{core::List::addAll}(listInt){(core::Iterable<dynamic>*) →* void};
     else
-      #t76.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*);
+      #t76.{core::List::addAll}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
   } =>#t76;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t77 = col::LinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t77.{core::Set::addAll}{Invariant}(listInt);
+      #t77.{core::Set::addAll}(listInt){(core::Iterable<dynamic>*) →* void};
     else
-      #t77.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*);
-    #t77.{core::Set::add}{Invariant}(null);
+      #t77.{core::Set::addAll}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+    #t77.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t77;
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t78 = col::LinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t78.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
-                                     ^");
+                                     ^"){(dynamic) →* core::bool*};
     else
-      #t78.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*);
-    #t78.{core::Set::add}{Invariant}(null);
+      #t78.{core::Set::addAll}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+    #t78.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t78;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t79 = <core::num*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t79.{core::List::add}{Invariant}(42);
+      #t79.{core::List::add}(42){(core::num*) →* void};
     else
-      #t79.{core::List::addAll}{Invariant}(listDouble);
+      #t79.{core::List::addAll}(listDouble){(core::Iterable<core::num*>*) →* void};
   } =>#t79;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t80 = col::LinkedHashSet::•<core::num*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t80.{core::Set::addAll}{Invariant}(listInt);
+      #t80.{core::Set::addAll}(listInt){(core::Iterable<core::num*>*) →* void};
     else
-      #t80.{core::Set::add}{Invariant}(3.14);
-    #t80.{core::Set::add}{Invariant}(null);
+      #t80.{core::Set::add}(3.14){(core::num*) →* core::bool*};
+    #t80.{core::Set::add}(null){(core::num*) →* core::bool*};
   } =>#t80;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t81 = <core::String*, core::num*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::num*>* #t82 in mapToInt.{core::Map::entries})
-        #t81.{core::Map::[]=}{Invariant}(#t82.{core::MapEntry::key}, #t82.{core::MapEntry::value});
+      for (final core::MapEntry<core::String*, core::num*>* #t82 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+        #t81.{core::Map::[]=}(#t82.{core::MapEntry::key}{core::String*}, #t82.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
     else
-      #t81.{core::Map::[]=}{Invariant}("bar", 3.14);
-    #t81.{core::Map::[]=}{Invariant}("baz", null);
+      #t81.{core::Map::[]=}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t81.{core::Map::[]=}("baz", null){(core::String*, core::num*) →* void};
   } =>#t81;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t83 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t83.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*);
+      #t83.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
   } =>#t83;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t84 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t84.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*);
-    #t84.{core::Set::add}{Invariant}(null);
+      #t84.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t84.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t84;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t85 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t85.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic} core::int*);
-    #t85.{core::Map::[]=}{Invariant}("baz", null);
+      #t85.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
+    #t85.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t85;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t86 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t87 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t88 = #t87 as{TypeError} core::int*;
-        #t86.{core::List::add}{Invariant}(#t88);
+        #t86.{core::List::add}(#t88){(core::int*) →* void};
       }
   } =>#t86;
   core::Set<core::int*>* set91 = block {
@@ -916,100 +916,100 @@
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final dynamic #t90 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t91 = #t90 as{TypeError} core::int*;
-        #t89.{core::Set::add}{Invariant}(#t91);
+        #t89.{core::Set::add}(#t91){(core::int*) →* core::bool*};
       }
-    #t89.{core::Set::add}{Invariant}(null);
+    #t89.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t89;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t92 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<dynamic, dynamic>* #t93 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
-        final core::String* #t94 = #t93.{core::MapEntry::key} as{TypeError} core::String*;
-        final core::int* #t95 = #t93.{core::MapEntry::value} as{TypeError} core::int*;
-        #t92.{core::Map::[]=}{Invariant}(#t94, #t95);
+      for (final core::MapEntry<dynamic, dynamic>* #t93 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
+        final core::String* #t94 = #t93.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
+        final core::int* #t95 = #t93.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+        #t92.{core::Map::[]=}(#t94, #t95){(core::String*, core::int*) →* void};
       }
-    #t92.{core::Map::[]=}{Invariant}("baz", null);
+    #t92.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t92;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t96 = <core::int*>[];
     if(dynVar as{TypeError,ForDynamic} core::bool*)
-      #t96.{core::List::add}{Invariant}(42);
+      #t96.{core::List::add}(42){(core::int*) →* void};
   } =>#t96;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t97 = col::LinkedHashSet::•<core::int*>();
     if(dynVar as{TypeError,ForDynamic} core::bool*)
-      #t97.{core::Set::add}{Invariant}(42);
+      #t97.{core::Set::add}(42){(core::int*) →* core::bool*};
   } =>#t97;
   core::Map<core::int*, core::int*>* map100 = block {
     final core::Map<core::int*, core::int*>* #t98 = <core::int*, core::int*>{};
     if(dynVar as{TypeError,ForDynamic} core::bool*)
-      #t98.{core::Map::[]=}{Invariant}(42, 42);
+      #t98.{core::Map::[]=}(42, 42){(core::int*, core::int*) →* void};
   } =>#t98;
 }
 static method testIfElementErrors(core::Map<core::int*, core::int*>* map) → dynamic {
   block {
     final core::List<core::int*>* #t99 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t99.{core::List::add}{Invariant}(let final Never* #t100 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t99.{core::List::add}(let final Never* #t100 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
-                           ^" in "bar" as{TypeError} core::int*);
+                           ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
   } =>#t99;
   block {
     final core::Set<core::int*>* #t101 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t101.{core::Set::add}{Invariant}(let final Never* #t102 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t101.{core::Set::add}(let final Never* #t102 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
-                           ^" in "bar" as{TypeError} core::int*);
-    #t101.{core::Set::add}{Invariant}(null);
+                           ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
+    #t101.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t101;
   block {
     final core::Map<core::String*, core::int*>* #t103 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t103.{core::Map::[]=}{Invariant}("bar", let final Never* #t104 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t103.{core::Map::[]=}("bar", let final Never* #t104 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
-                                          ^" in "bar" as{TypeError} core::int*);
-    #t103.{core::Map::[]=}{Invariant}("baz", null);
+                                          ^" in "bar" as{TypeError} core::int*){(core::String*, core::int*) →* void};
+    #t103.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t103;
   block {
     final core::List<core::int*>* #t105 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t105.{core::List::addAll}{Invariant}(<core::int*>[let final Never* #t106 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t105.{core::List::addAll}(<core::int*>[let final Never* #t106 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
-                               ^" in "bar" as{TypeError} core::int*]);
+                               ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
   } =>#t105;
   block {
     final core::Set<core::int*>* #t107 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t107.{core::Set::addAll}{Invariant}(<core::int*>[let final Never* #t108 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t107.{core::Set::addAll}(<core::int*>[let final Never* #t108 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
-                               ^" in "bar" as{TypeError} core::int*]);
-    #t107.{core::Set::add}{Invariant}(null);
+                               ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
+    #t107.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t107;
   block {
     final core::Map<core::String*, core::int*>* #t109 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t110 in <core::String*, core::int*>{"bar": let final Never* #t111 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
-                                              ^" in "bar" as{TypeError} core::int*}.{core::Map::entries})
-        #t109.{core::Map::[]=}{Invariant}(#t110.{core::MapEntry::key}, #t110.{core::MapEntry::value});
-    #t109.{core::Map::[]=}{Invariant}("baz", null);
+                                              ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t109.{core::Map::[]=}(#t110.{core::MapEntry::key}{core::String*}, #t110.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t109.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t109;
   block {
     final core::List<core::int*>* #t112 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t112.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t112.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
-                              ^");
+                              ^"){(core::int*) →* void};
   } =>#t112;
   block {
     final core::Set<core::int*>* #t113 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t113.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t113.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
-                              ^");
-    #t113.{core::Set::add}{Invariant}(null);
+                              ^"){(core::int*) →* core::bool*};
+    #t113.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t113;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
@@ -1021,58 +1021,58 @@
   block {
     final core::List<core::String*>* #t114 = <core::String*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t114.{core::List::add}{Invariant}(let final Never* #t115 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t114.{core::List::add}(let final Never* #t115 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
-                              ^" in 42 as{TypeError} core::String*);
+                              ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t114.{core::List::add}{Invariant}(let final Never* #t116 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t114.{core::List::add}(let final Never* #t116 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
-                                      ^" in 3.14 as{TypeError} core::String*);
+                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t114;
   block {
     final core::Set<core::String*>* #t117 = col::LinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t117.{core::Set::add}{Invariant}(let final Never* #t118 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t117.{core::Set::add}(let final Never* #t118 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
-                              ^" in 42 as{TypeError} core::String*);
+                              ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t117.{core::Set::add}{Invariant}(let final Never* #t119 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t117.{core::Set::add}(let final Never* #t119 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
-                                      ^" in 3.14 as{TypeError} core::String*);
-    #t117.{core::Set::add}{Invariant}(null);
+                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
+    #t117.{core::Set::add}(null){(core::String*) →* core::bool*};
   } =>#t117;
   block {
     final core::Map<core::String*, core::String*>* #t120 = <core::String*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t120.{core::Map::[]=}{Invariant}("bar", let final Never* #t121 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}("bar", let final Never* #t121 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
-                                             ^" in 42 as{TypeError} core::String*);
+                                             ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
     else
-      #t120.{core::Map::[]=}{Invariant}("baz", let final Never* #t122 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}("baz", let final Never* #t122 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
-                                                            ^" in 3.14 as{TypeError} core::String*);
-    #t120.{core::Map::[]=}{Invariant}("baz", null);
+                                                            ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
+    #t120.{core::Map::[]=}("baz", null){(core::String*, core::String*) →* void};
   } =>#t120;
   block {
     final core::List<core::int*>* #t123 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t123.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t123.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
-                              ^");
+                              ^"){(core::int*) →* void};
     else
-      #t123.{core::List::add}{Invariant}(42);
+      #t123.{core::List::add}(42){(core::int*) →* void};
   } =>#t123;
   block {
     final core::Set<core::int*>* #t124 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t124.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t124.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
-                              ^");
+                              ^"){(core::int*) →* core::bool*};
     else
-      #t124.{core::Set::add}{Invariant}(42);
-    #t124.{core::Set::add}{Invariant}(null);
+      #t124.{core::Set::add}(42){(core::int*) →* core::bool*};
+    #t124.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t124;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
@@ -1084,23 +1084,23 @@
   block {
     final core::List<core::int*>* #t125 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t125.{core::List::add}{Invariant}(42);
+      #t125.{core::List::add}(42){(core::int*) →* void};
     else
-      #t125.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t125.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) 42 else ...map];
-                                      ^");
+                                      ^"){(core::int*) →* void};
   } =>#t125;
   block {
     final core::Set<core::int*>* #t126 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t126.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t126.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
-                              ^");
+                              ^"){(core::int*) →* core::bool*};
     else
-      #t126.{core::Set::add}{Invariant}(42);
-    #t126.{core::Set::add}{Invariant}(null);
+      #t126.{core::Set::add}(42){(core::int*) →* core::bool*};
+    #t126.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t126;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
@@ -1132,704 +1132,704 @@
     if(let final Never* #t128 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   List<int> list20 = [if (42) 42];
                           ^" in 42 as{TypeError} core::bool*)
-      #t127.{core::List::add}{Invariant}(42);
+      #t127.{core::List::add}(42){(core::int*) →* void};
   } =>#t127;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t129 = col::LinkedHashSet::•<core::int*>();
     if(let final Never* #t130 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Set<int> set20 = {if (42) 42};
                         ^" in 42 as{TypeError} core::bool*)
-      #t129.{core::Set::add}{Invariant}(42);
+      #t129.{core::Set::add}(42){(core::int*) →* core::bool*};
   } =>#t129;
   core::Map<core::int*, core::int*>* map30 = block {
     final core::Map<core::int*, core::int*>* #t131 = <core::int*, core::int*>{};
     if(let final Never* #t132 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Map<int, int> map30 = {if (42) 42: 42};
                              ^" in 42 as{TypeError} core::bool*)
-      #t131.{core::Map::[]=}{Invariant}(42, 42);
+      #t131.{core::Map::[]=}(42, 42){(core::int*, core::int*) →* void};
   } =>#t131;
   core::List<core::String*>* list40 = block {
     final core::List<core::String*>* #t133 = <core::String*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t133.{core::List::add}{Invariant}(let final Never* #t134 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t133.{core::List::add}(let final Never* #t134 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
-                                                    ^" in true as{TypeError} core::String*);
+                                                    ^" in true as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t133.{core::List::add}{Invariant}(let final Never* #t135 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t133.{core::List::add}(let final Never* #t135 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
-                                                              ^" in 42 as{TypeError} core::String*);
+                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t133;
   core::Set<core::String*>* set40 = block {
     final core::Set<core::String*>* #t136 = col::LinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t136.{core::Set::add}{Invariant}(let final Never* #t137 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t136.{core::Set::add}(let final Never* #t137 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
-                                                  ^" in true as{TypeError} core::String*);
+                                                  ^" in true as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t136.{core::Set::add}{Invariant}(let final Never* #t138 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t136.{core::Set::add}(let final Never* #t138 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
-                                                            ^" in 42 as{TypeError} core::String*);
+                                                            ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
   } =>#t136;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t139 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t139.{core::Map::[]=}{Invariant}(let final Never* #t140 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t139.{core::Map::[]=}(let final Never* #t140 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
-                                                            ^" in true as{TypeError} core::String*, 42);
+                                                            ^" in true as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
     else
-      #t139.{core::Map::[]=}{Invariant}(let final Never* #t141 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t139.{core::Map::[]=}(let final Never* #t141 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
-                                                                          ^" in 42 as{TypeError} core::String*, 42);
+                                                                          ^" in 42 as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
   } =>#t139;
   core::Map<core::int*, core::String*>* map41 = block {
     final core::Map<core::int*, core::String*>* #t142 = <core::int*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t142.{core::Map::[]=}{Invariant}(42, let final Never* #t143 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t142.{core::Map::[]=}(42, let final Never* #t143 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
-                                                                ^" in true as{TypeError} core::String*);
+                                                                ^" in true as{TypeError} core::String*){(core::int*, core::String*) →* void};
     else
-      #t142.{core::Map::[]=}{Invariant}(42, let final Never* #t144 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t142.{core::Map::[]=}(42, let final Never* #t144 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
-                                                                              ^" in 42 as{TypeError} core::String*);
+                                                                              ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   } =>#t142;
 }
 static method testForElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::int* index, core::Map<core::String*, core::int*>* mapStringInt, core::Map<core::String*, core::double*>* mapStringDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t145 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t145.{core::List::add}{Invariant}(42);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t145.{core::List::add}(42){(core::int*) →* void};
   } =>#t145;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t146 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t146.{core::Set::add}{Invariant}(42);
-    #t146.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t146.{core::Set::add}(42){(core::int*) →* core::bool*};
+    #t146.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t146;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t147 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t147.{core::Map::[]=}{Invariant}("bar", 42);
-    #t147.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t147.{core::Map::[]=}("bar", 42){(core::String*, core::int*) →* void};
+    #t147.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t147;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t148 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t148.{core::List::add}{Invariant}(dynVar);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t148.{core::List::add}(dynVar){(dynamic) →* void};
   } =>#t148;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t149 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t149.{core::Set::add}{Invariant}(dynVar);
-    #t149.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t149.{core::Set::add}(dynVar){(dynamic) →* core::bool*};
+    #t149.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t149;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t150 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t150.{core::Map::[]=}{Invariant}("bar", dynVar);
-    #t150.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t150.{core::Map::[]=}("bar", dynVar){(core::String*, dynamic) →* void};
+    #t150.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t150;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t151 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t151.{core::List::add}{Invariant}(<core::int*>[42]);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t151.{core::List::add}(<core::int*>[42]){(core::List<core::int*>*) →* void};
   } =>#t151;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t152 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t152.{core::Set::add}{Invariant}(<core::int*>[42]);
-    #t152.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t152.{core::Set::add}(<core::int*>[42]){(core::List<core::int*>*) →* core::bool*};
+    #t152.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t152;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t153 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t153.{core::Map::[]=}{Invariant}("bar", <core::int*>[42]);
-    #t153.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t153.{core::Map::[]=}("bar", <core::int*>[42]){(core::String*, core::List<core::int*>*) →* void};
+    #t153.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t153;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t154 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t154.{core::List::addAll}{Invariant}(<core::int*>[42]);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t154.{core::List::addAll}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
   } =>#t154;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t155 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t155.{core::Set::addAll}{Invariant}(<core::int*>[42]);
-    #t155.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t155.{core::Set::addAll}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+    #t155.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t155;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t156 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      for (final core::MapEntry<core::String*, core::int*>* #t157 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
-        #t156.{core::Map::[]=}{Invariant}(#t157.{core::MapEntry::key}, #t157.{core::MapEntry::value});
-    #t156.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, core::int*>* #t157 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t156.{core::Map::[]=}(#t157.{core::MapEntry::key}{core::String*}, #t157.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t156.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t156;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t158 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t158.{core::List::addAll}{Invariant}(<dynamic>[dynVar]);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t158.{core::List::addAll}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
   } =>#t158;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t159 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t159.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]);
-    #t159.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t159.{core::Set::addAll}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+    #t159.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t159;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t160 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      for (final core::MapEntry<core::String*, dynamic>* #t161 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
-        #t160.{core::Map::[]=}{Invariant}(#t161.{core::MapEntry::key}, #t161.{core::MapEntry::value});
-    #t160.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, dynamic>* #t161 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+        #t160.{core::Map::[]=}(#t161.{core::MapEntry::key}{core::String*}, #t161.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
+    #t160.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t160;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t162 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t162.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t162.{core::List::addAll}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t162;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t163 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t163.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]);
-    #t163.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t163.{core::Set::addAll}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t163.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t163;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t164 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t165 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
-        #t164.{core::Map::[]=}{Invariant}(#t165.{core::MapEntry::key}, #t165.{core::MapEntry::value});
-    #t164.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t165 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t164.{core::Map::[]=}(#t165.{core::MapEntry::key}{core::String*}, #t165.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t164.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t164;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t166.{core::List::addAll}{Invariant}(<core::int*>[42]);
+        #t166.{core::List::addAll}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
   } =>#t166;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t167.{core::Set::addAll}{Invariant}(<core::int*>[42]);
-    #t167.{core::Set::add}{Invariant}(null);
+        #t167.{core::Set::addAll}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+    #t167.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t167;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t168 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::int*>* #t169 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
-          #t168.{core::Map::[]=}{Invariant}(#t169.{core::MapEntry::key}, #t169.{core::MapEntry::value});
-    #t168.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<core::String*, core::int*>* #t169 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+          #t168.{core::Map::[]=}(#t169.{core::MapEntry::key}{core::String*}, #t169.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t168.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t168;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t170 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t170.{core::List::addAll}{Invariant}(<dynamic>[dynVar]);
+        #t170.{core::List::addAll}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
   } =>#t170;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t171 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t171.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]);
-    #t171.{core::Set::add}{Invariant}(null);
+        #t171.{core::Set::addAll}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+    #t171.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t171;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t172 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, dynamic>* #t173 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
-          #t172.{core::Map::[]=}{Invariant}(#t173.{core::MapEntry::key}, #t173.{core::MapEntry::value});
-    #t172.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<core::String*, dynamic>* #t173 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+          #t172.{core::Map::[]=}(#t173.{core::MapEntry::key}{core::String*}, #t173.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
+    #t172.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t172;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t174 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t174.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]);
+        #t174.{core::List::addAll}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t174;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t175 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t175.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]);
-    #t175.{core::Set::add}{Invariant}(null);
+        #t175.{core::Set::addAll}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t175.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t175;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t176 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t177 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
-          #t176.{core::Map::[]=}{Invariant}(#t177.{core::MapEntry::key}, #t177.{core::MapEntry::value});
-    #t176.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t177 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t176.{core::Map::[]=}(#t177.{core::MapEntry::key}{core::String*}, #t177.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t176.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t176;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t178 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t178.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t178.{core::List::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t178;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t179 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t179.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
-    #t179.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t179.{core::Set::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t179.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t179;
   core::Map<core::String*, core::List<core::int*>*>* map40 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t180 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t181 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
-        #t180.{core::Map::[]=}{Invariant}(#t181.{core::MapEntry::key}, #t181.{core::MapEntry::value});
-    #t180.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t181 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t180.{core::Map::[]=}(#t181.{core::MapEntry::key}{core::String*}, #t181.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t180.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t180;
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t182 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t182.{core::List::addAll}{Invariant}( block {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t182.{core::List::addAll}( block {
         final core::Set<core::List<core::int*>*>* #t183 = col::LinkedHashSet::•<core::List<core::int*>*>();
-        #t183.{core::Set::add}{Invariant}(<core::int*>[]);
-      } =>#t183);
+        #t183.{core::Set::add}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+      } =>#t183){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t182;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t184 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t184.{core::Set::addAll}{Invariant}( block {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t184.{core::Set::addAll}( block {
         final core::Set<core::List<core::int*>*>* #t185 = col::LinkedHashSet::•<core::List<core::int*>*>();
-        #t185.{core::Set::add}{Invariant}(<core::int*>[]);
-      } =>#t185);
-    #t184.{core::Set::add}{Invariant}(null);
+        #t185.{core::Set::add}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+      } =>#t185){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t184.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t184;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t186 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t186.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
+        #t186.{core::List::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t186;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t187 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t187.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
-    #t187.{core::Set::add}{Invariant}(null);
+        #t187.{core::Set::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t187.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t187;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t188 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t189 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
-          #t188.{core::Map::[]=}{Invariant}(#t189.{core::MapEntry::key}, #t189.{core::MapEntry::value});
-    #t188.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t189 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t188.{core::Map::[]=}(#t189.{core::MapEntry::key}{core::String*}, #t189.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t188.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t188;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t190 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t190.{core::List::addAll}{Invariant}(<core::int*>[]);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t190.{core::List::addAll}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
   } =>#t190;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t191 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t191.{core::Set::addAll}{Invariant}(<core::int*>[]);
-    #t191.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t191.{core::Set::addAll}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+    #t191.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t191;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t192 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      for (final core::MapEntry<core::String*, core::int*>* #t193 in <core::String*, core::int*>{}.{core::Map::entries})
-        #t192.{core::Map::[]=}{Invariant}(#t193.{core::MapEntry::key}, #t193.{core::MapEntry::value});
-    #t192.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, core::int*>* #t193 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t192.{core::Map::[]=}(#t193.{core::MapEntry::key}{core::String*}, #t193.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t192.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t192;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t194 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t194.{core::List::addAll}{Invariant}( block {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t194.{core::List::addAll}( block {
         final core::Set<core::int*>* #t195 = col::LinkedHashSet::•<core::int*>();
-      } =>#t195);
+      } =>#t195){(core::Iterable<core::int*>*) →* void};
   } =>#t194;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t196 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t196.{core::Set::addAll}{Invariant}( block {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t196.{core::Set::addAll}( block {
         final core::Set<core::int*>* #t197 = col::LinkedHashSet::•<core::int*>();
-      } =>#t197);
-    #t196.{core::Set::add}{Invariant}(null);
+      } =>#t197){(core::Iterable<core::int*>*) →* void};
+    #t196.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t196;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t198 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t198.{core::List::addAll}{Invariant}(<core::int*>[]);
+        #t198.{core::List::addAll}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
   } =>#t198;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t199 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t199.{core::Set::addAll}{Invariant}(<core::int*>[]);
-    #t199.{core::Set::add}{Invariant}(null);
+        #t199.{core::Set::addAll}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+    #t199.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t199;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t200 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t200.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t200.{core::List::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t200;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t201 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t201.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
-    #t201.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t201.{core::Set::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t201.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t201;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t202 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t203 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
-        #t202.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}, #t203.{core::MapEntry::value});
-    #t202.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t203 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t202.{core::Map::[]=}(#t203.{core::MapEntry::key}{core::String*}, #t203.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t202.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t202;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t204 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t204.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
+        #t204.{core::List::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t204;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t205 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t205.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]);
-    #t205.{core::Set::add}{Invariant}(null);
+        #t205.{core::Set::addAll}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t205.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t205;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t206 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t207 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
-          #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}, #t207.{core::MapEntry::value});
-    #t206.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t207 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t206.{core::Map::[]=}(#t207.{core::MapEntry::key}{core::String*}, #t207.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t206.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t206;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t208 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t208.{core::List::add}{Invariant}(<core::int*>[]);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t208.{core::List::add}(<core::int*>[]){(core::List<core::int*>*) →* void};
   } =>#t208;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t209 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t209.{core::Set::add}{Invariant}(<core::int*>[]);
-    #t209.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t209.{core::Set::add}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+    #t209.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t209;
   core::Map<core::String*, core::List<core::int*>*>* map70 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t210 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t210.{core::Map::[]=}{Invariant}("bar", <core::int*>[]);
-    #t210.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t210.{core::Map::[]=}("bar", <core::int*>[]){(core::String*, core::List<core::int*>*) →* void};
+    #t210.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t210;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t211 = <core::List<core::int*>*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t211.{core::List::add}{Invariant}(<core::int*>[]);
+        #t211.{core::List::add}(<core::int*>[]){(core::List<core::int*>*) →* void};
   } =>#t211;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t212 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t212.{core::Set::add}{Invariant}(<core::int*>[]);
-    #t212.{core::Set::add}{Invariant}(null);
+        #t212.{core::Set::add}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+    #t212.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t212;
   core::Map<core::String*, core::List<core::int*>*>* map71 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t213 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t213.{core::Map::[]=}{Invariant}("bar", <core::int*>[]);
-    #t213.{core::Map::[]=}{Invariant}("baz", null);
+        #t213.{core::Map::[]=}("bar", <core::int*>[]){(core::String*, core::List<core::int*>*) →* void};
+    #t213.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t213;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t214 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t214.{core::List::add}{Invariant}(42);
+        #t214.{core::List::add}(42){(core::num*) →* void};
       else
-        #t214.{core::List::add}{Invariant}(3.14);
+        #t214.{core::List::add}(3.14){(core::num*) →* void};
   } =>#t214;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t215 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t215.{core::Set::add}{Invariant}(42);
+        #t215.{core::Set::add}(42){(core::num*) →* core::bool*};
       else
-        #t215.{core::Set::add}{Invariant}(3.14);
-    #t215.{core::Set::add}{Invariant}(null);
+        #t215.{core::Set::add}(3.14){(core::num*) →* core::bool*};
+    #t215.{core::Set::add}(null){(core::num*) →* core::bool*};
   } =>#t215;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t216 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t216.{core::Map::[]=}{Invariant}("bar", 42);
+        #t216.{core::Map::[]=}("bar", 42){(core::String*, core::num*) →* void};
       else
-        #t216.{core::Map::[]=}{Invariant}("bar", 3.14);
-    #t216.{core::Map::[]=}{Invariant}("baz", null);
+        #t216.{core::Map::[]=}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t216.{core::Map::[]=}("baz", null){(core::String*, core::num*) →* void};
   } =>#t216;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t217 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t217.{core::List::addAll}{Invariant}(listInt);
+        #t217.{core::List::addAll}(listInt){(core::Iterable<core::num*>*) →* void};
       else
-        #t217.{core::List::addAll}{Invariant}(listDouble);
+        #t217.{core::List::addAll}(listDouble){(core::Iterable<core::num*>*) →* void};
   } =>#t217;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t218 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t218.{core::Set::addAll}{Invariant}(listInt);
+        #t218.{core::Set::addAll}(listInt){(core::Iterable<core::num*>*) →* void};
       else
-        #t218.{core::Set::addAll}{Invariant}(listDouble);
-    #t218.{core::Set::add}{Invariant}(null);
+        #t218.{core::Set::addAll}(listDouble){(core::Iterable<core::num*>*) →* void};
+    #t218.{core::Set::add}(null){(core::num*) →* core::bool*};
   } =>#t218;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t219 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::num*>* #t220 in mapStringInt.{core::Map::entries})
-          #t219.{core::Map::[]=}{Invariant}(#t220.{core::MapEntry::key}, #t220.{core::MapEntry::value});
+        for (final core::MapEntry<core::String*, core::num*>* #t220 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+          #t219.{core::Map::[]=}(#t220.{core::MapEntry::key}{core::String*}, #t220.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
       else
-        for (final core::MapEntry<core::String*, core::num*>* #t221 in mapStringDouble.{core::Map::entries})
-          #t219.{core::Map::[]=}{Invariant}(#t221.{core::MapEntry::key}, #t221.{core::MapEntry::value});
-    #t219.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<core::String*, core::num*>* #t221 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+          #t219.{core::Map::[]=}(#t221.{core::MapEntry::key}{core::String*}, #t221.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+    #t219.{core::Map::[]=}("baz", null){(core::String*, core::num*) →* void};
   } =>#t219;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t222 = <dynamic>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t222.{core::List::addAll}{Invariant}(listInt);
+        #t222.{core::List::addAll}(listInt){(core::Iterable<dynamic>*) →* void};
       else
-        #t222.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*);
+        #t222.{core::List::addAll}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
   } =>#t222;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t223 = col::LinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t223.{core::Set::addAll}{Invariant}(listInt);
+        #t223.{core::Set::addAll}(listInt){(core::Iterable<dynamic>*) →* void};
       else
-        #t223.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*);
-    #t223.{core::Set::add}{Invariant}(null);
+        #t223.{core::Set::addAll}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+    #t223.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t223;
   core::Map<dynamic, dynamic>* map82 = block {
     final core::Map<dynamic, dynamic>* #t224 = <dynamic, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<dynamic, dynamic>* #t225 in mapStringInt.{core::Map::entries})
-          #t224.{core::Map::[]=}{Invariant}(#t225.{core::MapEntry::key}, #t225.{core::MapEntry::value});
+        for (final core::MapEntry<dynamic, dynamic>* #t225 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+          #t224.{core::Map::[]=}(#t225.{core::MapEntry::key}{dynamic}, #t225.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
       else
-        for (final core::MapEntry<dynamic, dynamic>* #t226 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries})
-          #t224.{core::Map::[]=}{Invariant}(#t226.{core::MapEntry::key}, #t226.{core::MapEntry::value});
-    #t224.{core::Map::[]=}{Invariant}("baz", null);
+        for (final core::MapEntry<dynamic, dynamic>* #t226 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+          #t224.{core::Map::[]=}(#t226.{core::MapEntry::key}{dynamic}, #t226.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    #t224.{core::Map::[]=}("baz", null){(dynamic, dynamic) →* void};
   } =>#t224;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t227 = <core::num*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t227.{core::List::add}{Invariant}(42);
+        #t227.{core::List::add}(42){(core::num*) →* void};
       else
-        #t227.{core::List::addAll}{Invariant}(listDouble);
+        #t227.{core::List::addAll}(listDouble){(core::Iterable<core::num*>*) →* void};
   } =>#t227;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t228 = col::LinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t228.{core::Set::addAll}{Invariant}(listInt);
+        #t228.{core::Set::addAll}(listInt){(core::Iterable<core::num*>*) →* void};
       else
-        #t228.{core::Set::add}{Invariant}(3.14);
-    #t228.{core::Set::add}{Invariant}(null);
+        #t228.{core::Set::add}(3.14){(core::num*) →* core::bool*};
+    #t228.{core::Set::add}(null){(core::num*) →* core::bool*};
   } =>#t228;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t229 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::num*>* #t230 in mapStringInt.{core::Map::entries})
-          #t229.{core::Map::[]=}{Invariant}(#t230.{core::MapEntry::key}, #t230.{core::MapEntry::value});
+        for (final core::MapEntry<core::String*, core::num*>* #t230 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+          #t229.{core::Map::[]=}(#t230.{core::MapEntry::key}{core::String*}, #t230.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
       else
-        #t229.{core::Map::[]=}{Invariant}("bar", 3.14);
-    #t229.{core::Map::[]=}{Invariant}("baz", null);
+        #t229.{core::Map::[]=}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t229.{core::Map::[]=}("baz", null){(core::String*, core::num*) →* void};
   } =>#t229;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t231 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t231.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t231.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
   } =>#t231;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t232 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t232.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*);
-    #t232.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t232.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t232.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t232;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t233 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t233.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic} core::int*);
-    #t233.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t233.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
+    #t233.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t233;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t234 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       for (final dynamic #t235 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t236 = #t235 as{TypeError} core::int*;
-        #t234.{core::List::add}{Invariant}(#t236);
+        #t234.{core::List::add}(#t236){(core::int*) →* void};
       }
   } =>#t234;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t237 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       for (final dynamic #t238 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t239 = #t238 as{TypeError} core::int*;
-        #t237.{core::Set::add}{Invariant}(#t239);
+        #t237.{core::Set::add}(#t239){(core::int*) →* core::bool*};
       }
-    #t237.{core::Set::add}{Invariant}(null);
+    #t237.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t237;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t240 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      for (final core::MapEntry<dynamic, dynamic>* #t241 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
-        final core::String* #t242 = #t241.{core::MapEntry::key} as{TypeError} core::String*;
-        final core::int* #t243 = #t241.{core::MapEntry::value} as{TypeError} core::int*;
-        #t240.{core::Map::[]=}{Invariant}(#t242, #t243);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<dynamic, dynamic>* #t241 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
+        final core::String* #t242 = #t241.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
+        final core::int* #t243 = #t241.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+        #t240.{core::Map::[]=}(#t242, #t243){(core::String*, core::int*) →* void};
       }
-    #t240.{core::Map::[]=}{Invariant}("baz", null);
+    #t240.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t240;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t244 = <core::int*>[];
-    for (final core::int* #t245 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
-      #t244.{core::List::add}{Invariant}(42);
+    for (final core::int* #t245 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t244.{core::List::add}(42){(core::int*) →* void};
   } =>#t244;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t246 = col::LinkedHashSet::•<core::int*>();
-    for (final core::int* #t247 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
-      #t246.{core::Set::add}{Invariant}(42);
+    for (final core::int* #t247 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t246.{core::Set::add}(42){(core::int*) →* core::bool*};
   } =>#t246;
   core::Map<core::String*, core::int*>* map100 = block {
     final core::Map<core::String*, core::int*>* #t248 = <core::String*, core::int*>{};
-    for (final core::int* #t249 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
-      #t248.{core::Map::[]=}{Invariant}("bar", 42);
+    for (final core::int* #t249 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t248.{core::Map::[]=}("bar", 42){(core::String*, core::int*) →* void};
   } =>#t248;
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t250 = <core::int*>[];
     for (core::int* i in <core::int*>[1, 2, 3])
-      #t250.{core::List::add}{Invariant}(i);
+      #t250.{core::List::add}(i){(core::int*) →* void};
   } =>#t250;
   core::Set<core::int*>* set110 = block {
     final core::Set<core::int*>* #t251 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i in <core::int*>[1, 2, 3])
-      #t251.{core::Set::add}{Invariant}(i);
-    #t251.{core::Set::add}{Invariant}(null);
+      #t251.{core::Set::add}(i){(core::int*) →* core::bool*};
+    #t251.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t251;
   core::Map<core::String*, core::int*>* map110 = block {
     final core::Map<core::String*, core::int*>* #t252 = <core::String*, core::int*>{};
     for (core::int* i in <core::int*>[1, 2, 3])
-      #t252.{core::Map::[]=}{Invariant}("bar", i);
-    #t252.{core::Map::[]=}{Invariant}("baz", null);
+      #t252.{core::Map::[]=}("bar", i){(core::String*, core::int*) →* void};
+    #t252.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t252;
   core::List<core::int*>* list120 = block {
     final core::List<core::int*>* #t253 = <core::int*>[];
     for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
-      #t253.{core::List::add}{Invariant}(i as{TypeError,ForDynamic} core::int*);
+      #t253.{core::List::add}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
   } =>#t253;
   core::Set<core::int*>* set120 = block {
     final core::Set<core::int*>* #t254 = col::LinkedHashSet::•<core::int*>();
     for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
-      #t254.{core::Set::add}{Invariant}(i as{TypeError,ForDynamic} core::int*);
-    #t254.{core::Set::add}{Invariant}(null);
+      #t254.{core::Set::add}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t254.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t254;
   core::Map<core::String*, core::int*>* map120 = block {
     final core::Map<core::String*, core::int*>* #t255 = <core::String*, core::int*>{};
     for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
-      #t255.{core::Map::[]=}{Invariant}("bar", i as{TypeError,ForDynamic} core::int*);
-    #t255.{core::Map::[]=}{Invariant}("baz", null);
+      #t255.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
+    #t255.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t255;
   core::List<core::int*>* list130 = block {
     final core::List<core::int*>* #t256 = <core::int*>[];
-    for (core::int* i = 1; i.{core::num::<}(2); i = i.{core::num::+}(1))
-      #t256.{core::List::add}{Invariant}(i);
+    for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t256.{core::List::add}(i){(core::int*) →* void};
   } =>#t256;
   core::Set<core::int*>* set130 = block {
     final core::Set<core::int*>* #t257 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 1; i.{core::num::<}(2); i = i.{core::num::+}(1))
-      #t257.{core::Set::add}{Invariant}(i);
+    for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t257.{core::Set::add}(i){(core::int*) →* core::bool*};
   } =>#t257;
   core::Map<core::int*, core::int*>* map130 = block {
     final core::Map<core::int*, core::int*>* #t258 = <core::int*, core::int*>{};
-    for (core::int* i = 1; i.{core::num::<}(2); i = i.{core::num::+}(1))
-      #t258.{core::Map::[]=}{Invariant}(i, i);
+    for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t258.{core::Map::[]=}(i, i){(core::int*, core::int*) →* void};
   } =>#t258;
 }
 static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic async {
   block {
     final core::List<core::int*>* #t259 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t259.{core::List::add}{Invariant}(let final Never* #t260 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t259.{core::List::add}(let final Never* #t260 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
-                                            ^" in "bar" as{TypeError} core::int*);
+                                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
   } =>#t259;
   block {
     final core::Set<core::int*>* #t261 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t261.{core::Set::add}{Invariant}(let final Never* #t262 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t261.{core::Set::add}(let final Never* #t262 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
-                                            ^" in "bar" as{TypeError} core::int*);
-    #t261.{core::Set::add}{Invariant}(null);
+                                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
+    #t261.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t261;
   block {
     final core::Map<core::int*, core::int*>* #t263 = <core::int*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t263.{core::Map::[]=}{Invariant}(let final Never* #t264 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t263.{core::Map::[]=}(let final Never* #t264 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final Never* #t265 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
-                                                        ^" in "bar" as{TypeError} core::int*);
-    #t263.{core::Map::[]=}{Invariant}(let final Never* #t266 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                        ^" in "bar" as{TypeError} core::int*){(core::int*, core::int*) →* void};
+    #t263.{core::Map::[]=}(let final Never* #t266 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
-                                                               ^" in "baz" as{TypeError} core::int*, null);
+                                                               ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
   } =>#t263;
   block {
     final core::List<core::int*>* #t267 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t267.{core::List::addAll}{Invariant}(<core::int*>[let final Never* #t268 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t267.{core::List::addAll}(<core::int*>[let final Never* #t268 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
-                                                ^" in "bar" as{TypeError} core::int*]);
+                                                ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
   } =>#t267;
   block {
     final core::Set<core::int*>* #t269 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t269.{core::Set::addAll}{Invariant}(<core::int*>[let final Never* #t270 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t269.{core::Set::addAll}(<core::int*>[let final Never* #t270 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
-                                                ^" in "bar" as{TypeError} core::int*]);
-    #t269.{core::Set::add}{Invariant}(null);
+                                                ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
+    #t269.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t269;
   block {
     final core::Map<core::int*, core::int*>* #t271 = <core::int*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       for (final core::MapEntry<core::int*, core::int*>* #t272 in <core::int*, core::int*>{let final Never* #t273 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final Never* #t274 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
-                                                            ^" in "bar" as{TypeError} core::int*}.{core::Map::entries})
-        #t271.{core::Map::[]=}{Invariant}(#t272.{core::MapEntry::key}, #t272.{core::MapEntry::value});
-    #t271.{core::Map::[]=}{Invariant}(let final Never* #t275 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                            ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
+        #t271.{core::Map::[]=}(#t272.{core::MapEntry::key}{core::int*}, #t272.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+    #t271.{core::Map::[]=}(let final Never* #t275 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
-                                                                    ^" in "baz" as{TypeError} core::int*, null);
+                                                                    ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
   } =>#t271;
   block {
     final core::List<core::int*>* #t276 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t276.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t276.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
-                                               ^");
+                                               ^"){(core::int*) →* void};
   } =>#t276;
   block {
     final core::Set<core::int*>* #t277 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t277.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t277.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
-                                               ^");
-    #t277.{core::Set::add}{Invariant}(null);
+                                               ^"){(core::int*) →* core::bool*};
+    #t277.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t277;
   <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
@@ -1840,64 +1840,64 @@
                                                     ^": null};
   block {
     final core::List<core::String*>* #t278 = <core::String*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t278.{core::List::add}{Invariant}(let final Never* #t279 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        #t278.{core::List::add}(let final Never* #t279 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
-                                                             ^" in 42 as{TypeError} core::String*);
+                                                             ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
       else
-        #t278.{core::List::add}{Invariant}(let final Never* #t280 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+        #t278.{core::List::add}(let final Never* #t280 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
-                                                                     ^" in 3.14 as{TypeError} core::String*);
+                                                                     ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t278;
   block {
     final core::Set<core::String*>* #t281 = col::LinkedHashSet::•<core::String*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t281.{core::Set::add}{Invariant}(let final Never* #t282 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        #t281.{core::Set::add}(let final Never* #t282 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
-                                                             ^" in 42 as{TypeError} core::String*);
+                                                             ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
       else
-        #t281.{core::Set::add}{Invariant}(let final Never* #t283 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+        #t281.{core::Set::add}(let final Never* #t283 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
-                                                                     ^" in 3.14 as{TypeError} core::String*);
-    #t281.{core::Set::add}{Invariant}(null);
+                                                                     ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
+    #t281.{core::Set::add}(null){(core::String*) →* core::bool*};
   } =>#t281;
   block {
     final core::Map<core::String*, core::String*>* #t284 = <core::String*, core::String*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t284.{core::Map::[]=}{Invariant}("bar", let final Never* #t285 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        #t284.{core::Map::[]=}("bar", let final Never* #t285 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
-                                                                            ^" in 42 as{TypeError} core::String*);
+                                                                            ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
       else
-        #t284.{core::Map::[]=}{Invariant}("bar", let final Never* #t286 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+        #t284.{core::Map::[]=}("bar", let final Never* #t286 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
-                                                                                           ^" in 3.14 as{TypeError} core::String*);
-    #t284.{core::Map::[]=}{Invariant}("baz", null);
+                                                                                           ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
+    #t284.{core::Map::[]=}("baz", null){(core::String*, core::String*) →* void};
   } =>#t284;
   block {
     final core::List<core::int*>* #t287 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t287.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t287.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
-                                                             ^");
+                                                             ^"){(core::int*) →* void};
       else
-        #t287.{core::List::add}{Invariant}(42);
+        #t287.{core::List::add}(42){(core::int*) →* void};
   } =>#t287;
   block {
     final core::Set<core::int*>* #t288 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t288.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t288.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
-                                                             ^");
+                                                             ^"){(core::int*) →* core::bool*};
       else
-        #t288.{core::Set::add}{Invariant}(42);
-    #t288.{core::Set::add}{Invariant}(null);
+        #t288.{core::Set::add}(42){(core::int*) →* core::bool*};
+    #t288.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t288;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
@@ -1908,26 +1908,26 @@
                                                                      ^": null};
   block {
     final core::List<core::int*>* #t289 = <core::int*>[];
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t289.{core::List::add}{Invariant}(42);
+        #t289.{core::List::add}(42){(core::int*) →* void};
       else
-        #t289.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t289.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
-                                                                     ^");
+                                                                     ^"){(core::int*) →* void};
   } =>#t289;
   block {
     final core::Set<core::int*>* #t290 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t290.{core::Set::add}{Invariant}(42);
+        #t290.{core::Set::add}(42){(core::int*) →* core::bool*};
       else
-        #t290.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t290.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
-                                                                     ^");
-    #t290.{core::Set::add}{Invariant}(null);
+                                                                     ^"){(core::int*) →* core::bool*};
+    #t290.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t290;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
@@ -1943,7 +1943,7 @@
       invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Can't assign to the final variable 'i'.
   <int>[for (i in <int>[1]) i];
              ^";
-      #t291.{core::List::add}{Invariant}(i);
+      #t291.{core::List::add}(i){(core::int*) →* void};
     }
   } =>#t291;
   block {
@@ -1952,9 +1952,9 @@
       invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Can't assign to the final variable 'i'.
   <int>{for (i in <int>[1]) i, null};
              ^";
-      #t293.{core::Set::add}{Invariant}(i);
+      #t293.{core::Set::add}(i){(core::int*) →* core::bool*};
     }
-    #t293.{core::Set::add}{Invariant}(null);
+    #t293.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t293;
   block {
     final core::Map<core::String*, core::int*>* #t295 = <core::String*, core::int*>{};
@@ -1962,9 +1962,9 @@
       invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Can't assign to the final variable 'i'.
 \t<String, int>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
 \t                   ^";
-      #t295.{core::Map::[]=}{Invariant}("bar", i);
+      #t295.{core::Map::[]=}("bar", i){(core::String*, core::int*) →* void};
     }
-    #t295.{core::Map::[]=}{Invariant}("baz", null);
+    #t295.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t295;
   core::List<dynamic>* list10 = block {
     final core::List<dynamic>* #t297 = <dynamic>[];
@@ -1972,7 +1972,7 @@
  - 'Iterable' is from 'dart:core'.
   var list10 = [for (var i in \"not iterable\") i];
                               ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
-      #t297.{core::List::add}{Invariant}(i);
+      #t297.{core::List::add}(i){(dynamic) →* void};
   } =>#t297;
   core::Set<dynamic>* set10 = block {
     final core::Set<dynamic>* #t299 = col::LinkedHashSet::•<dynamic>();
@@ -1980,8 +1980,8 @@
  - 'Iterable' is from 'dart:core'.
   var set10 = {for (var i in \"not iterable\") i, null};
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
-      #t299.{core::Set::add}{Invariant}(i);
-    #t299.{core::Set::add}{Invariant}(null);
+      #t299.{core::Set::add}(i){(dynamic) →* core::bool*};
+    #t299.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t299;
   core::Map<core::String*, dynamic>* map10 = block {
     final core::Map<core::String*, dynamic>* #t301 = <core::String*, dynamic>{};
@@ -1989,8 +1989,8 @@
  - 'Iterable' is from 'dart:core'.
   var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
-      #t301.{core::Map::[]=}{Invariant}("bar", i);
-    #t301.{core::Map::[]=}{Invariant}("baz", null);
+      #t301.{core::Map::[]=}("bar", i){(core::String*, dynamic) →* void};
+    #t301.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t301;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t303 = <core::int*>[];
@@ -1999,7 +1999,7 @@
                                ^" in "not" as{TypeError} core::int*, let final Never* #t305 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
                                       ^" in "int" as{TypeError} core::int*])
-      #t303.{core::List::add}{Invariant}(i);
+      #t303.{core::List::add}(i){(core::int*) →* void};
   } =>#t303;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t306 = col::LinkedHashSet::•<core::int*>();
@@ -2008,8 +2008,8 @@
                               ^" in "not" as{TypeError} core::int*, let final Never* #t308 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
                                      ^" in "int" as{TypeError} core::int*])
-      #t306.{core::Set::add}{Invariant}(i);
-    #t306.{core::Set::add}{Invariant}(null);
+      #t306.{core::Set::add}(i){(core::int*) →* core::bool*};
+    #t306.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t306;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t309 = <core::String*, core::int*>{};
@@ -2018,8 +2018,8 @@
                               ^" in "not" as{TypeError} core::int*, let final Never* #t311 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
                                      ^" in "int" as{TypeError} core::int*])
-      #t309.{core::Map::[]=}{Invariant}("bar", i);
-    #t309.{core::Map::[]=}{Invariant}("baz", null);
+      #t309.{core::Map::[]=}("bar", i){(core::String*, core::int*) →* void};
+    #t309.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t309;
   core::List<dynamic>* list30 = block {
     final core::List<dynamic>* #t312 = <dynamic>[];
@@ -2027,7 +2027,7 @@
  - 'Stream' is from 'dart:async'.
   var list30 = [await for (var i in \"not stream\") i];
                                     ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
-      #t312.{core::List::add}{Invariant}(i);
+      #t312.{core::List::add}(i){(dynamic) →* void};
   } =>#t312;
   core::Set<dynamic>* set30 = block {
     final core::Set<dynamic>* #t314 = col::LinkedHashSet::•<dynamic>();
@@ -2035,8 +2035,8 @@
  - 'Stream' is from 'dart:async'.
   var set30 = {await for (var i in \"not stream\") i, null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
-      #t314.{core::Set::add}{Invariant}(i);
-    #t314.{core::Set::add}{Invariant}(null);
+      #t314.{core::Set::add}(i){(dynamic) →* core::bool*};
+    #t314.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t314;
   core::Map<core::String*, dynamic>* map30 = block {
     final core::Map<core::String*, dynamic>* #t316 = <core::String*, dynamic>{};
@@ -2044,8 +2044,8 @@
  - 'Stream' is from 'dart:async'.
   var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
-      #t316.{core::Map::[]=}{Invariant}("bar", i);
-    #t316.{core::Map::[]=}{Invariant}("baz", null);
+      #t316.{core::Map::[]=}("bar", i){(core::String*, dynamic) →* void};
+    #t316.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t316;
   core::List<core::int*>* list40 = block {
     final core::List<core::int*>* #t318 = <core::int*>[];
@@ -2054,7 +2054,7 @@
                                                          ^" in "not" as{TypeError} core::int*, let final Never* #t320 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
                                                                 ^" in "int" as{TypeError} core::int*]))
-      #t318.{core::List::add}{Invariant}(i);
+      #t318.{core::List::add}(i){(core::int*) →* void};
   } =>#t318;
   core::Set<core::int*>* set40 = block {
     final core::Set<core::int*>* #t321 = col::LinkedHashSet::•<core::int*>();
@@ -2063,8 +2063,8 @@
                                                         ^" in "not" as{TypeError} core::int*, let final Never* #t323 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
                                                                ^" in "int" as{TypeError} core::int*]))
-      #t321.{core::Set::add}{Invariant}(i);
-    #t321.{core::Set::add}{Invariant}(null);
+      #t321.{core::Set::add}(i){(core::int*) →* core::bool*};
+    #t321.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t321;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t324 = <core::String*, core::int*>{};
@@ -2073,82 +2073,82 @@
                                                         ^" in "not" as{TypeError} core::int*, let final Never* #t326 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
                                                                ^" in "int" as{TypeError} core::int*]))
-      #t324.{core::Map::[]=}{Invariant}("bar", i);
-    #t324.{core::Map::[]=}{Invariant}("baz", null);
+      #t324.{core::Map::[]=}("bar", i){(core::String*, core::int*) →* void};
+    #t324.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t324;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t327 = <core::int*>[];
     for (; ; )
-      #t327.{core::List::add}{Invariant}(42);
+      #t327.{core::List::add}(42){(core::int*) →* void};
   } =>#t327;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t328 = col::LinkedHashSet::•<core::int*>();
     for (; ; )
-      #t328.{core::Set::add}{Invariant}(42);
-    #t328.{core::Set::add}{Invariant}(null);
+      #t328.{core::Set::add}(42){(core::int*) →* core::bool*};
+    #t328.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t328;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t329 = <core::String*, core::int*>{};
     for (; ; )
-      #t329.{core::Map::[]=}{Invariant}("bar", 42);
-    #t329.{core::Map::[]=}{Invariant}("baz", null);
+      #t329.{core::Map::[]=}("bar", 42){(core::String*, core::int*) →* void};
+    #t329.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t329;
   core::List<core::int*>* list60 = block {
     final core::List<core::int*>* #t330 = <core::int*>[];
     for (; let final Never* #t331 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var list60 = [for (; \"not bool\";) 42];
                        ^" in "not bool" as{TypeError} core::bool*; )
-      #t330.{core::List::add}{Invariant}(42);
+      #t330.{core::List::add}(42){(core::int*) →* void};
   } =>#t330;
   core::Set<core::int*>* set60 = block {
     final core::Set<core::int*>* #t332 = col::LinkedHashSet::•<core::int*>();
     for (; let final Never* #t333 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var set60 = {for (; \"not bool\";) 42, null};
                       ^" in "not bool" as{TypeError} core::bool*; )
-      #t332.{core::Set::add}{Invariant}(42);
-    #t332.{core::Set::add}{Invariant}(null);
+      #t332.{core::Set::add}(42){(core::int*) →* core::bool*};
+    #t332.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t332;
   core::Map<core::String*, core::int*>* map60 = block {
     final core::Map<core::String*, core::int*>* #t334 = <core::String*, core::int*>{};
     for (; let final Never* #t335 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
                       ^" in "not bool" as{TypeError} core::bool*; )
-      #t334.{core::Map::[]=}{Invariant}("bar", 42);
-    #t334.{core::Map::[]=}{Invariant}("baz", null);
+      #t334.{core::Map::[]=}("bar", 42){(core::String*, core::int*) →* void};
+    #t334.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t334;
 }
 static method testForElementErrorsNotAsync(asy::Stream<core::int*>* stream) → dynamic {
   block {
     final core::List<core::int*>* #t336 = <core::int*>[];
     await for (core::int* i in stream)
-      #t336.{core::List::add}{Invariant}(i);
+      #t336.{core::List::add}(i){(core::int*) →* void};
   } =>#t336;
   block {
     final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
     await for (core::int* i in stream)
-      #t337.{core::Set::add}{Invariant}(i);
+      #t337.{core::Set::add}(i){(core::int*) →* core::bool*};
   } =>#t337;
   block {
     final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
     await for (core::int* i in stream)
-      #t338.{core::Map::[]=}{Invariant}("bar", i);
+      #t338.{core::Map::[]=}("bar", i){(core::String*, core::int*) →* void};
   } =>#t338;
 }
 static method testPromotion(self::A* a) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t339 = <core::int*>[];
     if(a is self::B*)
-      #t339.{core::List::add}{Invariant}(a{self::B*}.{self::B::foo});
+      #t339.{core::List::add}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* void};
   } =>#t339;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t340 = col::LinkedHashSet::•<core::int*>();
     if(a is self::B*)
-      #t340.{core::Set::add}{Invariant}(a{self::B*}.{self::B::foo});
+      #t340.{core::Set::add}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* core::bool*};
   } =>#t340;
   core::Map<core::int*, core::int*>* map10 = block {
     final core::Map<core::int*, core::int*>* #t341 = <core::int*, core::int*>{};
     if(a is self::B*)
-      #t341.{core::Map::[]=}{Invariant}(a{self::B*}.{self::B::foo}, a{self::B*}.{self::B::foo});
+      #t341.{core::Map::[]=}(a{self::B*}.{self::B::foo}{core::int*}, a{self::B*}.{self::B::foo}{core::int*}){(core::int*, core::int*) →* void};
   } =>#t341;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
index ce26d83..d0aa370 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
@@ -455,205 +455,205 @@
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t1 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t1.{core::List::add}{Invariant}(42);
+      #t1.{core::List::add}(42){(core::int*) →* void};
   } =>#t1;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t2 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t2.{core::Set::add}{Invariant}(42);
-    #t2.{core::Set::add}{Invariant}(null);
+      #t2.{core::Set::add}(42){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t2;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t3 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t3.{core::Map::[]=}{Invariant}("bar", 42);
-    #t3.{core::Map::[]=}{Invariant}("baz", null);
+      #t3.{core::Map::[]=}("bar", 42){(core::String*, core::int*) →* void};
+    #t3.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t3;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t4 = core::_GrowableList::•<dynamic>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t4.{core::List::add}{Invariant}(dynVar);
+      #t4.{core::List::add}(dynVar){(dynamic) →* void};
   } =>#t4;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t5 = new col::_CompactLinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t5.{core::Set::add}{Invariant}(dynVar);
-    #t5.{core::Set::add}{Invariant}(null);
+      #t5.{core::Set::add}(dynVar){(dynamic) →* core::bool*};
+    #t5.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t5;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t6 = <core::String*, dynamic>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t6.{core::Map::[]=}{Invariant}("bar", dynVar);
-    #t6.{core::Map::[]=}{Invariant}("baz", null);
+      #t6.{core::Map::[]=}("bar", dynVar){(core::String*, dynamic) →* void};
+    #t6.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t6;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t7 = core::_GrowableList::•<core::List<core::int*>*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t7.{core::List::add}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
+      #t7.{core::List::add}(core::_GrowableList::_literal1<core::int*>(42)){(core::List<core::int*>*) →* void};
   } =>#t7;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t8 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t8.{core::Set::add}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
-    #t8.{core::Set::add}{Invariant}(null);
+      #t8.{core::Set::add}(core::_GrowableList::_literal1<core::int*>(42)){(core::List<core::int*>*) →* core::bool*};
+    #t8.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t8;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t9 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t9.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::_literal1<core::int*>(42));
-    #t9.{core::Map::[]=}{Invariant}("baz", null);
+      #t9.{core::Map::[]=}("bar", core::_GrowableList::_literal1<core::int*>(42)){(core::String*, core::List<core::int*>*) →* void};
+    #t9.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t9;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t10 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t10.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
+      #t10.{core::List::addAll}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
   } =>#t10;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t11 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t11.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
-    #t11.{core::Set::add}{Invariant}(null);
+      #t11.{core::Set::addAll}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
+    #t11.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t11;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t12 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": 42}.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t13 = :sync-for-iterator.{core::Iterator::current};
-        #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}, #t13.{core::MapEntry::value});
+        #t12.{core::Map::[]=}(#t13.{core::MapEntry::key}{core::String*}, #t13.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-    #t12.{core::Map::[]=}{Invariant}("baz", null);
+    #t12.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t12;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t14 = core::_GrowableList::•<dynamic>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t14.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar));
+      #t14.{core::List::addAll}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
   } =>#t14;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t15 = new col::_CompactLinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t15.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar));
-    #t15.{core::Set::add}{Invariant}(null);
+      #t15.{core::Set::addAll}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
+    #t15.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t15;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t16 = <core::String*, dynamic>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
-      core::Iterator<core::MapEntry<core::String*, dynamic>>* :sync-for-iterator = <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, dynamic>>* :sync-for-iterator = <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t17 = :sync-for-iterator.{core::Iterator::current};
-        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}, #t17.{core::MapEntry::value});
+        #t16.{core::Map::[]=}(#t17.{core::MapEntry::key}{core::String*}, #t17.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
       }
     }
-    #t16.{core::Map::[]=}{Invariant}("baz", null);
+    #t16.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t16;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t18 = core::_GrowableList::•<core::List<core::int*>*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t18.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42)));
+      #t18.{core::List::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t18;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t19 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t19.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42)));
-    #t19.{core::Set::add}{Invariant}(null);
+      #t19.{core::Set::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t19.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t19;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t20 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
-      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::_literal1<core::int*>(42)}.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::_literal1<core::int*>(42)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t21 = :sync-for-iterator.{core::Iterator::current};
-        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
+        #t20.{core::Map::[]=}(#t21.{core::MapEntry::key}{core::String*}, #t21.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
       }
     }
-    #t20.{core::Map::[]=}{Invariant}("baz", null);
+    #t20.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t20;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t22 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t22.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
+        #t22.{core::List::addAll}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
   } =>#t22;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t23 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t23.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
-    #t23.{core::Set::add}{Invariant}(null);
+        #t23.{core::Set::addAll}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
+    #t23.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t23;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t24 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": 42}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t25 = :sync-for-iterator.{core::Iterator::current};
-          #t24.{core::Map::[]=}{Invariant}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
+          #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}{core::String*}, #t25.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
         }
       }
-    #t24.{core::Map::[]=}{Invariant}("baz", null);
+    #t24.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t24;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t26 = core::_GrowableList::•<dynamic>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t26.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar));
+        #t26.{core::List::addAll}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
   } =>#t26;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t27 = new col::_CompactLinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t27.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar));
-    #t27.{core::Set::add}{Invariant}(null);
+        #t27.{core::Set::addAll}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
+    #t27.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t27;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t28 = <core::String*, dynamic>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, dynamic>>* :sync-for-iterator = <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, dynamic>>* :sync-for-iterator = <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t29 = :sync-for-iterator.{core::Iterator::current};
-          #t28.{core::Map::[]=}{Invariant}(#t29.{core::MapEntry::key}, #t29.{core::MapEntry::value});
+          #t28.{core::Map::[]=}(#t29.{core::MapEntry::key}{core::String*}, #t29.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
         }
       }
-    #t28.{core::Map::[]=}{Invariant}("baz", null);
+    #t28.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t28;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t30 = core::_GrowableList::•<core::List<core::int*>*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t30.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42)));
+        #t30.{core::List::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t30;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t31 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t31.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42)));
-    #t31.{core::Set::add}{Invariant}(null);
+        #t31.{core::Set::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t31.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t31;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t32 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::_literal1<core::int*>(42)}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::_literal1<core::int*>(42)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 = :sync-for-iterator.{core::Iterator::current};
-          #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
+          #t32.{core::Map::[]=}(#t33.{core::MapEntry::key}{core::String*}, #t33.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
         }
       }
-    #t32.{core::Map::[]=}{Invariant}("baz", null);
+    #t32.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t32;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t34 = core::_GrowableList::•<core::List<core::int*>*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t34.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
+      #t34.{core::List::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t34;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t35 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t35.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
-    #t35.{core::Set::add}{Invariant}(null);
+      #t35.{core::Set::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t35.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t35;
   core::Map<core::String*, core::List<core::int*>*>* map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   Map<String, List<int>> map40 = {if (oracle(\"foo\")) ...{\"bar\", []}, \"baz\": null};
@@ -661,304 +661,304 @@
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t36 = core::_GrowableList::•<core::List<core::int*>*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t36.{core::List::addAll}{Invariant}( block {
+      #t36.{core::List::addAll}( block {
         final core::Set<core::List<core::int*>*>* #t37 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-        #t37.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0));
-      } =>#t37);
+        #t37.{core::Set::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
+      } =>#t37){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t36;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t38 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t38.{core::Set::addAll}{Invariant}( block {
+      #t38.{core::Set::addAll}( block {
         final core::Set<core::List<core::int*>*>* #t39 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-        #t39.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0));
-      } =>#t39);
-    #t38.{core::Set::add}{Invariant}(null);
+        #t39.{core::Set::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
+      } =>#t39){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t38.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t38;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t40 = core::_GrowableList::•<core::List<core::int*>*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t40.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
+        #t40.{core::List::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t40;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t41 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t41.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
-    #t41.{core::Set::add}{Invariant}(null);
+        #t41.{core::Set::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t41.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t41;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t42 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t43 = :sync-for-iterator.{core::Iterator::current};
-          #t42.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}, #t43.{core::MapEntry::value});
+          #t42.{core::Map::[]=}(#t43.{core::MapEntry::key}{core::String*}, #t43.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
         }
       }
-    #t42.{core::Map::[]=}{Invariant}("baz", null);
+    #t42.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t42;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t44 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t44.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0));
+      #t44.{core::List::addAll}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
   } =>#t44;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t45 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t45.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0));
-    #t45.{core::Set::add}{Invariant}(null);
+      #t45.{core::Set::addAll}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
+    #t45.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t45;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t46 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{}.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t47 = :sync-for-iterator.{core::Iterator::current};
-        #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}, #t47.{core::MapEntry::value});
+        #t46.{core::Map::[]=}(#t47.{core::MapEntry::key}{core::String*}, #t47.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-    #t46.{core::Map::[]=}{Invariant}("baz", null);
+    #t46.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t46;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t48 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t48.{core::List::addAll}{Invariant}( block {
+      #t48.{core::List::addAll}( block {
         final core::Set<core::int*>* #t49 = new col::_CompactLinkedHashSet::•<core::int*>();
-      } =>#t49);
+      } =>#t49){(core::Iterable<core::int*>*) →* void};
   } =>#t48;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t50 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t50.{core::Set::addAll}{Invariant}( block {
+      #t50.{core::Set::addAll}( block {
         final core::Set<core::int*>* #t51 = new col::_CompactLinkedHashSet::•<core::int*>();
-      } =>#t51);
-    #t50.{core::Set::add}{Invariant}(null);
+      } =>#t51){(core::Iterable<core::int*>*) →* void};
+    #t50.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t50;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t52 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t52.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0));
+        #t52.{core::List::addAll}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
   } =>#t52;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t53 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t53.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0));
-    #t53.{core::Set::add}{Invariant}(null);
+        #t53.{core::Set::addAll}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
+    #t53.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t53;
   core::Map<core::String*, core::int*>* map52 = block {
     final core::Map<core::String*, core::int*>* #t54 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t55 = :sync-for-iterator.{core::Iterator::current};
-          #t54.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}, #t55.{core::MapEntry::value});
+          #t54.{core::Map::[]=}(#t55.{core::MapEntry::key}{core::String*}, #t55.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
         }
       }
-    #t54.{core::Map::[]=}{Invariant}("baz", null);
+    #t54.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t54;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t56 = core::_GrowableList::•<core::List<core::int*>*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t56.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
+      #t56.{core::List::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t56;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t57 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t57.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
-    #t57.{core::Set::add}{Invariant}(null);
+      #t57.{core::Set::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t57.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t57;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t58 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
-      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t59 = :sync-for-iterator.{core::Iterator::current};
-        #t58.{core::Map::[]=}{Invariant}(#t59.{core::MapEntry::key}, #t59.{core::MapEntry::value});
+        #t58.{core::Map::[]=}(#t59.{core::MapEntry::key}{core::String*}, #t59.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
       }
     }
-    #t58.{core::Map::[]=}{Invariant}("baz", null);
+    #t58.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t58;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t60 = core::_GrowableList::•<core::List<core::int*>*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t60.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
+        #t60.{core::List::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t60;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t61 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t61.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
-    #t61.{core::Set::add}{Invariant}(null);
+        #t61.{core::Set::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t61.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t61;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t62 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 = :sync-for-iterator.{core::Iterator::current};
-          #t62.{core::Map::[]=}{Invariant}(#t63.{core::MapEntry::key}, #t63.{core::MapEntry::value});
+          #t62.{core::Map::[]=}(#t63.{core::MapEntry::key}{core::String*}, #t63.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
         }
       }
-    #t62.{core::Map::[]=}{Invariant}("baz", null);
+    #t62.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t62;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t64 = core::_GrowableList::•<core::List<core::int*>*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t64.{core::List::add}{Invariant}(core::_GrowableList::•<core::int*>(0));
+      #t64.{core::List::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* void};
   } =>#t64;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t65 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t65.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0));
-    #t65.{core::Set::add}{Invariant}(null);
+      #t65.{core::Set::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
+    #t65.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t65;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t66 = core::_GrowableList::•<core::List<core::int*>*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t66.{core::List::add}{Invariant}(core::_GrowableList::•<core::int*>(0));
+        #t66.{core::List::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* void};
   } =>#t66;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t67 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t67.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0));
-    #t67.{core::Set::add}{Invariant}(null);
+        #t67.{core::Set::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
+    #t67.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t67;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t68 = core::_GrowableList::•<core::num*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t68.{core::List::add}{Invariant}(42);
+      #t68.{core::List::add}(42){(core::num*) →* void};
     else
-      #t68.{core::List::add}{Invariant}(3.14);
+      #t68.{core::List::add}(3.14){(core::num*) →* void};
   } =>#t68;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t69 = new col::_CompactLinkedHashSet::•<core::num*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t69.{core::Set::add}{Invariant}(42);
+      #t69.{core::Set::add}(42){(core::num*) →* core::bool*};
     else
-      #t69.{core::Set::add}{Invariant}(3.14);
-    #t69.{core::Set::add}{Invariant}(null);
+      #t69.{core::Set::add}(3.14){(core::num*) →* core::bool*};
+    #t69.{core::Set::add}(null){(core::num*) →* core::bool*};
   } =>#t69;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t70 = <core::String*, core::num*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t70.{core::Map::[]=}{Invariant}("bar", 42);
+      #t70.{core::Map::[]=}("bar", 42){(core::String*, core::num*) →* void};
     else
-      #t70.{core::Map::[]=}{Invariant}("bar", 3.14);
-    #t70.{core::Map::[]=}{Invariant}("baz", null);
+      #t70.{core::Map::[]=}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t70.{core::Map::[]=}("baz", null){(core::String*, core::num*) →* void};
   } =>#t70;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t71 = core::_GrowableList::•<core::num*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t71.{core::List::addAll}{Invariant}(listInt);
+      #t71.{core::List::addAll}(listInt){(core::Iterable<core::num*>*) →* void};
     else
-      #t71.{core::List::addAll}{Invariant}(listDouble);
+      #t71.{core::List::addAll}(listDouble){(core::Iterable<core::num*>*) →* void};
   } =>#t71;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t72 = new col::_CompactLinkedHashSet::•<core::num*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t72.{core::Set::addAll}{Invariant}(listInt);
+      #t72.{core::Set::addAll}(listInt){(core::Iterable<core::num*>*) →* void};
     else
-      #t72.{core::Set::addAll}{Invariant}(listDouble);
-    #t72.{core::Set::add}{Invariant}(null);
+      #t72.{core::Set::addAll}(listDouble){(core::Iterable<core::num*>*) →* void};
+    #t72.{core::Set::add}(null){(core::num*) →* core::bool*};
   } =>#t72;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t73 = <core::String*, core::num*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapToInt.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::num*>>* :sync-for-iterator = mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t74 = :sync-for-iterator.{core::Iterator::current};
-        #t73.{core::Map::[]=}{Invariant}(#t74.{core::MapEntry::key}, #t74.{core::MapEntry::value});
+        #t73.{core::Map::[]=}(#t74.{core::MapEntry::key}{core::String*}, #t74.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
       }
     }
     else {
-      core::Iterator<core::MapEntry<core::String*, core::double*>>* :sync-for-iterator = mapToDouble.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::num*>>* :sync-for-iterator = mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t75 = :sync-for-iterator.{core::Iterator::current};
-        #t73.{core::Map::[]=}{Invariant}(#t75.{core::MapEntry::key}, #t75.{core::MapEntry::value});
+        #t73.{core::Map::[]=}(#t75.{core::MapEntry::key}{core::String*}, #t75.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
       }
     }
-    #t73.{core::Map::[]=}{Invariant}("baz", null);
+    #t73.{core::Map::[]=}("baz", null){(core::String*, core::num*) →* void};
   } =>#t73;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t76 = core::_GrowableList::•<dynamic>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t76.{core::List::addAll}{Invariant}(listInt);
+      #t76.{core::List::addAll}(listInt){(core::Iterable<dynamic>*) →* void};
     else
-      #t76.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*);
+      #t76.{core::List::addAll}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
   } =>#t76;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t77 = new col::_CompactLinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t77.{core::Set::addAll}{Invariant}(listInt);
+      #t77.{core::Set::addAll}(listInt){(core::Iterable<dynamic>*) →* void};
     else
-      #t77.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*);
-    #t77.{core::Set::add}{Invariant}(null);
+      #t77.{core::Set::addAll}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+    #t77.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t77;
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t78 = new col::_CompactLinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t78.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
-                                     ^");
+                                     ^"){(dynamic) →* core::bool*};
     else
-      #t78.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*);
-    #t78.{core::Set::add}{Invariant}(null);
+      #t78.{core::Set::addAll}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+    #t78.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t78;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t79 = core::_GrowableList::•<core::num*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t79.{core::List::add}{Invariant}(42);
+      #t79.{core::List::add}(42){(core::num*) →* void};
     else
-      #t79.{core::List::addAll}{Invariant}(listDouble);
+      #t79.{core::List::addAll}(listDouble){(core::Iterable<core::num*>*) →* void};
   } =>#t79;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t80 = new col::_CompactLinkedHashSet::•<core::num*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t80.{core::Set::addAll}{Invariant}(listInt);
+      #t80.{core::Set::addAll}(listInt){(core::Iterable<core::num*>*) →* void};
     else
-      #t80.{core::Set::add}{Invariant}(3.14);
-    #t80.{core::Set::add}{Invariant}(null);
+      #t80.{core::Set::add}(3.14){(core::num*) →* core::bool*};
+    #t80.{core::Set::add}(null){(core::num*) →* core::bool*};
   } =>#t80;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t81 = <core::String*, core::num*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapToInt.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::num*>>* :sync-for-iterator = mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t82 = :sync-for-iterator.{core::Iterator::current};
-        #t81.{core::Map::[]=}{Invariant}(#t82.{core::MapEntry::key}, #t82.{core::MapEntry::value});
+        #t81.{core::Map::[]=}(#t82.{core::MapEntry::key}{core::String*}, #t82.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
       }
     }
     else
-      #t81.{core::Map::[]=}{Invariant}("bar", 3.14);
-    #t81.{core::Map::[]=}{Invariant}("baz", null);
+      #t81.{core::Map::[]=}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t81.{core::Map::[]=}("baz", null){(core::String*, core::num*) →* void};
   } =>#t81;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t83 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t83.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*);
+      #t83.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
   } =>#t83;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t84 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t84.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*);
-    #t84.{core::Set::add}{Invariant}(null);
+      #t84.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t84.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t84;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t85 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t85.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic} core::int*);
-    #t85.{core::Map::[]=}{Invariant}("baz", null);
+      #t85.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
+    #t85.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t85;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t86 = core::_GrowableList::•<core::int*>(0);
@@ -968,7 +968,7 @@
         final dynamic #t87 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t88 = #t87 as{TypeError} core::int*;
-          #t86.{core::List::add}{Invariant}(#t88);
+          #t86.{core::List::add}(#t88){(core::int*) →* void};
         }
       }
     }
@@ -981,111 +981,111 @@
         final dynamic #t90 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t91 = #t90 as{TypeError} core::int*;
-          #t89.{core::Set::add}{Invariant}(#t91);
+          #t89.{core::Set::add}(#t91){(core::int*) →* core::bool*};
         }
       }
     }
-    #t89.{core::Set::add}{Invariant}(null);
+    #t89.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t89;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t92 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t93 = :sync-for-iterator.{core::Iterator::current};
         {
-          final core::String* #t94 = #t93.{core::MapEntry::key} as{TypeError} core::String*;
-          final core::int* #t95 = #t93.{core::MapEntry::value} as{TypeError} core::int*;
-          #t92.{core::Map::[]=}{Invariant}(#t94, #t95);
+          final core::String* #t94 = #t93.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
+          final core::int* #t95 = #t93.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+          #t92.{core::Map::[]=}(#t94, #t95){(core::String*, core::int*) →* void};
         }
       }
     }
-    #t92.{core::Map::[]=}{Invariant}("baz", null);
+    #t92.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t92;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t96 = core::_GrowableList::•<core::int*>(0);
     if(dynVar as{TypeError,ForDynamic} core::bool*)
-      #t96.{core::List::add}{Invariant}(42);
+      #t96.{core::List::add}(42){(core::int*) →* void};
   } =>#t96;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t97 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(dynVar as{TypeError,ForDynamic} core::bool*)
-      #t97.{core::Set::add}{Invariant}(42);
+      #t97.{core::Set::add}(42){(core::int*) →* core::bool*};
   } =>#t97;
   core::Map<core::int*, core::int*>* map100 = block {
     final core::Map<core::int*, core::int*>* #t98 = <core::int*, core::int*>{};
     if(dynVar as{TypeError,ForDynamic} core::bool*)
-      #t98.{core::Map::[]=}{Invariant}(42, 42);
+      #t98.{core::Map::[]=}(42, 42){(core::int*, core::int*) →* void};
   } =>#t98;
 }
 static method testIfElementErrors(core::Map<core::int*, core::int*>* map) → dynamic {
   block {
     final core::List<core::int*>* #t99 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t99.{core::List::add}{Invariant}(let final Never* #t100 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t99.{core::List::add}(let final Never* #t100 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
-                           ^" in "bar" as{TypeError} core::int*);
+                           ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
   } =>#t99;
   block {
     final core::Set<core::int*>* #t101 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t101.{core::Set::add}{Invariant}(let final Never* #t102 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t101.{core::Set::add}(let final Never* #t102 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
-                           ^" in "bar" as{TypeError} core::int*);
-    #t101.{core::Set::add}{Invariant}(null);
+                           ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
+    #t101.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t101;
   block {
     final core::Map<core::String*, core::int*>* #t103 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t103.{core::Map::[]=}{Invariant}("bar", let final Never* #t104 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t103.{core::Map::[]=}("bar", let final Never* #t104 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
-                                          ^" in "bar" as{TypeError} core::int*);
-    #t103.{core::Map::[]=}{Invariant}("baz", null);
+                                          ^" in "bar" as{TypeError} core::int*){(core::String*, core::int*) →* void};
+    #t103.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t103;
   block {
     final core::List<core::int*>* #t105 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t105.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(let final Never* #t106 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t105.{core::List::addAll}(core::_GrowableList::_literal1<core::int*>(let final Never* #t106 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
-                               ^" in "bar" as{TypeError} core::int*));
+                               ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
   } =>#t105;
   block {
     final core::Set<core::int*>* #t107 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t107.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(let final Never* #t108 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t107.{core::Set::addAll}(core::_GrowableList::_literal1<core::int*>(let final Never* #t108 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
-                               ^" in "bar" as{TypeError} core::int*));
-    #t107.{core::Set::add}{Invariant}(null);
+                               ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
+    #t107.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t107;
   block {
     final core::Map<core::String*, core::int*>* #t109 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": let final Never* #t110 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
-                                              ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}.{core::Iterable::iterator};
+                                              ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t111 = :sync-for-iterator.{core::Iterator::current};
-        #t109.{core::Map::[]=}{Invariant}(#t111.{core::MapEntry::key}, #t111.{core::MapEntry::value});
+        #t109.{core::Map::[]=}(#t111.{core::MapEntry::key}{core::String*}, #t111.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-    #t109.{core::Map::[]=}{Invariant}("baz", null);
+    #t109.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t109;
   block {
     final core::List<core::int*>* #t112 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t112.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t112.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
-                              ^");
+                              ^"){(core::int*) →* void};
   } =>#t112;
   block {
     final core::Set<core::int*>* #t113 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t113.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t113.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
-                              ^");
-    #t113.{core::Set::add}{Invariant}(null);
+                              ^"){(core::int*) →* core::bool*};
+    #t113.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t113;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
@@ -1097,58 +1097,58 @@
   block {
     final core::List<core::String*>* #t114 = core::_GrowableList::•<core::String*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t114.{core::List::add}{Invariant}(let final Never* #t115 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t114.{core::List::add}(let final Never* #t115 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
-                              ^" in 42 as{TypeError} core::String*);
+                              ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t114.{core::List::add}{Invariant}(let final Never* #t116 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t114.{core::List::add}(let final Never* #t116 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
-                                      ^" in 3.14 as{TypeError} core::String*);
+                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t114;
   block {
     final core::Set<core::String*>* #t117 = new col::_CompactLinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t117.{core::Set::add}{Invariant}(let final Never* #t118 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t117.{core::Set::add}(let final Never* #t118 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
-                              ^" in 42 as{TypeError} core::String*);
+                              ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t117.{core::Set::add}{Invariant}(let final Never* #t119 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t117.{core::Set::add}(let final Never* #t119 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
-                                      ^" in 3.14 as{TypeError} core::String*);
-    #t117.{core::Set::add}{Invariant}(null);
+                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
+    #t117.{core::Set::add}(null){(core::String*) →* core::bool*};
   } =>#t117;
   block {
     final core::Map<core::String*, core::String*>* #t120 = <core::String*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t120.{core::Map::[]=}{Invariant}("bar", let final Never* #t121 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}("bar", let final Never* #t121 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
-                                             ^" in 42 as{TypeError} core::String*);
+                                             ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
     else
-      #t120.{core::Map::[]=}{Invariant}("baz", let final Never* #t122 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}("baz", let final Never* #t122 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
-                                                            ^" in 3.14 as{TypeError} core::String*);
-    #t120.{core::Map::[]=}{Invariant}("baz", null);
+                                                            ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
+    #t120.{core::Map::[]=}("baz", null){(core::String*, core::String*) →* void};
   } =>#t120;
   block {
     final core::List<core::int*>* #t123 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t123.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t123.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
-                              ^");
+                              ^"){(core::int*) →* void};
     else
-      #t123.{core::List::add}{Invariant}(42);
+      #t123.{core::List::add}(42){(core::int*) →* void};
   } =>#t123;
   block {
     final core::Set<core::int*>* #t124 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t124.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t124.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
-                              ^");
+                              ^"){(core::int*) →* core::bool*};
     else
-      #t124.{core::Set::add}{Invariant}(42);
-    #t124.{core::Set::add}{Invariant}(null);
+      #t124.{core::Set::add}(42){(core::int*) →* core::bool*};
+    #t124.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t124;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
@@ -1160,23 +1160,23 @@
   block {
     final core::List<core::int*>* #t125 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t125.{core::List::add}{Invariant}(42);
+      #t125.{core::List::add}(42){(core::int*) →* void};
     else
-      #t125.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t125.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) 42 else ...map];
-                                      ^");
+                                      ^"){(core::int*) →* void};
   } =>#t125;
   block {
     final core::Set<core::int*>* #t126 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t126.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t126.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
-                              ^");
+                              ^"){(core::int*) →* core::bool*};
     else
-      #t126.{core::Set::add}{Invariant}(42);
-    #t126.{core::Set::add}{Invariant}(null);
+      #t126.{core::Set::add}(42){(core::int*) →* core::bool*};
+    #t126.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t126;
   <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
@@ -1208,660 +1208,660 @@
     if(let final Never* #t128 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   List<int> list20 = [if (42) 42];
                           ^" in 42 as{TypeError} core::bool*)
-      #t127.{core::List::add}{Invariant}(42);
+      #t127.{core::List::add}(42){(core::int*) →* void};
   } =>#t127;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t129 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(let final Never* #t130 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Set<int> set20 = {if (42) 42};
                         ^" in 42 as{TypeError} core::bool*)
-      #t129.{core::Set::add}{Invariant}(42);
+      #t129.{core::Set::add}(42){(core::int*) →* core::bool*};
   } =>#t129;
   core::Map<core::int*, core::int*>* map30 = block {
     final core::Map<core::int*, core::int*>* #t131 = <core::int*, core::int*>{};
     if(let final Never* #t132 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Map<int, int> map30 = {if (42) 42: 42};
                              ^" in 42 as{TypeError} core::bool*)
-      #t131.{core::Map::[]=}{Invariant}(42, 42);
+      #t131.{core::Map::[]=}(42, 42){(core::int*, core::int*) →* void};
   } =>#t131;
   core::List<core::String*>* list40 = block {
     final core::List<core::String*>* #t133 = core::_GrowableList::•<core::String*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t133.{core::List::add}{Invariant}(let final Never* #t134 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t133.{core::List::add}(let final Never* #t134 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
-                                                    ^" in true as{TypeError} core::String*);
+                                                    ^" in true as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t133.{core::List::add}{Invariant}(let final Never* #t135 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t133.{core::List::add}(let final Never* #t135 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
-                                                              ^" in 42 as{TypeError} core::String*);
+                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t133;
   core::Set<core::String*>* set40 = block {
     final core::Set<core::String*>* #t136 = new col::_CompactLinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t136.{core::Set::add}{Invariant}(let final Never* #t137 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t136.{core::Set::add}(let final Never* #t137 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
-                                                  ^" in true as{TypeError} core::String*);
+                                                  ^" in true as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t136.{core::Set::add}{Invariant}(let final Never* #t138 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t136.{core::Set::add}(let final Never* #t138 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
-                                                            ^" in 42 as{TypeError} core::String*);
+                                                            ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
   } =>#t136;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t139 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t139.{core::Map::[]=}{Invariant}(let final Never* #t140 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t139.{core::Map::[]=}(let final Never* #t140 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
-                                                            ^" in true as{TypeError} core::String*, 42);
+                                                            ^" in true as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
     else
-      #t139.{core::Map::[]=}{Invariant}(let final Never* #t141 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t139.{core::Map::[]=}(let final Never* #t141 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
-                                                                          ^" in 42 as{TypeError} core::String*, 42);
+                                                                          ^" in 42 as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
   } =>#t139;
   core::Map<core::int*, core::String*>* map41 = block {
     final core::Map<core::int*, core::String*>* #t142 = <core::int*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t142.{core::Map::[]=}{Invariant}(42, let final Never* #t143 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t142.{core::Map::[]=}(42, let final Never* #t143 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
-                                                                ^" in true as{TypeError} core::String*);
+                                                                ^" in true as{TypeError} core::String*){(core::int*, core::String*) →* void};
     else
-      #t142.{core::Map::[]=}{Invariant}(42, let final Never* #t144 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t142.{core::Map::[]=}(42, let final Never* #t144 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
-                                                                              ^" in 42 as{TypeError} core::String*);
+                                                                              ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   } =>#t142;
 }
 static method testForElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::int* index, core::Map<core::String*, core::int*>* mapStringInt, core::Map<core::String*, core::double*>* mapStringDouble) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t145 = core::_GrowableList::•<core::int*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t145.{core::List::add}{Invariant}(42);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t145.{core::List::add}(42){(core::int*) →* void};
   } =>#t145;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t146 = new col::_CompactLinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t146.{core::Set::add}{Invariant}(42);
-    #t146.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t146.{core::Set::add}(42){(core::int*) →* core::bool*};
+    #t146.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t146;
   core::Map<core::String*, core::int*>* map10 = block {
     final core::Map<core::String*, core::int*>* #t147 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t147.{core::Map::[]=}{Invariant}("bar", 42);
-    #t147.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t147.{core::Map::[]=}("bar", 42){(core::String*, core::int*) →* void};
+    #t147.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t147;
   core::List<dynamic>* list11 = block {
     final core::List<dynamic>* #t148 = core::_GrowableList::•<dynamic>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t148.{core::List::add}{Invariant}(dynVar);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t148.{core::List::add}(dynVar){(dynamic) →* void};
   } =>#t148;
   core::Set<dynamic>* set11 = block {
     final core::Set<dynamic>* #t149 = new col::_CompactLinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t149.{core::Set::add}{Invariant}(dynVar);
-    #t149.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t149.{core::Set::add}(dynVar){(dynamic) →* core::bool*};
+    #t149.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t149;
   core::Map<core::String*, dynamic>* map11 = block {
     final core::Map<core::String*, dynamic>* #t150 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t150.{core::Map::[]=}{Invariant}("bar", dynVar);
-    #t150.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t150.{core::Map::[]=}("bar", dynVar){(core::String*, dynamic) →* void};
+    #t150.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t150;
   core::List<core::List<core::int*>*>* list12 = block {
     final core::List<core::List<core::int*>*>* #t151 = core::_GrowableList::•<core::List<core::int*>*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t151.{core::List::add}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t151.{core::List::add}(core::_GrowableList::_literal1<core::int*>(42)){(core::List<core::int*>*) →* void};
   } =>#t151;
   core::Set<core::List<core::int*>*>* set12 = block {
     final core::Set<core::List<core::int*>*>* #t152 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t152.{core::Set::add}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
-    #t152.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t152.{core::Set::add}(core::_GrowableList::_literal1<core::int*>(42)){(core::List<core::int*>*) →* core::bool*};
+    #t152.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t152;
   core::Map<core::String*, core::List<core::int*>*>* map12 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t153 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t153.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::_literal1<core::int*>(42));
-    #t153.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t153.{core::Map::[]=}("bar", core::_GrowableList::_literal1<core::int*>(42)){(core::String*, core::List<core::int*>*) →* void};
+    #t153.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t153;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t154 = core::_GrowableList::•<core::int*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t154.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t154.{core::List::addAll}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
   } =>#t154;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t155 = new col::_CompactLinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t155.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
-    #t155.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t155.{core::Set::addAll}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
+    #t155.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t155;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t156 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": 42}.{core::Map::entries}.{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t157 = :sync-for-iterator.{core::Iterator::current};
-        #t156.{core::Map::[]=}{Invariant}(#t157.{core::MapEntry::key}, #t157.{core::MapEntry::value});
+        #t156.{core::Map::[]=}(#t157.{core::MapEntry::key}{core::String*}, #t157.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-    #t156.{core::Map::[]=}{Invariant}("baz", null);
+    #t156.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t156;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t158 = core::_GrowableList::•<dynamic>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t158.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar));
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t158.{core::List::addAll}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
   } =>#t158;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t159 = new col::_CompactLinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t159.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar));
-    #t159.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t159.{core::Set::addAll}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
+    #t159.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t159;
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t160 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<core::MapEntry<core::String*, dynamic>>* :sync-for-iterator = <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}.{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      core::Iterator<core::MapEntry<core::String*, dynamic>>* :sync-for-iterator = <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t161 = :sync-for-iterator.{core::Iterator::current};
-        #t160.{core::Map::[]=}{Invariant}(#t161.{core::MapEntry::key}, #t161.{core::MapEntry::value});
+        #t160.{core::Map::[]=}(#t161.{core::MapEntry::key}{core::String*}, #t161.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
       }
     }
-    #t160.{core::Map::[]=}{Invariant}("baz", null);
+    #t160.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t160;
   core::List<core::List<core::int*>*>* list22 = block {
     final core::List<core::List<core::int*>*>* #t162 = core::_GrowableList::•<core::List<core::int*>*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t162.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42)));
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t162.{core::List::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t162;
   core::Set<core::List<core::int*>*>* set22 = block {
     final core::Set<core::List<core::int*>*>* #t163 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t163.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42)));
-    #t163.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t163.{core::Set::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t163.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t163;
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t164 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::_literal1<core::int*>(42)}.{core::Map::entries}.{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::_literal1<core::int*>(42)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t165 = :sync-for-iterator.{core::Iterator::current};
-        #t164.{core::Map::[]=}{Invariant}(#t165.{core::MapEntry::key}, #t165.{core::MapEntry::value});
+        #t164.{core::Map::[]=}(#t165.{core::MapEntry::key}{core::String*}, #t165.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
       }
     }
-    #t164.{core::Map::[]=}{Invariant}("baz", null);
+    #t164.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t164;
   core::List<core::int*>* list30 = block {
     final core::List<core::int*>* #t166 = core::_GrowableList::•<core::int*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t166.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
+        #t166.{core::List::addAll}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
   } =>#t166;
   core::Set<core::int*>* set30 = block {
     final core::Set<core::int*>* #t167 = new col::_CompactLinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t167.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
-    #t167.{core::Set::add}{Invariant}(null);
+        #t167.{core::Set::addAll}(core::_GrowableList::_literal1<core::int*>(42)){(core::Iterable<core::int*>*) →* void};
+    #t167.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t167;
   core::Map<core::String*, core::int*>* map30 = block {
     final core::Map<core::String*, core::int*>* #t168 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": 42}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t169 = :sync-for-iterator.{core::Iterator::current};
-          #t168.{core::Map::[]=}{Invariant}(#t169.{core::MapEntry::key}, #t169.{core::MapEntry::value});
+          #t168.{core::Map::[]=}(#t169.{core::MapEntry::key}{core::String*}, #t169.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
         }
       }
-    #t168.{core::Map::[]=}{Invariant}("baz", null);
+    #t168.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t168;
   core::List<dynamic>* list31 = block {
     final core::List<dynamic>* #t170 = core::_GrowableList::•<dynamic>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t170.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar));
+        #t170.{core::List::addAll}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
   } =>#t170;
   core::Set<dynamic>* set31 = block {
     final core::Set<dynamic>* #t171 = new col::_CompactLinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t171.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar));
-    #t171.{core::Set::add}{Invariant}(null);
+        #t171.{core::Set::addAll}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>*) →* void};
+    #t171.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t171;
   core::Map<core::String*, dynamic>* map31 = block {
     final core::Map<core::String*, dynamic>* #t172 = <core::String*, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, dynamic>>* :sync-for-iterator = <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, dynamic>>* :sync-for-iterator = <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t173 = :sync-for-iterator.{core::Iterator::current};
-          #t172.{core::Map::[]=}{Invariant}(#t173.{core::MapEntry::key}, #t173.{core::MapEntry::value});
+          #t172.{core::Map::[]=}(#t173.{core::MapEntry::key}{core::String*}, #t173.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
         }
       }
-    #t172.{core::Map::[]=}{Invariant}("baz", null);
+    #t172.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
   } =>#t172;
   core::List<core::List<core::int*>*>* list33 = block {
     final core::List<core::List<core::int*>*>* #t174 = core::_GrowableList::•<core::List<core::int*>*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t174.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42)));
+        #t174.{core::List::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t174;
   core::Set<core::List<core::int*>*>* set33 = block {
     final core::Set<core::List<core::int*>*>* #t175 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t175.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42)));
-    #t175.{core::Set::add}{Invariant}(null);
+        #t175.{core::Set::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(42))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t175.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t175;
   core::Map<core::String*, core::List<core::int*>*>* map33 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t176 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::_literal1<core::int*>(42)}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::_literal1<core::int*>(42)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t177 = :sync-for-iterator.{core::Iterator::current};
-          #t176.{core::Map::[]=}{Invariant}(#t177.{core::MapEntry::key}, #t177.{core::MapEntry::value});
+          #t176.{core::Map::[]=}(#t177.{core::MapEntry::key}{core::String*}, #t177.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
         }
       }
-    #t176.{core::Map::[]=}{Invariant}("baz", null);
+    #t176.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t176;
   core::List<core::List<core::int*>*>* list40 = block {
     final core::List<core::List<core::int*>*>* #t178 = core::_GrowableList::•<core::List<core::int*>*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t178.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t178.{core::List::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t178;
   core::Set<core::List<core::int*>*>* set40 = block {
     final core::Set<core::List<core::int*>*>* #t179 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t179.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
-    #t179.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t179.{core::Set::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t179.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t179;
   core::Map<core::String*, core::List<core::int*>*>* map40 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t180 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}.{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t181 = :sync-for-iterator.{core::Iterator::current};
-        #t180.{core::Map::[]=}{Invariant}(#t181.{core::MapEntry::key}, #t181.{core::MapEntry::value});
+        #t180.{core::Map::[]=}(#t181.{core::MapEntry::key}{core::String*}, #t181.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
       }
     }
-    #t180.{core::Map::[]=}{Invariant}("baz", null);
+    #t180.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t180;
   core::List<core::List<core::int*>*>* list41 = block {
     final core::List<core::List<core::int*>*>* #t182 = core::_GrowableList::•<core::List<core::int*>*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t182.{core::List::addAll}{Invariant}( block {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t182.{core::List::addAll}( block {
         final core::Set<core::List<core::int*>*>* #t183 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-        #t183.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0));
-      } =>#t183);
+        #t183.{core::Set::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
+      } =>#t183){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t182;
   core::Set<core::List<core::int*>*>* set41 = block {
     final core::Set<core::List<core::int*>*>* #t184 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t184.{core::Set::addAll}{Invariant}( block {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t184.{core::Set::addAll}( block {
         final core::Set<core::List<core::int*>*>* #t185 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-        #t185.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0));
-      } =>#t185);
-    #t184.{core::Set::add}{Invariant}(null);
+        #t185.{core::Set::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
+      } =>#t185){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t184.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t184;
   core::List<core::List<core::int*>*>* list42 = block {
     final core::List<core::List<core::int*>*>* #t186 = core::_GrowableList::•<core::List<core::int*>*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t186.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
+        #t186.{core::List::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t186;
   core::Set<core::List<core::int*>*>* set42 = block {
     final core::Set<core::List<core::int*>*>* #t187 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t187.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
-    #t187.{core::Set::add}{Invariant}(null);
+        #t187.{core::Set::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t187.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t187;
   core::Map<core::String*, core::List<core::int*>*>* map42 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t188 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t189 = :sync-for-iterator.{core::Iterator::current};
-          #t188.{core::Map::[]=}{Invariant}(#t189.{core::MapEntry::key}, #t189.{core::MapEntry::value});
+          #t188.{core::Map::[]=}(#t189.{core::MapEntry::key}{core::String*}, #t189.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
         }
       }
-    #t188.{core::Map::[]=}{Invariant}("baz", null);
+    #t188.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t188;
   core::List<core::int*>* list50 = block {
     final core::List<core::int*>* #t190 = core::_GrowableList::•<core::int*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t190.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0));
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t190.{core::List::addAll}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
   } =>#t190;
   core::Set<core::int*>* set50 = block {
     final core::Set<core::int*>* #t191 = new col::_CompactLinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t191.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0));
-    #t191.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t191.{core::Set::addAll}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
+    #t191.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t191;
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t192 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{}.{core::Map::entries}.{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t193 = :sync-for-iterator.{core::Iterator::current};
-        #t192.{core::Map::[]=}{Invariant}(#t193.{core::MapEntry::key}, #t193.{core::MapEntry::value});
+        #t192.{core::Map::[]=}(#t193.{core::MapEntry::key}{core::String*}, #t193.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-    #t192.{core::Map::[]=}{Invariant}("baz", null);
+    #t192.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t192;
   core::List<core::int*>* list51 = block {
     final core::List<core::int*>* #t194 = core::_GrowableList::•<core::int*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t194.{core::List::addAll}{Invariant}( block {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t194.{core::List::addAll}( block {
         final core::Set<core::int*>* #t195 = new col::_CompactLinkedHashSet::•<core::int*>();
-      } =>#t195);
+      } =>#t195){(core::Iterable<core::int*>*) →* void};
   } =>#t194;
   core::Set<core::int*>* set51 = block {
     final core::Set<core::int*>* #t196 = new col::_CompactLinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t196.{core::Set::addAll}{Invariant}( block {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t196.{core::Set::addAll}( block {
         final core::Set<core::int*>* #t197 = new col::_CompactLinkedHashSet::•<core::int*>();
-      } =>#t197);
-    #t196.{core::Set::add}{Invariant}(null);
+      } =>#t197){(core::Iterable<core::int*>*) →* void};
+    #t196.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t196;
   core::List<core::int*>* list52 = block {
     final core::List<core::int*>* #t198 = core::_GrowableList::•<core::int*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t198.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0));
+        #t198.{core::List::addAll}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
   } =>#t198;
   core::Set<core::int*>* set52 = block {
     final core::Set<core::int*>* #t199 = new col::_CompactLinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t199.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int*>(0));
-    #t199.{core::Set::add}{Invariant}(null);
+        #t199.{core::Set::addAll}(core::_GrowableList::•<core::int*>(0)){(core::Iterable<core::int*>*) →* void};
+    #t199.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t199;
   core::List<core::List<core::int*>*>* list60 = block {
     final core::List<core::List<core::int*>*>* #t200 = core::_GrowableList::•<core::List<core::int*>*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t200.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t200.{core::List::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t200;
   core::Set<core::List<core::int*>*>* set60 = block {
     final core::Set<core::List<core::int*>*>* #t201 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t201.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
-    #t201.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t201.{core::Set::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t201.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t201;
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t202 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}.{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t203 = :sync-for-iterator.{core::Iterator::current};
-        #t202.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}, #t203.{core::MapEntry::value});
+        #t202.{core::Map::[]=}(#t203.{core::MapEntry::key}{core::String*}, #t203.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
       }
     }
-    #t202.{core::Map::[]=}{Invariant}("baz", null);
+    #t202.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t202;
   core::List<core::List<core::int*>*>* list61 = block {
     final core::List<core::List<core::int*>*>* #t204 = core::_GrowableList::•<core::List<core::int*>*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t204.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
+        #t204.{core::List::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
   } =>#t204;
   core::Set<core::List<core::int*>*>* set61 = block {
     final core::Set<core::List<core::int*>*>* #t205 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t205.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
-    #t205.{core::Set::add}{Invariant}(null);
+        #t205.{core::Set::addAll}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t205.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t205;
   core::Map<core::String*, core::List<core::int*>*>* map61 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t206 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"bar": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t207 = :sync-for-iterator.{core::Iterator::current};
-          #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}, #t207.{core::MapEntry::value});
+          #t206.{core::Map::[]=}(#t207.{core::MapEntry::key}{core::String*}, #t207.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
         }
       }
-    #t206.{core::Map::[]=}{Invariant}("baz", null);
+    #t206.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t206;
   core::List<core::List<core::int*>*>* list70 = block {
     final core::List<core::List<core::int*>*>* #t208 = core::_GrowableList::•<core::List<core::int*>*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t208.{core::List::add}{Invariant}(core::_GrowableList::•<core::int*>(0));
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t208.{core::List::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* void};
   } =>#t208;
   core::Set<core::List<core::int*>*>* set70 = block {
     final core::Set<core::List<core::int*>*>* #t209 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t209.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0));
-    #t209.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t209.{core::Set::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
+    #t209.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t209;
   core::Map<core::String*, core::List<core::int*>*>* map70 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t210 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t210.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::•<core::int*>(0));
-    #t210.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t210.{core::Map::[]=}("bar", core::_GrowableList::•<core::int*>(0)){(core::String*, core::List<core::int*>*) →* void};
+    #t210.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t210;
   core::List<core::List<core::int*>*>* list71 = block {
     final core::List<core::List<core::int*>*>* #t211 = core::_GrowableList::•<core::List<core::int*>*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t211.{core::List::add}{Invariant}(core::_GrowableList::•<core::int*>(0));
+        #t211.{core::List::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* void};
   } =>#t211;
   core::Set<core::List<core::int*>*>* set71 = block {
     final core::Set<core::List<core::int*>*>* #t212 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t212.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int*>(0));
-    #t212.{core::Set::add}{Invariant}(null);
+        #t212.{core::Set::add}(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::bool*};
+    #t212.{core::Set::add}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t212;
   core::Map<core::String*, core::List<core::int*>*>* map71 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t213 = <core::String*, core::List<core::int*>*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t213.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::•<core::int*>(0));
-    #t213.{core::Map::[]=}{Invariant}("baz", null);
+        #t213.{core::Map::[]=}("bar", core::_GrowableList::•<core::int*>(0)){(core::String*, core::List<core::int*>*) →* void};
+    #t213.{core::Map::[]=}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t213;
   core::List<core::num*>* list80 = block {
     final core::List<core::num*>* #t214 = core::_GrowableList::•<core::num*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t214.{core::List::add}{Invariant}(42);
+        #t214.{core::List::add}(42){(core::num*) →* void};
       else
-        #t214.{core::List::add}{Invariant}(3.14);
+        #t214.{core::List::add}(3.14){(core::num*) →* void};
   } =>#t214;
   core::Set<core::num*>* set80 = block {
     final core::Set<core::num*>* #t215 = new col::_CompactLinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t215.{core::Set::add}{Invariant}(42);
+        #t215.{core::Set::add}(42){(core::num*) →* core::bool*};
       else
-        #t215.{core::Set::add}{Invariant}(3.14);
-    #t215.{core::Set::add}{Invariant}(null);
+        #t215.{core::Set::add}(3.14){(core::num*) →* core::bool*};
+    #t215.{core::Set::add}(null){(core::num*) →* core::bool*};
   } =>#t215;
   core::Map<core::String*, core::num*>* map80 = block {
     final core::Map<core::String*, core::num*>* #t216 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t216.{core::Map::[]=}{Invariant}("bar", 42);
+        #t216.{core::Map::[]=}("bar", 42){(core::String*, core::num*) →* void};
       else
-        #t216.{core::Map::[]=}{Invariant}("bar", 3.14);
-    #t216.{core::Map::[]=}{Invariant}("baz", null);
+        #t216.{core::Map::[]=}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t216.{core::Map::[]=}("baz", null){(core::String*, core::num*) →* void};
   } =>#t216;
   core::List<core::num*>* list81 = block {
     final core::List<core::num*>* #t217 = core::_GrowableList::•<core::num*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t217.{core::List::addAll}{Invariant}(listInt);
+        #t217.{core::List::addAll}(listInt){(core::Iterable<core::num*>*) →* void};
       else
-        #t217.{core::List::addAll}{Invariant}(listDouble);
+        #t217.{core::List::addAll}(listDouble){(core::Iterable<core::num*>*) →* void};
   } =>#t217;
   core::Set<core::num*>* set81 = block {
     final core::Set<core::num*>* #t218 = new col::_CompactLinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t218.{core::Set::addAll}{Invariant}(listInt);
+        #t218.{core::Set::addAll}(listInt){(core::Iterable<core::num*>*) →* void};
       else
-        #t218.{core::Set::addAll}{Invariant}(listDouble);
-    #t218.{core::Set::add}{Invariant}(null);
+        #t218.{core::Set::addAll}(listDouble){(core::Iterable<core::num*>*) →* void};
+    #t218.{core::Set::add}(null){(core::num*) →* core::bool*};
   } =>#t218;
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t219 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapStringInt.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, core::num*>>* :sync-for-iterator = mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t220 = :sync-for-iterator.{core::Iterator::current};
-          #t219.{core::Map::[]=}{Invariant}(#t220.{core::MapEntry::key}, #t220.{core::MapEntry::value});
+          #t219.{core::Map::[]=}(#t220.{core::MapEntry::key}{core::String*}, #t220.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
         }
       }
       else {
-        core::Iterator<core::MapEntry<core::String*, core::double*>>* :sync-for-iterator = mapStringDouble.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, core::num*>>* :sync-for-iterator = mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t221 = :sync-for-iterator.{core::Iterator::current};
-          #t219.{core::Map::[]=}{Invariant}(#t221.{core::MapEntry::key}, #t221.{core::MapEntry::value});
+          #t219.{core::Map::[]=}(#t221.{core::MapEntry::key}{core::String*}, #t221.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
         }
       }
-    #t219.{core::Map::[]=}{Invariant}("baz", null);
+    #t219.{core::Map::[]=}("baz", null){(core::String*, core::num*) →* void};
   } =>#t219;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t222 = core::_GrowableList::•<dynamic>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t222.{core::List::addAll}{Invariant}(listInt);
+        #t222.{core::List::addAll}(listInt){(core::Iterable<dynamic>*) →* void};
       else
-        #t222.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*);
+        #t222.{core::List::addAll}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
   } =>#t222;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t223 = new col::_CompactLinkedHashSet::•<dynamic>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t223.{core::Set::addAll}{Invariant}(listInt);
+        #t223.{core::Set::addAll}(listInt){(core::Iterable<dynamic>*) →* void};
       else
-        #t223.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*);
-    #t223.{core::Set::add}{Invariant}(null);
+        #t223.{core::Set::addAll}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+    #t223.{core::Set::add}(null){(dynamic) →* core::bool*};
   } =>#t223;
   core::Map<dynamic, dynamic>* map82 = block {
     final core::Map<dynamic, dynamic>* #t224 = <dynamic, dynamic>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapStringInt.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t225 = :sync-for-iterator.{core::Iterator::current};
-          #t224.{core::Map::[]=}{Invariant}(#t225.{core::MapEntry::key}, #t225.{core::MapEntry::value});
+          #t224.{core::Map::[]=}(#t225.{core::MapEntry::key}{dynamic}, #t225.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
         }
       }
       else {
-        core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t226 = :sync-for-iterator.{core::Iterator::current};
-          #t224.{core::Map::[]=}{Invariant}(#t226.{core::MapEntry::key}, #t226.{core::MapEntry::value});
+          #t224.{core::Map::[]=}(#t226.{core::MapEntry::key}{dynamic}, #t226.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
         }
       }
-    #t224.{core::Map::[]=}{Invariant}("baz", null);
+    #t224.{core::Map::[]=}("baz", null){(dynamic, dynamic) →* void};
   } =>#t224;
   core::List<core::num*>* list83 = block {
     final core::List<core::num*>* #t227 = core::_GrowableList::•<core::num*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t227.{core::List::add}{Invariant}(42);
+        #t227.{core::List::add}(42){(core::num*) →* void};
       else
-        #t227.{core::List::addAll}{Invariant}(listDouble);
+        #t227.{core::List::addAll}(listDouble){(core::Iterable<core::num*>*) →* void};
   } =>#t227;
   core::Set<core::num*>* set83 = block {
     final core::Set<core::num*>* #t228 = new col::_CompactLinkedHashSet::•<core::num*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t228.{core::Set::addAll}{Invariant}(listInt);
+        #t228.{core::Set::addAll}(listInt){(core::Iterable<core::num*>*) →* void};
       else
-        #t228.{core::Set::add}{Invariant}(3.14);
-    #t228.{core::Set::add}{Invariant}(null);
+        #t228.{core::Set::add}(3.14){(core::num*) →* core::bool*};
+    #t228.{core::Set::add}(null){(core::num*) →* core::bool*};
   } =>#t228;
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t229 = <core::String*, core::num*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
-        core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapStringInt.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<core::String*, core::num*>>* :sync-for-iterator = mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t230 = :sync-for-iterator.{core::Iterator::current};
-          #t229.{core::Map::[]=}{Invariant}(#t230.{core::MapEntry::key}, #t230.{core::MapEntry::value});
+          #t229.{core::Map::[]=}(#t230.{core::MapEntry::key}{core::String*}, #t230.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
         }
       }
       else
-        #t229.{core::Map::[]=}{Invariant}("bar", 3.14);
-    #t229.{core::Map::[]=}{Invariant}("baz", null);
+        #t229.{core::Map::[]=}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t229.{core::Map::[]=}("baz", null){(core::String*, core::num*) →* void};
   } =>#t229;
   core::List<core::int*>* list90 = block {
     final core::List<core::int*>* #t231 = core::_GrowableList::•<core::int*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t231.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t231.{core::List::add}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
   } =>#t231;
   core::Set<core::int*>* set90 = block {
     final core::Set<core::int*>* #t232 = new col::_CompactLinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t232.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*);
-    #t232.{core::Set::add}{Invariant}(null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t232.{core::Set::add}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t232.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t232;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t233 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-      #t233.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic} core::int*);
-    #t233.{core::Map::[]=}{Invariant}("baz", null);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t233.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
+    #t233.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t233;
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t234 = core::_GrowableList::•<core::int*>(0);
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::Iterator<dynamic>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t235 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t236 = #t235 as{TypeError} core::int*;
-          #t234.{core::List::add}{Invariant}(#t236);
+          #t234.{core::List::add}(#t236){(core::int*) →* void};
         }
       }
     }
   } =>#t234;
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t237 = new col::_CompactLinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::Iterator<dynamic>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t238 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t239 = #t238 as{TypeError} core::int*;
-          #t237.{core::Set::add}{Invariant}(#t239);
+          #t237.{core::Set::add}(#t239){(core::int*) →* core::bool*};
         }
       }
     }
-    #t237.{core::Set::add}{Invariant}(null);
+    #t237.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t237;
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t240 = <core::String*, core::int*>{};
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}.{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t241 = :sync-for-iterator.{core::Iterator::current};
         {
-          final core::String* #t242 = #t241.{core::MapEntry::key} as{TypeError} core::String*;
-          final core::int* #t243 = #t241.{core::MapEntry::value} as{TypeError} core::int*;
-          #t240.{core::Map::[]=}{Invariant}(#t242, #t243);
+          final core::String* #t242 = #t241.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
+          final core::int* #t243 = #t241.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+          #t240.{core::Map::[]=}(#t242, #t243){(core::String*, core::int*) →* void};
         }
       }
     }
-    #t240.{core::Map::[]=}{Invariant}("baz", null);
+    #t240.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t240;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t244 = core::_GrowableList::•<core::int*>(0);
-    for (final core::int* #t245 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
-      #t244.{core::List::add}{Invariant}(42);
+    for (final core::int* #t245 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t244.{core::List::add}(42){(core::int*) →* void};
   } =>#t244;
   core::Set<core::int*>* set100 = block {
     final core::Set<core::int*>* #t246 = new col::_CompactLinkedHashSet::•<core::int*>();
-    for (final core::int* #t247 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
-      #t246.{core::Set::add}{Invariant}(42);
+    for (final core::int* #t247 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t246.{core::Set::add}(42){(core::int*) →* core::bool*};
   } =>#t246;
   core::Map<core::String*, core::int*>* map100 = block {
     final core::Map<core::String*, core::int*>* #t248 = <core::String*, core::int*>{};
-    for (final core::int* #t249 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
-      #t248.{core::Map::[]=}{Invariant}("bar", 42);
+    for (final core::int* #t249 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t248.{core::Map::[]=}("bar", 42){(core::String*, core::int*) →* void};
   } =>#t248;
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t250 = core::_GrowableList::•<core::int*>(0);
@@ -1869,7 +1869,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        #t250.{core::List::add}{Invariant}(i);
+        #t250.{core::List::add}(i){(core::int*) →* void};
       }
     }
   } =>#t250;
@@ -1879,10 +1879,10 @@
       core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        #t251.{core::Set::add}{Invariant}(i);
+        #t251.{core::Set::add}(i){(core::int*) →* core::bool*};
       }
     }
-    #t251.{core::Set::add}{Invariant}(null);
+    #t251.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t251;
   core::Map<core::String*, core::int*>* map110 = block {
     final core::Map<core::String*, core::int*>* #t252 = <core::String*, core::int*>{};
@@ -1890,10 +1890,10 @@
       core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        #t252.{core::Map::[]=}{Invariant}("bar", i);
+        #t252.{core::Map::[]=}("bar", i){(core::String*, core::int*) →* void};
       }
     }
-    #t252.{core::Map::[]=}{Invariant}("baz", null);
+    #t252.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t252;
   core::List<core::int*>* list120 = block {
     final core::List<core::int*>* #t253 = core::_GrowableList::•<core::int*>(0);
@@ -1901,7 +1901,7 @@
       core::Iterator<dynamic>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t253.{core::List::add}{Invariant}(i as{TypeError,ForDynamic} core::int*);
+        #t253.{core::List::add}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
       }
     }
   } =>#t253;
@@ -1911,10 +1911,10 @@
       core::Iterator<dynamic>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t254.{core::Set::add}{Invariant}(i as{TypeError,ForDynamic} core::int*);
+        #t254.{core::Set::add}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
       }
     }
-    #t254.{core::Set::add}{Invariant}(null);
+    #t254.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t254;
   core::Map<core::String*, core::int*>* map120 = block {
     final core::Map<core::String*, core::int*>* #t255 = <core::String*, core::int*>{};
@@ -1922,25 +1922,25 @@
       core::Iterator<dynamic>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t255.{core::Map::[]=}{Invariant}("bar", i as{TypeError,ForDynamic} core::int*);
+        #t255.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
       }
     }
-    #t255.{core::Map::[]=}{Invariant}("baz", null);
+    #t255.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
   } =>#t255;
   core::List<core::int*>* list130 = block {
     final core::List<core::int*>* #t256 = core::_GrowableList::•<core::int*>(0);
-    for (core::int* i = 1; i.{core::num::<}(2); i = i.{core::num::+}(1))
-      #t256.{core::List::add}{Invariant}(i);
+    for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t256.{core::List::add}(i){(core::int*) →* void};
   } =>#t256;
   core::Set<core::int*>* set130 = block {
     final core::Set<core::int*>* #t257 = new col::_CompactLinkedHashSet::•<core::int*>();
-    for (core::int* i = 1; i.{core::num::<}(2); i = i.{core::num::+}(1))
-      #t257.{core::Set::add}{Invariant}(i);
+    for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t257.{core::Set::add}(i){(core::int*) →* core::bool*};
   } =>#t257;
   core::Map<core::int*, core::int*>* map130 = block {
     final core::Map<core::int*, core::int*>* #t258 = <core::int*, core::int*>{};
-    for (core::int* i = 1; i.{core::num::<}(2); i = i.{core::num::+}(1))
-      #t258.{core::Map::[]=}{Invariant}(i, i);
+    for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t258.{core::Map::[]=}(i, i){(core::int*, core::int*) →* void};
   } =>#t258;
 }
 static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic /* originally async */ {
@@ -1961,79 +1961,79 @@
       {
         block {
           final core::List<core::int*>* #t259 = core::_GrowableList::•<core::int*>(0);
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-            #t259.{core::List::add}{Invariant}(let final Never* #t260 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+            #t259.{core::List::add}(let final Never* #t260 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
-                                            ^" in "bar" as{TypeError} core::int*);
+                                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
         } =>#t259;
         block {
           final core::Set<core::int*>* #t261 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-            #t261.{core::Set::add}{Invariant}(let final Never* #t262 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+            #t261.{core::Set::add}(let final Never* #t262 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
-                                            ^" in "bar" as{TypeError} core::int*);
-          #t261.{core::Set::add}{Invariant}(null);
+                                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
+          #t261.{core::Set::add}(null){(core::int*) →* core::bool*};
         } =>#t261;
         block {
           final core::Map<core::int*, core::int*>* #t263 = <core::int*, core::int*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-            #t263.{core::Map::[]=}{Invariant}(let final Never* #t264 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+            #t263.{core::Map::[]=}(let final Never* #t264 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final Never* #t265 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
-                                                        ^" in "bar" as{TypeError} core::int*);
-          #t263.{core::Map::[]=}{Invariant}(let final Never* #t266 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                        ^" in "bar" as{TypeError} core::int*){(core::int*, core::int*) →* void};
+          #t263.{core::Map::[]=}(let final Never* #t266 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
-                                                               ^" in "baz" as{TypeError} core::int*, null);
+                                                               ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
         } =>#t263;
         block {
           final core::List<core::int*>* #t267 = core::_GrowableList::•<core::int*>(0);
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-            #t267.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(let final Never* #t268 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+            #t267.{core::List::addAll}(core::_GrowableList::_literal1<core::int*>(let final Never* #t268 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
-                                                ^" in "bar" as{TypeError} core::int*));
+                                                ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
         } =>#t267;
         block {
           final core::Set<core::int*>* #t269 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-            #t269.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(let final Never* #t270 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+            #t269.{core::Set::addAll}(core::_GrowableList::_literal1<core::int*>(let final Never* #t270 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
-                                                ^" in "bar" as{TypeError} core::int*));
-          #t269.{core::Set::add}{Invariant}(null);
+                                                ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
+          #t269.{core::Set::add}(null){(core::int*) →* core::bool*};
         } =>#t269;
         block {
           final core::Map<core::int*, core::int*>* #t271 = <core::int*, core::int*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
             core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{let final Never* #t272 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final Never* #t273 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
-                                                            ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}.{core::Iterable::iterator};
+                                                            ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final core::MapEntry<core::int*, core::int*>* #t274 = :sync-for-iterator.{core::Iterator::current};
-              #t271.{core::Map::[]=}{Invariant}(#t274.{core::MapEntry::key}, #t274.{core::MapEntry::value});
+              #t271.{core::Map::[]=}(#t274.{core::MapEntry::key}{core::int*}, #t274.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
             }
           }
-          #t271.{core::Map::[]=}{Invariant}(let final Never* #t275 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          #t271.{core::Map::[]=}(let final Never* #t275 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
-                                                                    ^" in "baz" as{TypeError} core::int*, null);
+                                                                    ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
         } =>#t271;
         block {
           final core::List<core::int*>* #t276 = core::_GrowableList::•<core::int*>(0);
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-            #t276.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+            #t276.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
-                                               ^");
+                                               ^"){(core::int*) →* void};
         } =>#t276;
         block {
           final core::Set<core::int*>* #t277 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
-            #t277.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+            #t277.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
-                                               ^");
-          #t277.{core::Set::add}{Invariant}(null);
+                                               ^"){(core::int*) →* core::bool*};
+          #t277.{core::Set::add}(null){(core::int*) →* core::bool*};
         } =>#t277;
         <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
@@ -2044,64 +2044,64 @@
                                                     ^": null};
         block {
           final core::List<core::String*>* #t278 = core::_GrowableList::•<core::String*>(0);
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t278.{core::List::add}{Invariant}(let final Never* #t279 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+              #t278.{core::List::add}(let final Never* #t279 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
-                                                             ^" in 42 as{TypeError} core::String*);
+                                                             ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
             else
-              #t278.{core::List::add}{Invariant}(let final Never* #t280 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+              #t278.{core::List::add}(let final Never* #t280 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
-                                                                     ^" in 3.14 as{TypeError} core::String*);
+                                                                     ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
         } =>#t278;
         block {
           final core::Set<core::String*>* #t281 = new col::_CompactLinkedHashSet::•<core::String*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t281.{core::Set::add}{Invariant}(let final Never* #t282 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+              #t281.{core::Set::add}(let final Never* #t282 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
-                                                             ^" in 42 as{TypeError} core::String*);
+                                                             ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
             else
-              #t281.{core::Set::add}{Invariant}(let final Never* #t283 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+              #t281.{core::Set::add}(let final Never* #t283 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
-                                                                     ^" in 3.14 as{TypeError} core::String*);
-          #t281.{core::Set::add}{Invariant}(null);
+                                                                     ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
+          #t281.{core::Set::add}(null){(core::String*) →* core::bool*};
         } =>#t281;
         block {
           final core::Map<core::String*, core::String*>* #t284 = <core::String*, core::String*>{};
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t284.{core::Map::[]=}{Invariant}("bar", let final Never* #t285 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+              #t284.{core::Map::[]=}("bar", let final Never* #t285 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
-                                                                            ^" in 42 as{TypeError} core::String*);
+                                                                            ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
             else
-              #t284.{core::Map::[]=}{Invariant}("bar", let final Never* #t286 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+              #t284.{core::Map::[]=}("bar", let final Never* #t286 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
-                                                                                           ^" in 3.14 as{TypeError} core::String*);
-          #t284.{core::Map::[]=}{Invariant}("baz", null);
+                                                                                           ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
+          #t284.{core::Map::[]=}("baz", null){(core::String*, core::String*) →* void};
         } =>#t284;
         block {
           final core::List<core::int*>* #t287 = core::_GrowableList::•<core::int*>(0);
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t287.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+              #t287.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
-                                                             ^");
+                                                             ^"){(core::int*) →* void};
             else
-              #t287.{core::List::add}{Invariant}(42);
+              #t287.{core::List::add}(42){(core::int*) →* void};
         } =>#t287;
         block {
           final core::Set<core::int*>* #t288 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t288.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+              #t288.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
-                                                             ^");
+                                                             ^"){(core::int*) →* core::bool*};
             else
-              #t288.{core::Set::add}{Invariant}(42);
-          #t288.{core::Set::add}{Invariant}(null);
+              #t288.{core::Set::add}(42){(core::int*) →* core::bool*};
+          #t288.{core::Set::add}(null){(core::int*) →* core::bool*};
         } =>#t288;
         <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
@@ -2112,26 +2112,26 @@
                                                                      ^": null};
         block {
           final core::List<core::int*>* #t289 = core::_GrowableList::•<core::int*>(0);
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t289.{core::List::add}{Invariant}(42);
+              #t289.{core::List::add}(42){(core::int*) →* void};
             else
-              #t289.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+              #t289.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
-                                                                     ^");
+                                                                     ^"){(core::int*) →* void};
         } =>#t289;
         block {
           final core::Set<core::int*>* #t290 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t290.{core::Set::add}{Invariant}(42);
+              #t290.{core::Set::add}(42){(core::int*) →* core::bool*};
             else
-              #t290.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+              #t290.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
-                                                                     ^");
-          #t290.{core::Set::add}{Invariant}(null);
+                                                                     ^"){(core::int*) →* core::bool*};
+          #t290.{core::Set::add}(null){(core::int*) →* core::bool*};
         } =>#t290;
         <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
@@ -2151,7 +2151,7 @@
                 invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Can't assign to the final variable 'i'.
   <int>[for (i in <int>[1]) i];
              ^";
-                #t291.{core::List::add}{Invariant}(i);
+                #t291.{core::List::add}(i){(core::int*) →* void};
               }
             }
           }
@@ -2166,11 +2166,11 @@
                 invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Can't assign to the final variable 'i'.
   <int>{for (i in <int>[1]) i, null};
              ^";
-                #t293.{core::Set::add}{Invariant}(i);
+                #t293.{core::Set::add}(i){(core::int*) →* core::bool*};
               }
             }
           }
-          #t293.{core::Set::add}{Invariant}(null);
+          #t293.{core::Set::add}(null){(core::int*) →* core::bool*};
         } =>#t293;
         block {
           final core::Map<core::String*, core::int*>* #t295 = <core::String*, core::int*>{};
@@ -2182,11 +2182,11 @@
                 invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Can't assign to the final variable 'i'.
 \t<String, int>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
 \t                   ^";
-                #t295.{core::Map::[]=}{Invariant}("bar", i);
+                #t295.{core::Map::[]=}("bar", i){(core::String*, core::int*) →* void};
               }
             }
           }
-          #t295.{core::Map::[]=}{Invariant}("baz", null);
+          #t295.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
         } =>#t295;
         core::List<dynamic>* list10 = block {
           final core::List<dynamic>* #t297 = core::_GrowableList::•<dynamic>(0);
@@ -2197,7 +2197,7 @@
                               ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               dynamic i = :sync-for-iterator.{core::Iterator::current};
-              #t297.{core::List::add}{Invariant}(i);
+              #t297.{core::List::add}(i){(dynamic) →* void};
             }
           }
         } =>#t297;
@@ -2210,10 +2210,10 @@
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               dynamic i = :sync-for-iterator.{core::Iterator::current};
-              #t299.{core::Set::add}{Invariant}(i);
+              #t299.{core::Set::add}(i){(dynamic) →* core::bool*};
             }
           }
-          #t299.{core::Set::add}{Invariant}(null);
+          #t299.{core::Set::add}(null){(dynamic) →* core::bool*};
         } =>#t299;
         core::Map<core::String*, dynamic>* map10 = block {
           final core::Map<core::String*, dynamic>* #t301 = <core::String*, dynamic>{};
@@ -2224,10 +2224,10 @@
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               dynamic i = :sync-for-iterator.{core::Iterator::current};
-              #t301.{core::Map::[]=}{Invariant}("bar", i);
+              #t301.{core::Map::[]=}("bar", i){(core::String*, dynamic) →* void};
             }
           }
-          #t301.{core::Map::[]=}{Invariant}("baz", null);
+          #t301.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
         } =>#t301;
         core::List<core::int*>* list20 = block {
           final core::List<core::int*>* #t303 = core::_GrowableList::•<core::int*>(0);
@@ -2239,7 +2239,7 @@
                                       ^" in "int" as{TypeError} core::int*).{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               core::int* i = :sync-for-iterator.{core::Iterator::current};
-              #t303.{core::List::add}{Invariant}(i);
+              #t303.{core::List::add}(i){(core::int*) →* void};
             }
           }
         } =>#t303;
@@ -2253,10 +2253,10 @@
                                      ^" in "int" as{TypeError} core::int*).{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               core::int* i = :sync-for-iterator.{core::Iterator::current};
-              #t306.{core::Set::add}{Invariant}(i);
+              #t306.{core::Set::add}(i){(core::int*) →* core::bool*};
             }
           }
-          #t306.{core::Set::add}{Invariant}(null);
+          #t306.{core::Set::add}(null){(core::int*) →* core::bool*};
         } =>#t306;
         core::Map<core::String*, core::int*>* map20 = block {
           final core::Map<core::String*, core::int*>* #t309 = <core::String*, core::int*>{};
@@ -2268,10 +2268,10 @@
                                      ^" in "int" as{TypeError} core::int*).{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               core::int* i = :sync-for-iterator.{core::Iterator::current};
-              #t309.{core::Map::[]=}{Invariant}("bar", i);
+              #t309.{core::Map::[]=}("bar", i){(core::String*, core::int*) →* void};
             }
           }
-          #t309.{core::Map::[]=}{Invariant}("baz", null);
+          #t309.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
         } =>#t309;
         final core::List<dynamic>* #t312 = core::_GrowableList::•<dynamic>(0);
         {
@@ -2287,7 +2287,7 @@
               [yield] let dynamic #t315 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 dynamic i = :for-iterator.{asy::_StreamIterator::current};
-                #t312.{core::List::add}{Invariant}(i);
+                #t312.{core::List::add}(i){(dynamic) →* void};
               }
               else
                 break #L2;
@@ -2313,7 +2313,7 @@
               [yield] let dynamic #t320 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 dynamic i = :for-iterator.{asy::_StreamIterator::current};
-                #t317.{core::Set::add}{Invariant}(i);
+                #t317.{core::Set::add}(i){(dynamic) →* core::bool*};
               }
               else
                 break #L3;
@@ -2325,7 +2325,7 @@
             }
         }
         core::Set<dynamic>* set30 = block {
-          #t317.{core::Set::add}{Invariant}(null);
+          #t317.{core::Set::add}(null){(dynamic) →* core::bool*};
         } =>#t317;
         final core::Map<core::String*, dynamic>* #t322 = <core::String*, dynamic>{};
         {
@@ -2341,7 +2341,7 @@
               [yield] let dynamic #t325 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 dynamic i = :for-iterator.{asy::_StreamIterator::current};
-                #t322.{core::Map::[]=}{Invariant}("bar", i);
+                #t322.{core::Map::[]=}("bar", i){(core::String*, dynamic) →* void};
               }
               else
                 break #L4;
@@ -2353,7 +2353,7 @@
             }
         }
         core::Map<core::String*, dynamic>* map30 = block {
-          #t322.{core::Map::[]=}{Invariant}("baz", null);
+          #t322.{core::Map::[]=}("baz", null){(core::String*, dynamic) →* void};
         } =>#t322;
         final core::List<core::int*>* #t327 = core::_GrowableList::•<core::int*>(0);
         {
@@ -2370,7 +2370,7 @@
               [yield] let dynamic #t331 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 core::int* i = :for-iterator.{asy::_StreamIterator::current};
-                #t327.{core::List::add}{Invariant}(i);
+                #t327.{core::List::add}(i){(core::int*) →* void};
               }
               else
                 break #L5;
@@ -2397,7 +2397,7 @@
               [yield] let dynamic #t337 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 core::int* i = :for-iterator.{asy::_StreamIterator::current};
-                #t333.{core::Set::add}{Invariant}(i);
+                #t333.{core::Set::add}(i){(core::int*) →* core::bool*};
               }
               else
                 break #L6;
@@ -2409,7 +2409,7 @@
             }
         }
         core::Set<core::int*>* set40 = block {
-          #t333.{core::Set::add}{Invariant}(null);
+          #t333.{core::Set::add}(null){(core::int*) →* core::bool*};
         } =>#t333;
         final core::Map<core::String*, core::int*>* #t339 = <core::String*, core::int*>{};
         {
@@ -2426,7 +2426,7 @@
               [yield] let dynamic #t343 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(_in::unsafeCast<core::bool>(:result)) {
                 core::int* i = :for-iterator.{asy::_StreamIterator::current};
-                #t339.{core::Map::[]=}{Invariant}("bar", i);
+                #t339.{core::Map::[]=}("bar", i){(core::String*, core::int*) →* void};
               }
               else
                 break #L7;
@@ -2438,47 +2438,47 @@
             }
         }
         core::Map<core::String*, core::int*>* map40 = block {
-          #t339.{core::Map::[]=}{Invariant}("baz", null);
+          #t339.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
         } =>#t339;
         core::List<core::int*>* list50 = block {
           final core::List<core::int*>* #t345 = core::_GrowableList::•<core::int*>(0);
           for (; ; )
-            #t345.{core::List::add}{Invariant}(42);
+            #t345.{core::List::add}(42){(core::int*) →* void};
         } =>#t345;
         core::Set<core::int*>* set50 = block {
           final core::Set<core::int*>* #t346 = new col::_CompactLinkedHashSet::•<core::int*>();
           for (; ; )
-            #t346.{core::Set::add}{Invariant}(42);
-          #t346.{core::Set::add}{Invariant}(null);
+            #t346.{core::Set::add}(42){(core::int*) →* core::bool*};
+          #t346.{core::Set::add}(null){(core::int*) →* core::bool*};
         } =>#t346;
         core::Map<core::String*, core::int*>* map50 = block {
           final core::Map<core::String*, core::int*>* #t347 = <core::String*, core::int*>{};
           for (; ; )
-            #t347.{core::Map::[]=}{Invariant}("bar", 42);
-          #t347.{core::Map::[]=}{Invariant}("baz", null);
+            #t347.{core::Map::[]=}("bar", 42){(core::String*, core::int*) →* void};
+          #t347.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
         } =>#t347;
         core::List<core::int*>* list60 = block {
           final core::List<core::int*>* #t348 = core::_GrowableList::•<core::int*>(0);
           for (; let final Never* #t349 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var list60 = [for (; \"not bool\";) 42];
                        ^" in "not bool" as{TypeError} core::bool*; )
-            #t348.{core::List::add}{Invariant}(42);
+            #t348.{core::List::add}(42){(core::int*) →* void};
         } =>#t348;
         core::Set<core::int*>* set60 = block {
           final core::Set<core::int*>* #t350 = new col::_CompactLinkedHashSet::•<core::int*>();
           for (; let final Never* #t351 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var set60 = {for (; \"not bool\";) 42, null};
                       ^" in "not bool" as{TypeError} core::bool*; )
-            #t350.{core::Set::add}{Invariant}(42);
-          #t350.{core::Set::add}{Invariant}(null);
+            #t350.{core::Set::add}(42){(core::int*) →* core::bool*};
+          #t350.{core::Set::add}(null){(core::int*) →* core::bool*};
         } =>#t350;
         core::Map<core::String*, core::int*>* map60 = block {
           final core::Map<core::String*, core::int*>* #t352 = <core::String*, core::int*>{};
           for (; let final Never* #t353 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
                       ^" in "not bool" as{TypeError} core::bool*; )
-            #t352.{core::Map::[]=}{Invariant}("bar", 42);
-          #t352.{core::Map::[]=}{Invariant}("baz", null);
+            #t352.{core::Map::[]=}("bar", 42){(core::String*, core::int*) →* void};
+          #t352.{core::Map::[]=}("baz", null){(core::String*, core::int*) →* void};
         } =>#t352;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -2497,34 +2497,34 @@
   block {
     final core::List<core::int*>* #t354 = core::_GrowableList::•<core::int*>(0);
     await for (core::int* i in stream)
-      #t354.{core::List::add}{Invariant}(i);
+      #t354.{core::List::add}(i){(core::int*) →* void};
   } =>#t354;
   block {
     final core::Set<core::int*>* #t355 = new col::_CompactLinkedHashSet::•<core::int*>();
     await for (core::int* i in stream)
-      #t355.{core::Set::add}{Invariant}(i);
+      #t355.{core::Set::add}(i){(core::int*) →* core::bool*};
   } =>#t355;
   block {
     final core::Map<core::String*, core::int*>* #t356 = <core::String*, core::int*>{};
     await for (core::int* i in stream)
-      #t356.{core::Map::[]=}{Invariant}("bar", i);
+      #t356.{core::Map::[]=}("bar", i){(core::String*, core::int*) →* void};
   } =>#t356;
 }
 static method testPromotion(self::A* a) → dynamic {
   core::List<core::int*>* list10 = block {
     final core::List<core::int*>* #t357 = core::_GrowableList::•<core::int*>(0);
     if(a is self::B*)
-      #t357.{core::List::add}{Invariant}(a{self::B*}.{self::B::foo});
+      #t357.{core::List::add}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* void};
   } =>#t357;
   core::Set<core::int*>* set10 = block {
     final core::Set<core::int*>* #t358 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(a is self::B*)
-      #t358.{core::Set::add}{Invariant}(a{self::B*}.{self::B::foo});
+      #t358.{core::Set::add}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* core::bool*};
   } =>#t358;
   core::Map<core::int*, core::int*>* map10 = block {
     final core::Map<core::int*, core::int*>* #t359 = <core::int*, core::int*>{};
     if(a is self::B*)
-      #t359.{core::Map::[]=}{Invariant}(a{self::B*}.{self::B::foo}, a{self::B*}.{self::B::foo});
+      #t359.{core::Map::[]=}(a{self::B*}.{self::B::foo}{core::int*}, a{self::B*}.{self::B::foo}{core::int*}){(core::int*, core::int*) →* void};
   } =>#t359;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect b/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect
index cb1d7cd..bded27c 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect
@@ -168,117 +168,117 @@
 }
 static method main() → dynamic {}
 static method test(self::A* a, self::B* b, self::C<dynamic>* c_dynamic, self::C<core::int*>* c_int, self::C<core::String*>* c_string, self::D* d) → dynamic {
-  a.{self::A::==}(a);
-  a.{self::A::==}(b);
-  a.{self::A::==}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+  a =={self::A::==}{(self::A*) →* core::bool*} a;
+  a =={self::A::==}{(self::A*) →* core::bool*} b;
+  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_dynamic; // error
        ^" in c_dynamic as{TypeError} self::A*);
-  a.{self::A::==}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_int; // error
        ^" in c_int as{TypeError} self::A*);
-  a.{self::A::==}(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_string; // error
        ^" in c_string as{TypeError} self::A*);
-  a.{self::A::==}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == d; // error
        ^" in d as{TypeError} self::A*);
-  b.{self::B::==}(a);
-  b.{self::B::==}(b);
-  b.{self::B::==}(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+  b =={self::B::==}{(self::A*) →* core::bool*} a;
+  b =={self::B::==}{(self::A*) →* core::bool*} b;
+  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_dynamic; // error
        ^" in c_dynamic as{TypeError} self::A*);
-  b.{self::B::==}(let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_int; // error
        ^" in c_int as{TypeError} self::A*);
-  b.{self::B::==}(let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_string; // error
        ^" in c_string as{TypeError} self::A*);
-  b.{self::B::==}(let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == d; // error
        ^" in d as{TypeError} self::A*);
-  c_dynamic.{self::C::==}(let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} (let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == a; // error
                ^" in a as{TypeError} self::C<dynamic>*);
-  c_dynamic.{self::C::==}(let final Never* #t10 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} (let final Never* #t10 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == b; // error
                ^" in b as{TypeError} self::C<dynamic>*);
-  c_dynamic.{self::C::==}(c_dynamic);
-  c_dynamic.{self::C::==}(c_int);
-  c_dynamic.{self::C::==}(c_string);
-  c_dynamic.{self::C::==}(d);
-  c_int.{self::C::==}(let final Never* #t11 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} d;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t11 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == a; // error
            ^" in a as{TypeError} self::C<core::int*>*);
-  c_int.{self::C::==}(let final Never* #t12 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t12 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == b; // error
            ^" in b as{TypeError} self::C<core::int*>*);
-  c_int.{self::C::==}(c_dynamic as{TypeError} self::C<core::int*>*);
-  c_int.{self::C::==}(c_int);
-  c_int.{self::C::==}(let final Never* #t13 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t13 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == c_string; // error
            ^" in c_string as{TypeError} self::C<core::int*>*);
-  c_int.{self::C::==}(d);
-  c_string.{self::C::==}(let final Never* #t14 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t14 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == a; // error
               ^" in a as{TypeError} self::C<core::String*>*);
-  c_string.{self::C::==}(let final Never* #t15 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t15 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == b; // error
               ^" in b as{TypeError} self::C<core::String*>*);
-  c_string.{self::C::==}(c_dynamic as{TypeError} self::C<core::String*>*);
-  c_string.{self::C::==}(let final Never* #t16 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::String*>*;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t16 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == c_int; // error
               ^" in c_int as{TypeError} self::C<core::String*>*);
-  c_string.{self::C::==}(c_string);
-  c_string.{self::C::==}(let final Never* #t17 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_string;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t17 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == d; // error
               ^" in d as{TypeError} self::C<core::String*>*);
-  d.{self::C::==}(let final Never* #t18 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t18 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == a; // error
        ^" in a as{TypeError} self::C<core::int*>*);
-  d.{self::C::==}(let final Never* #t19 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t19 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == b; // error
        ^" in b as{TypeError} self::C<core::int*>*);
-  d.{self::C::==}(c_dynamic as{TypeError} self::C<core::int*>*);
-  d.{self::C::==}(c_int);
-  d.{self::C::==}(let final Never* #t20 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t20 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == c_string; // error
        ^" in c_string as{TypeError} self::C<core::int*>*);
-  d.{self::C::==}(d);
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
 }
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect
index cb1d7cd..bded27c 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect
@@ -168,117 +168,117 @@
 }
 static method main() → dynamic {}
 static method test(self::A* a, self::B* b, self::C<dynamic>* c_dynamic, self::C<core::int*>* c_int, self::C<core::String*>* c_string, self::D* d) → dynamic {
-  a.{self::A::==}(a);
-  a.{self::A::==}(b);
-  a.{self::A::==}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+  a =={self::A::==}{(self::A*) →* core::bool*} a;
+  a =={self::A::==}{(self::A*) →* core::bool*} b;
+  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_dynamic; // error
        ^" in c_dynamic as{TypeError} self::A*);
-  a.{self::A::==}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_int; // error
        ^" in c_int as{TypeError} self::A*);
-  a.{self::A::==}(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_string; // error
        ^" in c_string as{TypeError} self::A*);
-  a.{self::A::==}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+  a =={self::A::==}{(self::A*) →* core::bool*} (let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == d; // error
        ^" in d as{TypeError} self::A*);
-  b.{self::B::==}(a);
-  b.{self::B::==}(b);
-  b.{self::B::==}(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+  b =={self::B::==}{(self::A*) →* core::bool*} a;
+  b =={self::B::==}{(self::A*) →* core::bool*} b;
+  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_dynamic; // error
        ^" in c_dynamic as{TypeError} self::A*);
-  b.{self::B::==}(let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t6 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_int; // error
        ^" in c_int as{TypeError} self::A*);
-  b.{self::B::==}(let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t7 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_string; // error
        ^" in c_string as{TypeError} self::A*);
-  b.{self::B::==}(let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+  b =={self::B::==}{(self::A*) →* core::bool*} (let final Never* #t8 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == d; // error
        ^" in d as{TypeError} self::A*);
-  c_dynamic.{self::C::==}(let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} (let final Never* #t9 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == a; // error
                ^" in a as{TypeError} self::C<dynamic>*);
-  c_dynamic.{self::C::==}(let final Never* #t10 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} (let final Never* #t10 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == b; // error
                ^" in b as{TypeError} self::C<dynamic>*);
-  c_dynamic.{self::C::==}(c_dynamic);
-  c_dynamic.{self::C::==}(c_int);
-  c_dynamic.{self::C::==}(c_string);
-  c_dynamic.{self::C::==}(d);
-  c_int.{self::C::==}(let final Never* #t11 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} d;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t11 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == a; // error
            ^" in a as{TypeError} self::C<core::int*>*);
-  c_int.{self::C::==}(let final Never* #t12 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t12 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == b; // error
            ^" in b as{TypeError} self::C<core::int*>*);
-  c_int.{self::C::==}(c_dynamic as{TypeError} self::C<core::int*>*);
-  c_int.{self::C::==}(c_int);
-  c_int.{self::C::==}(let final Never* #t13 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t13 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == c_string; // error
            ^" in c_string as{TypeError} self::C<core::int*>*);
-  c_int.{self::C::==}(d);
-  c_string.{self::C::==}(let final Never* #t14 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t14 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == a; // error
               ^" in a as{TypeError} self::C<core::String*>*);
-  c_string.{self::C::==}(let final Never* #t15 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t15 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == b; // error
               ^" in b as{TypeError} self::C<core::String*>*);
-  c_string.{self::C::==}(c_dynamic as{TypeError} self::C<core::String*>*);
-  c_string.{self::C::==}(let final Never* #t16 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::String*>*;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t16 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == c_int; // error
               ^" in c_int as{TypeError} self::C<core::String*>*);
-  c_string.{self::C::==}(c_string);
-  c_string.{self::C::==}(let final Never* #t17 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_string;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} (let final Never* #t17 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == d; // error
               ^" in d as{TypeError} self::C<core::String*>*);
-  d.{self::C::==}(let final Never* #t18 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t18 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == a; // error
        ^" in a as{TypeError} self::C<core::int*>*);
-  d.{self::C::==}(let final Never* #t19 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t19 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == b; // error
        ^" in b as{TypeError} self::C<core::int*>*);
-  d.{self::C::==}(c_dynamic as{TypeError} self::C<core::int*>*);
-  d.{self::C::==}(c_int);
-  d.{self::C::==}(let final Never* #t20 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} (let final Never* #t20 = invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == c_string; // error
        ^" in c_string as{TypeError} self::C<core::int*>*);
-  d.{self::C::==}(d);
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
 }
diff --git a/pkg/front_end/testcases/general/covariant_generic.dart.weak.expect b/pkg/front_end/testcases/general/covariant_generic.dart.weak.expect
index 48b1bf5..a195318 100644
--- a/pkg/front_end/testcases/general/covariant_generic.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_generic.dart.weak.expect
@@ -14,7 +14,7 @@
   method method(generic-covariant-impl self::Foo::T* x) → void {}
   set setter(generic-covariant-impl self::Foo::T* x) → void {}
   method withCallback((self::Foo::T*) →* void callback) → void {
-    callback.call(this.{self::Foo::finalField});
+    callback(this.{self::Foo::finalField}{self::Foo::T*}){(self::Foo::T*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -29,21 +29,21 @@
 }
 static method main() → dynamic {
   self::Foo<core::int*>* fooInt = new self::Foo::•<core::int*>(1, (core::int* x) → Null {});
-  fooInt.{self::Foo::method}(3);
+  fooInt.{self::Foo::method}(3){(core::int*) →* void};
   fooInt.{self::Foo::setter} = 3;
-  fooInt.{self::Foo::withCallback}((core::int* x) → Null {});
-  fooInt.{self::Foo::withCallback}((core::num* x) → Null {});
+  fooInt.{self::Foo::withCallback}((core::int* x) → Null {}){((core::int*) →* void) →* void};
+  fooInt.{self::Foo::withCallback}((core::num* x) → Null {}){((core::int*) →* void) →* void};
   fooInt.{self::Foo::mutableField} = 3;
   fooInt.{self::Foo::mutableCallbackField} = (core::int* x) → Null {};
   self::Foo<core::num*>* fooNum = fooInt;
-  fooNum.{self::Foo::method}(3);
-  fooNum.{self::Foo::method}(2.5);
+  fooNum.{self::Foo::method}(3){(core::num*) →* void};
+  fooNum.{self::Foo::method}(2.5){(core::num*) →* void};
   fooNum.{self::Foo::setter} = 3;
   fooNum.{self::Foo::setter} = 2.5;
-  fooNum.{self::Foo::withCallback}((core::num* x) → Null {});
+  fooNum.{self::Foo::withCallback}((core::num* x) → Null {}){((core::num*) →* void) →* void};
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  let final self::Foo<core::num*>* #t1 = fooNum in let final core::int* #t2 = 3 in (#t1.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(#t2);
-  let final self::Foo<core::num*>* #t3 = fooNum in let final core::double* #t4 = 2.5 in (#t3.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(#t4);
+  let final self::Foo<core::num*>* #t1 = fooNum in let final core::int* #t2 = 3 in (#t1.{self::Foo::mutableCallbackField}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void)(#t2){(core::num*) →* void};
+  let final self::Foo<core::num*>* #t3 = fooNum in let final core::double* #t4 = 2.5 in (#t3.{self::Foo::mutableCallbackField}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void)(#t4){(core::num*) →* void};
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → Null {};
 }
diff --git a/pkg/front_end/testcases/general/covariant_generic.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_generic.dart.weak.transformed.expect
index bcccf29..a65e4e7 100644
--- a/pkg/front_end/testcases/general/covariant_generic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_generic.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
   method method(generic-covariant-impl self::Foo::T* x) → void {}
   set setter(generic-covariant-impl self::Foo::T* x) → void {}
   method withCallback((self::Foo::T*) →* void callback) → void {
-    callback.call(this.{self::Foo::finalField});
+    callback(this.{self::Foo::finalField}{self::Foo::T*}){(self::Foo::T*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -29,22 +29,22 @@
 }
 static method main() → dynamic {
   self::Foo<core::int*>* fooInt = new self::Foo::•<core::int*>(1, (core::int* x) → Null {});
-  fooInt.{self::Foo::method}(3);
+  fooInt.{self::Foo::method}(3){(core::int*) →* void};
   fooInt.{self::Foo::setter} = 3;
-  fooInt.{self::Foo::withCallback}((core::int* x) → Null {});
-  fooInt.{self::Foo::withCallback}((core::num* x) → Null {});
+  fooInt.{self::Foo::withCallback}((core::int* x) → Null {}){((core::int*) →* void) →* void};
+  fooInt.{self::Foo::withCallback}((core::num* x) → Null {}){((core::int*) →* void) →* void};
   fooInt.{self::Foo::mutableField} = 3;
   fooInt.{self::Foo::mutableCallbackField} = (core::int* x) → Null {};
   self::Foo<core::num*>* fooNum = fooInt;
-  fooNum.{self::Foo::method}(3);
-  fooNum.{self::Foo::method}(2.5);
+  fooNum.{self::Foo::method}(3){(core::num*) →* void};
+  fooNum.{self::Foo::method}(2.5){(core::num*) →* void};
   fooNum.{self::Foo::setter} = 3;
   fooNum.{self::Foo::setter} = 2.5;
-  fooNum.{self::Foo::withCallback}((core::num* x) → Null {});
+  fooNum.{self::Foo::withCallback}((core::num* x) → Null {}){((core::num*) →* void) →* void};
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  let final self::Foo<core::num*>* #t1 = fooNum in let final core::int* #t2 = 3 in (#t1.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(#t2);
-  let final self::Foo<core::num*>* #t3 = fooNum in let final core::double* #t4 = 2.5 in (#t3.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(#t4);
+  let final self::Foo<core::num*>* #t1 = fooNum in let final core::int* #t2 = 3 in (#t1.{self::Foo::mutableCallbackField}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void)(#t2){(core::num*) →* void};
+  let final self::Foo<core::num*>* #t3 = fooNum in let final core::double* #t4 = 2.5 in (#t3.{self::Foo::mutableCallbackField}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void)(#t4){(core::num*) →* void};
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → Null {};
 }
 
diff --git a/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.expect b/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.expect
index 02e0ecc..3789d00 100644
--- a/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.expect
@@ -43,15 +43,15 @@
 }
 abstract class _PlatformViewGestureMixin extends mai::RenderBox /*isMixinDeclaration*/  {
   method hitTestSelf(self::Offset position) → core::bool
-    return !invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:7: Error: The getter '_hitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+    return !(invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:7: Error: The getter '_hitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named '_hitTestBehavior'.
       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
-      ^^^^^^^^^^^^^^^^".{core::Object::==}(invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+      ^^^^^^^^^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'PlatformViewHitTestBehavior'.
       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
-                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^".transparent);
+                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^"{dynamic}.transparent);
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.transformed.expect
index e933f73..f8c5132 100644
--- a/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.transformed.expect
@@ -34,15 +34,15 @@
     : super mai::RenderBox::•()
     ;
   method hitTestSelf(self::Offset position) → core::bool
-    return !invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:7: Error: The getter '_hitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+    return !(invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:7: Error: The getter '_hitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named '_hitTestBehavior'.
       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
-      ^^^^^^^^^^^^^^^^".{core::Object::==}(invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+      ^^^^^^^^^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'PlatformViewHitTestBehavior'.
       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
-                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^".transparent);
+                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^"{dynamic}.transparent);
 }
 class PlatformViewRenderBox extends self::_PlatformViewRenderBox&RenderBox&_PlatformViewGestureMixin {
   synthetic constructor •() → self::PlatformViewRenderBox
@@ -51,15 +51,15 @@
 }
 abstract class _PlatformViewGestureMixin extends mai::RenderBox /*isMixinDeclaration*/  {
   method hitTestSelf(self::Offset position) → core::bool
-    return !invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:7: Error: The getter '_hitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+    return !(invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:7: Error: The getter '_hitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named '_hitTestBehavior'.
       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
-      ^^^^^^^^^^^^^^^^".{core::Object::==}(invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+      ^^^^^^^^^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'PlatformViewHitTestBehavior'.
       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
-                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^".transparent);
+                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^"{dynamic}.transparent);
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.expect b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.expect
index 8f683ca..6128ffd0 100644
--- a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.expect
+++ b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.expect
@@ -14,7 +14,7 @@
     () →* self::method::T* f = () → self::method::T* => a{self::method::T* & core::String* /* '*' & '*' = '*' */};
     core::String* s = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
-                ^" in f.call() as{TypeError} core::String*;
+                ^" in f(){() →* self::method::T*} as{TypeError} core::String*;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.transformed.expect b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.transformed.expect
index 8f683ca..6128ffd0 100644
--- a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
     () →* self::method::T* f = () → self::method::T* => a{self::method::T* & core::String* /* '*' & '*' = '*' */};
     core::String* s = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
-                ^" in f.call() as{TypeError} core::String*;
+                ^" in f(){() →* self::method::T*} as{TypeError} core::String*;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
index 2e4c25a..280c716 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
@@ -490,7 +490,7 @@
     : self::Enum#4::index = index, self::Enum#4::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Enum#4::_name};
+    return this.{self::Enum#4::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -512,7 +512,7 @@
     : self::Enum#3::index = index, self::Enum#3::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Enum#3::_name};
+    return this.{self::Enum#3::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -534,7 +534,7 @@
     : self::Enum#2::index = index, self::Enum#2::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Enum#2::_name};
+    return this.{self::Enum#2::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -556,7 +556,7 @@
     : self::Enum#1::index = index, self::Enum#1::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Enum#1::_name};
+    return this.{self::Enum#1::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -578,7 +578,7 @@
     : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Enum::_name};
+    return this.{self::Enum::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -600,7 +600,7 @@
     : self::AnotherEnum::index = index, self::AnotherEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::AnotherEnum::_name};
+    return this.{self::AnotherEnum::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -618,13 +618,13 @@
 static method foo() → dynamic {
   invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:34:3: Error: Can't use 'main' because it is declared more than once.
   main();
-  ^".call();
+  ^"{dynamic}.call();
   core::print(invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:35:9: Error: Can't use 'field' because it is declared more than once.
   print(field);
         ^");
   invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'C' because it is declared more than once.
   C.s();
-  ^".s();
+  ^"{dynamic}.s();
 }
 static method useAnotherEnum() → dynamic {
   <core::String*, core::Object*>{"AnotherEnum.a": #C27, "AnotherEnum.b": #C29, "AnotherEnum.c": #C31, "AnotherEnum._name": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:102:38: Error: Can't use '_name' because it is declared more than once.
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
index 32a46a1..325b6441 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
@@ -428,7 +428,7 @@
     : self::Enum#4::index = index, self::Enum#4::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Enum#4::_name};
+    return this.{self::Enum#4::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -450,7 +450,7 @@
     : self::Enum#3::index = index, self::Enum#3::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Enum#3::_name};
+    return this.{self::Enum#3::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -472,7 +472,7 @@
     : self::Enum#2::index = index, self::Enum#2::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Enum#2::_name};
+    return this.{self::Enum#2::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -494,7 +494,7 @@
     : self::Enum#1::index = index, self::Enum#1::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Enum#1::_name};
+    return this.{self::Enum#1::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -516,7 +516,7 @@
     : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Enum::_name};
+    return this.{self::Enum::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -538,7 +538,7 @@
     : self::AnotherEnum::index = index, self::AnotherEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::AnotherEnum::_name};
+    return this.{self::AnotherEnum::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.expect b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.expect
index 7187612..a1e0f80 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.expect
@@ -17,7 +17,7 @@
 
 class Foo extends core::Object /*hasConstConstructor*/  {
   const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0)), super core::Object::•()
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.outline.expect
index cc57c39..77b03f4 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.outline.expect
@@ -13,7 +13,7 @@
 
 class Foo extends core::Object /*hasConstConstructor*/  {
   const constructor •(core::int* i) → self2::Foo*
-    : assert(i.{core::num::>}(0)), super core::Object::•()
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.transformed.expect
index 7187612..a1e0f80 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
 
 class Foo extends core::Object /*hasConstConstructor*/  {
   const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0)), super core::Object::•()
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.expect b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.expect
index 616bd79..4b68f2c 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.expect
@@ -18,7 +18,7 @@
 
 class Foo extends core::Object /*hasConstConstructor*/  {
   const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0)), super core::Object::•()
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.outline.expect
index 23cb135..b534db4 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.outline.expect
@@ -14,7 +14,7 @@
 
 class Foo extends core::Object /*hasConstConstructor*/  {
   const constructor •(core::int* i) → self2::Foo*
-    : assert(i.{core::num::>}(0)), super core::Object::•()
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.transformed.expect
index 616bd79..4b68f2c 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
 
 class Foo extends core::Object /*hasConstConstructor*/  {
   const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0)), super core::Object::•()
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.expect b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.expect
index 8a85eea..a11cbcd 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.expect
@@ -19,7 +19,7 @@
 
 class Foo extends core::Object /*hasConstConstructor*/  {
   const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0)), super core::Object::•()
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.outline.expect
index 93c5c0c..86c9613 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.outline.expect
@@ -14,7 +14,7 @@
 
 class Foo extends core::Object /*hasConstConstructor*/  {
   const constructor •(core::int* i) → self2::Foo*
-    : assert(i.{core::num::>}(0)), super core::Object::•()
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.transformed.expect
index 8a85eea..a11cbcd 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
 
 class Foo extends core::Object /*hasConstConstructor*/  {
   const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0)), super core::Object::•()
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.expect b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.expect
index 43d683c..32f4daa 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.expect
@@ -17,7 +17,7 @@
 
 class Foo extends core::Object /*hasConstConstructor*/  {
   const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0)), super core::Object::•()
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.outline.expect
index cb91977..c18e587 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.outline.expect
@@ -13,7 +13,7 @@
 
 class Foo extends core::Object /*hasConstConstructor*/  {
   const constructor •(core::int* i) → self2::Foo*
-    : assert(i.{core::num::>}(0)), super core::Object::•()
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.transformed.expect
index 43d683c..32f4daa 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
 
 class Foo extends core::Object /*hasConstConstructor*/  {
   const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0)), super core::Object::•()
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.expect
index 528c1f6..fa47aba 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.expect
@@ -79,64 +79,64 @@
   field core::int* foo;
   field core::int* bar;
   constructor •(core::int* x, core::int* y) → self::Key*
-    : self::Key::foo = x.{core::int::^}(y), self::Key::bar = x.{core::int::^}(y), super core::Object::•() {
-    core::print("hello ${x.{core::int::^}(y)}");
+    : self::Key::foo = x.{core::int::^}(y){(core::int*) →* core::int*}, self::Key::bar = x.{core::int::^}(y){(core::int*) →* core::int*}, super core::Object::•() {
+    core::print("hello ${x.{core::int::^}(y){(core::int*) →* core::int*}}");
   }
   constructor NotDuplicate(core::int* x, core::int* y) → self::Key*
-    : self::Key::foo = x.{core::int::^}(y), self::Key::bar = x.{core::int::^}(y), super core::Object::•() {
-    core::print("hello ${x.{core::int::^}(y)}");
+    : self::Key::foo = x.{core::int::^}(y){(core::int*) →* core::int*}, self::Key::bar = x.{core::int::^}(y){(core::int*) →* core::int*}, super core::Object::•() {
+    core::print("hello ${x.{core::int::^}(y){(core::int*) →* core::int*}}");
   }
   get a() → core::int*
-    return this.{self::Key::runtimeType}.{core::Type::hashCode}.{core::int::^}(null.{core::Object::hashCode});
+    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
   get b() → core::int*
-    return this.{self::Key::runtimeType}.{core::Type::hashCode}.{core::int::^}(null.{core::Object::hashCode});
+    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
   get c() → core::int* {
-    return this.{self::Key::runtimeType}.{core::Type::hashCode}.{core::int::^}(null.{core::Object::hashCode});
+    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
   }
   get d() → core::int* {
-    return this.{self::Key::runtimeType}.{core::Type::hashCode}.{core::int::^}(null.{core::Object::hashCode});
+    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
   }
   get e() → core::int*
-    return 1.{core::num::+}(this.{self::Key::runtimeType}.{core::Type::hashCode}).{core::int::^}(null.{core::Object::hashCode}.{core::num::+}(3));
+    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   get f() → core::int*
-    return 1.{core::num::+}(this.{self::Key::runtimeType}.{core::Type::hashCode}).{core::int::^}(null.{core::Object::hashCode}.{core::num::+}(3));
+    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   get g() → core::int* {
-    return 1.{core::num::+}(this.{self::Key::runtimeType}.{core::Type::hashCode}).{core::int::^}(null.{core::Object::hashCode}.{core::num::+}(3));
+    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   }
   get h() → core::int* {
-    return 1.{core::num::+}(this.{self::Key::runtimeType}.{core::Type::hashCode}).{core::int::^}(null.{core::Object::hashCode}.{core::num::+}(3));
+    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   }
   method i(core::int* x, core::int* y) → core::int*
-    return x.{core::int::^}(y);
+    return x.{core::int::^}(y){(core::int*) →* core::int*};
   method j(core::int* x, core::int* y) → core::int*
-    return x.{core::int::^}(y);
+    return x.{core::int::^}(y){(core::int*) →* core::int*};
   method k(core::int* x, core::int* y) → core::int* {
-    return x.{core::int::^}(y);
+    return x.{core::int::^}(y){(core::int*) →* core::int*};
   }
   method l(core::int* x, core::int* y) → core::int* {
-    return x.{core::int::^}(y);
+    return x.{core::int::^}(y){(core::int*) →* core::int*};
   }
   method m(core::int* x, core::int* y) → core::int* {
-    core::int* z = x.{core::int::^}(y);
+    core::int* z = x.{core::int::^}(y){(core::int*) →* core::int*};
     return z;
   }
   method n(core::int* x, core::int* y) → core::int* {
-    core::int* z = x.{core::int::^}(y);
+    core::int* z = x.{core::int::^}(y){(core::int*) →* core::int*};
     return z;
   }
   method o(core::int* x, core::int* y) → core::int*
-    return 1.{core::num::+}(x).{core::int::^}(y.{core::num::+}(3));
+    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   method p(core::int* x, core::int* y) → core::int*
-    return 1.{core::num::+}(x).{core::int::^}(y.{core::num::+}(3));
+    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   method q(core::int* x, core::int* y) → core::int* {
-    return 1.{core::num::+}(x).{core::int::^}(y.{core::num::+}(3));
+    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   }
   method r(core::int* x, core::int* y) → core::int* {
-    return 1.{core::num::+}(x).{core::int::^}(y.{core::num::+}(3));
+    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   }
   method s(core::int* x, core::int* y) → dynamic {
-    this.{self::Key::s}(x.{core::int::^}(y), x.{core::int::^}(y));
-    this.{self::Key::s}(x.{core::int::^}(y), x.{core::int::^}(y));
+    this.{self::Key::s}(x.{core::int::^}(y){(core::int*) →* core::int*}, x.{core::int::^}(y){(core::int*) →* core::int*}){(core::int*, core::int*) →* dynamic};
+    this.{self::Key::s}(x.{core::int::^}(y){(core::int*) →* core::int*}, x.{core::int::^}(y){(core::int*) →* core::int*}){(core::int*, core::int*) →* dynamic};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.transformed.expect
index 528c1f6..fa47aba 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.transformed.expect
@@ -79,64 +79,64 @@
   field core::int* foo;
   field core::int* bar;
   constructor •(core::int* x, core::int* y) → self::Key*
-    : self::Key::foo = x.{core::int::^}(y), self::Key::bar = x.{core::int::^}(y), super core::Object::•() {
-    core::print("hello ${x.{core::int::^}(y)}");
+    : self::Key::foo = x.{core::int::^}(y){(core::int*) →* core::int*}, self::Key::bar = x.{core::int::^}(y){(core::int*) →* core::int*}, super core::Object::•() {
+    core::print("hello ${x.{core::int::^}(y){(core::int*) →* core::int*}}");
   }
   constructor NotDuplicate(core::int* x, core::int* y) → self::Key*
-    : self::Key::foo = x.{core::int::^}(y), self::Key::bar = x.{core::int::^}(y), super core::Object::•() {
-    core::print("hello ${x.{core::int::^}(y)}");
+    : self::Key::foo = x.{core::int::^}(y){(core::int*) →* core::int*}, self::Key::bar = x.{core::int::^}(y){(core::int*) →* core::int*}, super core::Object::•() {
+    core::print("hello ${x.{core::int::^}(y){(core::int*) →* core::int*}}");
   }
   get a() → core::int*
-    return this.{self::Key::runtimeType}.{core::Type::hashCode}.{core::int::^}(null.{core::Object::hashCode});
+    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
   get b() → core::int*
-    return this.{self::Key::runtimeType}.{core::Type::hashCode}.{core::int::^}(null.{core::Object::hashCode});
+    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
   get c() → core::int* {
-    return this.{self::Key::runtimeType}.{core::Type::hashCode}.{core::int::^}(null.{core::Object::hashCode});
+    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
   }
   get d() → core::int* {
-    return this.{self::Key::runtimeType}.{core::Type::hashCode}.{core::int::^}(null.{core::Object::hashCode});
+    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
   }
   get e() → core::int*
-    return 1.{core::num::+}(this.{self::Key::runtimeType}.{core::Type::hashCode}).{core::int::^}(null.{core::Object::hashCode}.{core::num::+}(3));
+    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   get f() → core::int*
-    return 1.{core::num::+}(this.{self::Key::runtimeType}.{core::Type::hashCode}).{core::int::^}(null.{core::Object::hashCode}.{core::num::+}(3));
+    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   get g() → core::int* {
-    return 1.{core::num::+}(this.{self::Key::runtimeType}.{core::Type::hashCode}).{core::int::^}(null.{core::Object::hashCode}.{core::num::+}(3));
+    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   }
   get h() → core::int* {
-    return 1.{core::num::+}(this.{self::Key::runtimeType}.{core::Type::hashCode}).{core::int::^}(null.{core::Object::hashCode}.{core::num::+}(3));
+    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   }
   method i(core::int* x, core::int* y) → core::int*
-    return x.{core::int::^}(y);
+    return x.{core::int::^}(y){(core::int*) →* core::int*};
   method j(core::int* x, core::int* y) → core::int*
-    return x.{core::int::^}(y);
+    return x.{core::int::^}(y){(core::int*) →* core::int*};
   method k(core::int* x, core::int* y) → core::int* {
-    return x.{core::int::^}(y);
+    return x.{core::int::^}(y){(core::int*) →* core::int*};
   }
   method l(core::int* x, core::int* y) → core::int* {
-    return x.{core::int::^}(y);
+    return x.{core::int::^}(y){(core::int*) →* core::int*};
   }
   method m(core::int* x, core::int* y) → core::int* {
-    core::int* z = x.{core::int::^}(y);
+    core::int* z = x.{core::int::^}(y){(core::int*) →* core::int*};
     return z;
   }
   method n(core::int* x, core::int* y) → core::int* {
-    core::int* z = x.{core::int::^}(y);
+    core::int* z = x.{core::int::^}(y){(core::int*) →* core::int*};
     return z;
   }
   method o(core::int* x, core::int* y) → core::int*
-    return 1.{core::num::+}(x).{core::int::^}(y.{core::num::+}(3));
+    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   method p(core::int* x, core::int* y) → core::int*
-    return 1.{core::num::+}(x).{core::int::^}(y.{core::num::+}(3));
+    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   method q(core::int* x, core::int* y) → core::int* {
-    return 1.{core::num::+}(x).{core::int::^}(y.{core::num::+}(3));
+    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   }
   method r(core::int* x, core::int* y) → core::int* {
-    return 1.{core::num::+}(x).{core::int::^}(y.{core::num::+}(3));
+    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
   }
   method s(core::int* x, core::int* y) → dynamic {
-    this.{self::Key::s}(x.{core::int::^}(y), x.{core::int::^}(y));
-    this.{self::Key::s}(x.{core::int::^}(y), x.{core::int::^}(y));
+    this.{self::Key::s}(x.{core::int::^}(y){(core::int*) →* core::int*}, x.{core::int::^}(y){(core::int*) →* core::int*}){(core::int*, core::int*) →* dynamic};
+    this.{self::Key::s}(x.{core::int::^}(y){(core::int*) →* core::int*}, x.{core::int::^}(y){(core::int*) →* core::int*}){(core::int*, core::int*) →* dynamic};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/escape.dart.weak.expect b/pkg/front_end/testcases/general/escape.dart.weak.expect
index 2a4b4c7..e9c05d7 100644
--- a/pkg/front_end/testcases/general/escape.dart.weak.expect
+++ b/pkg/front_end/testcases/general/escape.dart.weak.expect
@@ -67,17 +67,17 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method useAsA(self::A* object) → void {
-  dynamic _ = object.{self::A::field};
+  dynamic _ = object.{self::A::field}{dynamic};
 }
 static method useAsB(self::B* object) → void {
-  dynamic _ = object.{self::B::field};
+  dynamic _ = object.{self::B::field}{dynamic};
   self::escape(object);
 }
 static method escape(dynamic x) → void {
-  x.{core::Object::==}(null) ?{dynamic} x = "" : null;
-  x.{core::Object::==}(null) ?{dynamic} x = 45 : null;
+  x == null ?{dynamic} x = "" : null;
+  x == null ?{dynamic} x = 45 : null;
   if(!(x is core::int*) && !(x is core::String*)) {
-    x.field = 45;
+    x{dynamic}.field = 45;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/escape.dart.weak.transformed.expect b/pkg/front_end/testcases/general/escape.dart.weak.transformed.expect
index 2a4b4c7..e9c05d7 100644
--- a/pkg/front_end/testcases/general/escape.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/escape.dart.weak.transformed.expect
@@ -67,17 +67,17 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method useAsA(self::A* object) → void {
-  dynamic _ = object.{self::A::field};
+  dynamic _ = object.{self::A::field}{dynamic};
 }
 static method useAsB(self::B* object) → void {
-  dynamic _ = object.{self::B::field};
+  dynamic _ = object.{self::B::field}{dynamic};
   self::escape(object);
 }
 static method escape(dynamic x) → void {
-  x.{core::Object::==}(null) ?{dynamic} x = "" : null;
-  x.{core::Object::==}(null) ?{dynamic} x = 45 : null;
+  x == null ?{dynamic} x = "" : null;
+  x == null ?{dynamic} x = 45 : null;
   if(!(x is core::int*) && !(x is core::String*)) {
-    x.field = 45;
+    x{dynamic}.field = 45;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/expressions.dart.weak.expect b/pkg/front_end/testcases/general/expressions.dart.weak.expect
index 5cb0aef..f2ff8e6 100644
--- a/pkg/front_end/testcases/general/expressions.dart.weak.expect
+++ b/pkg/front_end/testcases/general/expressions.dart.weak.expect
@@ -13,11 +13,11 @@
   core::print(fisk);
 }
 static method caller(dynamic f) → dynamic {
-  f.call();
+  f{dynamic}.call();
 }
 static method main() → dynamic {
   core::int* i = 0;
-  core::print(i.{core::num::==}(1) ?{core::String*} "bad" : "good");
+  core::print(i =={core::num::==}{(core::Object*) →* core::bool*} 1 ?{core::String*} "bad" : "good");
   core::print("${i}");
   core::print("'${i}'");
   core::print(" '${i}' ");
@@ -30,26 +30,26 @@
   }
   on core::String* catch(final core::String* e, final core::StackTrace* s) {
     core::print(e);
-    if(!s.{core::Object::==}(null))
+    if(!(s == null))
       core::print(s);
   }
   for (; false; ) {
   }
   core::List<core::String*>* list = <core::String*>["Hello, World!"];
-  core::print(list.{core::List::[]}(i));
-  list.{core::List::[]=}(i, "Hello, Brave New World!");
-  core::print(list.{core::List::[]}(i));
+  core::print(list.{core::List::[]}(i){(core::int*) →* core::String*});
+  list.{core::List::[]=}(i, "Hello, Brave New World!"){(core::int*, core::String*) →* void};
+  core::print(list.{core::List::[]}(i){(core::int*) →* core::String*});
   i = 87;
-  core::print(i.{core::int::unary-}());
-  core::print(i.{core::int::~}());
-  core::print(!i.{core::num::==}(42));
-  core::print(i = i.{core::num::-}(1));
-  core::print(i = i.{core::num::+}(1));
-  core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::-}(1) in #t1);
-  core::print(let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1) in #t3);
+  core::print(i.{core::int::unary-}(){() →* core::int*});
+  core::print(i.{core::int::~}(){() →* core::int*});
+  core::print(!(i =={core::num::==}{(core::Object*) →* core::bool*} 42));
+  core::print(i = i.{core::num::-}(1){(core::num*) →* core::int*});
+  core::print(i = i.{core::num::+}(1){(core::num*) →* core::int*});
+  core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::-}(1){(core::num*) →* core::int*} in #t1);
+  core::print(let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3);
   core::print(new core::Object::•());
   core::print(#C2);
-  core::print(core::List::filled<core::String*>(2, null).{core::Object::runtimeType});
+  core::print(core::List::filled<core::String*>(2, null).{core::Object::runtimeType}{core::Type*});
   self::foo(fisk: "Blorp gulp");
   function f() → Null {
     core::print("f was called");
@@ -61,21 +61,21 @@
   function g([dynamic message = #C1]) → Null {
     core::print(message);
   }
-  g.call("Hello, World");
+  g("Hello, World"){([dynamic]) →* Null};
   self::caller(([dynamic x = #C1]) → Null {
     core::print("<anon> was called with ${x}");
   });
   function h({dynamic message = #C1}) → Null {
     core::print(message);
   }
-  h.call(message: "Hello, World");
+  h(message: "Hello, World"){({message: dynamic}) →* Null};
   self::caller(({dynamic x = #C1}) → Null {
     core::print("<anon> was called with ${x}");
   });
-  core::print((#C3).{core::Type::toString}());
+  core::print((#C3).{core::Type::toString}(){() →* core::String*});
   core::print(#C3);
   core::print(let final core::Type* #t5 = #C3 in block {
-    #t5.{core::Type::toString}();
+    #t5.{core::Type::toString}(){() →* core::String*};
   } =>#t5);
   try {
     core::print(invalid-expression "pkg/front_end/testcases/general/expressions.dart:74:16: Error: Method not found: 'int.toString'.
diff --git a/pkg/front_end/testcases/general/expressions.dart.weak.transformed.expect b/pkg/front_end/testcases/general/expressions.dart.weak.transformed.expect
index 0e8e94f..17936f5 100644
--- a/pkg/front_end/testcases/general/expressions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/expressions.dart.weak.transformed.expect
@@ -13,11 +13,11 @@
   core::print(fisk);
 }
 static method caller(dynamic f) → dynamic {
-  f.call();
+  f{dynamic}.call();
 }
 static method main() → dynamic {
   core::int* i = 0;
-  core::print(i.{core::num::==}(1) ?{core::String*} "bad" : "good");
+  core::print(i =={core::num::==}{(core::Object*) →* core::bool*} 1 ?{core::String*} "bad" : "good");
   core::print("${i}");
   core::print("'${i}'");
   core::print(" '${i}' ");
@@ -30,26 +30,26 @@
   }
   on core::String* catch(final core::String* e, final core::StackTrace* s) {
     core::print(e);
-    if(!s.{core::Object::==}(null))
+    if(!(s == null))
       core::print(s);
   }
   for (; false; ) {
   }
   core::List<core::String*>* list = core::_GrowableList::_literal1<core::String*>("Hello, World!");
-  core::print(list.{core::List::[]}(i));
-  list.{core::List::[]=}(i, "Hello, Brave New World!");
-  core::print(list.{core::List::[]}(i));
+  core::print(list.{core::List::[]}(i){(core::int*) →* core::String*});
+  list.{core::List::[]=}(i, "Hello, Brave New World!"){(core::int*, core::String*) →* void};
+  core::print(list.{core::List::[]}(i){(core::int*) →* core::String*});
   i = 87;
-  core::print(i.{core::int::unary-}());
-  core::print(i.{core::int::~}());
-  core::print(!i.{core::num::==}(42));
-  core::print(i = i.{core::num::-}(1));
-  core::print(i = i.{core::num::+}(1));
-  core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::-}(1) in #t1);
-  core::print(let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1) in #t3);
+  core::print(i.{core::int::unary-}(){() →* core::int*});
+  core::print(i.{core::int::~}(){() →* core::int*});
+  core::print(!(i =={core::num::==}{(core::Object*) →* core::bool*} 42));
+  core::print(i = i.{core::num::-}(1){(core::num*) →* core::int*});
+  core::print(i = i.{core::num::+}(1){(core::num*) →* core::int*});
+  core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::-}(1){(core::num*) →* core::int*} in #t1);
+  core::print(let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3);
   core::print(new core::Object::•());
   core::print(#C2);
-  core::print(core::_List::•<core::String*>(2).{core::Object::runtimeType});
+  core::print(core::_List::•<core::String*>(2).{core::Object::runtimeType}{core::Type*});
   self::foo(fisk: "Blorp gulp");
   function f() → Null {
     core::print("f was called");
@@ -61,21 +61,21 @@
   function g([dynamic message = #C1]) → Null {
     core::print(message);
   }
-  g.call("Hello, World");
+  g("Hello, World"){([dynamic]) →* Null};
   self::caller(([dynamic x = #C1]) → Null {
     core::print("<anon> was called with ${x}");
   });
   function h({dynamic message = #C1}) → Null {
     core::print(message);
   }
-  h.call(message: "Hello, World");
+  h(message: "Hello, World"){({message: dynamic}) →* Null};
   self::caller(({dynamic x = #C1}) → Null {
     core::print("<anon> was called with ${x}");
   });
-  core::print((#C3).{core::Type::toString}());
+  core::print((#C3).{core::Type::toString}(){() →* core::String*});
   core::print(#C3);
   core::print(let final core::Type* #t5 = #C3 in block {
-    #t5.{core::Type::toString}();
+    #t5.{core::Type::toString}(){() →* core::String*};
   } =>#t5);
   try {
     core::print(invalid-expression "pkg/front_end/testcases/general/expressions.dart:74:16: Error: Method not found: 'int.toString'.
@@ -99,7 +99,7 @@
 Evaluated: StringConcatenation @ org-dartlang-testcase:///expressions.dart:21:8 -> StringConstant("foobar")
 Evaluated: VariableGetImpl @ org-dartlang-testcase:///expressions.dart:72:9 -> TypeLiteralConstant(int*)
 Evaluated: VariableGet @ org-dartlang-testcase:///expressions.dart:72:9 -> TypeLiteralConstant(int*)
-Extra constant evaluation: evaluated: 135, effectively constant: 3
+Extra constant evaluation: evaluated: 133, effectively constant: 3
 
 
 Constructor coverage from constants:
diff --git a/pkg/front_end/testcases/general/external.dart.weak.expect b/pkg/front_end/testcases/general/external.dart.weak.expect
index 766ac5f..ab78ddb 100644
--- a/pkg/front_end/testcases/general/external.dart.weak.expect
+++ b/pkg/front_end/testcases/general/external.dart.weak.expect
@@ -2,19 +2,20 @@
 import self as self;
 import "dart:core" as core;
 import "dart:isolate" as iso;
+import "dart:async" as asy;
 
 import "dart:isolate";
 
 static field dynamic subscription;
 static method onData(dynamic x) → void {
   core::print(x);
-  self::subscription.cancel();
+  self::subscription{dynamic}.cancel();
 }
 static method main() → dynamic {
   core::String* string = core::String::fromCharCode(65);
   iso::ReceivePort* port = iso::ReceivePort::•();
-  self::subscription = port.{iso::ReceivePort::listen}(#C1);
-  port.{iso::ReceivePort::sendPort}.{iso::SendPort::send}(string);
+  self::subscription = port.{iso::ReceivePort::listen}(#C1){((dynamic) →* void, {cancelOnError: core::bool*, onDone: () →* void, onError: core::Function*}) →* asy::StreamSubscription<dynamic>*};
+  port.{iso::ReceivePort::sendPort}{iso::SendPort*}.{iso::SendPort::send}(string){(core::Object*) →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/external.dart.weak.transformed.expect b/pkg/front_end/testcases/general/external.dart.weak.transformed.expect
index 766ac5f..ab78ddb 100644
--- a/pkg/front_end/testcases/general/external.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/external.dart.weak.transformed.expect
@@ -2,19 +2,20 @@
 import self as self;
 import "dart:core" as core;
 import "dart:isolate" as iso;
+import "dart:async" as asy;
 
 import "dart:isolate";
 
 static field dynamic subscription;
 static method onData(dynamic x) → void {
   core::print(x);
-  self::subscription.cancel();
+  self::subscription{dynamic}.cancel();
 }
 static method main() → dynamic {
   core::String* string = core::String::fromCharCode(65);
   iso::ReceivePort* port = iso::ReceivePort::•();
-  self::subscription = port.{iso::ReceivePort::listen}(#C1);
-  port.{iso::ReceivePort::sendPort}.{iso::SendPort::send}(string);
+  self::subscription = port.{iso::ReceivePort::listen}(#C1){((dynamic) →* void, {cancelOnError: core::bool*, onDone: () →* void, onError: core::Function*}) →* asy::StreamSubscription<dynamic>*};
+  port.{iso::ReceivePort::sendPort}{iso::SendPort*}.{iso::SendPort::send}(string){(core::Object*) →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/fallthrough.dart.weak.expect b/pkg/front_end/testcases/general/fallthrough.dart.weak.expect
index 75e6040..4348081 100644
--- a/pkg/front_end/testcases/general/fallthrough.dart.weak.expect
+++ b/pkg/front_end/testcases/general/fallthrough.dart.weak.expect
@@ -14,7 +14,7 @@
 import "dart:core" as core;
 
 static method main(core::List<core::String*>* args) → void {
-  core::int* x = args.{core::List::length};
+  core::int* x = args.{core::List::length}{core::int*};
   #L1:
   switch(x) {
     #L2:
@@ -32,7 +32,7 @@
     case #C3:
     case #C4:
       {
-        if(args.{core::List::[]}(0).{core::String::==}("")) {
+        if(args.{core::List::[]}(0){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "") {
           break #L1;
         }
         else {
diff --git a/pkg/front_end/testcases/general/fallthrough.dart.weak.transformed.expect b/pkg/front_end/testcases/general/fallthrough.dart.weak.transformed.expect
index 75e6040..4348081 100644
--- a/pkg/front_end/testcases/general/fallthrough.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/fallthrough.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
 import "dart:core" as core;
 
 static method main(core::List<core::String*>* args) → void {
-  core::int* x = args.{core::List::length};
+  core::int* x = args.{core::List::length}{core::int*};
   #L1:
   switch(x) {
     #L2:
@@ -32,7 +32,7 @@
     case #C3:
     case #C4:
       {
-        if(args.{core::List::[]}(0).{core::String::==}("")) {
+        if(args.{core::List::[]}(0){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "") {
           break #L1;
         }
         else {
diff --git a/pkg/front_end/testcases/general/fibonacci.dart.weak.expect b/pkg/front_end/testcases/general/fibonacci.dart.weak.expect
index 95dc207..df2b7da 100644
--- a/pkg/front_end/testcases/general/fibonacci.dart.weak.expect
+++ b/pkg/front_end/testcases/general/fibonacci.dart.weak.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 static method fibonacci(core::int* n) → core::int* {
-  if(n.{core::num::<}(2))
+  if(n.{core::num::<}(2){(core::num*) →* core::bool*})
     return n;
-  return self::fibonacci(n.{core::num::-}(1)).{core::num::+}(self::fibonacci(n.{core::num::-}(2)));
+  return self::fibonacci(n.{core::num::-}(1){(core::num*) →* core::int*}).{core::num::+}(self::fibonacci(n.{core::num::-}(2){(core::num*) →* core::int*})){(core::num*) →* core::int*};
 }
 static method main() → dynamic {
-  for (core::int* i = 0; i.{core::num::<}(20); i = i.{core::num::+}(1)) {
+  for (core::int* i = 0; i.{core::num::<}(20){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     core::print(self::fibonacci(i));
   }
 }
diff --git a/pkg/front_end/testcases/general/fibonacci.dart.weak.transformed.expect b/pkg/front_end/testcases/general/fibonacci.dart.weak.transformed.expect
index 95dc207..df2b7da 100644
--- a/pkg/front_end/testcases/general/fibonacci.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/fibonacci.dart.weak.transformed.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 static method fibonacci(core::int* n) → core::int* {
-  if(n.{core::num::<}(2))
+  if(n.{core::num::<}(2){(core::num*) →* core::bool*})
     return n;
-  return self::fibonacci(n.{core::num::-}(1)).{core::num::+}(self::fibonacci(n.{core::num::-}(2)));
+  return self::fibonacci(n.{core::num::-}(1){(core::num*) →* core::int*}).{core::num::+}(self::fibonacci(n.{core::num::-}(2){(core::num*) →* core::int*})){(core::num*) →* core::int*};
 }
 static method main() → dynamic {
-  for (core::int* i = 0; i.{core::num::<}(20); i = i.{core::num::+}(1)) {
+  for (core::int* i = 0; i.{core::num::<}(20){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     core::print(self::fibonacci(i));
   }
 }
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.expect
index 6c86016..085bed3 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.expect
@@ -8,11 +8,11 @@
     final self::TestMixin::R* response = await fetch;
     self::TestMixin::T* result;
     if(response is self::Response<dynamic>*) {
-      result = response{self::TestMixin::R* & self::Response<dynamic>* /* '*' & '*' = '*' */}.{self::Response::data} as{TypeError,ForDynamic} self::TestMixin::T*;
+      result = response{self::TestMixin::R* & self::Response<dynamic>* /* '*' & '*' = '*' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} self::TestMixin::T*;
     }
     else
       if(response is self::PagingResponse<dynamic>*) {
-        result = response{self::TestMixin::R* & self::PagingResponse<dynamic>* /* '*' & '*' = '*' */}.{self::PagingResponse::data}.{self::PagingResponseData::data} as self::TestMixin::T*;
+        result = response{self::TestMixin::R* & self::PagingResponse<dynamic>* /* '*' & '*' = '*' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>*}.{self::PagingResponseData::data}{core::List<dynamic>*} as self::TestMixin::T*;
       }
       else
         if(response is self::TestMixin::T*) {
@@ -105,7 +105,7 @@
     ;
   method _test() → dynamic {
     final self::Response<core::String*>* response = new self::Response::•<core::String*>("test");
-    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String*>*>(response));
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String*>*>(response)){(asy::Future<self::Response<core::String*>*>*) →* asy::Future<core::String*>*};
   }
 }
 abstract class _Class2&Object&TestMixin = core::Object with self::TestMixin<self::PagingResponse<core::String*>*, core::String*> /*isAnonymousMixin,hasConstConstructor*/  {
@@ -131,7 +131,7 @@
     ;
   method _test() → dynamic {
     final self::PagingResponse<core::String*>* response = new self::PagingResponse::•<core::String*>(new self::PagingResponseData::•<core::String*>(<core::String*>["test"]));
-    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String*>*>(response));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String*>*>(response)){(asy::Future<self::PagingResponse<core::String*>*>*) →* asy::Future<core::String*>*};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
index f8c0120..add51d0 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
@@ -22,11 +22,11 @@
           final self::TestMixin::R* response = _in::unsafeCast<self::TestMixin::R*>(:result);
           self::TestMixin::T* result;
           if(response is self::Response<dynamic>*) {
-            result = response{self::TestMixin::R* & self::Response<dynamic>* /* '*' & '*' = '*' */}.{self::Response::data} as{TypeError,ForDynamic} self::TestMixin::T*;
+            result = response{self::TestMixin::R* & self::Response<dynamic>* /* '*' & '*' = '*' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} self::TestMixin::T*;
           }
           else
             if(response is self::PagingResponse<dynamic>*) {
-              result = response{self::TestMixin::R* & self::PagingResponse<dynamic>* /* '*' & '*' = '*' */}.{self::PagingResponse::data}.{self::PagingResponseData::data} as self::TestMixin::T*;
+              result = response{self::TestMixin::R* & self::PagingResponse<dynamic>* /* '*' & '*' = '*' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>*}.{self::PagingResponseData::data}{core::List<dynamic>*} as self::TestMixin::T*;
             }
             else
               if(response is self::TestMixin::T*) {
@@ -130,11 +130,11 @@
           final self::Response<core::String*>* response = _in::unsafeCast<self::Response<core::String*>*>(:result);
           core::String* result;
           if(response is self::Response<dynamic>*) {
-            result = response{self::Response<core::String*>*}.{self::Response::data};
+            result = response{self::Response<core::String*>*}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} core::String*;
           }
           else
             if(response is self::PagingResponse<dynamic>*) {
-              result = response{self::Response<core::String*>*}.{self::PagingResponse::data}.{self::PagingResponseData::data} as core::String*;
+              result = response{self::Response<core::String*>*}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>*}.{self::PagingResponseData::data}{core::List<dynamic>*} as core::String*;
             }
             else
               if(response is core::String*) {
@@ -175,7 +175,7 @@
     ;
   method _test() → dynamic {
     final self::Response<core::String*>* response = new self::Response::•<core::String*>("test");
-    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String*>*>(response));
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String*>*>(response)){(asy::Future<self::Response<core::String*>*>*) →* asy::Future<core::String*>*};
   }
 }
 abstract class _Class2&Object&TestMixin extends core::Object implements self::TestMixin<self::PagingResponse<core::String*>*, core::String*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
@@ -199,11 +199,11 @@
           final self::PagingResponse<core::String*>* response = _in::unsafeCast<self::PagingResponse<core::String*>*>(:result);
           core::String* result;
           if(response is self::Response<dynamic>*) {
-            result = response{self::PagingResponse<core::String*>*}.{self::Response::data} as{TypeError,ForDynamic} core::String*;
+            result = response{self::PagingResponse<core::String*>*}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} core::String*;
           }
           else
             if(response is self::PagingResponse<dynamic>*) {
-              result = response{self::PagingResponse<core::String*>*}.{self::PagingResponse::data}.{self::PagingResponseData::data} as core::String*;
+              result = response{self::PagingResponse<core::String*>*}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>*}.{self::PagingResponseData::data}{core::List<dynamic>*} as core::String*;
             }
             else
               if(response is core::String*) {
@@ -244,7 +244,7 @@
     ;
   method _test() → dynamic {
     final self::PagingResponse<core::String*>* response = new self::PagingResponse::•<core::String*>(new self::PagingResponseData::•<core::String*>(core::_GrowableList::_literal1<core::String*>("test")));
-    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String*>*>(response));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String*>*>(response)){(asy::Future<self::PagingResponse<core::String*>*>*) →* asy::Future<core::String*>*};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.expect b/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.expect
index 06e24b0..13b9d4e 100644
--- a/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.expect
@@ -8,7 +8,7 @@
 static method main() → void {
   function f({core::int* x = #C1}) → core::int*
     return null;
-  new mai::Registry::•().{mai::DynamicDispatchRegistry::register}(f);
+  new mai::Registry::•().{mai::DynamicDispatchRegistry::register}(f){(({x: core::int*}) →* core::int*) →* ({x: core::int*}) →* core::int*};
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.transformed.expect
index 06e24b0..13b9d4e 100644
--- a/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
 static method main() → void {
   function f({core::int* x = #C1}) → core::int*
     return null;
-  new mai::Registry::•().{mai::DynamicDispatchRegistry::register}(f);
+  new mai::Registry::•().{mai::DynamicDispatchRegistry::register}(f){(({x: core::int*}) →* core::int*) →* ({x: core::int*}) →* core::int*};
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.expect b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.expect
index b1f7867..3360167 100644
--- a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.expect
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.expect
@@ -146,7 +146,7 @@
  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
     for (unresolved.foo in []) {}
-         ^^^^^^^^^^".foo = #t14;
+         ^^^^^^^^^^"{dynamic}.foo = #t14;
     }
     for (final dynamic #t15 in <dynamic>[]) {
       invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:39:12: Error: The setter 'unresolved' isn't defined for the class 'C'.
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.transformed.expect b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.transformed.expect
index cdc7b5c..2e09441 100644
--- a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.transformed.expect
@@ -228,7 +228,7 @@
  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
     for (unresolved.foo in []) {}
-         ^^^^^^^^^^".foo = #t14;
+         ^^^^^^^^^^"{dynamic}.foo = #t14;
         }
       }
     }
diff --git a/pkg/front_end/testcases/general/function_in_field.dart.weak.expect b/pkg/front_end/testcases/general/function_in_field.dart.weak.expect
index ca264d4..a2c6a44 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart.weak.expect
+++ b/pkg/front_end/testcases/general/function_in_field.dart.weak.expect
@@ -7,5 +7,5 @@
   return y;
 };
 static method main() → dynamic {
-  core::print(self::x.call());
+  core::print(self::x(){() →* core::int*});
 }
diff --git a/pkg/front_end/testcases/general/function_in_field.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_in_field.dart.weak.transformed.expect
index ca264d4..a2c6a44 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/function_in_field.dart.weak.transformed.expect
@@ -7,5 +7,5 @@
   return y;
 };
 static method main() → dynamic {
-  core::print(self::x.call());
+  core::print(self::x(){() →* core::int*});
 }
diff --git a/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.expect b/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.expect
index fa6936b..530685e 100644
--- a/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.expect
+++ b/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.expect
@@ -37,20 +37,20 @@
 static method test() → dynamic {
   function local<T extends core::num>(T t) → T
     return t;
-  local.call<core::String>("");
-  local.call<core::String>(throw "");
-  local.call<core::int>(0);
-  local.call<core::int>(throw "");
+  local<core::String>(""){(core::String) → core::String};
+  local<core::String>(throw ""){(core::String) → core::String};
+  local<core::int>(0){(core::int) → core::int};
+  local<core::int>(throw ""){(core::int) → core::int};
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:13:8: Error: Expected 1 type arguments.
   local<int, String>(throw '');
-       ^" in local.call<core::int, core::String>(throw "");
+       ^" in local{<inapplicable>}.<core::int, core::String>(throw "");
   <T extends core::num>(T) → T f = local;
-  f.call<core::String>("");
-  f.call<core::String>(throw "");
-  f.call<core::int>(0);
-  f.call<core::int>(throw "");
+  f<core::String>(""){(core::String) → core::String};
+  f<core::String>(throw ""){(core::String) → core::String};
+  f<core::int>(0){(core::int) → core::int};
+  f<core::int>(throw ""){(core::int) → core::int};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:19:4: Error: Expected 1 type arguments.
   f<int, String>(throw '');
-   ^" in f.call<core::int, core::String>(throw "");
+   ^" in f{<inapplicable>}.<core::int, core::String>(throw "");
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.transformed.expect
index f71e3b1..530685e 100644
--- a/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.transformed.expect
@@ -2,10 +2,6 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/function_invocation_bounds.dart:18:3: Error: 'F' isn't a type.
-//   F g = local;
-//   ^
-//
 // pkg/front_end/testcases/general/function_invocation_bounds.dart:9:8: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'local'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   local("");
@@ -16,36 +12,45 @@
 //   local<String>(throw '');
 //        ^
 //
-// pkg/front_end/testcases/general/function_invocation_bounds.dart:14:4: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// pkg/front_end/testcases/general/function_invocation_bounds.dart:13:8: Error: Expected 1 type arguments.
+//   local<int, String>(throw '');
+//        ^
+//
+// pkg/front_end/testcases/general/function_invocation_bounds.dart:15:4: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //   f("");
 //    ^
 //
-// pkg/front_end/testcases/general/function_invocation_bounds.dart:15:4: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// pkg/front_end/testcases/general/function_invocation_bounds.dart:16:4: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
 // Try changing type arguments so that they conform to the bounds.
 //   f<String>(throw '');
 //    ^
 //
+// pkg/front_end/testcases/general/function_invocation_bounds.dart:19:4: Error: Expected 1 type arguments.
+//   f<int, String>(throw '');
+//    ^
+//
 import self as self;
 import "dart:core" as core;
 
 typedef G<invariant T extends core::Object? = dynamic> = (T%) → T%;
 static method test() → dynamic {
-  function local<T extends core::num = core::num>(T t) → T
+  function local<T extends core::num>(T t) → T
     return t;
-  local.call<core::String>("");
-  local.call<core::String>(throw "");
-  local.call<core::int>(0);
-  local.call<core::int>(throw "");
-  <T extends core::num = core::num>(T) → T f = local;
-  f.call<core::String>("");
-  f.call<core::String>(throw "");
-  f.call<core::int>(0);
-  f.call<core::int>(throw "");
-  invalid-type g = local;
-  g.call("");
-  g.call<core::String>(throw "");
-  g.call(0);
-  g.call<core::int>(throw "");
+  local<core::String>(""){(core::String) → core::String};
+  local<core::String>(throw ""){(core::String) → core::String};
+  local<core::int>(0){(core::int) → core::int};
+  local<core::int>(throw ""){(core::int) → core::int};
+  let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:13:8: Error: Expected 1 type arguments.
+  local<int, String>(throw '');
+       ^" in local{<inapplicable>}.<core::int, core::String>(throw "");
+  <T extends core::num>(T) → T f = local;
+  f<core::String>(""){(core::String) → core::String};
+  f<core::String>(throw ""){(core::String) → core::String};
+  f<core::int>(0){(core::int) → core::int};
+  f<core::int>(throw ""){(core::int) → core::int};
+  let final Never #t2 = invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:19:4: Error: Expected 1 type arguments.
+  f<int, String>(throw '');
+   ^" in f{<inapplicable>}.<core::int, core::String>(throw "");
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.expect b/pkg/front_end/testcases/general/function_type_is_check.dart.weak.expect
index 3e17d2c..3994837 100644
--- a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.expect
+++ b/pkg/front_end/testcases/general/function_type_is_check.dart.weak.expect
@@ -14,5 +14,5 @@
     return 100;
 }
 static method main() → dynamic {
-  exp::Expect::equals(111, self::test(() → Null => null).+(self::test((core::Object* o) → Null => null)).+(self::test((core::Object* o, core::StackTrace* t) → Null => null)));
+  exp::Expect::equals(111, self::test(() → Null => null){dynamic}.+(self::test((core::Object* o) → Null => null)){dynamic}.+(self::test((core::Object* o, core::StackTrace* t) → Null => null)));
 }
diff --git a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_type_is_check.dart.weak.transformed.expect
index 3e17d2c..3994837 100644
--- a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/function_type_is_check.dart.weak.transformed.expect
@@ -14,5 +14,5 @@
     return 100;
 }
 static method main() → dynamic {
-  exp::Expect::equals(111, self::test(() → Null => null).+(self::test((core::Object* o) → Null => null)).+(self::test((core::Object* o, core::StackTrace* t) → Null => null)));
+  exp::Expect::equals(111, self::test(() → Null => null){dynamic}.+(self::test((core::Object* o) → Null => null)){dynamic}.+(self::test((core::Object* o, core::StackTrace* t) → Null => null)));
 }
diff --git a/pkg/front_end/testcases/general/functions.dart.weak.expect b/pkg/front_end/testcases/general/functions.dart.weak.expect
index c10936d..a0fd727 100644
--- a/pkg/front_end/testcases/general/functions.dart.weak.expect
+++ b/pkg/front_end/testcases/general/functions.dart.weak.expect
@@ -4,12 +4,12 @@
 
 static method main() → dynamic {
   function local(({a: dynamic}) →* void f) → void {
-    f.call(a: "Hello, World");
-    f.call();
+    f(a: "Hello, World"){({a: dynamic}) →* void};
+    f(){({a: dynamic}) →* void};
   }
-  local.call(({dynamic a = #C1}) → Null {
+  local(({dynamic a = #C1}) → Null {
     core::print(a);
-  });
+  }){(({a: dynamic}) →* void) →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/functions.dart.weak.transformed.expect b/pkg/front_end/testcases/general/functions.dart.weak.transformed.expect
index c10936d..a0fd727 100644
--- a/pkg/front_end/testcases/general/functions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/functions.dart.weak.transformed.expect
@@ -4,12 +4,12 @@
 
 static method main() → dynamic {
   function local(({a: dynamic}) →* void f) → void {
-    f.call(a: "Hello, World");
-    f.call();
+    f(a: "Hello, World"){({a: dynamic}) →* void};
+    f(){({a: dynamic}) →* void};
   }
-  local.call(({dynamic a = #C1}) → Null {
+  local(({dynamic a = #C1}) → Null {
     core::print(a);
-  });
+  }){(({a: dynamic}) →* void) →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/future_or_test.dart.weak.expect b/pkg/front_end/testcases/general/future_or_test.dart.weak.expect
index 2a464ed..cc061fb 100644
--- a/pkg/front_end/testcases/general/future_or_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/future_or_test.dart.weak.expect
@@ -28,7 +28,7 @@
     : super core::Object::•()
     ;
   method bar() → asy::Future<dynamic>* async 
-    return this.{self::B::a}.{self::A::foo}();
+    return this.{self::B::a}{self::A*}.{self::A::foo}(){() →* dynamic};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -46,7 +46,7 @@
     : super core::Object::•()
     ;
   method baz() → asy::Future<core::int*>* async 
-    return this.{self::C::b}.{self::B::bar}() as{TypeError} FutureOr<core::int*>*;
+    return this.{self::C::b}{self::B*}.{self::B::bar}(){() →* asy::Future<dynamic>*} as{TypeError} FutureOr<core::int*>*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect
index f62a5eb..b322b55 100644
--- a/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect
@@ -39,7 +39,7 @@
       try {
         #L1:
         {
-          :return_value = this.{self::B::a}.{self::A::foo}();
+          :return_value = this.{self::B::a}{self::A*}.{self::A::foo}(){() →* dynamic};
           break #L1;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -82,7 +82,7 @@
       try {
         #L2:
         {
-          :return_value = this.{self::C::b}.{self::B::bar}() as{TypeError} FutureOr<core::int*>*;
+          :return_value = this.{self::C::b}{self::B*}.{self::B::bar}(){() →* asy::Future<dynamic>*} as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.expect b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.expect
index 96838f0..61a26ba 100644
--- a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.expect
+++ b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.expect
@@ -10,14 +10,14 @@
 import "dart:core" as core;
 
 static method add<A extends core::num*, B extends core::num*>(self::add::A* a, self::add::B* b) → core::num*
-  return a.{core::num::+}(b);
+  return a.{core::num::+}(b){(core::num*) →* core::num*};
 static method test() → dynamic {
   core::int* x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
   int x = add;
           ^" in (#C1) as{TypeError} core::int*;
 }
 static method main() → dynamic {
-  if(self::add<core::int*, core::int*>(1, 2).{core::num::<}(3))
+  if(self::add<core::int*, core::int*>(1, 2).{core::num::<}(3){(core::num*) →* core::bool*})
     self::test();
 }
 
diff --git a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.transformed.expect b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.transformed.expect
index 96838f0..61a26ba 100644
--- a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.transformed.expect
@@ -10,14 +10,14 @@
 import "dart:core" as core;
 
 static method add<A extends core::num*, B extends core::num*>(self::add::A* a, self::add::B* b) → core::num*
-  return a.{core::num::+}(b);
+  return a.{core::num::+}(b){(core::num*) →* core::num*};
 static method test() → dynamic {
   core::int* x = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
   int x = add;
           ^" in (#C1) as{TypeError} core::int*;
 }
 static method main() → dynamic {
-  if(self::add<core::int*, core::int*>(1, 2).{core::num::<}(3))
+  if(self::add<core::int*, core::int*>(1, 2).{core::num::<}(3){(core::num*) →* core::bool*})
     self::test();
 }
 
diff --git a/pkg/front_end/testcases/general/generic_typedef_in_generic_class.dart.weak.expect b/pkg/front_end/testcases/general/generic_typedef_in_generic_class.dart.weak.expect
index 542c883..9a41483 100644
--- a/pkg/front_end/testcases/general/generic_typedef_in_generic_class.dart.weak.expect
+++ b/pkg/front_end/testcases/general/generic_typedef_in_generic_class.dart.weak.expect
@@ -13,7 +13,7 @@
   }
 }
 static method main() → dynamic {
-  new self::Class::•<core::int>().{self::Class::method}();
+  new self::Class::•<core::int>().{self::Class::method}(){() → dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/generic_typedef_in_generic_class.dart.weak.transformed.expect b/pkg/front_end/testcases/general/generic_typedef_in_generic_class.dart.weak.transformed.expect
index 542c883..9a41483 100644
--- a/pkg/front_end/testcases/general/generic_typedef_in_generic_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/generic_typedef_in_generic_class.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
   }
 }
 static method main() → dynamic {
-  new self::Class::•<core::int>().{self::Class::method}();
+  new self::Class::•<core::int>().{self::Class::method}(){() → dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/getter_call.dart.weak.expect b/pkg/front_end/testcases/general/getter_call.dart.weak.expect
index 256e84e..9430786 100644
--- a/pkg/front_end/testcases/general/getter_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/getter_call.dart.weak.expect
@@ -112,21 +112,21 @@
 }
 static field core::bool* enableRead = true;
 static method read(core::int* value) → core::int*
-  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}();
+  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}(){() →* core::int*};
 static method method1() → core::int*
   return 0;
 static method method2(core::int* a) → core::int*
-  return a.{core::int::unary-}();
+  return a.{core::int::unary-}(){() →* core::int*};
 static method method3(core::int* a, core::int* b) → core::int*
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
 static method method4(core::int* a, [core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
 static method method5([core::int* a = #C8, core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
 static method method6(core::int* a, {core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
 static method method7({core::int* a = #C8, core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
 static method main() → dynamic {
   self::callField(new self::Class::•());
   self::callGetter(new self::Class::•());
@@ -134,44 +134,44 @@
   self::callGetter(new self::Subclass::•());
 }
 static method callField(self::Class* c) → dynamic {
-  self::expect(0, c.{self::Class::field1a}.call());
-  self::expect(0, c.{self::Class::field1b}.call());
-  self::expect(42.{core::int::unary-}(), let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}.call(#t2));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}.call(#t4, #t5));
-  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}.call(#t7));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}.call(#t9, #t10));
-  self::expect(0, c.{self::Class::field5}.call());
-  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}.call(#t12));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}.call(#t14, #t15));
-  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}.call(#t17));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}.call(#t19, b: #t20));
-  self::expect(0, c.{self::Class::field7}.call());
-  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}.call(a: #t22));
-  self::expect(23.{core::int::unary-}(), let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}.call(b: #t24));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}.call(a: #t26, b: #t27));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}.call(b: #t29, a: #t30));
+  self::expect(0, c.{self::Class::field1a}{core::Function*}());
+  self::expect(0, c.{self::Class::field1b}{() →* core::int*}(){() →* core::int*});
+  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}{(core::int*) →* core::int*}(#t2){(core::int*) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}{(core::int*, core::int*) →* core::int*}(#t4, #t5){(core::int*, core::int*) →* core::int*});
+  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}{(core::int*, [core::int*]) →* core::int*}(#t7){(core::int*, [core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}{(core::int*, [core::int*]) →* core::int*}(#t9, #t10){(core::int*, [core::int*]) →* core::int*});
+  self::expect(0, c.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(#t12){([core::int*, core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(#t14, #t15){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}{(core::int*, {b: core::int*}) →* core::int*}(#t17){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}{(core::int*, {b: core::int*}) →* core::int*}(#t19, b: #t20){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t22){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t24){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t26, b: #t27){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t29, a: #t30){({a: core::int*, b: core::int*}) →* core::int*});
 }
 static method callGetter(self::Class* c) → dynamic {
-  self::expect(0, c.{self::Class::getter1a}.call());
-  self::expect(0, c.{self::Class::getter1b}.call());
-  self::expect(42.{core::int::unary-}(), let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}.call(#t32));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}.call(#t34, #t35));
-  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}.call(#t37));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}.call(#t39, #t40));
-  self::expect(0, c.{self::Class::getter5}.call());
-  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}.call(#t42));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}.call(#t44, #t45));
-  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}.call(#t47));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}.call(#t49, b: #t50));
-  self::expect(0, c.{self::Class::getter7}.call());
-  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}.call(a: #t52));
-  self::expect(23.{core::int::unary-}(), let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}.call(b: #t54));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}.call(a: #t56, b: #t57));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}.call(b: #t59, a: #t60));
+  self::expect(0, c.{self::Class::getter1a}{core::Function*}());
+  self::expect(0, c.{self::Class::getter1b}{() →* core::int*}(){() →* core::int*});
+  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}{(core::int*) →* core::int*}(#t32){(core::int*) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}{(core::int*, core::int*) →* core::int*}(#t34, #t35){(core::int*, core::int*) →* core::int*});
+  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}{(core::int*, [core::int*]) →* core::int*}(#t37){(core::int*, [core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}{(core::int*, [core::int*]) →* core::int*}(#t39, #t40){(core::int*, [core::int*]) →* core::int*});
+  self::expect(0, c.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(#t42){([core::int*, core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(#t44, #t45){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}{(core::int*, {b: core::int*}) →* core::int*}(#t47){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}{(core::int*, {b: core::int*}) →* core::int*}(#t49, b: #t50){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t52){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t56, b: #t57){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t59, a: #t60){({a: core::int*, b: core::int*}) →* core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   self::enableRead = true;
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/general/getter_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/getter_call.dart.weak.transformed.expect
index 7d5a3ba..c9ab79c 100644
--- a/pkg/front_end/testcases/general/getter_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/getter_call.dart.weak.transformed.expect
@@ -112,21 +112,21 @@
 }
 static field core::bool* enableRead = true;
 static method read(core::int* value) → core::int*
-  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}();
+  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}(){() →* core::int*};
 static method method1() → core::int*
   return 0;
 static method method2(core::int* a) → core::int*
-  return a.{core::int::unary-}();
+  return a.{core::int::unary-}(){() →* core::int*};
 static method method3(core::int* a, core::int* b) → core::int*
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
 static method method4(core::int* a, [core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
 static method method5([core::int* a = #C8, core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
 static method method6(core::int* a, {core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
 static method method7({core::int* a = #C8, core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b);
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
 static method main() → dynamic {
   self::callField(new self::Class::•());
   self::callGetter(new self::Class::•());
@@ -134,44 +134,44 @@
   self::callGetter(new self::Subclass::•());
 }
 static method callField(self::Class* c) → dynamic {
-  self::expect(0, c.{self::Class::field1a}.call());
-  self::expect(0, c.{self::Class::field1b}.call());
-  self::expect(42.{core::int::unary-}(), let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}.call(#t2));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}.call(#t4, #t5));
-  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}.call(#t7));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}.call(#t9, #t10));
-  self::expect(0, c.{self::Class::field5}.call());
-  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}.call(#t12));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}.call(#t14, #t15));
-  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}.call(#t17));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}.call(#t19, b: #t20));
-  self::expect(0, c.{self::Class::field7}.call());
-  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}.call(a: #t22));
-  self::expect(23.{core::int::unary-}(), let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}.call(b: #t24));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}.call(a: #t26, b: #t27));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}.call(b: #t29, a: #t30));
+  self::expect(0, c.{self::Class::field1a}{core::Function*}());
+  self::expect(0, c.{self::Class::field1b}{() →* core::int*}(){() →* core::int*});
+  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}{(core::int*) →* core::int*}(#t2){(core::int*) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}{(core::int*, core::int*) →* core::int*}(#t4, #t5){(core::int*, core::int*) →* core::int*});
+  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}{(core::int*, [core::int*]) →* core::int*}(#t7){(core::int*, [core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}{(core::int*, [core::int*]) →* core::int*}(#t9, #t10){(core::int*, [core::int*]) →* core::int*});
+  self::expect(0, c.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(#t12){([core::int*, core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(#t14, #t15){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}{(core::int*, {b: core::int*}) →* core::int*}(#t17){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}{(core::int*, {b: core::int*}) →* core::int*}(#t19, b: #t20){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t22){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t24){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t26, b: #t27){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t29, a: #t30){({a: core::int*, b: core::int*}) →* core::int*});
 }
 static method callGetter(self::Class* c) → dynamic {
-  self::expect(0, c.{self::Class::getter1a}.call());
-  self::expect(0, c.{self::Class::getter1b}.call());
-  self::expect(42.{core::int::unary-}(), let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}.call(#t32));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}.call(#t34, #t35));
-  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}.call(#t37));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}.call(#t39, #t40));
-  self::expect(0, c.{self::Class::getter5}.call());
-  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}.call(#t42));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}.call(#t44, #t45));
-  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}.call(#t47));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}.call(#t49, b: #t50));
-  self::expect(0, c.{self::Class::getter7}.call());
-  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}.call(a: #t52));
-  self::expect(23.{core::int::unary-}(), let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}.call(b: #t54));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}.call(a: #t56, b: #t57));
-  self::expect(11.{core::int::unary-}(), let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}.call(b: #t59, a: #t60));
+  self::expect(0, c.{self::Class::getter1a}{core::Function*}());
+  self::expect(0, c.{self::Class::getter1b}{() →* core::int*}(){() →* core::int*});
+  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}{(core::int*) →* core::int*}(#t32){(core::int*) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}{(core::int*, core::int*) →* core::int*}(#t34, #t35){(core::int*, core::int*) →* core::int*});
+  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}{(core::int*, [core::int*]) →* core::int*}(#t37){(core::int*, [core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}{(core::int*, [core::int*]) →* core::int*}(#t39, #t40){(core::int*, [core::int*]) →* core::int*});
+  self::expect(0, c.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(#t42){([core::int*, core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(#t44, #t45){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}{(core::int*, {b: core::int*}) →* core::int*}(#t47){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}{(core::int*, {b: core::int*}) →* core::int*}(#t49, b: #t50){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t52){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t56, b: #t57){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t59, a: #t60){({a: core::int*, b: core::int*}) →* core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   self::enableRead = true;
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, ${actual}";
 }
 
@@ -187,21 +187,21 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:7:45 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:130:10 -> IntConstant(-42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:131:10 -> IntConstant(-11)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:133:10 -> IntConstant(-11)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:136:10 -> IntConstant(-11)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:138:10 -> IntConstant(-11)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:141:10 -> IntConstant(-23)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:142:10 -> IntConstant(-11)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:143:10 -> IntConstant(-11)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:149:10 -> IntConstant(-42)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:150:10 -> IntConstant(-11)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:152:10 -> IntConstant(-11)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:155:10 -> IntConstant(-11)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:157:10 -> IntConstant(-11)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:160:10 -> IntConstant(-23)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:161:10 -> IntConstant(-11)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///getter_call.dart:162:10 -> IntConstant(-11)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:7:45 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:130:10 -> IntConstant(-42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:131:10 -> IntConstant(-11)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:133:10 -> IntConstant(-11)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:136:10 -> IntConstant(-11)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:138:10 -> IntConstant(-11)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:141:10 -> IntConstant(-23)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:142:10 -> IntConstant(-11)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:143:10 -> IntConstant(-11)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:149:10 -> IntConstant(-42)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:150:10 -> IntConstant(-11)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:152:10 -> IntConstant(-11)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:155:10 -> IntConstant(-11)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:157:10 -> IntConstant(-11)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:160:10 -> IntConstant(-23)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:161:10 -> IntConstant(-11)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///getter_call.dart:162:10 -> IntConstant(-11)
 Extra constant evaluation: evaluated: 354, effectively constant: 17
diff --git a/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.expect b/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.expect
index bb43faf..9873ac0 100644
--- a/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.expect
+++ b/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.expect
@@ -21,7 +21,7 @@
 static method main() → dynamic {
   self::Class* a;
   self::Class* b = new self::Class::•();
-  let final self::Class* #t1 = let final self::Class* #t2 = a in #t2.{self::Class::==}(null) ?{self::Class*} b : #t2 in block {
-    #t1.{self::Class::method}();
+  let final self::Class* #t1 = let final self::Class* #t2 = a in #t2 == null ?{self::Class*} b : #t2 in block {
+    #t1.{self::Class::method}(){() →* dynamic};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.transformed.expect
index bb43faf..9873ac0 100644
--- a/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
 static method main() → dynamic {
   self::Class* a;
   self::Class* b = new self::Class::•();
-  let final self::Class* #t1 = let final self::Class* #t2 = a in #t2.{self::Class::==}(null) ?{self::Class*} b : #t2 in block {
-    #t1.{self::Class::method}();
+  let final self::Class* #t1 = let final self::Class* #t2 = a in #t2 == null ?{self::Class*} b : #t2 in block {
+    #t1.{self::Class::method}(){() →* dynamic};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.expect b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.expect
index 0cc41e9..e781dcd 100644
--- a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.expect
+++ b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.expect
@@ -5,5 +5,5 @@
 static method main() → dynamic {
   core::Object* a;
   core::Object* b;
-  return <core::Object*>[let final core::Object* #t1 = a in #t1.{core::Object::==}(null) ?{core::Object*} b : #t1];
+  return <core::Object*>[let final core::Object* #t1 = a in #t1 == null ?{core::Object*} b : #t1];
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.transformed.expect b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.transformed.expect
index 188b5b3..607d0f5 100644
--- a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.transformed.expect
@@ -5,5 +5,5 @@
 static method main() → dynamic {
   core::Object* a;
   core::Object* b;
-  return core::_GrowableList::_literal1<core::Object*>(let final core::Object* #t1 = a in #t1.{core::Object::==}(null) ?{core::Object*} b : #t1);
+  return core::_GrowableList::_literal1<core::Object*>(let final core::Object* #t1 = a in #t1 == null ?{core::Object*} b : #t1);
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.expect b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.expect
index bbc6109..b700240 100644
--- a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.expect
+++ b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.expect
@@ -8,6 +8,6 @@
   core::Object* b;
   return block {
     final core::Set<core::Object*>* #t1 = col::LinkedHashSet::•<core::Object*>();
-    #t1.{core::Set::add}{Invariant}(let final core::Object* #t2 = a in #t2.{core::Object::==}(null) ?{core::Object*} b : #t2);
+    #t1.{core::Set::add}(let final core::Object* #t2 = a in #t2 == null ?{core::Object*} b : #t2){(core::Object*) →* core::bool*};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.transformed.expect b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.transformed.expect
index 637e41b..1cdc7aa 100644
--- a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.transformed.expect
@@ -8,6 +8,6 @@
   core::Object* b;
   return block {
     final core::Set<core::Object*>* #t1 = new col::_CompactLinkedHashSet::•<core::Object*>();
-    #t1.{core::Set::add}{Invariant}(let final core::Object* #t2 = a in #t2.{core::Object::==}(null) ?{core::Object*} b : #t2);
+    #t1.{core::Set::add}(let final core::Object* #t2 = a in #t2 == null ?{core::Object*} b : #t2){(core::Object*) →* core::bool*};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.expect
index cedeb06..96419b3 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.expect
@@ -15,6 +15,6 @@
 
 static method main() → dynamic {
   <T extends core::Object* = dynamic>(T*) →* Null x = let final <T extends core::Object* = dynamic>(T*) →* Null f = <T extends core::Object* = dynamic>(T* t) → Null {} in f;
-  core::print(x.{core::Object::runtimeType});
+  core::print(x.{core::Object::runtimeType}{core::Type*});
   core::print(let final <T extends core::Object* = dynamic>(T*) →* Null g = <T extends core::Object* = dynamic>(T* t) → Null {} in g);
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.transformed.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.transformed.expect
index cedeb06..96419b3 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.transformed.expect
@@ -15,6 +15,6 @@
 
 static method main() → dynamic {
   <T extends core::Object* = dynamic>(T*) →* Null x = let final <T extends core::Object* = dynamic>(T*) →* Null f = <T extends core::Object* = dynamic>(T* t) → Null {} in f;
-  core::print(x.{core::Object::runtimeType});
+  core::print(x.{core::Object::runtimeType}{core::Type*});
   core::print(let final <T extends core::Object* = dynamic>(T*) →* Null g = <T extends core::Object* = dynamic>(T* t) → Null {} in g);
 }
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.expect
index ceafb22f..febd66a 100644
--- a/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M1 extends core::Object {
-  field core::num* v2 = 1.{core::int::unary-}();
+  field core::num* v2 = 1.{core::int::unary-}(){() →* core::int*};
   synthetic constructor •() → self::M1*
     : super core::Object::•()
     ;
@@ -46,10 +46,10 @@
 }
 static method main() → dynamic {
   self::C* c = new self::C::•(true, 2);
-  self::expect(true, c.{self::A::v1});
-  self::expect(1.{core::int::unary-}(), c.{self::C::v2});
+  self::expect(true, c.{self::A::v1}{core::bool*});
+  self::expect(1.{core::int::unary-}(){() →* core::int*}, c.{self::C::v2}{core::num*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.transformed.expect
index 362f144..2bee5f5 100644
--- a/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M1 extends core::Object {
-  field core::num* v2 = 1.{core::int::unary-}();
+  field core::num* v2 = 1.{core::int::unary-}(){() →* core::int*};
   synthetic constructor •() → self::M1*
     : super core::Object::•()
     ;
@@ -36,24 +36,24 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A implements self::M1 /*isEliminatedMixin*/  {
-  field core::num* v2 = 1.{core::int::unary-}();
+  field core::num* v2 = 1.{core::int::unary-}(){() →* core::int*};
   synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
     : super self::A::•(v1, v2)
     ;
 }
 static method main() → dynamic {
   self::C* c = new self::C::•(true, 2);
-  self::expect(true, c.{self::A::v1});
-  self::expect(1.{core::int::unary-}(), c.{self::C::v2});
+  self::expect(true, c.{self::A::v1}{core::bool*});
+  self::expect(1.{core::int::unary-}(){() →* core::int*}, c.{self::C::v2}{core::num*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///implicit_constructor_02.dart:14:12 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///implicit_constructor_02.dart:14:12 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///implicit_constructor_02.dart:22:10 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implicit_constructor_02.dart:14:12 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implicit_constructor_02.dart:14:12 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implicit_constructor_02.dart:22:10 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 22, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/implicit_new.dart.weak.expect b/pkg/front_end/testcases/general/implicit_new.dart.weak.expect
index ee6950c..aa138c7 100644
--- a/pkg/front_end/testcases/general/implicit_new.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_new.dart.weak.expect
@@ -91,16 +91,16 @@
   core::Map<core::String*, core::Object*>* m = <core::String*, core::Object*>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
   m = <core::String*, core::Object*>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
   self::IndexTester* i = new self::IndexTester::•();
-  i.{self::IndexTester::[]}(new self::Foo::•());
-  i.{self::IndexTester::[]}(new self::Foo::•());
-  i.{self::IndexTester::[]}(new self::Bar::named());
-  i.{self::IndexTester::[]}(new self::Bar::named());
-  i.{self::IndexTester::[]=}(new self::Foo::•(), null);
-  i.{self::IndexTester::[]=}(new self::Foo::•(), null);
-  i.{self::IndexTester::[]=}(new self::Bar::named(), null);
-  i.{self::IndexTester::[]=}(new self::Bar::named(), null);
-  new self::Foo::•().{self::Foo::+}(new self::Bar::named());
-  new self::Foo::•().{self::Foo::+}(new self::Bar::named());
-  new self::Bar::named().{self::Bar::+}(new self::Foo::•());
-  new self::Bar::named().{self::Bar::+}(new self::Foo::•());
+  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) →* dynamic};
+  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) →* dynamic};
+  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) →* dynamic};
+  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) →* dynamic};
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) →* void};
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) →* void};
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) →* void};
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) →* void};
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) →* dynamic};
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) →* dynamic};
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) →* dynamic};
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/implicit_new.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_new.dart.weak.transformed.expect
index e510a2f..8007f6e 100644
--- a/pkg/front_end/testcases/general/implicit_new.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_new.dart.weak.transformed.expect
@@ -91,16 +91,16 @@
   core::Map<core::String*, core::Object*>* m = <core::String*, core::Object*>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
   m = <core::String*, core::Object*>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
   self::IndexTester* i = new self::IndexTester::•();
-  i.{self::IndexTester::[]}(new self::Foo::•());
-  i.{self::IndexTester::[]}(new self::Foo::•());
-  i.{self::IndexTester::[]}(new self::Bar::named());
-  i.{self::IndexTester::[]}(new self::Bar::named());
-  i.{self::IndexTester::[]=}(new self::Foo::•(), null);
-  i.{self::IndexTester::[]=}(new self::Foo::•(), null);
-  i.{self::IndexTester::[]=}(new self::Bar::named(), null);
-  i.{self::IndexTester::[]=}(new self::Bar::named(), null);
-  new self::Foo::•().{self::Foo::+}(new self::Bar::named());
-  new self::Foo::•().{self::Foo::+}(new self::Bar::named());
-  new self::Bar::named().{self::Bar::+}(new self::Foo::•());
-  new self::Bar::named().{self::Bar::+}(new self::Foo::•());
+  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) →* dynamic};
+  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) →* dynamic};
+  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) →* dynamic};
+  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) →* dynamic};
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) →* void};
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) →* void};
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) →* void};
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) →* void};
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) →* dynamic};
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) →* dynamic};
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) →* dynamic};
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.expect b/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.expect
index f041292..ef54b52 100644
--- a/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   static method alwaysTrue() → core::bool* {
-    return 1.{core::num::+}(1).{core::num::==}(2);
+    return 1.{core::num::+}(1){(core::num*) →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2;
   }
   static method testMain() → dynamic {
     core::String* a = "foo";
@@ -29,7 +29,7 @@
     }
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
-    for (core::int* i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::String* a = "bar";
       core::String* b = "baz";
     }
@@ -39,7 +39,7 @@
       core::String* a = "bar";
       core::String* b = "baz";
     }
-    while ("black".{core::String::==}("white"))
+    while ("black" =={core::String::==}{(core::Object*) →* core::bool*} "white")
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
   }
diff --git a/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.transformed.expect
index 19d91ae..444893e 100644
--- a/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   static method alwaysTrue() → core::bool* {
-    return 1.{core::num::+}(1).{core::num::==}(2);
+    return 1.{core::num::+}(1){(core::num*) →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2;
   }
   static method testMain() → dynamic {
     core::String* a = "foo";
@@ -29,7 +29,7 @@
     }
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
-    for (core::int* i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
       core::String* a = "bar";
       core::String* b = "baz";
     }
@@ -39,7 +39,7 @@
       core::String* a = "bar";
       core::String* b = "baz";
     }
-    while ("black".{core::String::==}("white"))
+    while ("black" =={core::String::==}{(core::Object*) →* core::bool*} "white")
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
   }
@@ -60,6 +60,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///implicit_scope_test.dart:11:18 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///implicit_scope_test.dart:32:49 -> BoolConstant(false)
+Evaluated: EqualsCall @ org-dartlang-testcase:///implicit_scope_test.dart:11:18 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///implicit_scope_test.dart:32:49 -> BoolConstant(false)
 Extra constant evaluation: evaluated: 28, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/implicit_this.dart.weak.expect b/pkg/front_end/testcases/general/implicit_this.dart.weak.expect
index 4eec5c6..23d7a44 100644
--- a/pkg/front_end/testcases/general/implicit_this.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_this.dart.weak.expect
@@ -10,7 +10,7 @@
     core::print("Called m");
   }
   method testC() → dynamic {
-    this.{self::C::m}();
+    this.{self::C::m}(){() →* dynamic};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -28,10 +28,10 @@
     : super self::C::•()
     ;
   method testD() → dynamic {
-    this.{self::C::m}();
+    this.{self::C::m}(){() →* dynamic};
   }
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::testC}();
-  new self::D::•().{self::D::testD}();
+  new self::C::•().{self::C::testC}(){() →* dynamic};
+  new self::D::•().{self::D::testD}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/implicit_this.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_this.dart.weak.transformed.expect
index 4eec5c6..23d7a44 100644
--- a/pkg/front_end/testcases/general/implicit_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_this.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     core::print("Called m");
   }
   method testC() → dynamic {
-    this.{self::C::m}();
+    this.{self::C::m}(){() →* dynamic};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -28,10 +28,10 @@
     : super self::C::•()
     ;
   method testD() → dynamic {
-    this.{self::C::m}();
+    this.{self::C::m}(){() →* dynamic};
   }
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::testC}();
-  new self::D::•().{self::D::testD}();
+  new self::C::•().{self::C::testC}(){() →* dynamic};
+  new self::D::•().{self::D::testD}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/infer_equals.dart.weak.expect b/pkg/front_end/testcases/general/infer_equals.dart.weak.expect
index f1fea95..4b8aa53e 100644
--- a/pkg/front_end/testcases/general/infer_equals.dart.weak.expect
+++ b/pkg/front_end/testcases/general/infer_equals.dart.weak.expect
@@ -10,7 +10,7 @@
   operator ==(dynamic o) → core::bool* {
     if(!(o is self::Class*))
       return false;
-    return this.{self::Class::field}.{core::Object::==}(o.field);
+    return this.{self::Class::field}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} o{dynamic}.field;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/infer_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/general/infer_equals.dart.weak.transformed.expect
index f1fea95..4b8aa53e 100644
--- a/pkg/front_end/testcases/general/infer_equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/infer_equals.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
   operator ==(dynamic o) → core::bool* {
     if(!(o is self::Class*))
       return false;
-    return this.{self::Class::field}.{core::Object::==}(o.field);
+    return this.{self::Class::field}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} o{dynamic}.field;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/infer_field_type.dart.weak.expect b/pkg/front_end/testcases/general/infer_field_type.dart.weak.expect
index 5e46a8e..aa6a7e49 100644
--- a/pkg/front_end/testcases/general/infer_field_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/infer_field_type.dart.weak.expect
@@ -32,7 +32,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* topLevelFieldFromA = new self::A::•().{self::A::field};
-static field core::int* topLevelFieldFromB = new self::B::•().{self::B::field};
-static field core::int* topLevelFieldFromC = new self::C::•().{self::C::field};
+static field core::int* topLevelFieldFromA = new self::A::•().{self::A::field}{core::int*};
+static field core::int* topLevelFieldFromB = new self::B::•().{self::B::field}{core::int*};
+static field core::int* topLevelFieldFromC = new self::C::•().{self::C::field}{core::int*};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_field_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/infer_field_type.dart.weak.transformed.expect
index 5e46a8e..aa6a7e49 100644
--- a/pkg/front_end/testcases/general/infer_field_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/infer_field_type.dart.weak.transformed.expect
@@ -32,7 +32,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* topLevelFieldFromA = new self::A::•().{self::A::field};
-static field core::int* topLevelFieldFromB = new self::B::•().{self::B::field};
-static field core::int* topLevelFieldFromC = new self::C::•().{self::C::field};
+static field core::int* topLevelFieldFromA = new self::A::•().{self::A::field}{core::int*};
+static field core::int* topLevelFieldFromB = new self::B::•().{self::B::field}{core::int*};
+static field core::int* topLevelFieldFromC = new self::C::•().{self::C::field}{core::int*};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.expect b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.expect
index cb4d5f5..4e6b1e4 100644
--- a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.expect
+++ b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.expect
@@ -4,7 +4,7 @@
 
 class Class extends core::Object {
   field core::Map<core::String*, (core::String*) →* Null>* map = <core::String*, (core::String*) →* Null>{"foo": (core::String* a) → Null {
-    core::int* c = a.{core::String::length};
+    core::int* c = a.{core::String::length}{core::int*};
   }};
   synthetic constructor •() → self::Class*
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.transformed.expect b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.transformed.expect
index cb4d5f5..4e6b1e4 100644
--- a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 class Class extends core::Object {
   field core::Map<core::String*, (core::String*) →* Null>* map = <core::String*, (core::String*) →* Null>{"foo": (core::String* a) → Null {
-    core::int* c = a.{core::String::length};
+    core::int* c = a.{core::String::length}{core::int*};
   }};
   synthetic constructor •() → self::Class*
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.expect b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.expect
index 8e3787e..c8d06c3 100644
--- a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.expect
@@ -40,14 +40,14 @@
   i = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i = s;
       ^" in s as{TypeError} core::int*;
-  i.{core::num::==}(null) ?{core::int*} i = 1 : null;
-  i.{core::num::==}(null) ?{core::Object*} i = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i == null ?{core::int*} i = 1 : null;
+  i == null ?{core::Object*} i = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i ??= s;
         ^" in s as{TypeError} core::int* : null;
   a = new self::A::•();
   a = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/general/invalid_assignment.dart'.
   a += 1;
-    ^" in a.{self::A::+}(1) as{TypeError} self::A*;
+    ^" in a.{self::A::+}(1){(core::int*) →* core::String*} as{TypeError} self::A*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.transformed.expect
index 8e3787e..c8d06c3 100644
--- a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.transformed.expect
@@ -40,14 +40,14 @@
   i = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i = s;
       ^" in s as{TypeError} core::int*;
-  i.{core::num::==}(null) ?{core::int*} i = 1 : null;
-  i.{core::num::==}(null) ?{core::Object*} i = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i == null ?{core::int*} i = 1 : null;
+  i == null ?{core::Object*} i = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i ??= s;
         ^" in s as{TypeError} core::int* : null;
   a = new self::A::•();
   a = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/general/invalid_assignment.dart'.
   a += 1;
-    ^" in a.{self::A::+}(1) as{TypeError} self::A*;
+    ^" in a.{self::A::+}(1){(core::int*) →* core::String*} as{TypeError} self::A*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_type.dart.weak.expect b/pkg/front_end/testcases/general/invalid_type.dart.weak.expect
index eee2023..0dce077 100644
--- a/pkg/front_end/testcases/general/invalid_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_type.dart.weak.expect
@@ -25,7 +25,7 @@
   static method foo() → dynamic {
     invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:7:5: Error: Expected identifier, but got 'this'.
     this.bar();
-    ^^^^".bar();
+    ^^^^"{dynamic}.bar();
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -39,7 +39,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  (null as invalid-type).bar();
+  (null as invalid-type){dynamic}.bar();
   invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'bar'.
   null.bar();
diff --git a/pkg/front_end/testcases/general/invalid_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_type.dart.weak.transformed.expect
index 26b45d2..dae40b0 100644
--- a/pkg/front_end/testcases/general/invalid_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_type.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
   static method foo() → dynamic {
     invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:7:5: Error: Expected identifier, but got 'this'.
     this.bar();
-    ^^^^".bar();
+    ^^^^"{dynamic}.bar();
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -39,7 +39,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  (null as invalid-type).bar();
+  (null as invalid-type){dynamic}.bar();
   invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'bar'.
   null.bar();
diff --git a/pkg/front_end/testcases/general/invocations.dart.weak.expect b/pkg/front_end/testcases/general/invocations.dart.weak.expect
index 9a47377..f041994 100644
--- a/pkg/front_end/testcases/general/invocations.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invocations.dart.weak.expect
@@ -48,22 +48,22 @@
   ^";
   invalid-expression "pkg/front_end/testcases/general/invocations.dart:8:3: Error: Getter not found: 'z'.
   z.print(\"Hello, World!\");
-  ^".print("Hello, World!");
+  ^"{dynamic}.print("Hello, World!");
   invalid-expression "pkg/front_end/testcases/general/invocations.dart:9:3: Error: Getter not found: 'y'.
   y.z.print(\"Hello, World!\");
-  ^".z.print("Hello, World!");
+  ^"{dynamic}.z{dynamic}.print("Hello, World!");
   invalid-expression "pkg/front_end/testcases/general/invocations.dart:10:3: Error: Getter not found: 'x'.
   x.y.z.print(\"Hello, World!\");
-  ^".y.z.print("Hello, World!");
+  ^"{dynamic}.y{dynamic}.z{dynamic}.print("Hello, World!");
   1.{core::num::+}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invocations.dart:13:7: Error: This expression has type 'void' and can't be used.
       print(\"Hello, World!\") +
-      ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
+      ^" in core::print("Hello, World!")){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
+      ^"{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
+      ^"{dynamic}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
+      ^"{dynamic}.y{dynamic}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
 }
diff --git a/pkg/front_end/testcases/general/invocations.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invocations.dart.weak.transformed.expect
index de95b41..0ba8884 100644
--- a/pkg/front_end/testcases/general/invocations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invocations.dart.weak.transformed.expect
@@ -48,22 +48,22 @@
   ^";
   invalid-expression "pkg/front_end/testcases/general/invocations.dart:8:3: Error: Getter not found: 'z'.
   z.print(\"Hello, World!\");
-  ^".print("Hello, World!");
+  ^"{dynamic}.print("Hello, World!");
   invalid-expression "pkg/front_end/testcases/general/invocations.dart:9:3: Error: Getter not found: 'y'.
   y.z.print(\"Hello, World!\");
-  ^".z.print("Hello, World!");
+  ^"{dynamic}.z{dynamic}.print("Hello, World!");
   invalid-expression "pkg/front_end/testcases/general/invocations.dart:10:3: Error: Getter not found: 'x'.
   x.y.z.print(\"Hello, World!\");
-  ^".y.z.print("Hello, World!");
+  ^"{dynamic}.y{dynamic}.z{dynamic}.print("Hello, World!");
   1.{core::num::+}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/invocations.dart:13:7: Error: This expression has type 'void' and can't be used.
       print(\"Hello, World!\") +
-      ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
+      ^" in core::print("Hello, World!")){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^").{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
+      ^"){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
+      ^"{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
+      ^"{dynamic}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
+      ^"{dynamic}.y{dynamic}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
 }
diff --git a/pkg/front_end/testcases/general/issue31767.dart.weak.expect b/pkg/front_end/testcases/general/issue31767.dart.weak.expect
index 8e1ff2d..02fa3bd 100644
--- a/pkg/front_end/testcases/general/issue31767.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue31767.dart.weak.expect
@@ -8,7 +8,7 @@
 class C extends core::Object {
   final field core::int* w;
   constructor foo(core::int* x, [core::int* y = #C1, core::int* z = #C1]) → self::C*
-    : self::C::w = self::p("x", x).{core::num::+}(self::p("y", y)).{core::num::+}(self::p("z", z)), super core::Object::•()
+    : self::C::w = self::p("x", x).{core::num::+}(self::p("y", y)){(core::num*) →* core::int*}.{core::num::+}(self::p("z", z)){(core::num*) →* core::int*}, super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -23,7 +23,7 @@
 }
 abstract class M extends self::C /*isMixinDeclaration*/  {
   get w2() → core::int*
-    return this.{self::C::w}.{core::num::*}(this.{self::C::w});
+    return this.{self::C::w}{core::int*}.{core::num::*}(this.{self::C::w}{core::int*}){(core::num*) →* core::int*};
 }
 class D = self::C with self::M {
   synthetic constructor foo(core::int* x, [core::int* y = #C1, core::int* z = #C1]) → self::D*
@@ -34,7 +34,7 @@
 }
 abstract class N extends iss::A /*isMixinDeclaration*/  {
   get w2() → core::int*
-    return this.{iss::A::w}.{core::num::*}(this.{iss::A::w});
+    return this.{iss::A::w}{core::int*}.{core::num::*}(this.{iss::A::w}{core::int*}){(core::num*) →* core::int*};
 }
 class E = iss::A with self::N {
   synthetic constructor foo(core::int* x, [core::int* y = #C2, core::int* z = #C2, iss::_A* a = #C4]) → self::E*
@@ -45,33 +45,33 @@
 }
 static field core::StringBuffer* sb;
 static method p(core::String* name, core::int* value) → core::int* {
-  self::sb.{core::StringBuffer::write}("${name} = ${value}, ");
+  self::sb.{core::StringBuffer::write}("${name} = ${value}, "){(core::Object*) →* void};
   return value;
 }
 static method main() → dynamic {
   self::sb = new core::StringBuffer::•();
   iss::A* a = new iss::A::foo(1, 2);
-  self::expect("x = 1, y = 2, z = 3, ", self::sb.{core::StringBuffer::toString}());
-  self::expect(6, a.{iss::A::w});
-  self::expect(5, a.{iss::A::a}.{iss::_A::field});
+  self::expect("x = 1, y = 2, z = 3, ", self::sb.{core::StringBuffer::toString}(){() →* core::String*});
+  self::expect(6, a.{iss::A::w}{core::int*});
+  self::expect(5, a.{iss::A::a}{iss::_A*}.{iss::_A::field}{core::int*});
   self::sb = new core::StringBuffer::•();
   self::C* c = new self::C::foo(1, 2);
-  self::expect("x = 1, y = 2, z = 0, ", self::sb.{core::StringBuffer::toString}());
-  self::expect(3, c.{self::C::w});
+  self::expect("x = 1, y = 2, z = 0, ", self::sb.{core::StringBuffer::toString}(){() →* core::String*});
+  self::expect(3, c.{self::C::w}{core::int*});
   self::sb = new core::StringBuffer::•();
   self::D* d = new self::D::foo(1, 2);
-  self::expect("x = 1, y = 2, z = 0, ", self::sb.{core::StringBuffer::toString}());
-  self::expect(3, d.{self::C::w});
-  self::expect(9, d.{self::D::w2});
+  self::expect("x = 1, y = 2, z = 0, ", self::sb.{core::StringBuffer::toString}(){() →* core::String*});
+  self::expect(3, d.{self::C::w}{core::int*});
+  self::expect(9, d.{self::D::w2}{core::int*});
   self::sb = new core::StringBuffer::•();
   self::E* e = new self::E::foo(1, 2);
-  self::expect("x = 1, y = 2, z = 3, ", self::sb.{core::StringBuffer::toString}());
-  self::expect(6, e.{iss::A::w});
-  self::expect(36, e.{self::E::w2});
-  self::expect(5, e.{iss::A::a}.{iss::_A::field});
+  self::expect("x = 1, y = 2, z = 3, ", self::sb.{core::StringBuffer::toString}(){() →* core::String*});
+  self::expect(6, e.{iss::A::w}{core::int*});
+  self::expect(36, e.{self::E::w2}{core::int*});
+  self::expect(5, e.{iss::A::a}{iss::_A*}.{iss::_A::field}{core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
@@ -86,7 +86,7 @@
   final field core::int* w;
   final field iss::_A* a;
   constructor foo(core::int* x, [core::int* y = #C2, core::int* z = #C2, iss::_A* a = #C4]) → iss::A*
-    : iss::A::a = a, iss::A::w = self::p("x", x).{core::num::+}(self::p("y", y)).{core::num::+}(self::p("z", z)), super core::Object::•()
+    : iss::A::a = a, iss::A::w = self::p("x", x).{core::num::+}(self::p("y", y)){(core::num*) →* core::int*}.{core::num::+}(self::p("z", z)){(core::num*) →* core::int*}, super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/issue31767.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue31767.dart.weak.transformed.expect
index 1692006..e2ec61f 100644
--- a/pkg/front_end/testcases/general/issue31767.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue31767.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
 class C extends core::Object {
   final field core::int* w;
   constructor foo(core::int* x, [core::int* y = #C1, core::int* z = #C1]) → self::C*
-    : self::C::w = self::p("x", x).{core::num::+}(self::p("y", y)).{core::num::+}(self::p("z", z)), super core::Object::•()
+    : self::C::w = self::p("x", x).{core::num::+}(self::p("y", y)){(core::num*) →* core::int*}.{core::num::+}(self::p("z", z)){(core::num*) →* core::int*}, super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -23,55 +23,55 @@
 }
 abstract class M extends self::C /*isMixinDeclaration*/  {
   get w2() → core::int*
-    return this.{self::C::w}.{core::num::*}(this.{self::C::w});
+    return this.{self::C::w}{core::int*}.{core::num::*}(this.{self::C::w}{core::int*}){(core::num*) →* core::int*};
 }
 class D extends self::C implements self::M /*isEliminatedMixin*/  {
   synthetic constructor foo(core::int* x, [core::int* y = #C1, core::int* z = #C1]) → self::D*
     : super self::C::foo(x, y, z)
     ;
   get w2() → core::int*
-    return this.{self::C::w}.{core::num::*}(this.{self::C::w});
+    return this.{self::C::w}{core::int*}.{core::num::*}(this.{self::C::w}{core::int*}){(core::num*) →* core::int*};
 }
 abstract class N extends iss::A /*isMixinDeclaration*/  {
   get w2() → core::int*
-    return this.{iss::A::w}.{core::num::*}(this.{iss::A::w});
+    return this.{iss::A::w}{core::int*}.{core::num::*}(this.{iss::A::w}{core::int*}){(core::num*) →* core::int*};
 }
 class E extends iss::A implements self::N /*isEliminatedMixin*/  {
   synthetic constructor foo(core::int* x, [core::int* y = #C2, core::int* z = #C2, iss::_A* a = #C4]) → self::E*
     : super iss::A::foo(x, y, z, a)
     ;
   get w2() → core::int*
-    return this.{iss::A::w}.{core::num::*}(this.{iss::A::w});
+    return this.{iss::A::w}{core::int*}.{core::num::*}(this.{iss::A::w}{core::int*}){(core::num*) →* core::int*};
 }
 static field core::StringBuffer* sb;
 static method p(core::String* name, core::int* value) → core::int* {
-  self::sb.{core::StringBuffer::write}("${name} = ${value}, ");
+  self::sb.{core::StringBuffer::write}("${name} = ${value}, "){(core::Object*) →* void};
   return value;
 }
 static method main() → dynamic {
   self::sb = new core::StringBuffer::•();
   iss::A* a = new iss::A::foo(1, 2);
-  self::expect("x = 1, y = 2, z = 3, ", self::sb.{core::StringBuffer::toString}());
-  self::expect(6, a.{iss::A::w});
-  self::expect(5, a.{iss::A::a}.{iss::_A::field});
+  self::expect("x = 1, y = 2, z = 3, ", self::sb.{core::StringBuffer::toString}(){() →* core::String*});
+  self::expect(6, a.{iss::A::w}{core::int*});
+  self::expect(5, a.{iss::A::a}{iss::_A*}.{iss::_A::field}{core::int*});
   self::sb = new core::StringBuffer::•();
   self::C* c = new self::C::foo(1, 2);
-  self::expect("x = 1, y = 2, z = 0, ", self::sb.{core::StringBuffer::toString}());
-  self::expect(3, c.{self::C::w});
+  self::expect("x = 1, y = 2, z = 0, ", self::sb.{core::StringBuffer::toString}(){() →* core::String*});
+  self::expect(3, c.{self::C::w}{core::int*});
   self::sb = new core::StringBuffer::•();
   self::D* d = new self::D::foo(1, 2);
-  self::expect("x = 1, y = 2, z = 0, ", self::sb.{core::StringBuffer::toString}());
-  self::expect(3, d.{self::C::w});
-  self::expect(9, d.{self::D::w2});
+  self::expect("x = 1, y = 2, z = 0, ", self::sb.{core::StringBuffer::toString}(){() →* core::String*});
+  self::expect(3, d.{self::C::w}{core::int*});
+  self::expect(9, d.{self::D::w2}{core::int*});
   self::sb = new core::StringBuffer::•();
   self::E* e = new self::E::foo(1, 2);
-  self::expect("x = 1, y = 2, z = 3, ", self::sb.{core::StringBuffer::toString}());
-  self::expect(6, e.{iss::A::w});
-  self::expect(36, e.{self::E::w2});
-  self::expect(5, e.{iss::A::a}.{iss::_A::field});
+  self::expect("x = 1, y = 2, z = 3, ", self::sb.{core::StringBuffer::toString}(){() →* core::String*});
+  self::expect(6, e.{iss::A::w}{core::int*});
+  self::expect(36, e.{self::E::w2}{core::int*});
+  self::expect(5, e.{iss::A::a}{iss::_A*}.{iss::_A::field}{core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
@@ -86,7 +86,7 @@
   final field core::int* w;
   final field iss::_A* a;
   constructor foo(core::int* x, [core::int* y = #C2, core::int* z = #C2, iss::_A* a = #C4]) → iss::A*
-    : iss::A::a = a, iss::A::w = self::p("x", x).{core::num::+}(self::p("y", y)).{core::num::+}(self::p("z", z)), super core::Object::•()
+    : iss::A::a = a, iss::A::w = self::p("x", x).{core::num::+}(self::p("y", y)){(core::num*) →* core::int*}.{core::num::+}(self::p("z", z)){(core::num*) →* core::int*}, super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/issue34899.dart.weak.expect b/pkg/front_end/testcases/general/issue34899.dart.weak.expect
index 089fed4..0d6c4cf 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.weak.expect
@@ -10,7 +10,7 @@
     : self::Foo::quux = quux, self::Foo::t = t, super core::Object::•()
     ;
   method call() → asy::Future<self::Foo::T*>*
-    return this.{self::Foo::quux}.call().{asy::Future::then}<self::Foo::T*>((dynamic _) → self::Foo::T* => this.{self::Foo::t});
+    return this.{self::Foo::quux}{() →* asy::Future<dynamic>*}(){() →* asy::Future<dynamic>*}.{asy::Future::then}<self::Foo::T*>((dynamic _) → self::Foo::T* => this.{self::Foo::t}{self::Foo::T*}){((dynamic) →* FutureOr<self::Foo::T*>*, {onError: core::Function*}) →* asy::Future<self::Foo::T*>*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -28,7 +28,7 @@
     : super core::Object::•()
     ;
   method quuz() → asy::Future<void>*
-    return this.{self::Bar::qux}.{self::Foo::call}().{asy::Future::then}<self::Grault*>((self::Baz* baz) → self::Grault* => this.{self::Bar::corge}(baz)).{asy::Future::then}<void>((self::Grault* grault) → void => this.{self::Bar::garply}(grault));
+    return this.{self::Bar::qux}{self::Foo<self::Baz*>*}.{self::Foo::call}(){() →* asy::Future<self::Baz*>*}.{asy::Future::then}<self::Grault*>((self::Baz* baz) → self::Grault* => this.{self::Bar::corge}(baz){(self::Baz*) →* self::Grault*}){((self::Baz*) →* FutureOr<self::Grault*>*, {onError: core::Function*}) →* asy::Future<self::Grault*>*}.{asy::Future::then}<void>((self::Grault* grault) → void => this.{self::Bar::garply}(grault){(self::Grault*) →* void}){((self::Grault*) →* FutureOr<void>*, {onError: core::Function*}) →* asy::Future<void>*};
   method corge(self::Baz* baz) → self::Grault*
     return null;
   method garply(self::Grault* grault) → void {}
diff --git a/pkg/front_end/testcases/general/issue34899.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue34899.dart.weak.transformed.expect
index 089fed4..0d6c4cf 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     : self::Foo::quux = quux, self::Foo::t = t, super core::Object::•()
     ;
   method call() → asy::Future<self::Foo::T*>*
-    return this.{self::Foo::quux}.call().{asy::Future::then}<self::Foo::T*>((dynamic _) → self::Foo::T* => this.{self::Foo::t});
+    return this.{self::Foo::quux}{() →* asy::Future<dynamic>*}(){() →* asy::Future<dynamic>*}.{asy::Future::then}<self::Foo::T*>((dynamic _) → self::Foo::T* => this.{self::Foo::t}{self::Foo::T*}){((dynamic) →* FutureOr<self::Foo::T*>*, {onError: core::Function*}) →* asy::Future<self::Foo::T*>*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -28,7 +28,7 @@
     : super core::Object::•()
     ;
   method quuz() → asy::Future<void>*
-    return this.{self::Bar::qux}.{self::Foo::call}().{asy::Future::then}<self::Grault*>((self::Baz* baz) → self::Grault* => this.{self::Bar::corge}(baz)).{asy::Future::then}<void>((self::Grault* grault) → void => this.{self::Bar::garply}(grault));
+    return this.{self::Bar::qux}{self::Foo<self::Baz*>*}.{self::Foo::call}(){() →* asy::Future<self::Baz*>*}.{asy::Future::then}<self::Grault*>((self::Baz* baz) → self::Grault* => this.{self::Bar::corge}(baz){(self::Baz*) →* self::Grault*}){((self::Baz*) →* FutureOr<self::Grault*>*, {onError: core::Function*}) →* asy::Future<self::Grault*>*}.{asy::Future::then}<void>((self::Grault* grault) → void => this.{self::Bar::garply}(grault){(self::Grault*) →* void}){((self::Grault*) →* FutureOr<void>*, {onError: core::Function*}) →* asy::Future<void>*};
   method corge(self::Baz* baz) → self::Grault*
     return null;
   method garply(self::Grault* grault) → void {}
diff --git a/pkg/front_end/testcases/general/issue37027.dart.weak.expect b/pkg/front_end/testcases/general/issue37027.dart.weak.expect
index d4abbbf..531f7c1 100644
--- a/pkg/front_end/testcases/general/issue37027.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue37027.dart.weak.expect
@@ -9,8 +9,8 @@
     : self::C::s = block {
       final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
       for (core::int e in ell)
-        if(e.{core::int::isOdd})
-          #t1.{core::Set::add}{Invariant}(2.{core::num::*}(e));
+        if(e.{core::int::isOdd}{core::bool})
+          #t1.{core::Set::add}(2.{core::num::*}(e){(core::num) → core::int}){(core::int) → core::bool};
     } =>#t1, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue37027.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue37027.dart.weak.transformed.expect
index 8d726b5..29b2a47 100644
--- a/pkg/front_end/testcases/general/issue37027.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue37027.dart.weak.transformed.expect
@@ -12,8 +12,8 @@
         core::Iterator<core::int> :sync-for-iterator = ell.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           core::int e = :sync-for-iterator.{core::Iterator::current};
-          if(e.{core::int::isOdd})
-            #t1.{core::Set::add}{Invariant}(2.{core::num::*}(e));
+          if(e.{core::int::isOdd}{core::bool})
+            #t1.{core::Set::add}(2.{core::num::*}(e){(core::num) → core::int}){(core::int) → core::bool};
         }
       }
     } =>#t1, super core::Object::•()
diff --git a/pkg/front_end/testcases/general/issue37381.dart.weak.expect b/pkg/front_end/testcases/general/issue37381.dart.weak.expect
index dee4ed1..8ec0e22 100644
--- a/pkg/front_end/testcases/general/issue37381.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue37381.dart.weak.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method f<R extends core::Object* = dynamic>(<X extends core::Object* = dynamic>(self::A<X*>*) →* self::A::f::R* f) → self::A::f::R*
-    return f.call<self::A::X*>(this);
+    return f<self::A::X*>(this){(self::A<self::A::X*>*) →* self::A::f::R*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -21,5 +21,5 @@
 }
 static method main() → dynamic {
   self::A<core::num*>* a = new self::A::•<core::int*>();
-  a.{self::A::f}<core::int*>(<X extends core::Object* = dynamic>(self::A<X*>* _) → core::int* => 42);
+  a.{self::A::f}<core::int*>(<X extends core::Object* = dynamic>(self::A<X*>* _) → core::int* => 42){(<X extends core::Object* = dynamic>(self::A<X*>*) →* core::int*) →* core::int*};
 }
diff --git a/pkg/front_end/testcases/general/issue37381.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue37381.dart.weak.transformed.expect
index dee4ed1..8ec0e22 100644
--- a/pkg/front_end/testcases/general/issue37381.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue37381.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method f<R extends core::Object* = dynamic>(<X extends core::Object* = dynamic>(self::A<X*>*) →* self::A::f::R* f) → self::A::f::R*
-    return f.call<self::A::X*>(this);
+    return f<self::A::X*>(this){(self::A<self::A::X*>*) →* self::A::f::R*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -21,5 +21,5 @@
 }
 static method main() → dynamic {
   self::A<core::num*>* a = new self::A::•<core::int*>();
-  a.{self::A::f}<core::int*>(<X extends core::Object* = dynamic>(self::A<X*>* _) → core::int* => 42);
+  a.{self::A::f}<core::int*>(<X extends core::Object* = dynamic>(self::A<X*>* _) → core::int* => 42){(<X extends core::Object* = dynamic>(self::A<X*>*) →* core::int*) →* core::int*};
 }
diff --git a/pkg/front_end/testcases/general/issue39344.dart.weak.expect b/pkg/front_end/testcases/general/issue39344.dart.weak.expect
index 07a4d30..d3e641b 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.weak.expect
@@ -92,21 +92,21 @@
 static field core::List<core::List<self::B*>*>* xss;
 static method main() → void {
   self::throws(() → Null {
-    new self::Class::•<self::A*>().{self::Class::method2a}(new self::B::•());
-    core::print(self::xs.{core::Object::runtimeType});
+    new self::Class::•<self::A*>().{self::Class::method2a}(new self::B::•()){(self::A*) →* void};
+    core::print(self::xs.{core::Object::runtimeType}{core::Type*});
   });
   self::throws(() → Null {
-    new self::Class::•<self::A*>().{self::Class::method2b}(new self::B::•());
-    core::print(self::xs.{core::Object::runtimeType});
+    new self::Class::•<self::A*>().{self::Class::method2b}(new self::B::•()){(self::A*) →* void};
+    core::print(self::xs.{core::Object::runtimeType}{core::Type*});
   });
 }
 static method errors() → void {
-  new self::Class::•<self::A*>().{self::Class::method1a}(new self::B::•());
-  new self::Class::•<self::A*>().{self::Class::method1b}(new self::B::•());
+  new self::Class::•<self::A*>().{self::Class::method1a}(new self::B::•()){(self::A*) →* void};
+  new self::Class::•<self::A*>().{self::Class::method1b}(new self::B::•()){(self::A*) →* void};
 }
 static method throws(() →* void f) → void {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect
index 7fe41a0..c78819b8 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect
@@ -92,21 +92,21 @@
 static field core::List<core::List<self::B*>*>* xss;
 static method main() → void {
   self::throws(() → Null {
-    new self::Class::•<self::A*>().{self::Class::method2a}(new self::B::•());
-    core::print(self::xs.{core::Object::runtimeType});
+    new self::Class::•<self::A*>().{self::Class::method2a}(new self::B::•()){(self::A*) →* void};
+    core::print(self::xs.{core::Object::runtimeType}{core::Type*});
   });
   self::throws(() → Null {
-    new self::Class::•<self::A*>().{self::Class::method2b}(new self::B::•());
-    core::print(self::xs.{core::Object::runtimeType});
+    new self::Class::•<self::A*>().{self::Class::method2b}(new self::B::•()){(self::A*) →* void};
+    core::print(self::xs.{core::Object::runtimeType}{core::Type*});
   });
 }
 static method errors() → void {
-  new self::Class::•<self::A*>().{self::Class::method1a}(new self::B::•());
-  new self::Class::•<self::A*>().{self::Class::method1b}(new self::B::•());
+  new self::Class::•<self::A*>().{self::Class::method1a}(new self::B::•()){(self::A*) →* void};
+  new self::Class::•<self::A*>().{self::Class::method1b}(new self::B::•()){(self::A*) →* void};
 }
 static method throws(() →* void f) → void {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/general/issue40662.dart.weak.expect b/pkg/front_end/testcases/general/issue40662.dart.weak.expect
index d0d2fa1..dc6a6d8 100644
--- a/pkg/front_end/testcases/general/issue40662.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue40662.dart.weak.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 static method bar(core::int* a, core::List<core::int*>* b) → dynamic {
-  self::expect(1.{core::int::unary-}(), a);
-  self::expect(1.{core::int::unary-}(), b.{core::List::[]}(0).{core::num::-}(2));
+  self::expect(1.{core::int::unary-}(){() →* core::int*}, a);
+  self::expect(1.{core::int::unary-}(){() →* core::int*}, b.{core::List::[]}(0){(core::int*) →* core::int*}.{core::num::-}(2){(core::num*) →* core::int*});
 }
 static method foo(core::int* x) → dynamic async 
-  return self::bar(x.{core::num::-}(1), !x.{core::num::==}(null) ?{core::List<core::int*>*} <core::int*>[x.{core::num::+}(1), x.{core::num::+}(2), await null] : null);
+  return self::bar(x.{core::num::-}(1){(core::num*) →* core::int*}, !(x == null) ?{core::List<core::int*>*} <core::int*>[x.{core::num::+}(1){(core::num*) →* core::int*}, x.{core::num::+}(2){(core::num*) →* core::int*}, await null] : null);
 static method main() → void async 
   return await self::foo(0);
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
index 96339d0..c811d62 100644
--- a/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
@@ -5,8 +5,8 @@
 import "dart:_internal" as _in;
 
 static method bar(core::int* a, core::List<core::int*>* b) → dynamic {
-  self::expect(1.{core::int::unary-}(), a);
-  self::expect(1.{core::int::unary-}(), b.{core::List::[]}(0).{core::num::-}(2));
+  self::expect(1.{core::int::unary-}(){() →* core::int*}, a);
+  self::expect(1.{core::int::unary-}(){() →* core::int*}, b.{core::List::[]}(0){(core::int*) →* core::int*}.{core::num::-}(2){(core::num*) →* core::int*});
 }
 static method foo(core::int* x) → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
@@ -25,10 +25,10 @@
     try {
       #L1:
       {
-        :async_temporary_3 = x.{core::num::-}(1);
-        if(!x.{core::num::==}(null)) {
-          :async_temporary_1 = x.{core::num::+}(1);
-          :async_temporary_0 = x.{core::num::+}(2);
+        :async_temporary_3 = x.{core::num::-}(1){(core::num*) →* core::int*};
+        if(!(x == null)) {
+          :async_temporary_1 = x.{core::num::+}(1){(core::num*) →* core::int*};
+          :async_temporary_0 = x.{core::num::+}(2){(core::num*) →* core::int*};
           [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
           :async_temporary_2 = core::_GrowableList::_literal3<core::int*>(_in::unsafeCast<core::int*>(:async_temporary_1), _in::unsafeCast<core::int*>(:async_temporary_0), _in::unsafeCast<Null>(:result));
         }
@@ -80,12 +80,12 @@
   return :async_future;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///issue40662.dart:8:10 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///issue40662.dart:9:10 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue40662.dart:8:10 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue40662.dart:9:10 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 95, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/issue40744.dart.weak.expect b/pkg/front_end/testcases/general/issue40744.dart.weak.expect
index ba04d64..b193d72 100644
--- a/pkg/front_end/testcases/general/issue40744.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue40744.dart.weak.expect
@@ -7,7 +7,7 @@
   core::print(input);
 }
 static method main() → void {
-  final core::Map<core::String*, Null>* nullValueMap = core::Map::fromEntries<core::String*, Null>((#C4).{core::Map::entries}.{core::Iterable::map}<core::MapEntry<core::String*, Null>*>((core::MapEntry<core::String*, dynamic>* e) → core::MapEntry<core::String*, Null>* => new core::MapEntry::_<core::String*, Null>(e.{core::MapEntry::key}, null)));
+  final core::Map<core::String*, Null>* nullValueMap = core::Map::fromEntries<core::String*, Null>((#C4).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{core::Iterable::map}<core::MapEntry<core::String*, Null>*>((core::MapEntry<core::String*, dynamic>* e) → core::MapEntry<core::String*, Null>* => new core::MapEntry::_<core::String*, Null>(e.{core::MapEntry::key}{core::String*}, null)){((core::MapEntry<core::String*, dynamic>*) →* core::MapEntry<core::String*, Null>*) →* core::Iterable<core::MapEntry<core::String*, Null>*>*});
   self::helper(nullValueMap);
 }
 
diff --git a/pkg/front_end/testcases/general/issue40744.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue40744.dart.weak.transformed.expect
index ba04d64..b193d72 100644
--- a/pkg/front_end/testcases/general/issue40744.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40744.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
   core::print(input);
 }
 static method main() → void {
-  final core::Map<core::String*, Null>* nullValueMap = core::Map::fromEntries<core::String*, Null>((#C4).{core::Map::entries}.{core::Iterable::map}<core::MapEntry<core::String*, Null>*>((core::MapEntry<core::String*, dynamic>* e) → core::MapEntry<core::String*, Null>* => new core::MapEntry::_<core::String*, Null>(e.{core::MapEntry::key}, null)));
+  final core::Map<core::String*, Null>* nullValueMap = core::Map::fromEntries<core::String*, Null>((#C4).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{core::Iterable::map}<core::MapEntry<core::String*, Null>*>((core::MapEntry<core::String*, dynamic>* e) → core::MapEntry<core::String*, Null>* => new core::MapEntry::_<core::String*, Null>(e.{core::MapEntry::key}{core::String*}, null)){((core::MapEntry<core::String*, dynamic>*) →* core::MapEntry<core::String*, Null>*) →* core::Iterable<core::MapEntry<core::String*, Null>*>*});
   self::helper(nullValueMap);
 }
 
diff --git a/pkg/front_end/testcases/general/issue41070.dart.weak.expect b/pkg/front_end/testcases/general/issue41070.dart.weak.expect
index 71da7fe..7a1c9bb 100644
--- a/pkg/front_end/testcases/general/issue41070.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41070.dart.weak.expect
@@ -39,10 +39,10 @@
     ;
 }
 static method main() → dynamic {
-  self::expect(42, (#C2).{self::Base::x});
+  self::expect(42, (#C2).{self::Base::x}{core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/general/issue41070.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue41070.dart.weak.transformed.expect
index cf254b2..b7cbfbd 100644
--- a/pkg/front_end/testcases/general/issue41070.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue41070.dart.weak.transformed.expect
@@ -39,10 +39,10 @@
     ;
 }
 static method main() → dynamic {
-  self::expect(42, (#C2).{self::Base::x});
+  self::expect(42, (#C2).{self::Base::x}{core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.weak.expect b/pkg/front_end/testcases/general/issue41210a.dart.weak.expect
index 10d9bf9..b5abffb 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.weak.expect
@@ -193,7 +193,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A&B::method}(0));
+  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num*) →* core::String*});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.expect
index 38f8cf0..b2f0c55 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.expect
@@ -103,7 +103,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A&B::method}(0));
+  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num*) →* core::String*});
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.expect
index f5e9904..1692897 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.expect
@@ -103,7 +103,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A&B::method}(0));
+  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num*) →* core::String*});
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/issue42435.dart.weak.expect b/pkg/front_end/testcases/general/issue42435.dart.weak.expect
index 4c809d0..3dd8dc5 100644
--- a/pkg/front_end/testcases/general/issue42435.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue42435.dart.weak.expect
@@ -149,7 +149,7 @@
     ;
 }
 class B extends core::Object {
-  field <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic foo6 = let final Never #t1 = (() → Never => throw 42).call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  field <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic foo6 = let final Never #t1 = (() → Never => throw 42)(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   constructor •(<Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → self::B
     : super core::Object::•()
     ;
@@ -170,7 +170,7 @@
   get baz4 = self::E|get#baz4;
   set baz5 = self::E|set#baz5;
 }
-static field <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic bar6 = let final Never #t2 = (() → Never => throw 42).call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+static field <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic bar6 = let final Never #t2 = (() → Never => throw 42)(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 static method bar2(<Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → dynamic {}
 static method bar3() → <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic
   return throw 42;
diff --git a/pkg/front_end/testcases/general/issue42435.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42435.dart.weak.transformed.expect
index 4c809d0..3dd8dc5 100644
--- a/pkg/front_end/testcases/general/issue42435.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42435.dart.weak.transformed.expect
@@ -149,7 +149,7 @@
     ;
 }
 class B extends core::Object {
-  field <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic foo6 = let final Never #t1 = (() → Never => throw 42).call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  field <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic foo6 = let final Never #t1 = (() → Never => throw 42)(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   constructor •(<Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → self::B
     : super core::Object::•()
     ;
@@ -170,7 +170,7 @@
   get baz4 = self::E|get#baz4;
   set baz5 = self::E|set#baz5;
 }
-static field <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic bar6 = let final Never #t2 = (() → Never => throw 42).call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+static field <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic bar6 = let final Never #t2 = (() → Never => throw 42)(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 static method bar2(<Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → dynamic {}
 static method bar3() → <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic
   return throw 42;
diff --git a/pkg/front_end/testcases/general/issue42997.dart.weak.expect b/pkg/front_end/testcases/general/issue42997.dart.weak.expect
index cfae480..9b90959 100644
--- a/pkg/front_end/testcases/general/issue42997.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue42997.dart.weak.expect
@@ -57,7 +57,7 @@
   method dispose() → void {
     for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:10: Error: Can't use 'PropertyState' because it is declared more than once.
     for (PropertyState<Object, Object>> state in _states) ;
-         ^".<(#C1); invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
+         ^"{dynamic}.<(#C1); invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
     for (PropertyState<Object, Object>> state in _states) ;
                              ^" as{TypeError,ForDynamic} core::bool*; invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
     for (PropertyState<Object, Object>> state in _states) ;
diff --git a/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect
index 96d6a7c..0d39294 100644
--- a/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect
@@ -57,7 +57,7 @@
   method dispose() → void {
     for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:10: Error: Can't use 'PropertyState' because it is declared more than once.
     for (PropertyState<Object, Object>> state in _states) ;
-         ^".<(#C1); invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
+         ^"{dynamic}.<(#C1); invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
     for (PropertyState<Object, Object>> state in _states) ;
                              ^"; invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
     for (PropertyState<Object, Object>> state in _states) ;
diff --git a/pkg/front_end/testcases/general/issue44654.dart.weak.expect b/pkg/front_end/testcases/general/issue44654.dart.weak.expect
index 20db53d..0832149 100644
--- a/pkg/front_end/testcases/general/issue44654.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue44654.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method test2() → void {
   core::String* string = null;
-  if(let final core::String* #t1 = string in #t1.{core::String::==}(null) ?{core::bool*} null : #t1.{core::String::isNotEmpty})
+  if(let final core::String* #t1 = string in #t1 == null ?{core::bool*} null : #t1.{core::String::isNotEmpty}{core::bool*})
     ;
 }
 static method main() → void {
@@ -17,17 +17,17 @@
 }
 static method checkFirstLineHasPosition(core::StackTrace* stackTrace) → void {
   core::String* firstLine = "${stackTrace}".{core::String::split}("
-").{core::Iterable::firstWhere}((core::String* line) → core::bool* => line.{core::String::startsWith}("#0"));
-  core::int* lastParen = firstLine.{core::String::lastIndexOf}(")");
-  if(!lastParen.{core::num::==}(1.{core::int::unary-}())) {
-    core::int* secondColon = firstLine.{core::String::lastIndexOf}(":", lastParen.{core::num::-}(1));
-    if(!secondColon.{core::num::==}(1.{core::int::unary-}())) {
-      core::int* firstColon = firstLine.{core::String::lastIndexOf}(":", secondColon.{core::num::-}(1));
-      core::String* lineText = firstLine.{core::String::substring}(firstColon.{core::num::+}(1), secondColon);
-      core::String* posText = firstLine.{core::String::substring}(secondColon.{core::num::+}(1), lastParen);
+"){(core::Pattern*) →* core::List<core::String*>*}.{core::Iterable::firstWhere}((core::String* line) → core::bool* => line.{core::String::startsWith}("#0"){(core::Pattern*, [core::int*]) →* core::bool*}){((core::String*) →* core::bool*, {orElse: () →* core::String*}) →* core::String*};
+  core::int* lastParen = firstLine.{core::String::lastIndexOf}(")"){(core::Pattern*, [core::int*]) →* core::int*};
+  if(!(lastParen =={core::num::==}{(core::Object*) →* core::bool*} 1.{core::int::unary-}(){() →* core::int*})) {
+    core::int* secondColon = firstLine.{core::String::lastIndexOf}(":", lastParen.{core::num::-}(1){(core::num*) →* core::int*}){(core::Pattern*, [core::int*]) →* core::int*};
+    if(!(secondColon =={core::num::==}{(core::Object*) →* core::bool*} 1.{core::int::unary-}(){() →* core::int*})) {
+      core::int* firstColon = firstLine.{core::String::lastIndexOf}(":", secondColon.{core::num::-}(1){(core::num*) →* core::int*}){(core::Pattern*, [core::int*]) →* core::int*};
+      core::String* lineText = firstLine.{core::String::substring}(firstColon.{core::num::+}(1){(core::num*) →* core::int*}, secondColon){(core::int*, [core::int*]) →* core::String*};
+      core::String* posText = firstLine.{core::String::substring}(secondColon.{core::num::+}(1){(core::num*) →* core::int*}, lastParen){(core::int*, [core::int*]) →* core::String*};
       core::int* line = core::int::tryParse(lineText);
       core::int* pos = core::int::tryParse(posText);
-      if(!line.{core::num::==}(null) && !pos.{core::num::==}(null)) {
+      if(!(line == null) && !(pos == null)) {
         core::print("Found position ${line}:${pos}");
         return;
       }
diff --git a/pkg/front_end/testcases/general/issue44654.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue44654.dart.weak.transformed.expect
index dee713e..4f52310 100644
--- a/pkg/front_end/testcases/general/issue44654.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue44654.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method test2() → void {
   core::String* string = null;
-  if(let final core::String* #t1 = string in #t1.{core::String::==}(null) ?{core::bool*} null : #t1.{core::String::isNotEmpty})
+  if(let final core::String* #t1 = string in #t1 == null ?{core::bool*} null : #t1.{core::String::isNotEmpty}{core::bool*})
     ;
 }
 static method main() → void {
@@ -17,17 +17,17 @@
 }
 static method checkFirstLineHasPosition(core::StackTrace* stackTrace) → void {
   core::String* firstLine = "${stackTrace}".{core::String::split}("
-").{core::Iterable::firstWhere}((core::String* line) → core::bool* => line.{core::String::startsWith}("#0"));
-  core::int* lastParen = firstLine.{core::String::lastIndexOf}(")");
-  if(!lastParen.{core::num::==}(1.{core::int::unary-}())) {
-    core::int* secondColon = firstLine.{core::String::lastIndexOf}(":", lastParen.{core::num::-}(1));
-    if(!secondColon.{core::num::==}(1.{core::int::unary-}())) {
-      core::int* firstColon = firstLine.{core::String::lastIndexOf}(":", secondColon.{core::num::-}(1));
-      core::String* lineText = firstLine.{core::String::substring}(firstColon.{core::num::+}(1), secondColon);
-      core::String* posText = firstLine.{core::String::substring}(secondColon.{core::num::+}(1), lastParen);
+"){(core::Pattern*) →* core::List<core::String*>*}.{core::Iterable::firstWhere}((core::String* line) → core::bool* => line.{core::String::startsWith}("#0"){(core::Pattern*, [core::int*]) →* core::bool*}){((core::String*) →* core::bool*, {orElse: () →* core::String*}) →* core::String*};
+  core::int* lastParen = firstLine.{core::String::lastIndexOf}(")"){(core::Pattern*, [core::int*]) →* core::int*};
+  if(!(lastParen =={core::num::==}{(core::Object*) →* core::bool*} 1.{core::int::unary-}(){() →* core::int*})) {
+    core::int* secondColon = firstLine.{core::String::lastIndexOf}(":", lastParen.{core::num::-}(1){(core::num*) →* core::int*}){(core::Pattern*, [core::int*]) →* core::int*};
+    if(!(secondColon =={core::num::==}{(core::Object*) →* core::bool*} 1.{core::int::unary-}(){() →* core::int*})) {
+      core::int* firstColon = firstLine.{core::String::lastIndexOf}(":", secondColon.{core::num::-}(1){(core::num*) →* core::int*}){(core::Pattern*, [core::int*]) →* core::int*};
+      core::String* lineText = firstLine.{core::String::substring}(firstColon.{core::num::+}(1){(core::num*) →* core::int*}, secondColon){(core::int*, [core::int*]) →* core::String*};
+      core::String* posText = firstLine.{core::String::substring}(secondColon.{core::num::+}(1){(core::num*) →* core::int*}, lastParen){(core::int*, [core::int*]) →* core::String*};
       core::int* line = core::int::tryParse(lineText);
       core::int* pos = core::int::tryParse(posText);
-      if(!line.{core::num::==}(null) && !pos.{core::num::==}(null)) {
+      if(!(line == null) && !(pos == null)) {
         core::print("Found position ${line}:${pos}");
         return;
       }
@@ -38,6 +38,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///issue44654.dart:25:20 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///issue44654.dart:27:24 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue44654.dart:25:20 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue44654.dart:27:24 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 63, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/issue45598.dart.weak.expect b/pkg/front_end/testcases/general/issue45598.dart.weak.expect
index fc68d7b..4463884 100644
--- a/pkg/front_end/testcases/general/issue45598.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45598.dart.weak.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method foo(<X extends Z* = dynamic, Y extends core::Object* = dynamic, Z extends core::Object* = dynamic>({m: core::Map<Y*, Z*>*}) →* dynamic bar, core::Map<core::String*, core::String*>* m) → dynamic {
-  bar.call<core::String*, core::String*, core::String*>(m: m);
+  bar<core::String*, core::String*, core::String*>(m: m){({m: core::Map<core::String*, core::String*>*}) →* dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45598.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45598.dart.weak.transformed.expect
index fc68d7b..4463884 100644
--- a/pkg/front_end/testcases/general/issue45598.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45598.dart.weak.transformed.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method foo(<X extends Z* = dynamic, Y extends core::Object* = dynamic, Z extends core::Object* = dynamic>({m: core::Map<Y*, Z*>*}) →* dynamic bar, core::Map<core::String*, core::String*>* m) → dynamic {
-  bar.call<core::String*, core::String*, core::String*>(m: m);
+  bar<core::String*, core::String*, core::String*>(m: m){({m: core::Map<core::String*, core::String*>*}) →* dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45598_2.dart.weak.expect b/pkg/front_end/testcases/general/issue45598_2.dart.weak.expect
index d8d1fd0..eff30fa 100644
--- a/pkg/front_end/testcases/general/issue45598_2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45598_2.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method foo(core::Map<core::String*, core::String*>* m) → dynamic {
   function bar<X extends Z* = dynamic, Y extends core::Object* = dynamic, Z extends core::Object* = dynamic>({core::Map<Y*, Z*>* m = #C1}) → void {}
-  bar.call<core::String*, core::String*, core::String*>(m: m);
+  bar<core::String*, core::String*, core::String*>(m: m){({m: core::Map<core::String*, core::String*>*}) →* void};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/issue45598_2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45598_2.dart.weak.transformed.expect
index d8d1fd0..eff30fa 100644
--- a/pkg/front_end/testcases/general/issue45598_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45598_2.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method foo(core::Map<core::String*, core::String*>* m) → dynamic {
   function bar<X extends Z* = dynamic, Y extends core::Object* = dynamic, Z extends core::Object* = dynamic>({core::Map<Y*, Z*>* m = #C1}) → void {}
-  bar.call<core::String*, core::String*, core::String*>(m: m);
+  bar<core::String*, core::String*, core::String*>(m: m){({m: core::Map<core::String*, core::String*>*}) →* void};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/issue45660.dart.weak.expect b/pkg/front_end/testcases/general/issue45660.dart.weak.expect
index f65680e..5111de9 100644
--- a/pkg/front_end/testcases/general/issue45660.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45660.dart.weak.expect
@@ -12,7 +12,7 @@
 
 static field <T extends core::num* = dynamic>(T*) →* T* extendsNumReturnArg = <S extends core::num*>(S* s) → S* => s;
 static method functionInvocations() → dynamic {
-  self::extendsNumReturnArg.call<Null>(null);
-  self::extendsNumReturnArg.call<core::String*>("");
+  self::extendsNumReturnArg<Null>(null){(Null) →* Null};
+  self::extendsNumReturnArg<core::String*>(""){(core::String*) →* core::String*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45660.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45660.dart.weak.transformed.expect
index f65680e..5111de9 100644
--- a/pkg/front_end/testcases/general/issue45660.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45660.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 
 static field <T extends core::num* = dynamic>(T*) →* T* extendsNumReturnArg = <S extends core::num*>(S* s) → S* => s;
 static method functionInvocations() → dynamic {
-  self::extendsNumReturnArg.call<Null>(null);
-  self::extendsNumReturnArg.call<core::String*>("");
+  self::extendsNumReturnArg<Null>(null){(Null) →* Null};
+  self::extendsNumReturnArg<core::String*>(""){(core::String*) →* core::String*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/local_generic_function.dart.weak.expect b/pkg/front_end/testcases/general/local_generic_function.dart.weak.expect
index 487fec1..b22d5a7 100644
--- a/pkg/front_end/testcases/general/local_generic_function.dart.weak.expect
+++ b/pkg/front_end/testcases/general/local_generic_function.dart.weak.expect
@@ -4,6 +4,6 @@
 
 static method main() → dynamic {
   function f<T extends core::Object* = dynamic>(core::List<T*>* l) → T*
-    return l.{core::List::[]}(0);
-  core::int* x = f.call<core::int*>(<core::int*>[0]);
+    return l.{core::List::[]}(0){(core::int*) →* T*};
+  core::int* x = f<core::int*>(<core::int*>[0]){(core::List<core::int*>*) →* core::int*};
 }
diff --git a/pkg/front_end/testcases/general/local_generic_function.dart.weak.transformed.expect b/pkg/front_end/testcases/general/local_generic_function.dart.weak.transformed.expect
index 328d4cc..6c7e013 100644
--- a/pkg/front_end/testcases/general/local_generic_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/local_generic_function.dart.weak.transformed.expect
@@ -4,6 +4,6 @@
 
 static method main() → dynamic {
   function f<T extends core::Object* = dynamic>(core::List<T*>* l) → T*
-    return l.{core::List::[]}(0);
-  core::int* x = f.call<core::int*>(core::_GrowableList::_literal1<core::int*>(0));
+    return l.{core::List::[]}(0){(core::int*) →* T*};
+  core::int* x = f<core::int*>(core::_GrowableList::_literal1<core::int*>(0)){(core::List<core::int*>*) →* core::int*};
 }
diff --git a/pkg/front_end/testcases/general/many_errors.dart.weak.expect b/pkg/front_end/testcases/general/many_errors.dart.weak.expect
index c04f498..6de22e5 100644
--- a/pkg/front_end/testcases/general/many_errors.dart.weak.expect
+++ b/pkg/front_end/testcases/general/many_errors.dart.weak.expect
@@ -127,7 +127,7 @@
 external foo(String x) {
                        ^";
   {
-    return x.{core::String::length};
+    return x.{core::String::length}{core::int*};
   }
 }
 static method m() → dynamic {
diff --git a/pkg/front_end/testcases/general/many_errors.dart.weak.transformed.expect b/pkg/front_end/testcases/general/many_errors.dart.weak.transformed.expect
index c04f498..6de22e5 100644
--- a/pkg/front_end/testcases/general/many_errors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/many_errors.dart.weak.transformed.expect
@@ -127,7 +127,7 @@
 external foo(String x) {
                        ^";
   {
-    return x.{core::String::length};
+    return x.{core::String::length}{core::int*};
   }
 }
 static method m() → dynamic {
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
index 0b8666f..226967f 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
@@ -14,7 +14,7 @@
     : self::E::index = index, self::E::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::E::_name};
+    return this.{self::E::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.outline.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.outline.expect
index 908f423..eccf60e 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.outline.expect
@@ -14,7 +14,7 @@
     : self::E::index = index, self::E::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::E::_name};
+    return this.{self::E::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
index 0b8666f..226967f 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
     : self::E::index = index, self::E::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::E::_name};
+    return this.{self::E::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/micro.dart.weak.expect b/pkg/front_end/testcases/general/micro.dart.weak.expect
index 74e0279..8bd8f18 100644
--- a/pkg/front_end/testcases/general/micro.dart.weak.expect
+++ b/pkg/front_end/testcases/general/micro.dart.weak.expect
@@ -128,24 +128,24 @@
 static method stringArgument(dynamic x) → dynamic {}
 static method intArgument(dynamic x) → dynamic {}
 static method makeDynamicCall(dynamic receiver) → void {
-  receiver.dynamicallyCalled("sdfg");
+  receiver{dynamic}.dynamicallyCalled("sdfg");
 }
 static method main() → dynamic {
   dynamic x = self::staticMethod();
-  dynamic y = new self::Foo::•().{self::Foo::instanceMethod}();
+  dynamic y = new self::Foo::•().{self::Foo::instanceMethod}(){() →* dynamic};
   core::bool* z = self::externalStatic();
-  self::ExternalValue* w = self::createBar().{self::Bar::externalInstanceMethod}();
+  self::ExternalValue* w = self::createBar().{self::Bar::externalInstanceMethod}(){() →* self::ExternalValue*};
   self::stringArgument("sdfg");
   self::intArgument(42);
   self::Box* box = new self::Box::•();
   box.{self::Box::field} = "sdfg";
-  dynamic a = box.{self::Box::field};
+  dynamic a = box.{self::Box::field}{dynamic};
   self::FinalBox* finalBox = new self::FinalBox::•("dfg");
-  dynamic b = finalBox.{self::FinalBox::finalField};
+  dynamic b = finalBox.{self::FinalBox::finalField}{dynamic};
   self::SubFinalBox* subBox = new self::SubFinalBox::•("dfg");
-  dynamic c = subBox.{self::FinalBox::finalField};
+  dynamic c = subBox.{self::FinalBox::finalField}{dynamic};
   self::makeDynamicCall(new self::DynamicReceiver1::•());
   self::makeDynamicCall(new self::DynamicReceiver2::•());
   core::List<core::String*>* list = <core::String*>["string"];
-  core::String* d = list.{core::List::[]}(0);
+  core::String* d = list.{core::List::[]}(0){(core::int*) →* core::String*};
 }
diff --git a/pkg/front_end/testcases/general/micro.dart.weak.transformed.expect b/pkg/front_end/testcases/general/micro.dart.weak.transformed.expect
index 30a9c46..23f0c21 100644
--- a/pkg/front_end/testcases/general/micro.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/micro.dart.weak.transformed.expect
@@ -128,24 +128,24 @@
 static method stringArgument(dynamic x) → dynamic {}
 static method intArgument(dynamic x) → dynamic {}
 static method makeDynamicCall(dynamic receiver) → void {
-  receiver.dynamicallyCalled("sdfg");
+  receiver{dynamic}.dynamicallyCalled("sdfg");
 }
 static method main() → dynamic {
   dynamic x = self::staticMethod();
-  dynamic y = new self::Foo::•().{self::Foo::instanceMethod}();
+  dynamic y = new self::Foo::•().{self::Foo::instanceMethod}(){() →* dynamic};
   core::bool* z = self::externalStatic();
-  self::ExternalValue* w = self::createBar().{self::Bar::externalInstanceMethod}();
+  self::ExternalValue* w = self::createBar().{self::Bar::externalInstanceMethod}(){() →* self::ExternalValue*};
   self::stringArgument("sdfg");
   self::intArgument(42);
   self::Box* box = new self::Box::•();
   box.{self::Box::field} = "sdfg";
-  dynamic a = box.{self::Box::field};
+  dynamic a = box.{self::Box::field}{dynamic};
   self::FinalBox* finalBox = new self::FinalBox::•("dfg");
-  dynamic b = finalBox.{self::FinalBox::finalField};
+  dynamic b = finalBox.{self::FinalBox::finalField}{dynamic};
   self::SubFinalBox* subBox = new self::SubFinalBox::•("dfg");
-  dynamic c = subBox.{self::FinalBox::finalField};
+  dynamic c = subBox.{self::FinalBox::finalField}{dynamic};
   self::makeDynamicCall(new self::DynamicReceiver1::•());
   self::makeDynamicCall(new self::DynamicReceiver2::•());
   core::List<core::String*>* list = core::_GrowableList::_literal1<core::String*>("string");
-  core::String* d = list.{core::List::[]}(0);
+  core::String* d = list.{core::List::[]}(0){(core::int*) →* core::String*};
 }
diff --git a/pkg/front_end/testcases/general/minimum_int.dart.weak.expect b/pkg/front_end/testcases/general/minimum_int.dart.weak.expect
index 17fdfdc..65f7c38 100644
--- a/pkg/front_end/testcases/general/minimum_int.dart.weak.expect
+++ b/pkg/front_end/testcases/general/minimum_int.dart.weak.expect
@@ -3,4 +3,4 @@
 import "dart:core" as core;
 
 static method main() → dynamic
-  return core::print(-9223372036854775808.{core::int::unary-}());
+  return core::print(-9223372036854775808.{core::int::unary-}(){() →* core::int*});
diff --git a/pkg/front_end/testcases/general/minimum_int.dart.weak.transformed.expect b/pkg/front_end/testcases/general/minimum_int.dart.weak.transformed.expect
index 9628dc6..349fd7e 100644
--- a/pkg/front_end/testcases/general/minimum_int.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/minimum_int.dart.weak.transformed.expect
@@ -3,9 +3,9 @@
 import "dart:core" as core;
 
 static method main() → dynamic
-  return core::print(-9223372036854775808.{core::int::unary-}());
+  return core::print(-9223372036854775808.{core::int::unary-}(){() →* core::int*});
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///minimum_int.dart:2:17 -> IntConstant(-9223372036854775808)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///minimum_int.dart:2:17 -> IntConstant(-9223372036854775808)
 Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.expect
index 734ecfe..fe0c5d0 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.expect
@@ -112,8 +112,8 @@
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
-                                       ^" in #t4.{core::Object::==}(null) ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5) in #t5 : #t4;
-static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
+                                       ^" in #t4 == null ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int*, core::int*) →* void} in #t5 : #t4;
+static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8){(core::int*) →* core::int*} in #t9 == null ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect
index 20fffed..2ddf977 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect
@@ -112,8 +112,8 @@
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
-                                       ^" in #t4.{core::Object::==}(null) ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5) in #t5 : #t4;
-static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
+                                       ^" in #t4 == null ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int*, core::int*) →* void} in #t5 : #t4;
+static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8){(core::int*) →* core::int*} in #t9 == null ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
diff --git a/pkg/front_end/testcases/general/mixin.dart.weak.expect b/pkg/front_end/testcases/general/mixin.dart.weak.expect
index 1f1f19e..9ec9ad2d 100644
--- a/pkg/front_end/testcases/general/mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin.dart.weak.expect
@@ -134,9 +134,9 @@
     ;
 }
 static method main() → dynamic {
-  new self::B::•(null).{self::_B&Object&M1&M2::m}();
-  new self::C::•(null).{self::_C&Object&M1&M2::m}();
-  new self::D::•<dynamic>().{self::_D&Object&G1::m}();
-  new self::D::•<core::int*>().{self::_D&Object&G1::m}();
-  new self::D::•<core::List<core::int*>*>().{self::_D&Object&G1::m}();
+  new self::B::•(null).{self::_B&Object&M1&M2::m}(){() →* dynamic};
+  new self::C::•(null).{self::_C&Object&M1&M2::m}(){() →* dynamic};
+  new self::D::•<dynamic>().{self::_D&Object&G1::m}(){() →* dynamic};
+  new self::D::•<core::int*>().{self::_D&Object&G1::m}(){() →* dynamic};
+  new self::D::•<core::List<core::int*>*>().{self::_D&Object&G1::m}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin.dart.weak.transformed.expect
index 241fd10..fe35f14 100644
--- a/pkg/front_end/testcases/general/mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin.dart.weak.transformed.expect
@@ -134,9 +134,9 @@
     ;
 }
 static method main() → dynamic {
-  new self::B::•(null).{self::_B&Object&M1&M2::m}();
-  new self::C::•(null).{self::_C&Object&M1&M2::m}();
-  new self::D::•<dynamic>().{self::_D&Object&G1::m}();
-  new self::D::•<core::int*>().{self::_D&Object&G1::m}();
-  new self::D::•<core::List<core::int*>*>().{self::_D&Object&G1::m}();
+  new self::B::•(null).{self::_B&Object&M1&M2::m}(){() →* dynamic};
+  new self::C::•(null).{self::_C&Object&M1&M2::m}(){() →* dynamic};
+  new self::D::•<dynamic>().{self::_D&Object&G1::m}(){() →* dynamic};
+  new self::D::•<core::int*>().{self::_D&Object&G1::m}(){() →* dynamic};
+  new self::D::•<core::List<core::int*>*>().{self::_D&Object&G1::m}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/mixin_application_lub.dart.weak.expect b/pkg/front_end/testcases/general/mixin_application_lub.dart.weak.expect
index e277693..8972ec3 100644
--- a/pkg/front_end/testcases/general/mixin_application_lub.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_application_lub.dart.weak.expect
@@ -73,6 +73,6 @@
   core::print(self::foo::T*);
 }
 static method main() → dynamic {
-  self::Diagnosticable* x = let final self::StateA* #t1 = self::a in #t1.{self::_State&Object&Diagnosticable::==}(null) ?{self::Diagnosticable*} self::b : #t1;
+  self::Diagnosticable* x = let final self::StateA* #t1 = self::a in #t1 == null ?{self::Diagnosticable*} self::b : #t1;
   self::foo<self::Diagnosticable*>(x);
 }
diff --git a/pkg/front_end/testcases/general/mixin_application_lub.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_application_lub.dart.weak.transformed.expect
index 421798b..a392cca 100644
--- a/pkg/front_end/testcases/general/mixin_application_lub.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_application_lub.dart.weak.transformed.expect
@@ -73,6 +73,6 @@
   core::print(self::foo::T*);
 }
 static method main() → dynamic {
-  self::Diagnosticable* x = let final self::StateA* #t1 = self::a in #t1.{self::_State&Object&Diagnosticable::==}(null) ?{self::Diagnosticable*} self::b : #t1;
+  self::Diagnosticable* x = let final self::StateA* #t1 = self::a in #t1 == null ?{self::Diagnosticable*} self::b : #t1;
   self::foo<self::Diagnosticable*>(x);
 }
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.expect
index daa1e5a..e433f66 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.expect
@@ -70,11 +70,11 @@
     ;
 }
 static method main() → dynamic {
-  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object*>().{self::C::trace});
-  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().{self::C::trace});
-  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().{self::C::trace});
-  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().{self::C::trace});
-  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().{self::C::trace});
+  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object*>().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().{self::C::trace}{core::String*});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.transformed.expect
index 4d8d5b4..3a642dd 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.transformed.expect
@@ -70,11 +70,11 @@
     ;
 }
 static method main() → dynamic {
-  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object*>().{self::C::trace});
-  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().{self::C::trace});
-  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().{self::C::trace});
-  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().{self::C::trace});
-  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().{self::C::trace});
+  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object*>().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().{self::C::trace}{core::String*});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.expect
index 4fd3d8d..eaf50de 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.expect
@@ -310,42 +310,42 @@
   self::testMixed();
 }
 static method testDirect() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Direct::•().{self::Direct::positional};
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Direct::•().{self::Direct::positional}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
   self::isTrue(positional is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
   self::isTrue(positional is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Direct::•().{self::Direct::optional};
+  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Direct::•().{self::Direct::optional}{([core::int*, core::int*, core::int*, core::int*]) →* void};
   self::isTrue(optional is ([core::int*, core::int*, core::int*, core::int*]) →* void);
   self::isTrue(optional is ([core::Object*, core::int*, core::Object*, core::int*]) →* void);
-  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Direct::•().{self::Direct::named};
+  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Direct::•().{self::Direct::named}{({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void};
   self::isTrue(named is ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void);
   self::isTrue(named is ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void);
 }
 static method testInherited() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Inherited::•().{self::Direct::positional};
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Inherited::•().{self::Direct::positional}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
   self::isTrue(positional is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
   self::isTrue(positional is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Inherited::•().{self::Direct::optional};
+  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Inherited::•().{self::Direct::optional}{([core::int*, core::int*, core::int*, core::int*]) →* void};
   self::isTrue(optional is ([core::int*, core::int*, core::int*, core::int*]) →* void);
   self::isTrue(optional is ([core::Object*, core::int*, core::Object*, core::int*]) →* void);
-  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Inherited::•().{self::Direct::named};
+  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Inherited::•().{self::Direct::named}{({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void};
   self::isTrue(named is ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void);
   self::isTrue(named is ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void);
 }
 static method testOverridden() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method2 = new self::Override2::•().{self::Override2::method};
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method2 = new self::Override2::•().{self::Override2::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
   self::isTrue(method2 is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
   self::isTrue(method2 is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method3 = new self::Override3::•().{self::Override3::method};
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method3 = new self::Override3::•().{self::Override3::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
   self::isTrue(method3 is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
   self::isTrue(method3 is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
 }
 static method testImplemented() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Implement5::•().{self::Implement5::method};
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Implement5::•().{self::Implement5::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
   self::isTrue(method is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
   self::isTrue(method is (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void);
 }
 static method testMixed() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Mixed::•().{self::Mixed::method};
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Mixed::•().{self::Mixed::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
   self::isTrue(method is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
   self::isTrue(method is (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void);
 }
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.transformed.expect
index bf43d45..00fb601 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.transformed.expect
@@ -306,42 +306,42 @@
   self::testMixed();
 }
 static method testDirect() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Direct::•().{self::Direct::positional};
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Direct::•().{self::Direct::positional}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
   self::isTrue(positional is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
   self::isTrue(positional is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Direct::•().{self::Direct::optional};
+  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Direct::•().{self::Direct::optional}{([core::int*, core::int*, core::int*, core::int*]) →* void};
   self::isTrue(optional is ([core::int*, core::int*, core::int*, core::int*]) →* void);
   self::isTrue(optional is ([core::Object*, core::int*, core::Object*, core::int*]) →* void);
-  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Direct::•().{self::Direct::named};
+  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Direct::•().{self::Direct::named}{({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void};
   self::isTrue(named is ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void);
   self::isTrue(named is ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void);
 }
 static method testInherited() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Inherited::•().{self::Direct::positional};
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Inherited::•().{self::Direct::positional}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
   self::isTrue(positional is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
   self::isTrue(positional is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Inherited::•().{self::Direct::optional};
+  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Inherited::•().{self::Direct::optional}{([core::int*, core::int*, core::int*, core::int*]) →* void};
   self::isTrue(optional is ([core::int*, core::int*, core::int*, core::int*]) →* void);
   self::isTrue(optional is ([core::Object*, core::int*, core::Object*, core::int*]) →* void);
-  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Inherited::•().{self::Direct::named};
+  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Inherited::•().{self::Direct::named}{({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void};
   self::isTrue(named is ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void);
   self::isTrue(named is ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void);
 }
 static method testOverridden() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method2 = new self::Override2::•().{self::Override2::method};
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method2 = new self::Override2::•().{self::Override2::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
   self::isTrue(method2 is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
   self::isTrue(method2 is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method3 = new self::Override3::•().{self::Override3::method};
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method3 = new self::Override3::•().{self::Override3::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
   self::isTrue(method3 is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
   self::isTrue(method3 is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
 }
 static method testImplemented() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Implement5::•().{self::Implement5::method};
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Implement5::•().{self::Implement5::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
   self::isTrue(method is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
   self::isTrue(method is (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void);
 }
 static method testMixed() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Mixed::•().{self::Mixed::method};
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Mixed::•().{self::Mixed::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
   self::isTrue(method is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
   self::isTrue(method is (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void);
 }
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.expect
index f6a8a4d..f97e4ab 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.expect
@@ -68,29 +68,29 @@
 }
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1));
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1));
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1));
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1));
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int*, core::num*) →* core::String*});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int*, core::int*) →* core::String*});
   self::Superclass* s = c;
-  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5));
-  self::throws(() → core::String* => s.{self::Superclass::method2}(0.5, 1.5));
-  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1));
-  self::throws(() → core::String* => s.{self::Superclass::method4}(0.5, 1));
-  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5));
+  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num*, core::num*) →* core::String*});
+  self::throws(() → core::String* => s.{self::Superclass::method2}(0.5, 1.5){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1){(core::num*, core::int*) →* core::String*});
+  self::throws(() → core::String* => s.{self::Superclass::method4}(0.5, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5){(core::num*, core::num*) →* core::String*});
   self::Mixin* m = c;
-  self::expect("Mixin", m.{self::Mixin::method1}(0, 1));
-  self::expect("Mixin", m.{self::Mixin::method2}(0, 1));
-  self::expect("Mixin", m.{self::Mixin::method3}(0, 1));
-  self::expect("Mixin", m.{self::Mixin::method4}(0, 1));
+  self::expect("Mixin", m.{self::Mixin::method1}(0, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", m.{self::Mixin::method2}(0, 1){(core::int*, core::num*) →* core::String*});
+  self::expect("Mixin", m.{self::Mixin::method3}(0, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", m.{self::Mixin::method4}(0, 1){(core::int*, core::int*) →* core::String*});
 }
 static method expect(dynamic expected, dynamic actual) → void {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() →* void f) → void {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic _) {
     return;
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.transformed.expect
index e1c8da2..9dafbb8 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.transformed.expect
@@ -68,29 +68,29 @@
 }
 static method main() → dynamic {
   self::Class* c = new self::Class::•();
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1));
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1));
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1));
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1));
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int*, core::num*) →* core::String*});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int*, core::int*) →* core::String*});
   self::Superclass* s = c;
-  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5));
-  self::throws(() → core::String* => s.{self::Superclass::method2}(0.5, 1.5));
-  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1));
-  self::throws(() → core::String* => s.{self::Superclass::method4}(0.5, 1));
-  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5));
+  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num*, core::num*) →* core::String*});
+  self::throws(() → core::String* => s.{self::Superclass::method2}(0.5, 1.5){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1){(core::num*, core::int*) →* core::String*});
+  self::throws(() → core::String* => s.{self::Superclass::method4}(0.5, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5){(core::num*, core::num*) →* core::String*});
   self::Mixin* m = c;
-  self::expect("Mixin", m.{self::Mixin::method1}(0, 1));
-  self::expect("Mixin", m.{self::Mixin::method2}(0, 1));
-  self::expect("Mixin", m.{self::Mixin::method3}(0, 1));
-  self::expect("Mixin", m.{self::Mixin::method4}(0, 1));
+  self::expect("Mixin", m.{self::Mixin::method1}(0, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", m.{self::Mixin::method2}(0, 1){(core::int*, core::num*) →* core::String*});
+  self::expect("Mixin", m.{self::Mixin::method3}(0, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", m.{self::Mixin::method4}(0, 1){(core::int*, core::int*) →* core::String*});
 }
 static method expect(dynamic expected, dynamic actual) → void {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() →* void f) → void {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic _) {
     return;
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.expect
index fce001a..3587556 100644
--- a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.expect
@@ -74,5 +74,5 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  foo.{self::_Foo&Object&C::foo}(new self::B::•());
+  foo.{self::_Foo&Object&C::foo}(new self::B::•()){(self::B*) →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.transformed.expect
index cd6518b..408bf4c 100644
--- a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.transformed.expect
@@ -72,5 +72,5 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  foo.{self::_Foo&Object&C::foo}(new self::B::•());
+  foo.{self::_Foo&Object&C::foo}(new self::B::•()){(self::B*) →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.expect
index 1a74047..32aae43 100644
--- a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.expect
@@ -131,12 +131,12 @@
     : super self::ClassEqMixinClass::•()
     ;
   method method() → dynamic {
-    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
-    this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}();
-    this.{self::ClassEqMixinClass::concreteMixin}();
-    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}();
-    this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}();
-    this.{self::ClassEqMixinClass::abstractMixin}();
+    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::concreteMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::abstractMixin}(){() →* void};
     super.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::ClassEqMixinClass::concreteMixin}();
@@ -148,12 +148,12 @@
     : super self::ClassExtendsMixinClass::•()
     ;
   method method() → dynamic {
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}();
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}();
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}();
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}();
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}(){() →* void};
     super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
@@ -165,12 +165,12 @@
     : super self::ClassEqMixin::•()
     ;
   method method() → dynamic {
-    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
-    this.{self::ClassEqMixin::concreteExtendsAbstractMixin}();
-    this.{self::ClassEqMixin::concreteMixin}();
-    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}();
-    this.{self::ClassEqMixin::abstractExtendsAbstractMixin}();
-    this.{self::ClassEqMixin::abstractMixin}();
+    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}(){() →* void};
+    this.{self::ClassEqMixin::concreteExtendsAbstractMixin}(){() →* void};
+    this.{self::ClassEqMixin::concreteMixin}(){() →* void};
+    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}(){() →* void};
+    this.{self::ClassEqMixin::abstractExtendsAbstractMixin}(){() →* void};
+    this.{self::ClassEqMixin::abstractMixin}(){() →* void};
     super.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::ClassEqMixin::concreteMixin}();
@@ -182,12 +182,12 @@
     : super self::ClassExtendsMixin::•()
     ;
   method method() → dynamic {
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}();
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}();
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}();
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}();
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}(){() →* void};
     super.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.transformed.expect
index 8493bcd..3b87509 100644
--- a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.transformed.expect
@@ -119,12 +119,12 @@
     : super self::ClassEqMixinClass::•()
     ;
   method method() → dynamic {
-    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
-    this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}();
-    this.{self::ClassEqMixinClass::concreteMixin}();
-    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}();
-    this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}();
-    this.{self::ClassEqMixinClass::abstractMixin}();
+    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::concreteMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::abstractMixin}(){() →* void};
     super.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::ClassEqMixinClass::concreteMixin}();
@@ -136,12 +136,12 @@
     : super self::ClassExtendsMixinClass::•()
     ;
   method method() → dynamic {
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}();
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}();
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}();
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}();
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}(){() →* void};
     super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
@@ -153,12 +153,12 @@
     : super self::ClassEqMixin::•()
     ;
   method method() → dynamic {
-    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
-    this.{self::ClassEqMixin::concreteExtendsAbstractMixin}();
-    this.{self::ClassEqMixin::concreteMixin}();
-    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}();
-    this.{self::ClassEqMixin::abstractExtendsAbstractMixin}();
-    this.{self::ClassEqMixin::abstractMixin}();
+    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}(){() →* void};
+    this.{self::ClassEqMixin::concreteExtendsAbstractMixin}(){() →* void};
+    this.{self::ClassEqMixin::concreteMixin}(){() →* void};
+    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}(){() →* void};
+    this.{self::ClassEqMixin::abstractExtendsAbstractMixin}(){() →* void};
+    this.{self::ClassEqMixin::abstractMixin}(){() →* void};
     super.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::ClassEqMixin::concreteMixin}();
@@ -170,12 +170,12 @@
     : super self::ClassExtendsMixin::•()
     ;
   method method() → dynamic {
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}();
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}();
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}();
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}();
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}(){() →* void};
     super.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect
index e9d4ae3..526ec74 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect
@@ -74,10 +74,10 @@
   self::Named* named = new self::Named::•();
   named.{self::Named::m} = 42;
   named.{self::_Named&S&M&N::superM} = 87;
-  if(!named.{self::Named::m}.{core::Object::==}(42)) {
+  if(!(named.{self::Named::m}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 42)) {
     throw "Bad mixin translation of set:superM";
   }
-  if(!named.{self::_Named&S&M&N::superM}.{core::Object::==}(87)) {
+  if(!(named.{self::_Named&S&M&N::superM}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 87)) {
     throw "Bad mixin translation of get:superM";
   }
 }
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect
index b86d9b1..e0aa9ba 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect
@@ -69,10 +69,10 @@
   self::Named* named = new self::Named::•();
   named.{self::Named::m} = 42;
   named.{self::_Named&S&M&N::superM} = 87;
-  if(!named.{self::Named::m}.{core::Object::==}(42)) {
+  if(!(named.{self::Named::m}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 42)) {
     throw "Bad mixin translation of set:superM";
   }
-  if(!named.{self::_Named&S&M&N::superM}.{core::Object::==}(87)) {
+  if(!(named.{self::_Named&S&M&N::superM}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 87)) {
     throw "Bad mixin translation of get:superM";
   }
 }
diff --git a/pkg/front_end/testcases/general/named_parameters.dart.weak.expect b/pkg/front_end/testcases/general/named_parameters.dart.weak.expect
index 1a4d59b..ad0b537 100644
--- a/pkg/front_end/testcases/general/named_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/general/named_parameters.dart.weak.expect
@@ -9,8 +9,8 @@
   method foo({dynamic alpha = #C1, dynamic beta = #C1}) → dynamic {}
   method bar({dynamic beta = #C1, dynamic alpha = #C1}) → dynamic {}
   method namedCallback(({alpha: core::String, beta: core::int}) → dynamic callback) → dynamic {
-    callback.call(alpha: "one", beta: 2);
-    callback.call(beta: 1, alpha: "two");
+    callback(alpha: "one", beta: 2){({alpha: core::String, beta: core::int}) → dynamic};
+    callback(beta: 1, alpha: "two"){({alpha: core::String, beta: core::int}) → dynamic};
   }
 }
 class Subclass extends self::Superclass {
@@ -24,8 +24,8 @@
 static method topLevelNamed(dynamic beta, dynamic alpha, {dynamic gamma = #C1, dynamic delta = #C1}) → dynamic {}
 static method topLevelOptional(dynamic beta, dynamic alpha, [dynamic gamma = #C1, dynamic delta = #C1]) → dynamic {}
 static method main() → dynamic {
-  new self::Subclass::•().{self::Subclass::foo}(beta: 1, alpha: 2);
-  new self::Subclass::•().{self::Subclass::foo}(alpha: 1, beta: 2);
+  new self::Subclass::•().{self::Subclass::foo}(beta: 1, alpha: 2){({alpha: dynamic, beta: dynamic}) → dynamic};
+  new self::Subclass::•().{self::Subclass::foo}(alpha: 1, beta: 2){({alpha: dynamic, beta: dynamic}) → dynamic};
   self::topLevelNamed(1, 2, gamma: 3, delta: 4);
   self::topLevelNamed(1, 2, delta: 3, gamma: 4);
 }
diff --git a/pkg/front_end/testcases/general/named_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/general/named_parameters.dart.weak.transformed.expect
index 1a4d59b..ad0b537 100644
--- a/pkg/front_end/testcases/general/named_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/named_parameters.dart.weak.transformed.expect
@@ -9,8 +9,8 @@
   method foo({dynamic alpha = #C1, dynamic beta = #C1}) → dynamic {}
   method bar({dynamic beta = #C1, dynamic alpha = #C1}) → dynamic {}
   method namedCallback(({alpha: core::String, beta: core::int}) → dynamic callback) → dynamic {
-    callback.call(alpha: "one", beta: 2);
-    callback.call(beta: 1, alpha: "two");
+    callback(alpha: "one", beta: 2){({alpha: core::String, beta: core::int}) → dynamic};
+    callback(beta: 1, alpha: "two"){({alpha: core::String, beta: core::int}) → dynamic};
   }
 }
 class Subclass extends self::Superclass {
@@ -24,8 +24,8 @@
 static method topLevelNamed(dynamic beta, dynamic alpha, {dynamic gamma = #C1, dynamic delta = #C1}) → dynamic {}
 static method topLevelOptional(dynamic beta, dynamic alpha, [dynamic gamma = #C1, dynamic delta = #C1]) → dynamic {}
 static method main() → dynamic {
-  new self::Subclass::•().{self::Subclass::foo}(beta: 1, alpha: 2);
-  new self::Subclass::•().{self::Subclass::foo}(alpha: 1, beta: 2);
+  new self::Subclass::•().{self::Subclass::foo}(beta: 1, alpha: 2){({alpha: dynamic, beta: dynamic}) → dynamic};
+  new self::Subclass::•().{self::Subclass::foo}(alpha: 1, beta: 2){({alpha: dynamic, beta: dynamic}) → dynamic};
   self::topLevelNamed(1, 2, gamma: 3, delta: 4);
   self::topLevelNamed(1, 2, delta: 3, gamma: 4);
 }
diff --git a/pkg/front_end/testcases/general/native_as_name.dart.weak.expect b/pkg/front_end/testcases/general/native_as_name.dart.weak.expect
index 1262765..f85423d 100644
--- a/pkg/front_end/testcases/general/native_as_name.dart.weak.expect
+++ b/pkg/front_end/testcases/general/native_as_name.dart.weak.expect
@@ -78,12 +78,12 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::W::•().{self::W::native});
-  core::print(new self::X::•().{self::X::native}());
-  core::print(new self::Y2::•().{self::Y2::native});
+  core::print(new self::W::•().{self::W::native}{core::String*});
+  core::print(new self::X::•().{self::X::native}(){() →* core::String*});
+  core::print(new self::Y2::•().{self::Y2::native}{core::String*});
   core::print((let final self::Z* #t1 = new self::Z::•() in block {
     #t1.{self::Z::native} = "setter";
-  } =>#t1).{self::Z::f});
+  } =>#t1).{self::Z::f}{core::String*});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/native_as_name.dart.weak.transformed.expect b/pkg/front_end/testcases/general/native_as_name.dart.weak.transformed.expect
index 1262765..f85423d 100644
--- a/pkg/front_end/testcases/general/native_as_name.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/native_as_name.dart.weak.transformed.expect
@@ -78,12 +78,12 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::W::•().{self::W::native});
-  core::print(new self::X::•().{self::X::native}());
-  core::print(new self::Y2::•().{self::Y2::native});
+  core::print(new self::W::•().{self::W::native}{core::String*});
+  core::print(new self::X::•().{self::X::native}(){() →* core::String*});
+  core::print(new self::Y2::•().{self::Y2::native}{core::String*});
   core::print((let final self::Z* #t1 = new self::Z::•() in block {
     #t1.{self::Z::native} = "setter";
-  } =>#t1).{self::Z::f});
+  } =>#t1).{self::Z::f}{core::String*});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/nested_property_set.dart.weak.expect b/pkg/front_end/testcases/general/nested_property_set.dart.weak.expect
index 7283345..692bedb 100644
--- a/pkg/front_end/testcases/general/nested_property_set.dart.weak.expect
+++ b/pkg/front_end/testcases/general/nested_property_set.dart.weak.expect
@@ -55,11 +55,11 @@
   self::IntField* intField2 = new self::IntField::•();
   self::NumField* numField = new self::NumField::•();
   self::DoubleField* doubleField = new self::DoubleField::•();
-  intField1.{self::IntField::field} = (intField2.{self::IntField::field} = numField.{self::NumField::field} as{TypeError} core::int*) as{TypeError} core::int*;
-  intField1.{self::IntField::field} = numField.{self::NumField::field} = intField2.{self::IntField::field};
+  intField1.{self::IntField::field} = (intField2.{self::IntField::field} = numField.{self::NumField::field}{core::num*} as{TypeError} core::int*) as{TypeError} core::int*;
+  intField1.{self::IntField::field} = numField.{self::NumField::field} = intField2.{self::IntField::field}{core::int*};
   try {
     numField.{self::NumField::field} = 0.5;
-    intField1.{self::IntField::field} = (doubleField.{self::DoubleField::field} = numField.{self::NumField::field} as{TypeError} core::double*) as{TypeError} core::int*;
+    intField1.{self::IntField::field} = (doubleField.{self::DoubleField::field} = numField.{self::NumField::field}{core::num*} as{TypeError} core::double*) as{TypeError} core::int*;
     throw "Should fail";
   }
   on dynamic catch(final dynamic _) {
diff --git a/pkg/front_end/testcases/general/nested_property_set.dart.weak.transformed.expect b/pkg/front_end/testcases/general/nested_property_set.dart.weak.transformed.expect
index 61ef9de..d3d7620 100644
--- a/pkg/front_end/testcases/general/nested_property_set.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/nested_property_set.dart.weak.transformed.expect
@@ -55,11 +55,11 @@
   self::IntField* intField2 = new self::IntField::•();
   self::NumField* numField = new self::NumField::•();
   self::DoubleField* doubleField = new self::DoubleField::•();
-  intField1.{self::IntField::field} = intField2.{self::IntField::field} = numField.{self::NumField::field} as{TypeError} core::int*;
-  intField1.{self::IntField::field} = numField.{self::NumField::field} = intField2.{self::IntField::field};
+  intField1.{self::IntField::field} = intField2.{self::IntField::field} = numField.{self::NumField::field}{core::num*} as{TypeError} core::int*;
+  intField1.{self::IntField::field} = numField.{self::NumField::field} = intField2.{self::IntField::field}{core::int*};
   try {
     numField.{self::NumField::field} = 0.5;
-    intField1.{self::IntField::field} = (doubleField.{self::DoubleField::field} = numField.{self::NumField::field} as{TypeError} core::double*) as{TypeError} core::int*;
+    intField1.{self::IntField::field} = (doubleField.{self::DoubleField::field} = numField.{self::NumField::field}{core::num*} as{TypeError} core::double*) as{TypeError} core::int*;
     throw "Should fail";
   }
   on dynamic catch(final dynamic _) {
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.expect
index a1bc0ad..e2b0f2d 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.expect
@@ -11,7 +11,7 @@
     core::print("hello");
   }
   method foo() → void
-    return this.{self::X::_foo}();
+    return this.{self::X::_foo}(){() →* void};
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -40,13 +40,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* void};
   no-such-method-forwarder method foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* void};
 }
 static method main() → dynamic {
   self::Y* y = new self::Y::•();
-  y.{self::X::foo}();
+  y.{self::X::foo}(){() →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect
index ac5db6a..9be8c51 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect
@@ -35,9 +35,9 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#_foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#_foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* void};
   no-such-method-forwarder method foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* void};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
index 72d4454..be2cc3e 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
@@ -38,7 +38,7 @@
     return :async_future;
   }
   method foo() → void
-    return this.{self::X::_foo}();
+    return this.{self::X::_foo}(){() →* void};
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -67,13 +67,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* void};
   no-such-method-forwarder method foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* void};
 }
 static method main() → dynamic {
   self::Y* y = new self::Y::•();
-  y.{self::X::foo}();
+  y.{self::X::foo}(){() →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.expect
index ddb32d6..6728bd2 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.expect
@@ -20,9 +20,9 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {
   no_::baz(new self::Foo::•());
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.outline.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.outline.expect
index 14a8225..d5c3d92 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.outline.expect
@@ -19,9 +19,9 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.transformed.expect
index 3e79735..79287b9 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.transformed.expect
@@ -20,9 +20,9 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {
   no_::baz(new self::Foo::•());
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.expect
index 2f9cd4a..5e6241d 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.expect
@@ -22,35 +22,35 @@
     : self::C::field1 = field1, self::C::field2 = () → self::C::T* => field1, self::C::field3 = (self::C::T* t) → Null {}, self::C::field4 = (self::C::T* t) → self::C::T* => t, self::C::field5 = () → () →* self::C::T* => () → self::C::T* => field1, self::C::field6 = (() →* self::C::T* f) → Null {}, self::C::field7 = (() →* self::C::T* f) → self::C::T* => field1, self::C::field8 = ((self::C::T*) →* void f) → Null {}, self::C::field9 = ((self::C::T*) →* void f) → self::C::T* => field1, self::C::field10 = ((self::C::T*) →* self::C::T* f) → Null {}, self::C::field11 = ((self::C::T*) →* self::C::T* f) → self::C::T* => field1, self::C::field12 = <S extends self::C::T*>() → Null => null, self::C::field13 = <S extends self::C::T*>(S* s) → Null {}, self::C::field14 = <S extends self::C::T*>(S* s) → S* => s, self::C::field15 = (<S extends self::C::T*>() →* S* f) → Null {}, super core::Object::•()
     ;
   get getter1() → self::C::T*
-    return this.{self::C::field1};
+    return this.{self::C::field1}{self::C::T*};
   get getter2() → () →* self::C::T*
-    return this.{self::C::field2};
+    return this.{self::C::field2}{() →* self::C::T*};
   get getter3() → (self::C::T*) →* void
-    return this.{self::C::field3};
+    return this.{self::C::field3}{(self::C::T*) →* void};
   get getter4() → (self::C::T*) →* self::C::T*
-    return this.{self::C::field4};
+    return this.{self::C::field4}{(self::C::T*) →* self::C::T*};
   get getter5() → () →* () →* self::C::T*
-    return this.{self::C::field5};
+    return this.{self::C::field5}{() →* () →* self::C::T*};
   get getter6() → (() →* self::C::T*) →* void
-    return this.{self::C::field6};
+    return this.{self::C::field6}{(() →* self::C::T*) →* void};
   get getter7() → (() →* self::C::T*) →* self::C::T*
-    return this.{self::C::field7};
+    return this.{self::C::field7}{(() →* self::C::T*) →* self::C::T*};
   get getter8() → ((self::C::T*) →* void) →* void
-    return this.{self::C::field8};
+    return this.{self::C::field8}{((self::C::T*) →* void) →* void};
   get getter9() → ((self::C::T*) →* void) →* self::C::T*
-    return this.{self::C::field9};
+    return this.{self::C::field9}{((self::C::T*) →* void) →* self::C::T*};
   get getter10() → ((self::C::T*) →* self::C::T*) →* void
-    return this.{self::C::field10};
+    return this.{self::C::field10}{((self::C::T*) →* self::C::T*) →* void};
   get getter11() → ((self::C::T*) →* self::C::T*) →* self::C::T*
-    return this.{self::C::field11};
+    return this.{self::C::field11}{((self::C::T*) →* self::C::T*) →* self::C::T*};
   get getter12() → <S extends self::C::T* = dynamic>() →* S*
-    return this.{self::C::field12};
+    return this.{self::C::field12}{<S extends self::C::T* = dynamic>() →* S*};
   get getter13() → <S extends self::C::T* = dynamic>(S*) →* void
-    return this.{self::C::field13};
+    return this.{self::C::field13}{<S extends self::C::T* = dynamic>(S*) →* void};
   get getter14() → <S extends self::C::T* = dynamic>(S*) →* S*
-    return this.{self::C::field14};
+    return this.{self::C::field14}{<S extends self::C::T* = dynamic>(S*) →* S*};
   get getter15() → (<S extends self::C::T* = dynamic>() →* S*) →* void
-    return this.{self::C::field15};
+    return this.{self::C::field15}{(<S extends self::C::T* = dynamic>() →* S*) →* void};
   set setter1(generic-covariant-impl self::C::T* value) → void {
     this.{self::C::field1} = value;
   }
@@ -154,151 +154,151 @@
 }
 static method main() → dynamic {
   self::C<core::num*>* c = new self::C::•<core::int*>(0);
-  c.{self::C::field1};
-  c.{self::C::field2};
+  c.{self::C::field1}{core::num*};
+  c.{self::C::field2}{() →* core::num*};
   try {
-    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    c.{self::C::field3}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
+    c.{self::C::field4}{(core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::field5};
+  c.{self::C::field5}{() →* () →* core::num*};
   try {
-    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
+    c.{self::C::field6}{(() →* core::num*) →* void} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
+    c.{self::C::field7}{(() →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::field8};
-  c.{self::C::field9};
+  c.{self::C::field8}{((core::num*) →* void) →* void};
+  c.{self::C::field9}{((core::num*) →* void) →* core::num*};
   try {
-    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10}{((core::num*) →* core::num*) →* void} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11}{((core::num*) →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12}{<S extends core::num* = dynamic>() →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13}{<S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14}{<S extends core::num* = dynamic>(S*) →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15}{(<S extends core::num* = dynamic>() →* S*) →* void} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::getter1};
-  c.{self::C::getter2};
+  c.{self::C::getter1}{core::num*};
+  c.{self::C::getter2}{() →* core::num*};
   try {
-    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    c.{self::C::getter3}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
+    c.{self::C::getter4}{(core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::getter5};
+  c.{self::C::getter5}{() →* () →* core::num*};
   try {
-    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
+    c.{self::C::getter6}{(() →* core::num*) →* void} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7}{(() →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::getter8};
-  c.{self::C::getter9};
+  c.{self::C::getter8}{((core::num*) →* void) →* void};
+  c.{self::C::getter9}{((core::num*) →* void) →* core::num*};
   try {
-    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10}{((core::num*) →* core::num*) →* void} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11}{((core::num*) →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12}{<S extends core::num* = dynamic>() →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13}{<S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14}{<S extends core::num* = dynamic>(S*) →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15}{(<S extends core::num* = dynamic>() →* S*) →* void} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -398,93 +398,93 @@
     core::print(e);
   }
   try {
-    c.{self::C::method1}(0.5);
+    c.{self::C::method1}(0.5){(core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method2}(() → core::double* => 0.5);
+    c.{self::C::method2}(() → core::double* => 0.5){(() →* core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::method3}((core::num* n) → Null {});
+  c.{self::C::method3}((core::num* n) → Null {}){((core::num*) →* void) →* void};
   try {
-    c.{self::C::method4}((core::num* n) → core::double* => 0.5);
+    c.{self::C::method4}((core::num* n) → core::double* => 0.5){((core::num*) →* core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method5}(() → () →* core::double* => () → core::double* => 0.5);
+    c.{self::C::method5}(() → () →* core::double* => () → core::double* => 0.5){(() →* () →* core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::method6}((() →* core::num* f) → Null {});
+  c.{self::C::method6}((() →* core::num* f) → Null {}){((() →* core::num*) →* void) →* void};
   try {
-    c.{self::C::method7}((() →* core::num* f) → core::double* => 0.5);
+    c.{self::C::method7}((() →* core::num* f) → core::double* => 0.5){((() →* core::num*) →* core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method8}(((core::double*) →* void f) → Null {});
+    c.{self::C::method8}(((core::double*) →* void f) → Null {}){(((core::num*) →* void) →* void) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method9}(((core::double*) →* void f) → core::double* => 0.5);
+    c.{self::C::method9}(((core::double*) →* void f) → core::double* => 0.5){(((core::num*) →* void) →* core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method10}(((core::double*) →* core::num* f) → Null {});
+    c.{self::C::method10}(((core::double*) →* core::num* f) → Null {}){(((core::num*) →* core::num*) →* void) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method11}(((core::double*) →* core::num* f) → core::double* => 0.5);
+    c.{self::C::method11}(((core::double*) →* core::num* f) → core::double* => 0.5){(((core::num*) →* core::num*) →* core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method12}(<S extends core::num*>() → Null => null);
+    c.{self::C::method12}(<S extends core::num*>() → Null => null){(<S extends core::num* = dynamic>() →* S*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method13}(<S extends core::num*>(S* s) → Null {});
+    c.{self::C::method13}(<S extends core::num*>(S* s) → Null {}){(<S extends core::num* = dynamic>(S*) →* void) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method14}(<S extends core::num*>(S* s) → S* => s);
+    c.{self::C::method14}(<S extends core::num*>(S* s) → S* => s){(<S extends core::num* = dynamic>(S*) →* S*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method15}((<S extends core::num*>() →* S* f) → Null {});
+    c.{self::C::method15}((<S extends core::num*>() →* S* f) → Null {}){((<S extends core::num* = dynamic>() →* S*) →* void) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.transformed.expect
index 2f9cd4a..5e6241d 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.transformed.expect
@@ -22,35 +22,35 @@
     : self::C::field1 = field1, self::C::field2 = () → self::C::T* => field1, self::C::field3 = (self::C::T* t) → Null {}, self::C::field4 = (self::C::T* t) → self::C::T* => t, self::C::field5 = () → () →* self::C::T* => () → self::C::T* => field1, self::C::field6 = (() →* self::C::T* f) → Null {}, self::C::field7 = (() →* self::C::T* f) → self::C::T* => field1, self::C::field8 = ((self::C::T*) →* void f) → Null {}, self::C::field9 = ((self::C::T*) →* void f) → self::C::T* => field1, self::C::field10 = ((self::C::T*) →* self::C::T* f) → Null {}, self::C::field11 = ((self::C::T*) →* self::C::T* f) → self::C::T* => field1, self::C::field12 = <S extends self::C::T*>() → Null => null, self::C::field13 = <S extends self::C::T*>(S* s) → Null {}, self::C::field14 = <S extends self::C::T*>(S* s) → S* => s, self::C::field15 = (<S extends self::C::T*>() →* S* f) → Null {}, super core::Object::•()
     ;
   get getter1() → self::C::T*
-    return this.{self::C::field1};
+    return this.{self::C::field1}{self::C::T*};
   get getter2() → () →* self::C::T*
-    return this.{self::C::field2};
+    return this.{self::C::field2}{() →* self::C::T*};
   get getter3() → (self::C::T*) →* void
-    return this.{self::C::field3};
+    return this.{self::C::field3}{(self::C::T*) →* void};
   get getter4() → (self::C::T*) →* self::C::T*
-    return this.{self::C::field4};
+    return this.{self::C::field4}{(self::C::T*) →* self::C::T*};
   get getter5() → () →* () →* self::C::T*
-    return this.{self::C::field5};
+    return this.{self::C::field5}{() →* () →* self::C::T*};
   get getter6() → (() →* self::C::T*) →* void
-    return this.{self::C::field6};
+    return this.{self::C::field6}{(() →* self::C::T*) →* void};
   get getter7() → (() →* self::C::T*) →* self::C::T*
-    return this.{self::C::field7};
+    return this.{self::C::field7}{(() →* self::C::T*) →* self::C::T*};
   get getter8() → ((self::C::T*) →* void) →* void
-    return this.{self::C::field8};
+    return this.{self::C::field8}{((self::C::T*) →* void) →* void};
   get getter9() → ((self::C::T*) →* void) →* self::C::T*
-    return this.{self::C::field9};
+    return this.{self::C::field9}{((self::C::T*) →* void) →* self::C::T*};
   get getter10() → ((self::C::T*) →* self::C::T*) →* void
-    return this.{self::C::field10};
+    return this.{self::C::field10}{((self::C::T*) →* self::C::T*) →* void};
   get getter11() → ((self::C::T*) →* self::C::T*) →* self::C::T*
-    return this.{self::C::field11};
+    return this.{self::C::field11}{((self::C::T*) →* self::C::T*) →* self::C::T*};
   get getter12() → <S extends self::C::T* = dynamic>() →* S*
-    return this.{self::C::field12};
+    return this.{self::C::field12}{<S extends self::C::T* = dynamic>() →* S*};
   get getter13() → <S extends self::C::T* = dynamic>(S*) →* void
-    return this.{self::C::field13};
+    return this.{self::C::field13}{<S extends self::C::T* = dynamic>(S*) →* void};
   get getter14() → <S extends self::C::T* = dynamic>(S*) →* S*
-    return this.{self::C::field14};
+    return this.{self::C::field14}{<S extends self::C::T* = dynamic>(S*) →* S*};
   get getter15() → (<S extends self::C::T* = dynamic>() →* S*) →* void
-    return this.{self::C::field15};
+    return this.{self::C::field15}{(<S extends self::C::T* = dynamic>() →* S*) →* void};
   set setter1(generic-covariant-impl self::C::T* value) → void {
     this.{self::C::field1} = value;
   }
@@ -154,151 +154,151 @@
 }
 static method main() → dynamic {
   self::C<core::num*>* c = new self::C::•<core::int*>(0);
-  c.{self::C::field1};
-  c.{self::C::field2};
+  c.{self::C::field1}{core::num*};
+  c.{self::C::field2}{() →* core::num*};
   try {
-    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    c.{self::C::field3}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
+    c.{self::C::field4}{(core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::field5};
+  c.{self::C::field5}{() →* () →* core::num*};
   try {
-    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
+    c.{self::C::field6}{(() →* core::num*) →* void} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
+    c.{self::C::field7}{(() →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::field8};
-  c.{self::C::field9};
+  c.{self::C::field8}{((core::num*) →* void) →* void};
+  c.{self::C::field9}{((core::num*) →* void) →* core::num*};
   try {
-    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10}{((core::num*) →* core::num*) →* void} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11}{((core::num*) →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12}{<S extends core::num* = dynamic>() →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13}{<S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14}{<S extends core::num* = dynamic>(S*) →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15}{(<S extends core::num* = dynamic>() →* S*) →* void} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::getter1};
-  c.{self::C::getter2};
+  c.{self::C::getter1}{core::num*};
+  c.{self::C::getter2}{() →* core::num*};
   try {
-    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    c.{self::C::getter3}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
+    c.{self::C::getter4}{(core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::getter5};
+  c.{self::C::getter5}{() →* () →* core::num*};
   try {
-    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
+    c.{self::C::getter6}{(() →* core::num*) →* void} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7}{(() →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::getter8};
-  c.{self::C::getter9};
+  c.{self::C::getter8}{((core::num*) →* void) →* void};
+  c.{self::C::getter9}{((core::num*) →* void) →* core::num*};
   try {
-    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10}{((core::num*) →* core::num*) →* void} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11}{((core::num*) →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12}{<S extends core::num* = dynamic>() →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13}{<S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14}{<S extends core::num* = dynamic>(S*) →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15}{(<S extends core::num* = dynamic>() →* S*) →* void} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -398,93 +398,93 @@
     core::print(e);
   }
   try {
-    c.{self::C::method1}(0.5);
+    c.{self::C::method1}(0.5){(core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method2}(() → core::double* => 0.5);
+    c.{self::C::method2}(() → core::double* => 0.5){(() →* core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::method3}((core::num* n) → Null {});
+  c.{self::C::method3}((core::num* n) → Null {}){((core::num*) →* void) →* void};
   try {
-    c.{self::C::method4}((core::num* n) → core::double* => 0.5);
+    c.{self::C::method4}((core::num* n) → core::double* => 0.5){((core::num*) →* core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method5}(() → () →* core::double* => () → core::double* => 0.5);
+    c.{self::C::method5}(() → () →* core::double* => () → core::double* => 0.5){(() →* () →* core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
-  c.{self::C::method6}((() →* core::num* f) → Null {});
+  c.{self::C::method6}((() →* core::num* f) → Null {}){((() →* core::num*) →* void) →* void};
   try {
-    c.{self::C::method7}((() →* core::num* f) → core::double* => 0.5);
+    c.{self::C::method7}((() →* core::num* f) → core::double* => 0.5){((() →* core::num*) →* core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method8}(((core::double*) →* void f) → Null {});
+    c.{self::C::method8}(((core::double*) →* void f) → Null {}){(((core::num*) →* void) →* void) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method9}(((core::double*) →* void f) → core::double* => 0.5);
+    c.{self::C::method9}(((core::double*) →* void f) → core::double* => 0.5){(((core::num*) →* void) →* core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method10}(((core::double*) →* core::num* f) → Null {});
+    c.{self::C::method10}(((core::double*) →* core::num* f) → Null {}){(((core::num*) →* core::num*) →* void) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method11}(((core::double*) →* core::num* f) → core::double* => 0.5);
+    c.{self::C::method11}(((core::double*) →* core::num* f) → core::double* => 0.5){(((core::num*) →* core::num*) →* core::num*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method12}(<S extends core::num*>() → Null => null);
+    c.{self::C::method12}(<S extends core::num*>() → Null => null){(<S extends core::num* = dynamic>() →* S*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method13}(<S extends core::num*>(S* s) → Null {});
+    c.{self::C::method13}(<S extends core::num*>(S* s) → Null {}){(<S extends core::num* = dynamic>(S*) →* void) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method14}(<S extends core::num*>(S* s) → S* => s);
+    c.{self::C::method14}(<S extends core::num*>(S* s) → S* => s){(<S extends core::num* = dynamic>(S*) →* S*) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::method15}((<S extends core::num*>() →* S* f) → Null {});
+    c.{self::C::method15}((<S extends core::num*>() →* S* f) → Null {}){((<S extends core::num* = dynamic>() →* S*) →* void) →* void};
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect
index ee2b26a..7f2d6c50 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect
@@ -60,13 +60,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → self::D4*
@@ -85,13 +85,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
@@ -192,13 +192,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → nsm::C4*
@@ -217,13 +217,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
index 0376936..e07accc 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
@@ -57,13 +57,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d})));
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b})));
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation*) →* dynamic};
 }
 class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → self::D4*
@@ -81,13 +81,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d})));
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b})));
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
@@ -184,13 +184,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d})));
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b})));
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation*) →* dynamic};
 }
 class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → nsm::C4*
@@ -208,13 +208,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d})));
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b})));
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation*) →* dynamic};
 }
 
 
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect
index 63f9b2e..e66febb 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect
@@ -60,13 +60,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → self::D4*
@@ -85,13 +85,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
@@ -192,13 +192,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → nsm::C4*
@@ -217,13 +217,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/null_aware.dart.weak.expect b/pkg/front_end/testcases/general/null_aware.dart.weak.expect
index 6cfab2a..6e39869 100644
--- a/pkg/front_end/testcases/general/null_aware.dart.weak.expect
+++ b/pkg/front_end/testcases/general/null_aware.dart.weak.expect
@@ -21,12 +21,12 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  let final self::Foo* #t1 = foo in #t1.{self::Foo::==}(null) ?{core::int*} null : #t1.{self::Foo::field} = 5;
+  let final self::Foo* #t1 = foo in #t1 == null ?{core::int*} null : #t1.{self::Foo::field} = 5;
   self::Foo::staticField = 5;
-  let final self::Foo* #t2 = foo in #t2.{self::Foo::field}.{core::num::==}(null) ?{core::int*} #t2.{self::Foo::field} = 5 : null;
-  self::Foo::staticField.{core::num::==}(null) ?{core::int*} self::Foo::staticField = 5 : null;
-  let final self::Foo* #t3 = foo in #t3.{self::Foo::==}(null) ?{core::int*} null : #t3.{self::Foo::field}.{core::num::==}(null) ?{core::int*} #t3.{self::Foo::field} = 5 : null;
-  self::Foo::staticField.{core::num::==}(null) ?{core::int*} self::Foo::staticField = 5 : null;
-  core::int* intValue = let final core::int* #t4 = foo.{self::Foo::field} in #t4.{core::num::==}(null) ?{core::int*} 6 : #t4;
-  core::num* numValue = let final core::int* #t5 = foo.{self::Foo::field} in #t5.{core::num::==}(null) ?{core::num*} 4.5 : #t5;
+  let final self::Foo* #t2 = foo in #t2.{self::Foo::field}{core::int*} == null ?{core::int*} #t2.{self::Foo::field} = 5 : null;
+  self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 5 : null;
+  let final self::Foo* #t3 = foo in #t3 == null ?{core::int*} null : #t3.{self::Foo::field}{core::int*} == null ?{core::int*} #t3.{self::Foo::field} = 5 : null;
+  self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 5 : null;
+  core::int* intValue = let final core::int* #t4 = foo.{self::Foo::field}{core::int*} in #t4 == null ?{core::int*} 6 : #t4;
+  core::num* numValue = let final core::int* #t5 = foo.{self::Foo::field}{core::int*} in #t5 == null ?{core::num*} 4.5 : #t5;
 }
diff --git a/pkg/front_end/testcases/general/null_aware.dart.weak.transformed.expect b/pkg/front_end/testcases/general/null_aware.dart.weak.transformed.expect
index 6cfab2a..6e39869 100644
--- a/pkg/front_end/testcases/general/null_aware.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/null_aware.dart.weak.transformed.expect
@@ -21,12 +21,12 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  let final self::Foo* #t1 = foo in #t1.{self::Foo::==}(null) ?{core::int*} null : #t1.{self::Foo::field} = 5;
+  let final self::Foo* #t1 = foo in #t1 == null ?{core::int*} null : #t1.{self::Foo::field} = 5;
   self::Foo::staticField = 5;
-  let final self::Foo* #t2 = foo in #t2.{self::Foo::field}.{core::num::==}(null) ?{core::int*} #t2.{self::Foo::field} = 5 : null;
-  self::Foo::staticField.{core::num::==}(null) ?{core::int*} self::Foo::staticField = 5 : null;
-  let final self::Foo* #t3 = foo in #t3.{self::Foo::==}(null) ?{core::int*} null : #t3.{self::Foo::field}.{core::num::==}(null) ?{core::int*} #t3.{self::Foo::field} = 5 : null;
-  self::Foo::staticField.{core::num::==}(null) ?{core::int*} self::Foo::staticField = 5 : null;
-  core::int* intValue = let final core::int* #t4 = foo.{self::Foo::field} in #t4.{core::num::==}(null) ?{core::int*} 6 : #t4;
-  core::num* numValue = let final core::int* #t5 = foo.{self::Foo::field} in #t5.{core::num::==}(null) ?{core::num*} 4.5 : #t5;
+  let final self::Foo* #t2 = foo in #t2.{self::Foo::field}{core::int*} == null ?{core::int*} #t2.{self::Foo::field} = 5 : null;
+  self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 5 : null;
+  let final self::Foo* #t3 = foo in #t3 == null ?{core::int*} null : #t3.{self::Foo::field}{core::int*} == null ?{core::int*} #t3.{self::Foo::field} = 5 : null;
+  self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 5 : null;
+  core::int* intValue = let final core::int* #t4 = foo.{self::Foo::field}{core::int*} in #t4 == null ?{core::int*} 6 : #t4;
+  core::num* numValue = let final core::int* #t5 = foo.{self::Foo::field}{core::int*} in #t5 == null ?{core::num*} 4.5 : #t5;
 }
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.expect
index 2c4a16c..46f5652 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.expect
@@ -20,7 +20,7 @@
 static method main() → dynamic {
   dynamic o;
   if(false) {
-    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2 == null ?{dynamic} null : #t2{dynamic}.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       self::Class* c = #t1 as{TypeError,ForDynamic} self::Class*;
     }
   }
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.transformed.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.transformed.expect
index 8bd8e5e..dede444 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
   dynamic o;
   if(false) {
     {
-      core::Iterator<dynamic>* :sync-for-iterator = ((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = ((let final dynamic #t1 = o in #t1 == null ?{dynamic} null : #t1{dynamic}.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
diff --git a/pkg/front_end/testcases/general/null_aware_postfix.dart.weak.expect b/pkg/front_end/testcases/general/null_aware_postfix.dart.weak.expect
index e7859b1..b31646a 100644
--- a/pkg/front_end/testcases/general/null_aware_postfix.dart.weak.expect
+++ b/pkg/front_end/testcases/general/null_aware_postfix.dart.weak.expect
@@ -42,6 +42,6 @@
 }
 static method main() → dynamic {
   self::A* a;
-  let final self::A* #t1 = a in #t1.{self::A::==}(null) ?{self::B*} null : #t1.{self::A::b} = #t1.{self::A::b}.{self::B::+}(1);
-  self::C* c = (let final self::A* #t2 = a in #t2.{self::A::==}(null) ?{self::B*} null : let final self::B* #t3 = #t2.{self::A::b} in let final void #t4 = #t2.{self::A::b} = #t3.{self::B::+}(1) in #t3) as{TypeError} self::C*;
+  let final self::A* #t1 = a in #t1 == null ?{self::B*} null : #t1.{self::A::b} = #t1.{self::A::b}{self::B*}.{self::B::+}(1){(core::int*) →* self::C*};
+  self::C* c = (let final self::A* #t2 = a in #t2 == null ?{self::B*} null : let final self::B* #t3 = #t2.{self::A::b}{self::B*} in let final void #t4 = #t2.{self::A::b} = #t3.{self::B::+}(1){(core::int*) →* self::C*} in #t3) as{TypeError} self::C*;
 }
diff --git a/pkg/front_end/testcases/general/null_aware_postfix.dart.weak.transformed.expect b/pkg/front_end/testcases/general/null_aware_postfix.dart.weak.transformed.expect
index e7859b1..b31646a 100644
--- a/pkg/front_end/testcases/general/null_aware_postfix.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/null_aware_postfix.dart.weak.transformed.expect
@@ -42,6 +42,6 @@
 }
 static method main() → dynamic {
   self::A* a;
-  let final self::A* #t1 = a in #t1.{self::A::==}(null) ?{self::B*} null : #t1.{self::A::b} = #t1.{self::A::b}.{self::B::+}(1);
-  self::C* c = (let final self::A* #t2 = a in #t2.{self::A::==}(null) ?{self::B*} null : let final self::B* #t3 = #t2.{self::A::b} in let final void #t4 = #t2.{self::A::b} = #t3.{self::B::+}(1) in #t3) as{TypeError} self::C*;
+  let final self::A* #t1 = a in #t1 == null ?{self::B*} null : #t1.{self::A::b} = #t1.{self::A::b}{self::B*}.{self::B::+}(1){(core::int*) →* self::C*};
+  self::C* c = (let final self::A* #t2 = a in #t2 == null ?{self::B*} null : let final self::B* #t3 = #t2.{self::A::b}{self::B*} in let final void #t4 = #t2.{self::A::b} = #t3.{self::B::+}(1){(core::int*) →* self::C*} in #t3) as{TypeError} self::C*;
 }
diff --git a/pkg/front_end/testcases/general/null_aware_spread.dart.weak.expect b/pkg/front_end/testcases/general/null_aware_spread.dart.weak.expect
index 807a6b5..d64a199 100644
--- a/pkg/front_end/testcases/general/null_aware_spread.dart.weak.expect
+++ b/pkg/front_end/testcases/general/null_aware_spread.dart.weak.expect
@@ -7,27 +7,27 @@
   list = block {
     final core::List<core::String*>* #t1 = <core::String*>["foo"];
     final core::Iterable<core::String*>* #t2 = list;
-    if(!#t2.{core::Object::==}(null))
-      #t1.{core::List::addAll}{Invariant}(#t2);
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}(#t2){(core::Iterable<core::String*>*) →* void};
   } =>#t1;
 }
 static method nullAwareSetSpread(core::Set<core::String*>* set) → dynamic {
   set = block {
     final core::Set<core::String*>* #t3 = col::LinkedHashSet::•<core::String*>();
-    #t3.{core::Set::add}{Invariant}("foo");
+    #t3.{core::Set::add}("foo"){(core::String*) →* core::bool*};
     final core::Iterable<core::String*>* #t4 = set;
-    if(!#t4.{core::Object::==}(null))
-      #t3.{core::Set::addAll}{Invariant}(#t4);
+    if(!(#t4 == null))
+      #t3.{core::Set::addAll}(#t4){(core::Iterable<core::String*>*) →* void};
   } =>#t3;
 }
 static method nullAwareMapSpread(core::Map<core::int*, core::String*>* map) → dynamic {
   map = block {
     final core::Map<core::int*, core::String*>* #t5 = <core::int*, core::String*>{};
-    #t5.{core::Map::[]=}{Invariant}(0, "foo");
+    #t5.{core::Map::[]=}(0, "foo"){(core::int*, core::String*) →* void};
     final core::Map<core::int*, core::String*>* #t6 = map;
-    if(!#t6.{core::Object::==}(null))
-      for (final core::MapEntry<core::int*, core::String*>* #t7 in #t6.{core::Map::entries})
-        #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
+    if(!(#t6 == null))
+      for (final core::MapEntry<core::int*, core::String*>* #t7 in #t6.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
+        #t5.{core::Map::[]=}(#t7.{core::MapEntry::key}{core::int*}, #t7.{core::MapEntry::value}{core::String*}){(core::int*, core::String*) →* void};
   } =>#t5;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/null_aware_spread.dart.weak.transformed.expect b/pkg/front_end/testcases/general/null_aware_spread.dart.weak.transformed.expect
index 485db8b..137401e 100644
--- a/pkg/front_end/testcases/general/null_aware_spread.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/null_aware_spread.dart.weak.transformed.expect
@@ -7,29 +7,29 @@
   list = block {
     final core::List<core::String*>* #t1 = core::_GrowableList::_literal1<core::String*>("foo");
     final core::Iterable<core::String*>* #t2 = list;
-    if(!#t2.{core::Object::==}(null))
-      #t1.{core::List::addAll}{Invariant}(#t2);
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}(#t2){(core::Iterable<core::String*>*) →* void};
   } =>#t1;
 }
 static method nullAwareSetSpread(core::Set<core::String*>* set) → dynamic {
   set = block {
     final core::Set<core::String*>* #t3 = new col::_CompactLinkedHashSet::•<core::String*>();
-    #t3.{core::Set::add}{Invariant}("foo");
+    #t3.{core::Set::add}("foo"){(core::String*) →* core::bool*};
     final core::Iterable<core::String*>* #t4 = set;
-    if(!#t4.{core::Object::==}(null))
-      #t3.{core::Set::addAll}{Invariant}(#t4);
+    if(!(#t4 == null))
+      #t3.{core::Set::addAll}(#t4){(core::Iterable<core::String*>*) →* void};
   } =>#t3;
 }
 static method nullAwareMapSpread(core::Map<core::int*, core::String*>* map) → dynamic {
   map = block {
     final core::Map<core::int*, core::String*>* #t5 = <core::int*, core::String*>{};
-    #t5.{core::Map::[]=}{Invariant}(0, "foo");
+    #t5.{core::Map::[]=}(0, "foo"){(core::int*, core::String*) →* void};
     final core::Map<core::int*, core::String*>* #t6 = map;
-    if(!#t6.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int*, core::String*>>* :sync-for-iterator = #t6.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t6 == null)) {
+      core::Iterator<core::MapEntry<core::int*, core::String*>>* :sync-for-iterator = #t6.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int*, core::String*>* #t7 = :sync-for-iterator.{core::Iterator::current};
-        #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
+        #t5.{core::Map::[]=}(#t7.{core::MapEntry::key}{core::int*}, #t7.{core::MapEntry::value}{core::String*}){(core::int*, core::String*) →* void};
       }
     }
   } =>#t5;
diff --git a/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.expect b/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.expect
index 02008c5..bafec9d 100644
--- a/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.expect
@@ -14,14 +14,14 @@
     : self::Class::element = element, super core::Object::•()
     ;
   method setElement(generic-covariant-impl self::Class::E? element) → void {
-    if(!this.{self::Class::element}.{core::Object::==}(element)) {
+    if(!(this.{self::Class::element}{self::Class::E?} =={core::Object::==}{(core::Object) → core::bool} element)) {
       this.{self::Class::element} = element;
       core::Set<self::Element> elements = col::LinkedHashSet::•<self::Element>();
-      if(!element.{core::Object::==}(null)) {
-        elements.{core::Set::add}(element{self::Class::E% & self::Element /* '%' & '!' = '!' */});
+      if(!(element == null)) {
+        elements.{core::Set::add}(element{self::Class::E% & self::Element /* '%' & '!' = '!' */}){(self::Element) → core::bool};
       }
-      if(!this.{self::Class::element}.{core::Object::==}(null)) {
-        elements.{core::Set::add}(this.{self::Class::element}!);
+      if(!(this.{self::Class::element}{self::Class::E?} == null)) {
+        elements.{core::Set::add}(this.{self::Class::element}{self::Class::E?}!){(self::Element) → core::bool};
       }
     }
   }
diff --git a/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.transformed.expect
index c5d8066..89db16d 100644
--- a/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.transformed.expect
@@ -14,14 +14,14 @@
     : self::Class::element = element, super core::Object::•()
     ;
   method setElement(generic-covariant-impl self::Class::E? element) → void {
-    if(!this.{self::Class::element}.{core::Object::==}(element)) {
+    if(!(this.{self::Class::element}{self::Class::E?} =={core::Object::==}{(core::Object) → core::bool} element)) {
       this.{self::Class::element} = element;
       core::Set<self::Element> elements = new col::_CompactLinkedHashSet::•<self::Element>();
-      if(!element.{core::Object::==}(null)) {
-        elements.{core::Set::add}(element{self::Class::E% & self::Element /* '%' & '!' = '!' */});
+      if(!(element == null)) {
+        elements.{core::Set::add}(element{self::Class::E% & self::Element /* '%' & '!' = '!' */}){(self::Element) → core::bool};
       }
-      if(!this.{self::Class::element}.{core::Object::==}(null)) {
-        elements.{core::Set::add}(this.{self::Class::element}!);
+      if(!(this.{self::Class::element}{self::Class::E?} == null)) {
+        elements.{core::Set::add}(this.{self::Class::element}{self::Class::E?}!){(self::Element) → core::bool};
       }
     }
   }
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.expect
index 0f69d4e..882b6d8 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.expect
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.expect
@@ -242,7 +242,7 @@
 Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
             ^^");
-  core::print(foo.{self::Foo::==}(2));
+  core::print(foo =={self::Foo::==}{(dynamic) →* core::bool*} 2);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
@@ -321,46 +321,46 @@
   core::print(<invalid-type>[]);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:37:9: Error: This couldn't be parsed.
   print(>foo);
-        ^".>(foo));
+        ^"{dynamic}.>(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:38:9: Error: This couldn't be parsed.
   print(<=foo);
-        ^".<=(foo));
+        ^"{dynamic}.<=(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:39:9: Error: This couldn't be parsed.
   print(>=foo);
-        ^".>=(foo));
+        ^"{dynamic}.>=(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:40:9: Error: This couldn't be parsed.
   print(==foo);
-        ^".{core::Object::==}(foo));
+        ^" =={core::Object::==}{(core::Object*) →* core::bool*} foo);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:41:9: Error: This couldn't be parsed.
   print(+foo);
-        ^".+(foo));
+        ^"{dynamic}.+(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:42:9: Error: This couldn't be parsed.
   print(/foo);
-        ^"./(foo));
+        ^"{dynamic}./(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:43:9: Error: This couldn't be parsed.
   print(~/foo);
-        ^".~/(foo));
+        ^"{dynamic}.~/(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:44:9: Error: This couldn't be parsed.
   print(*foo);
-        ^".*(foo));
+        ^"{dynamic}.*(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:45:9: Error: This couldn't be parsed.
   print(%foo);
-        ^".%(foo));
+        ^"{dynamic}.%(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:46:9: Error: This couldn't be parsed.
   print(|foo);
-        ^".|(foo));
+        ^"{dynamic}.|(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:47:9: Error: This couldn't be parsed.
   print(^foo);
-        ^".^(foo));
+        ^"{dynamic}.^(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:48:9: Error: This couldn't be parsed.
   print(&foo);
-        ^".&(foo));
+        ^"{dynamic}.&(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:49:9: Error: This couldn't be parsed.
   print(<<foo);
-        ^".<<(foo));
+        ^"{dynamic}.<<(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:50:9: Error: This couldn't be parsed.
   print(>>foo);
-        ^".>>(foo));
+        ^"{dynamic}.>>(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:54:13: Error: '~' isn't a binary operator.
   print(foo ~ 2);
             ^");
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.transformed.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.transformed.expect
index 47a50d4..6908374 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.transformed.expect
@@ -242,7 +242,7 @@
 Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
             ^^");
-  core::print(foo.{self::Foo::==}(2));
+  core::print(foo =={self::Foo::==}{(dynamic) →* core::bool*} 2);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
@@ -321,46 +321,46 @@
   core::print(core::_GrowableList::•<invalid-type>(0));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:37:9: Error: This couldn't be parsed.
   print(>foo);
-        ^".>(foo));
+        ^"{dynamic}.>(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:38:9: Error: This couldn't be parsed.
   print(<=foo);
-        ^".<=(foo));
+        ^"{dynamic}.<=(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:39:9: Error: This couldn't be parsed.
   print(>=foo);
-        ^".>=(foo));
+        ^"{dynamic}.>=(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:40:9: Error: This couldn't be parsed.
   print(==foo);
-        ^".{core::Object::==}(foo));
+        ^" =={core::Object::==}{(core::Object*) →* core::bool*} foo);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:41:9: Error: This couldn't be parsed.
   print(+foo);
-        ^".+(foo));
+        ^"{dynamic}.+(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:42:9: Error: This couldn't be parsed.
   print(/foo);
-        ^"./(foo));
+        ^"{dynamic}./(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:43:9: Error: This couldn't be parsed.
   print(~/foo);
-        ^".~/(foo));
+        ^"{dynamic}.~/(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:44:9: Error: This couldn't be parsed.
   print(*foo);
-        ^".*(foo));
+        ^"{dynamic}.*(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:45:9: Error: This couldn't be parsed.
   print(%foo);
-        ^".%(foo));
+        ^"{dynamic}.%(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:46:9: Error: This couldn't be parsed.
   print(|foo);
-        ^".|(foo));
+        ^"{dynamic}.|(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:47:9: Error: This couldn't be parsed.
   print(^foo);
-        ^".^(foo));
+        ^"{dynamic}.^(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:48:9: Error: This couldn't be parsed.
   print(&foo);
-        ^".&(foo));
+        ^"{dynamic}.&(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:49:9: Error: This couldn't be parsed.
   print(<<foo);
-        ^".<<(foo));
+        ^"{dynamic}.<<(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:50:9: Error: This couldn't be parsed.
   print(>>foo);
-        ^".>>(foo));
+        ^"{dynamic}.>>(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:54:13: Error: '~' isn't a binary operator.
   print(foo ~ 2);
             ^");
diff --git a/pkg/front_end/testcases/general/operators.dart.weak.expect b/pkg/front_end/testcases/general/operators.dart.weak.expect
index edc56e5..8796e3d4 100644
--- a/pkg/front_end/testcases/general/operators.dart.weak.expect
+++ b/pkg/front_end/testcases/general/operators.dart.weak.expect
@@ -58,24 +58,24 @@
 static method main(dynamic arguments) → dynamic {
   self::Operators* a = new self::Operators::•();
   self::Operators* b = new self::Operators::•();
-  a.{self::Operators::+}(b);
-  a.{self::Operators::&}(b);
-  a.{self::Operators::~}();
-  a.{self::Operators::|}(b);
-  a.{self::Operators::^}(b);
-  a.{self::Operators::/}(b);
-  a.{self::Operators::==}(b);
-  a.{self::Operators::>}(b);
-  a.{self::Operators::>=}(b);
-  a.{self::Operators::[]}(0);
-  a.{self::Operators::[]=}(0, b);
-  a.{self::Operators::<<}(b);
-  a.{self::Operators::<}(b);
-  a.{self::Operators::<=}(b);
-  a.{self::Operators::*}(b);
-  a.{self::Operators::%}(b);
-  a.{self::Operators::>>}(b);
-  a.{self::Operators::-}(b);
-  a.{self::Operators::~/}(b);
-  a.{self::Operators::unary-}();
+  a.{self::Operators::+}(b){(dynamic) →* dynamic};
+  a.{self::Operators::&}(b){(dynamic) →* dynamic};
+  a.{self::Operators::~}(){() →* dynamic};
+  a.{self::Operators::|}(b){(dynamic) →* dynamic};
+  a.{self::Operators::^}(b){(dynamic) →* dynamic};
+  a.{self::Operators::/}(b){(dynamic) →* dynamic};
+  a =={self::Operators::==}{(dynamic) →* core::bool*} b;
+  a.{self::Operators::>}(b){(dynamic) →* dynamic};
+  a.{self::Operators::>=}(b){(dynamic) →* dynamic};
+  a.{self::Operators::[]}(0){(dynamic) →* dynamic};
+  a.{self::Operators::[]=}(0, b){(dynamic, dynamic) →* void};
+  a.{self::Operators::<<}(b){(dynamic) →* dynamic};
+  a.{self::Operators::<}(b){(dynamic) →* dynamic};
+  a.{self::Operators::<=}(b){(dynamic) →* dynamic};
+  a.{self::Operators::*}(b){(dynamic) →* dynamic};
+  a.{self::Operators::%}(b){(dynamic) →* dynamic};
+  a.{self::Operators::>>}(b){(dynamic) →* dynamic};
+  a.{self::Operators::-}(b){(dynamic) →* dynamic};
+  a.{self::Operators::~/}(b){(dynamic) →* dynamic};
+  a.{self::Operators::unary-}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/operators.dart.weak.transformed.expect b/pkg/front_end/testcases/general/operators.dart.weak.transformed.expect
index edc56e5..8796e3d4 100644
--- a/pkg/front_end/testcases/general/operators.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/operators.dart.weak.transformed.expect
@@ -58,24 +58,24 @@
 static method main(dynamic arguments) → dynamic {
   self::Operators* a = new self::Operators::•();
   self::Operators* b = new self::Operators::•();
-  a.{self::Operators::+}(b);
-  a.{self::Operators::&}(b);
-  a.{self::Operators::~}();
-  a.{self::Operators::|}(b);
-  a.{self::Operators::^}(b);
-  a.{self::Operators::/}(b);
-  a.{self::Operators::==}(b);
-  a.{self::Operators::>}(b);
-  a.{self::Operators::>=}(b);
-  a.{self::Operators::[]}(0);
-  a.{self::Operators::[]=}(0, b);
-  a.{self::Operators::<<}(b);
-  a.{self::Operators::<}(b);
-  a.{self::Operators::<=}(b);
-  a.{self::Operators::*}(b);
-  a.{self::Operators::%}(b);
-  a.{self::Operators::>>}(b);
-  a.{self::Operators::-}(b);
-  a.{self::Operators::~/}(b);
-  a.{self::Operators::unary-}();
+  a.{self::Operators::+}(b){(dynamic) →* dynamic};
+  a.{self::Operators::&}(b){(dynamic) →* dynamic};
+  a.{self::Operators::~}(){() →* dynamic};
+  a.{self::Operators::|}(b){(dynamic) →* dynamic};
+  a.{self::Operators::^}(b){(dynamic) →* dynamic};
+  a.{self::Operators::/}(b){(dynamic) →* dynamic};
+  a =={self::Operators::==}{(dynamic) →* core::bool*} b;
+  a.{self::Operators::>}(b){(dynamic) →* dynamic};
+  a.{self::Operators::>=}(b){(dynamic) →* dynamic};
+  a.{self::Operators::[]}(0){(dynamic) →* dynamic};
+  a.{self::Operators::[]=}(0, b){(dynamic, dynamic) →* void};
+  a.{self::Operators::<<}(b){(dynamic) →* dynamic};
+  a.{self::Operators::<}(b){(dynamic) →* dynamic};
+  a.{self::Operators::<=}(b){(dynamic) →* dynamic};
+  a.{self::Operators::*}(b){(dynamic) →* dynamic};
+  a.{self::Operators::%}(b){(dynamic) →* dynamic};
+  a.{self::Operators::>>}(b){(dynamic) →* dynamic};
+  a.{self::Operators::-}(b){(dynamic) →* dynamic};
+  a.{self::Operators::~/}(b){(dynamic) →* dynamic};
+  a.{self::Operators::unary-}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/optional.dart.weak.expect b/pkg/front_end/testcases/general/optional.dart.weak.expect
index 2641647..0c2ea45 100644
--- a/pkg/front_end/testcases/general/optional.dart.weak.expect
+++ b/pkg/front_end/testcases/general/optional.dart.weak.expect
@@ -111,34 +111,34 @@
 external static method createExternal() → self::External*;
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  dynamic string1 = foo.{self::Foo::method}(1);
-  dynamic string2 = foo.{self::Foo::method}(1, 2);
-  dynamic string3 = foo.{self::Foo::method}(1, 2, 3);
+  dynamic string1 = foo.{self::Foo::method}(1){(dynamic, [dynamic, dynamic]) →* dynamic};
+  dynamic string2 = foo.{self::Foo::method}(1, 2){(dynamic, [dynamic, dynamic]) →* dynamic};
+  dynamic string3 = foo.{self::Foo::method}(1, 2, 3){(dynamic, [dynamic, dynamic]) →* dynamic};
   self::External* extern = self::createExternal();
-  core::String* string4 = extern.{self::External::externalMethod}(1);
-  core::String* string5 = extern.{self::External::externalMethod}(1, 2);
-  core::String* string6 = extern.{self::External::externalMethod}(1, 2, 3);
-  extern.{self::External::listen}(new self::TestListener::•());
-  extern.{self::External::listen}(new self::ExtendedListener::•());
+  core::String* string4 = extern.{self::External::externalMethod}(1){(core::int*, [core::int*, core::int*]) →* core::String*};
+  core::String* string5 = extern.{self::External::externalMethod}(1, 2){(core::int*, [core::int*, core::int*]) →* core::String*};
+  core::String* string6 = extern.{self::External::externalMethod}(1, 2, 3){(core::int*, [core::int*, core::int*]) →* core::String*};
+  extern.{self::External::listen}(new self::TestListener::•()){(self::Listener*) →* void};
+  extern.{self::External::listen}(new self::ExtendedListener::•()){(self::Listener*) →* void};
   extern.{self::External::listen}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/general/optional.dart:47:21: Error: The argument type 'InvalidListener' can't be assigned to the parameter type 'Listener'.
  - 'InvalidListener' is from 'pkg/front_end/testcases/general/optional.dart'.
  - 'Listener' is from 'pkg/front_end/testcases/general/optional.dart'.
   extern.listen(new InvalidListener());
-                    ^" in new self::InvalidListener::•() as{TypeError} self::Listener*);
+                    ^" in new self::InvalidListener::•() as{TypeError} self::Listener*){(self::Listener*) →* void};
   invalid-type nothing1 = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/general/optional.dart:49:28: Error: Too few positional arguments: 1 required, 0 given.
   var nothing1 = foo.method();
-                           ^" in foo.{self::Foo::method}();
+                           ^" in foo.{self::Foo::method}{<inapplicable>}.(){() →* invalid-type};
   invalid-type nothing2 = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/general/optional.dart:50:28: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   var nothing2 = foo.method(1, 2, 3, 4);
-                           ^" in foo.{self::Foo::method}(1, 2, 3, 4);
+                           ^" in foo.{self::Foo::method}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
   invalid-type nothing3 = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/general/optional.dart:51:39: Error: Too few positional arguments: 1 required, 0 given.
   var nothing3 = extern.externalMethod();
-                                      ^" in extern.{self::External::externalMethod}();
+                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(){() →* invalid-type};
   invalid-type nothing4 = let final Never* #t5 = invalid-expression "pkg/front_end/testcases/general/optional.dart:52:39: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   var nothing4 = extern.externalMethod(1, 2, 3, 4);
-                                      ^" in extern.{self::External::externalMethod}(1, 2, 3, 4);
+                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/override.dart.weak.expect b/pkg/front_end/testcases/general/override.dart.weak.expect
index a968ece..2ce1243 100644
--- a/pkg/front_end/testcases/general/override.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override.dart.weak.expect
@@ -49,7 +49,7 @@
   }
 }
 static method main(core::List<core::String*>* args) → dynamic {
-  self::Base* object = args.{core::List::length}.{core::num::==}(0) ?{self::Base*} new self::Base::•() : new self::Sub::•();
-  self::Foo* a = object.{self::Base::method}();
+  self::Base* object = args.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Base*} new self::Base::•() : new self::Sub::•();
+  self::Foo* a = object.{self::Base::method}(){() →* self::Foo*};
   core::print(a);
 }
diff --git a/pkg/front_end/testcases/general/override.dart.weak.transformed.expect b/pkg/front_end/testcases/general/override.dart.weak.transformed.expect
index a968ece..2ce1243 100644
--- a/pkg/front_end/testcases/general/override.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/override.dart.weak.transformed.expect
@@ -49,7 +49,7 @@
   }
 }
 static method main(core::List<core::String*>* args) → dynamic {
-  self::Base* object = args.{core::List::length}.{core::num::==}(0) ?{self::Base*} new self::Base::•() : new self::Sub::•();
-  self::Foo* a = object.{self::Base::method}();
+  self::Base* object = args.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Base*} new self::Base::•() : new self::Sub::•();
+  self::Foo* a = object.{self::Base::method}(){() →* self::Foo*};
   core::print(a);
 }
diff --git a/pkg/front_end/testcases/general/private_members.dart.weak.expect b/pkg/front_end/testcases/general/private_members.dart.weak.expect
index ce24406..7320fdc 100644
--- a/pkg/front_end/testcases/general/private_members.dart.weak.expect
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.expect
@@ -35,17 +35,17 @@
 static field core::int _Extension|_privateField = 1 /* from org-dartlang-testcase:///private_members_part.dart */;
 static field core::int _Extension|_privateFinalField = 1 /* from org-dartlang-testcase:///private_members_part.dart */;
 static method test(self::_AbstractClass c) → dynamic {
-  c.{self::_AbstractClass::_privateAbstractField} = c.{self::_AbstractClass::_privateAbstractField};
+  c.{self::_AbstractClass::_privateAbstractField} = c.{self::_AbstractClass::_privateAbstractField}{core::int};
 }
 static method main() → dynamic {
   self::_Class c = new self::_Class::_privateConstructor();
   c = new self::_Class::_privateConstructor();
-  c.{self::_Class::_privateMethod}();
-  c.{self::_Class::_privateSetter} = c.{self::_Class::_privateGetter};
-  c.{self::_Class::_privateField} = c.{self::_Class::_privateField};
-  c.{self::_Class::_privateFinalField};
+  c.{self::_Class::_privateMethod}(){() → void};
+  c.{self::_Class::_privateSetter} = c.{self::_Class::_privateGetter}{core::int};
+  c.{self::_Class::_privateField} = c.{self::_Class::_privateField}{core::int};
+  c.{self::_Class::_privateFinalField}{core::int};
   self::_Extension|_privateMethod(0);
-  self::_Extension|get#_privateMethod(0).call();
+  self::_Extension|get#_privateMethod(0)(){() → void};
   self::_Extension|set#_privateSetter(0, self::_Extension|get#_privateGetter(0));
   self::_Extension|_privateField = self::_Extension|_privateField;
   self::_Extension|_privateFinalField;
diff --git a/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect b/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect
index 920e92f..fd8fbf9 100644
--- a/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect
@@ -35,17 +35,17 @@
 static field core::int _Extension|_privateField = 1 /* from org-dartlang-testcase:///private_members_part.dart */;
 static field core::int _Extension|_privateFinalField = 1 /* from org-dartlang-testcase:///private_members_part.dart */;
 static method test(self::_AbstractClass c) → dynamic {
-  c.{self::_AbstractClass::_privateAbstractField} = c.{self::_AbstractClass::_privateAbstractField};
+  c.{self::_AbstractClass::_privateAbstractField} = c.{self::_AbstractClass::_privateAbstractField}{core::int};
 }
 static method main() → dynamic {
   self::_Class c = new self::_Class::_privateConstructor();
   c = new self::_Class::_privateConstructor();
-  c.{self::_Class::_privateMethod}();
-  c.{self::_Class::_privateSetter} = c.{self::_Class::_privateGetter};
-  c.{self::_Class::_privateField} = c.{self::_Class::_privateField};
-  c.{self::_Class::_privateFinalField};
+  c.{self::_Class::_privateMethod}(){() → void};
+  c.{self::_Class::_privateSetter} = c.{self::_Class::_privateGetter}{core::int};
+  c.{self::_Class::_privateField} = c.{self::_Class::_privateField}{core::int};
+  c.{self::_Class::_privateFinalField}{core::int};
   self::_Extension|_privateMethod(0);
-  self::_Extension|get#_privateMethod(0).call();
+  self::_Extension|get#_privateMethod(0)(){() → void};
   self::_Extension|set#_privateSetter(0, self::_Extension|get#_privateGetter(0));
   self::_Extension|_privateField = self::_Extension|_privateField;
   self::_Extension|_privateFinalField;
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.expect
index a2148b7..4ada913 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.expect
@@ -20,7 +20,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_method_tearoff_lib.dart */ _f() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 class Baz extends self::Foo {
   synthetic constructor •() → self::Baz*
@@ -52,7 +52,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method baz(pri::Bar* bar) → void {
-  core::print("${bar.{pri::Bar::_f}.{core::Object::runtimeType}}");
+  core::print("${bar.{pri::Bar::_f}{() →* void}.{core::Object::runtimeType}{core::Type*}}");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.outline.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.outline.expect
index 095531c..6cb829a 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.outline.expect
@@ -19,7 +19,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_method_tearoff_lib.dart */ _f() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_f, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_f, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 class Baz extends self::Foo {
   synthetic constructor •() → self::Baz*
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.transformed.expect
index a2148b7..4ada913 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_method_tearoff_lib.dart */ _f() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 class Baz extends self::Foo {
   synthetic constructor •() → self::Baz*
@@ -52,7 +52,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method baz(pri::Bar* bar) → void {
-  core::print("${bar.{pri::Bar::_f}.{core::Object::runtimeType}}");
+  core::print("${bar.{pri::Bar::_f}{() →* void}.{core::Object::runtimeType}{core::Type*}}");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/promoted_access.dart.weak.expect b/pkg/front_end/testcases/general/promoted_access.dart.weak.expect
index 6999b2b..5baecb1 100644
--- a/pkg/front_end/testcases/general/promoted_access.dart.weak.expect
+++ b/pkg/front_end/testcases/general/promoted_access.dart.weak.expect
@@ -8,7 +8,7 @@
     ;
   method method(generic-covariant-impl self::Class::T* o) → dynamic {
     if(o is self::Class<dynamic>*) {
-      o{self::Class::T* & self::Class<dynamic>* /* '*' & '*' = '*' */}.{self::Class::method}(null);
+      o{self::Class::T* & self::Class<dynamic>* /* '*' & '*' = '*' */}.{self::Class::method}(null){(dynamic) →* dynamic};
     }
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -24,10 +24,10 @@
 }
 static method method<T extends core::Object* = dynamic>(self::method::T* o) → dynamic {
   if(o is self::Class<dynamic>*) {
-    o{self::method::T* & self::Class<dynamic>* /* '*' & '*' = '*' */}.{self::Class::method}(null);
+    o{self::method::T* & self::Class<dynamic>* /* '*' & '*' = '*' */}.{self::Class::method}(null){(dynamic) →* dynamic};
   }
 }
 static method main() → dynamic {
-  new self::Class::•<dynamic>().{self::Class::method}(new self::Class::•<dynamic>());
+  new self::Class::•<dynamic>().{self::Class::method}(new self::Class::•<dynamic>()){(dynamic) →* dynamic};
   self::method<self::Class<dynamic>*>(new self::Class::•<dynamic>());
 }
diff --git a/pkg/front_end/testcases/general/promoted_access.dart.weak.transformed.expect b/pkg/front_end/testcases/general/promoted_access.dart.weak.transformed.expect
index 6999b2b..5baecb1 100644
--- a/pkg/front_end/testcases/general/promoted_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/promoted_access.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method method(generic-covariant-impl self::Class::T* o) → dynamic {
     if(o is self::Class<dynamic>*) {
-      o{self::Class::T* & self::Class<dynamic>* /* '*' & '*' = '*' */}.{self::Class::method}(null);
+      o{self::Class::T* & self::Class<dynamic>* /* '*' & '*' = '*' */}.{self::Class::method}(null){(dynamic) →* dynamic};
     }
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -24,10 +24,10 @@
 }
 static method method<T extends core::Object* = dynamic>(self::method::T* o) → dynamic {
   if(o is self::Class<dynamic>*) {
-    o{self::method::T* & self::Class<dynamic>* /* '*' & '*' = '*' */}.{self::Class::method}(null);
+    o{self::method::T* & self::Class<dynamic>* /* '*' & '*' = '*' */}.{self::Class::method}(null){(dynamic) →* dynamic};
   }
 }
 static method main() → dynamic {
-  new self::Class::•<dynamic>().{self::Class::method}(new self::Class::•<dynamic>());
+  new self::Class::•<dynamic>().{self::Class::method}(new self::Class::•<dynamic>()){(dynamic) →* dynamic};
   self::method<self::Class<dynamic>*>(new self::Class::•<dynamic>());
 }
diff --git a/pkg/front_end/testcases/general/promoted_null_aware_access.dart.weak.expect b/pkg/front_end/testcases/general/promoted_null_aware_access.dart.weak.expect
index b7c4248..09affa3 100644
--- a/pkg/front_end/testcases/general/promoted_null_aware_access.dart.weak.expect
+++ b/pkg/front_end/testcases/general/promoted_null_aware_access.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method method<T extends core::Object* = dynamic>(self::method::T* o) → dynamic {
   if(o is core::String*) {
-    let final self::method::T* & core::String* /* '*' & '*' = '*' */ #t1 = o{self::method::T* & core::String* /* '*' & '*' = '*' */} in #t1.{core::String::==}(null) ?{core::int*} null : #t1.{core::String::length};
+    let final self::method::T* & core::String* /* '*' & '*' = '*' */ #t1 = o{self::method::T* & core::String* /* '*' & '*' = '*' */} in #t1 == null ?{core::int*} null : #t1.{core::String::length}{core::int*};
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/promoted_null_aware_access.dart.weak.transformed.expect b/pkg/front_end/testcases/general/promoted_null_aware_access.dart.weak.transformed.expect
index b7c4248..09affa3 100644
--- a/pkg/front_end/testcases/general/promoted_null_aware_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/promoted_null_aware_access.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method method<T extends core::Object* = dynamic>(self::method::T* o) → dynamic {
   if(o is core::String*) {
-    let final self::method::T* & core::String* /* '*' & '*' = '*' */ #t1 = o{self::method::T* & core::String* /* '*' & '*' = '*' */} in #t1.{core::String::==}(null) ?{core::int*} null : #t1.{core::String::length};
+    let final self::method::T* & core::String* /* '*' & '*' = '*' */ #t1 = o{self::method::T* & core::String* /* '*' & '*' = '*' */} in #t1 == null ?{core::int*} null : #t1.{core::String::length}{core::int*};
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.expect b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.expect
index 370b63e..6fc1a72 100644
--- a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.expect
@@ -34,5 +34,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method baz(pub::Bar* bar) → void {
-  core::print("${bar.{pub::Bar::f}.{core::Object::runtimeType}}");
+  core::print("${bar.{pub::Bar::f}{() →* void}.{core::Object::runtimeType}{core::Type*}}");
 }
diff --git a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.transformed.expect
index 370b63e..6fc1a72 100644
--- a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.transformed.expect
@@ -34,5 +34,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method baz(pub::Bar* bar) → void {
-  core::print("${bar.{pub::Bar::f}.{core::Object::runtimeType}}");
+  core::print("${bar.{pub::Bar::f}{() →* void}.{core::Object::runtimeType}{core::Type*}}");
 }
diff --git a/pkg/front_end/testcases/general/pure_index_expressions.dart.weak.expect b/pkg/front_end/testcases/general/pure_index_expressions.dart.weak.expect
index ed17f97..e1a3cd8 100644
--- a/pkg/front_end/testcases/general/pure_index_expressions.dart.weak.expect
+++ b/pkg/front_end/testcases/general/pure_index_expressions.dart.weak.expect
@@ -13,72 +13,72 @@
     return cls;
   method indexGetSetForEffect(core::Map<self::Class*, self::Class*>* map) → void {
     final self::Class* self = this;
-    let final core::Map<self::Class*, self::Class*>* #t1 = map in #t1.{core::Map::[]}(this).{self::Class::==}(null) ?{self::Class*} #t1.{core::Map::[]=}(this, this) : null;
-    let final core::Map<self::Class*, self::Class*>* #t2 = map in #t2.{core::Map::[]}(self).{self::Class::==}(null) ?{self::Class*} #t2.{core::Map::[]=}(self, self) : null;
-    map.{core::Map::[]=}(this, this);
-    map.{core::Map::[]=}(self, self);
-    map.{core::Map::[]}(this);
-    map.{core::Map::[]}(self);
-    let final core::Map<self::Class*, self::Class*>* #t3 = map in #t3.{core::Map::[]=}(this, #t3.{core::Map::[]}(this).{self::Class::+}(this));
-    let final core::Map<self::Class*, self::Class*>* #t4 = map in #t4.{core::Map::[]=}(self, #t4.{core::Map::[]}(self).{self::Class::+}(self));
+    let final core::Map<self::Class*, self::Class*>* #t1 = map in #t1.{core::Map::[]}(this){(core::Object*) →* self::Class*} == null ?{self::Class*} #t1.{core::Map::[]=}(this, this){(self::Class*, self::Class*) →* void} : null;
+    let final core::Map<self::Class*, self::Class*>* #t2 = map in #t2.{core::Map::[]}(self){(core::Object*) →* self::Class*} == null ?{self::Class*} #t2.{core::Map::[]=}(self, self){(self::Class*, self::Class*) →* void} : null;
+    map.{core::Map::[]=}(this, this){(self::Class*, self::Class*) →* void};
+    map.{core::Map::[]=}(self, self){(self::Class*, self::Class*) →* void};
+    map.{core::Map::[]}(this){(core::Object*) →* self::Class*};
+    map.{core::Map::[]}(self){(core::Object*) →* self::Class*};
+    let final core::Map<self::Class*, self::Class*>* #t3 = map in #t3.{core::Map::[]=}(this, #t3.{core::Map::[]}(this){(core::Object*) →* self::Class*}.{self::Class::+}(this){(self::Class*) →* self::Class*}){(self::Class*, self::Class*) →* void};
+    let final core::Map<self::Class*, self::Class*>* #t4 = map in #t4.{core::Map::[]=}(self, #t4.{core::Map::[]}(self){(core::Object*) →* self::Class*}.{self::Class::+}(self){(self::Class*) →* self::Class*}){(self::Class*, self::Class*) →* void};
   }
   method indexGetSetForValue(core::Map<self::Class*, self::Class*>* map) → void {
     final self::Class* self = this;
     dynamic v;
-    v = let final core::Map<self::Class*, self::Class*>* #t5 = map in let final self::Class* #t6 = #t5.{core::Map::[]}(this) in #t6.{self::Class::==}(null) ?{self::Class*} let final void #t7 = #t5.{core::Map::[]=}(this, this) in this : #t6;
-    v = let final core::Map<self::Class*, self::Class*>* #t8 = map in let final self::Class* #t9 = #t8.{core::Map::[]}(self) in #t9.{self::Class::==}(null) ?{self::Class*} let final void #t10 = #t8.{core::Map::[]=}(self, self) in self : #t9;
-    v = let final core::Map<self::Class*, self::Class*>* #t11 = map in let final void #t12 = #t11.{core::Map::[]=}(this, this) in this;
-    v = let final core::Map<self::Class*, self::Class*>* #t13 = map in let final void #t14 = #t13.{core::Map::[]=}(self, self) in self;
-    v = map.{core::Map::[]}(this);
-    v = map.{core::Map::[]}(self);
-    v = let final core::Map<self::Class*, self::Class*>* #t15 = map in let final self::Class* #t16 = #t15.{core::Map::[]}(this).{self::Class::+}(this) in let final void #t17 = #t15.{core::Map::[]=}(this, #t16) in #t16;
-    v = let final core::Map<self::Class*, self::Class*>* #t18 = map in let final self::Class* #t19 = #t18.{core::Map::[]}(self).{self::Class::+}(self) in let final void #t20 = #t18.{core::Map::[]=}(self, #t19) in #t19;
+    v = let final core::Map<self::Class*, self::Class*>* #t5 = map in let final self::Class* #t6 = #t5.{core::Map::[]}(this){(core::Object*) →* self::Class*} in #t6 == null ?{self::Class*} let final void #t7 = #t5.{core::Map::[]=}(this, this){(self::Class*, self::Class*) →* void} in this : #t6;
+    v = let final core::Map<self::Class*, self::Class*>* #t8 = map in let final self::Class* #t9 = #t8.{core::Map::[]}(self){(core::Object*) →* self::Class*} in #t9 == null ?{self::Class*} let final void #t10 = #t8.{core::Map::[]=}(self, self){(self::Class*, self::Class*) →* void} in self : #t9;
+    v = let final core::Map<self::Class*, self::Class*>* #t11 = map in let final void #t12 = #t11.{core::Map::[]=}(this, this){(self::Class*, self::Class*) →* void} in this;
+    v = let final core::Map<self::Class*, self::Class*>* #t13 = map in let final void #t14 = #t13.{core::Map::[]=}(self, self){(self::Class*, self::Class*) →* void} in self;
+    v = map.{core::Map::[]}(this){(core::Object*) →* self::Class*};
+    v = map.{core::Map::[]}(self){(core::Object*) →* self::Class*};
+    v = let final core::Map<self::Class*, self::Class*>* #t15 = map in let final self::Class* #t16 = #t15.{core::Map::[]}(this){(core::Object*) →* self::Class*}.{self::Class::+}(this){(self::Class*) →* self::Class*} in let final void #t17 = #t15.{core::Map::[]=}(this, #t16){(self::Class*, self::Class*) →* void} in #t16;
+    v = let final core::Map<self::Class*, self::Class*>* #t18 = map in let final self::Class* #t19 = #t18.{core::Map::[]}(self){(core::Object*) →* self::Class*}.{self::Class::+}(self){(self::Class*) →* self::Class*} in let final void #t20 = #t18.{core::Map::[]=}(self, #t19){(self::Class*, self::Class*) →* void} in #t19;
   }
   method implicitExtensionGetSetForEffect(core::int* i) → void {
     final self::Class* self = this;
-    let final core::int* #t21 = i in self::Extension|[](#t21, this).{self::Class::==}(null) ?{self::Class*} self::Extension|[]=(#t21, this, this) : null;
-    let final core::int* #t22 = i in self::Extension|[](#t22, self).{self::Class::==}(null) ?{self::Class*} self::Extension|[]=(#t22, self, self) : null;
+    let final core::int* #t21 = i in self::Extension|[](#t21, this) == null ?{self::Class*} self::Extension|[]=(#t21, this, this) : null;
+    let final core::int* #t22 = i in self::Extension|[](#t22, self) == null ?{self::Class*} self::Extension|[]=(#t22, self, self) : null;
     self::Extension|[]=(i, this, this);
     self::Extension|[]=(i, self, self);
     self::Extension|[](i, this);
     self::Extension|[](i, self);
-    let final core::int* #t23 = i in self::Extension|[]=(#t23, this, self::Extension|[](#t23, this).{self::Class::+}(this));
-    let final core::int* #t24 = i in self::Extension|[]=(#t24, self, self::Extension|[](#t24, self).{self::Class::+}(self));
+    let final core::int* #t23 = i in self::Extension|[]=(#t23, this, self::Extension|[](#t23, this).{self::Class::+}(this){(self::Class*) →* self::Class*});
+    let final core::int* #t24 = i in self::Extension|[]=(#t24, self, self::Extension|[](#t24, self).{self::Class::+}(self){(self::Class*) →* self::Class*});
   }
   method implicitExtensionGetSetForValue(core::int* i) → void {
     final self::Class* self = this;
     dynamic v;
-    v = let final core::int* #t25 = i in let final self::Class* #t26 = self::Extension|[](#t25, this) in #t26.{self::Class::==}(null) ?{self::Class*} let final void #t27 = self::Extension|[]=(#t25, this, this) in this : #t26;
-    v = let final core::int* #t28 = i in let final self::Class* #t29 = self::Extension|[](#t28, self) in #t29.{self::Class::==}(null) ?{self::Class*} let final void #t30 = self::Extension|[]=(#t28, self, self) in self : #t29;
+    v = let final core::int* #t25 = i in let final self::Class* #t26 = self::Extension|[](#t25, this) in #t26 == null ?{self::Class*} let final void #t27 = self::Extension|[]=(#t25, this, this) in this : #t26;
+    v = let final core::int* #t28 = i in let final self::Class* #t29 = self::Extension|[](#t28, self) in #t29 == null ?{self::Class*} let final void #t30 = self::Extension|[]=(#t28, self, self) in self : #t29;
     v = let final core::int* #t31 = i in let final void #t32 = self::Extension|[]=(#t31, this, this) in this;
     v = let final core::int* #t33 = i in let final void #t34 = self::Extension|[]=(#t33, self, self) in self;
     v = self::Extension|[](i, this);
     v = self::Extension|[](i, self);
-    v = let final core::int* #t35 = i in let final self::Class* #t36 = self::Extension|[](#t35, this).{self::Class::+}(this) in let final void #t37 = self::Extension|[]=(#t35, this, #t36) in #t36;
-    v = let final core::int* #t38 = i in let final self::Class* #t39 = self::Extension|[](#t38, self).{self::Class::+}(self) in let final void #t40 = self::Extension|[]=(#t38, self, #t39) in #t39;
+    v = let final core::int* #t35 = i in let final self::Class* #t36 = self::Extension|[](#t35, this).{self::Class::+}(this){(self::Class*) →* self::Class*} in let final void #t37 = self::Extension|[]=(#t35, this, #t36) in #t36;
+    v = let final core::int* #t38 = i in let final self::Class* #t39 = self::Extension|[](#t38, self).{self::Class::+}(self){(self::Class*) →* self::Class*} in let final void #t40 = self::Extension|[]=(#t38, self, #t39) in #t39;
   }
   method explicitExtensionGetSetForEffect(core::int* i) → void {
     final self::Class* self = this;
-    let final core::int* #t41 = i in self::Extension|[](#t41, this).{self::Class::==}(null) ?{self::Class*} self::Extension|[]=(#t41, this, this) : null;
-    let final core::int* #t42 = i in self::Extension|[](#t42, self).{self::Class::==}(null) ?{self::Class*} self::Extension|[]=(#t42, self, self) : null;
+    let final core::int* #t41 = i in self::Extension|[](#t41, this) == null ?{self::Class*} self::Extension|[]=(#t41, this, this) : null;
+    let final core::int* #t42 = i in self::Extension|[](#t42, self) == null ?{self::Class*} self::Extension|[]=(#t42, self, self) : null;
     self::Extension|[]=(i, this, this);
     self::Extension|[]=(i, self, self);
     self::Extension|[](i, this);
     self::Extension|[](i, self);
-    let final core::int* #t43 = i in self::Extension|[]=(#t43, this, self::Extension|[](#t43, this).{self::Class::+}(this));
-    let final core::int* #t44 = i in self::Extension|[]=(#t44, self, self::Extension|[](#t44, self).{self::Class::+}(self));
+    let final core::int* #t43 = i in self::Extension|[]=(#t43, this, self::Extension|[](#t43, this).{self::Class::+}(this){(self::Class*) →* self::Class*});
+    let final core::int* #t44 = i in self::Extension|[]=(#t44, self, self::Extension|[](#t44, self).{self::Class::+}(self){(self::Class*) →* self::Class*});
   }
   method explicitExtensionGetSetForValue(core::int* i) → void {
     final self::Class* self = this;
     dynamic v;
-    v = let final core::int* #t45 = i in let final self::Class* #t46 = self::Extension|[](#t45, this) in #t46.{self::Class::==}(null) ?{self::Class*} let final void #t47 = self::Extension|[]=(#t45, this, this) in this : #t46;
-    v = let final core::int* #t48 = i in let final self::Class* #t49 = self::Extension|[](#t48, self) in #t49.{self::Class::==}(null) ?{self::Class*} let final void #t50 = self::Extension|[]=(#t48, self, self) in self : #t49;
+    v = let final core::int* #t45 = i in let final self::Class* #t46 = self::Extension|[](#t45, this) in #t46 == null ?{self::Class*} let final void #t47 = self::Extension|[]=(#t45, this, this) in this : #t46;
+    v = let final core::int* #t48 = i in let final self::Class* #t49 = self::Extension|[](#t48, self) in #t49 == null ?{self::Class*} let final void #t50 = self::Extension|[]=(#t48, self, self) in self : #t49;
     v = let final core::int* #t51 = i in let final void #t52 = self::Extension|[]=(#t51, this, this) in this;
     v = let final core::int* #t53 = i in let final void #t54 = self::Extension|[]=(#t53, self, self) in self;
     v = self::Extension|[](i, this);
     v = self::Extension|[](i, self);
-    v = let final core::int* #t55 = i in let final self::Class* #t56 = self::Extension|[](#t55, this).{self::Class::+}(this) in let final void #t57 = self::Extension|[]=(#t55, this, #t56) in #t56;
-    v = let final core::int* #t58 = i in let final self::Class* #t59 = self::Extension|[](#t58, self).{self::Class::+}(self) in let final void #t60 = self::Extension|[]=(#t58, self, #t59) in #t59;
+    v = let final core::int* #t55 = i in let final self::Class* #t56 = self::Extension|[](#t55, this).{self::Class::+}(this){(self::Class*) →* self::Class*} in let final void #t57 = self::Extension|[]=(#t55, this, #t56) in #t56;
+    v = let final core::int* #t58 = i in let final self::Class* #t59 = self::Extension|[](#t58, self).{self::Class::+}(self){(self::Class*) →* self::Class*} in let final void #t60 = self::Extension|[]=(#t58, self, #t59) in #t59;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -97,26 +97,26 @@
     ;
   method superIndexGetSetForEffect() → void {
     final self::Class* self = this;
-    super.{self::Class::[]}(this).{self::Class::==}(null) ?{self::Class*} super.{self::Class::[]=}(this, this) : null;
-    super.{self::Class::[]}(self).{self::Class::==}(null) ?{self::Class*} super.{self::Class::[]=}(self, self) : null;
+    super.{self::Class::[]}(this) == null ?{self::Class*} super.{self::Class::[]=}(this, this) : null;
+    super.{self::Class::[]}(self) == null ?{self::Class*} super.{self::Class::[]=}(self, self) : null;
     super.{self::Class::[]=}(this, this);
     super.{self::Class::[]=}(self, self);
     super.{self::Class::[]}(this);
     super.{self::Class::[]}(self);
-    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this));
-    super.{self::Class::[]=}(self, super.{self::Class::[]}(self).{self::Class::+}(self));
+    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class*) →* self::Class*});
+    super.{self::Class::[]=}(self, super.{self::Class::[]}(self).{self::Class::+}(self){(self::Class*) →* self::Class*});
   }
   method superIndexGetSetForValue() → void {
     final self::Class* self = this;
     dynamic v;
-    v = let final self::Class* #t61 = super.{self::Class::[]}(this) in #t61.{self::Class::==}(null) ?{self::Class*} let final void #t62 = super.{self::Class::[]=}(this, this) in this : #t61;
-    v = let final self::Class* #t63 = super.{self::Class::[]}(self) in #t63.{self::Class::==}(null) ?{self::Class*} let final void #t64 = super.{self::Class::[]=}(self, self) in self : #t63;
+    v = let final self::Class* #t61 = super.{self::Class::[]}(this) in #t61 == null ?{self::Class*} let final void #t62 = super.{self::Class::[]=}(this, this) in this : #t61;
+    v = let final self::Class* #t63 = super.{self::Class::[]}(self) in #t63 == null ?{self::Class*} let final void #t64 = super.{self::Class::[]=}(self, self) in self : #t63;
     v = let final void #t65 = super.{self::Class::[]=}(this, this) in this;
     v = let final void #t66 = super.{self::Class::[]=}(self, self) in self;
     v = super.{self::Class::[]}(this);
     v = super.{self::Class::[]}(self);
-    v = let final self::Class* #t67 = super.{self::Class::[]}(this).{self::Class::+}(this) in let final void #t68 = super.{self::Class::[]=}(this, #t67) in #t67;
-    v = let final self::Class* #t69 = super.{self::Class::[]}(self).{self::Class::+}(self) in let final void #t70 = super.{self::Class::[]=}(self, #t69) in #t69;
+    v = let final self::Class* #t67 = super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class*) →* self::Class*} in let final void #t68 = super.{self::Class::[]=}(this, #t67) in #t67;
+    v = let final self::Class* #t69 = super.{self::Class::[]}(self).{self::Class::+}(self){(self::Class*) →* self::Class*} in let final void #t70 = super.{self::Class::[]=}(self, #t69) in #t69;
   }
 }
 class Class2 extends core::Object {
@@ -127,49 +127,49 @@
     return cls;
   method implicitExtensionGetSetForEffect() → void {
     final self::Class2* self = this;
-    self::Extension2|[](this, this).{self::Class2::==}(null) ?{self::Class2*} self::Extension2|[]=(this, this, this) : null;
-    self::Extension2|[](self, self).{self::Class2::==}(null) ?{self::Class2*} self::Extension2|[]=(self, self, self) : null;
+    self::Extension2|[](this, this) == null ?{self::Class2*} self::Extension2|[]=(this, this, this) : null;
+    self::Extension2|[](self, self) == null ?{self::Class2*} self::Extension2|[]=(self, self, self) : null;
     self::Extension2|[]=(this, this, this);
     self::Extension2|[]=(self, self, self);
     self::Extension2|[](this, this);
     self::Extension2|[](self, self);
-    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this));
-    self::Extension2|[]=(self, self, self::Extension2|[](self, self).{self::Class2::+}(self));
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2*) →* self::Class2*});
+    self::Extension2|[]=(self, self, self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2*) →* self::Class2*});
   }
   method implicitExtensionGetSetForValue() → void {
     final self::Class2* self = this;
     dynamic v;
-    v = let final self::Class2* #t71 = self::Extension2|[](this, this) in #t71.{self::Class2::==}(null) ?{self::Class2*} let final void #t72 = self::Extension2|[]=(this, this, this) in this : #t71;
-    v = let final self::Class2* #t73 = self::Extension2|[](self, self) in #t73.{self::Class2::==}(null) ?{self::Class2*} let final void #t74 = self::Extension2|[]=(self, self, self) in self : #t73;
+    v = let final self::Class2* #t71 = self::Extension2|[](this, this) in #t71 == null ?{self::Class2*} let final void #t72 = self::Extension2|[]=(this, this, this) in this : #t71;
+    v = let final self::Class2* #t73 = self::Extension2|[](self, self) in #t73 == null ?{self::Class2*} let final void #t74 = self::Extension2|[]=(self, self, self) in self : #t73;
     v = let final void #t75 = self::Extension2|[]=(this, this, this) in this;
     v = let final void #t76 = self::Extension2|[]=(self, self, self) in self;
     v = self::Extension2|[](this, this);
     v = self::Extension2|[](self, self);
-    v = let final self::Class2* #t77 = self::Extension2|[](this, this).{self::Class2::+}(this) in let final void #t78 = self::Extension2|[]=(this, this, #t77) in #t77;
-    v = let final self::Class2* #t79 = self::Extension2|[](self, self).{self::Class2::+}(self) in let final void #t80 = self::Extension2|[]=(self, self, #t79) in #t79;
+    v = let final self::Class2* #t77 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2*) →* self::Class2*} in let final void #t78 = self::Extension2|[]=(this, this, #t77) in #t77;
+    v = let final self::Class2* #t79 = self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2*) →* self::Class2*} in let final void #t80 = self::Extension2|[]=(self, self, #t79) in #t79;
   }
   method explicitExtensionGetSetForEffect() → void {
     final self::Class2* self = this;
-    self::Extension2|[](this, this).{self::Class2::==}(null) ?{self::Class2*} self::Extension2|[]=(this, this, this) : null;
-    self::Extension2|[](self, self).{self::Class2::==}(null) ?{self::Class2*} self::Extension2|[]=(self, self, self) : null;
+    self::Extension2|[](this, this) == null ?{self::Class2*} self::Extension2|[]=(this, this, this) : null;
+    self::Extension2|[](self, self) == null ?{self::Class2*} self::Extension2|[]=(self, self, self) : null;
     self::Extension2|[]=(this, this, this);
     self::Extension2|[]=(self, self, self);
     self::Extension2|[](this, this);
     self::Extension2|[](self, self);
-    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this));
-    self::Extension2|[]=(self, self, self::Extension2|[](self, self).{self::Class2::+}(self));
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2*) →* self::Class2*});
+    self::Extension2|[]=(self, self, self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2*) →* self::Class2*});
   }
   method explicitExtensionGetSetForValue() → void {
     final self::Class2* self = this;
     dynamic v;
-    v = let final self::Class2* #t81 = self::Extension2|[](this, this) in #t81.{self::Class2::==}(null) ?{self::Class2*} let final void #t82 = self::Extension2|[]=(this, this, this) in this : #t81;
-    v = let final self::Class2* #t83 = self::Extension2|[](self, self) in #t83.{self::Class2::==}(null) ?{self::Class2*} let final void #t84 = self::Extension2|[]=(self, self, self) in self : #t83;
+    v = let final self::Class2* #t81 = self::Extension2|[](this, this) in #t81 == null ?{self::Class2*} let final void #t82 = self::Extension2|[]=(this, this, this) in this : #t81;
+    v = let final self::Class2* #t83 = self::Extension2|[](self, self) in #t83 == null ?{self::Class2*} let final void #t84 = self::Extension2|[]=(self, self, self) in self : #t83;
     v = let final void #t85 = self::Extension2|[]=(this, this, this) in this;
     v = let final void #t86 = self::Extension2|[]=(self, self, self) in self;
     v = self::Extension2|[](this, this);
     v = self::Extension2|[](self, self);
-    v = let final self::Class2* #t87 = self::Extension2|[](this, this).{self::Class2::+}(this) in let final void #t88 = self::Extension2|[]=(this, this, #t87) in #t87;
-    v = let final self::Class2* #t89 = self::Extension2|[](self, self).{self::Class2::+}(self) in let final void #t90 = self::Extension2|[]=(self, self, #t89) in #t89;
+    v = let final self::Class2* #t87 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2*) →* self::Class2*} in let final void #t88 = self::Extension2|[]=(this, this, #t87) in #t87;
+    v = let final self::Class2* #t89 = self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2*) →* self::Class2*} in let final void #t90 = self::Extension2|[]=(self, self, #t89) in #t89;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/pure_index_expressions.dart.weak.transformed.expect b/pkg/front_end/testcases/general/pure_index_expressions.dart.weak.transformed.expect
index ed17f97..e1a3cd8 100644
--- a/pkg/front_end/testcases/general/pure_index_expressions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/pure_index_expressions.dart.weak.transformed.expect
@@ -13,72 +13,72 @@
     return cls;
   method indexGetSetForEffect(core::Map<self::Class*, self::Class*>* map) → void {
     final self::Class* self = this;
-    let final core::Map<self::Class*, self::Class*>* #t1 = map in #t1.{core::Map::[]}(this).{self::Class::==}(null) ?{self::Class*} #t1.{core::Map::[]=}(this, this) : null;
-    let final core::Map<self::Class*, self::Class*>* #t2 = map in #t2.{core::Map::[]}(self).{self::Class::==}(null) ?{self::Class*} #t2.{core::Map::[]=}(self, self) : null;
-    map.{core::Map::[]=}(this, this);
-    map.{core::Map::[]=}(self, self);
-    map.{core::Map::[]}(this);
-    map.{core::Map::[]}(self);
-    let final core::Map<self::Class*, self::Class*>* #t3 = map in #t3.{core::Map::[]=}(this, #t3.{core::Map::[]}(this).{self::Class::+}(this));
-    let final core::Map<self::Class*, self::Class*>* #t4 = map in #t4.{core::Map::[]=}(self, #t4.{core::Map::[]}(self).{self::Class::+}(self));
+    let final core::Map<self::Class*, self::Class*>* #t1 = map in #t1.{core::Map::[]}(this){(core::Object*) →* self::Class*} == null ?{self::Class*} #t1.{core::Map::[]=}(this, this){(self::Class*, self::Class*) →* void} : null;
+    let final core::Map<self::Class*, self::Class*>* #t2 = map in #t2.{core::Map::[]}(self){(core::Object*) →* self::Class*} == null ?{self::Class*} #t2.{core::Map::[]=}(self, self){(self::Class*, self::Class*) →* void} : null;
+    map.{core::Map::[]=}(this, this){(self::Class*, self::Class*) →* void};
+    map.{core::Map::[]=}(self, self){(self::Class*, self::Class*) →* void};
+    map.{core::Map::[]}(this){(core::Object*) →* self::Class*};
+    map.{core::Map::[]}(self){(core::Object*) →* self::Class*};
+    let final core::Map<self::Class*, self::Class*>* #t3 = map in #t3.{core::Map::[]=}(this, #t3.{core::Map::[]}(this){(core::Object*) →* self::Class*}.{self::Class::+}(this){(self::Class*) →* self::Class*}){(self::Class*, self::Class*) →* void};
+    let final core::Map<self::Class*, self::Class*>* #t4 = map in #t4.{core::Map::[]=}(self, #t4.{core::Map::[]}(self){(core::Object*) →* self::Class*}.{self::Class::+}(self){(self::Class*) →* self::Class*}){(self::Class*, self::Class*) →* void};
   }
   method indexGetSetForValue(core::Map<self::Class*, self::Class*>* map) → void {
     final self::Class* self = this;
     dynamic v;
-    v = let final core::Map<self::Class*, self::Class*>* #t5 = map in let final self::Class* #t6 = #t5.{core::Map::[]}(this) in #t6.{self::Class::==}(null) ?{self::Class*} let final void #t7 = #t5.{core::Map::[]=}(this, this) in this : #t6;
-    v = let final core::Map<self::Class*, self::Class*>* #t8 = map in let final self::Class* #t9 = #t8.{core::Map::[]}(self) in #t9.{self::Class::==}(null) ?{self::Class*} let final void #t10 = #t8.{core::Map::[]=}(self, self) in self : #t9;
-    v = let final core::Map<self::Class*, self::Class*>* #t11 = map in let final void #t12 = #t11.{core::Map::[]=}(this, this) in this;
-    v = let final core::Map<self::Class*, self::Class*>* #t13 = map in let final void #t14 = #t13.{core::Map::[]=}(self, self) in self;
-    v = map.{core::Map::[]}(this);
-    v = map.{core::Map::[]}(self);
-    v = let final core::Map<self::Class*, self::Class*>* #t15 = map in let final self::Class* #t16 = #t15.{core::Map::[]}(this).{self::Class::+}(this) in let final void #t17 = #t15.{core::Map::[]=}(this, #t16) in #t16;
-    v = let final core::Map<self::Class*, self::Class*>* #t18 = map in let final self::Class* #t19 = #t18.{core::Map::[]}(self).{self::Class::+}(self) in let final void #t20 = #t18.{core::Map::[]=}(self, #t19) in #t19;
+    v = let final core::Map<self::Class*, self::Class*>* #t5 = map in let final self::Class* #t6 = #t5.{core::Map::[]}(this){(core::Object*) →* self::Class*} in #t6 == null ?{self::Class*} let final void #t7 = #t5.{core::Map::[]=}(this, this){(self::Class*, self::Class*) →* void} in this : #t6;
+    v = let final core::Map<self::Class*, self::Class*>* #t8 = map in let final self::Class* #t9 = #t8.{core::Map::[]}(self){(core::Object*) →* self::Class*} in #t9 == null ?{self::Class*} let final void #t10 = #t8.{core::Map::[]=}(self, self){(self::Class*, self::Class*) →* void} in self : #t9;
+    v = let final core::Map<self::Class*, self::Class*>* #t11 = map in let final void #t12 = #t11.{core::Map::[]=}(this, this){(self::Class*, self::Class*) →* void} in this;
+    v = let final core::Map<self::Class*, self::Class*>* #t13 = map in let final void #t14 = #t13.{core::Map::[]=}(self, self){(self::Class*, self::Class*) →* void} in self;
+    v = map.{core::Map::[]}(this){(core::Object*) →* self::Class*};
+    v = map.{core::Map::[]}(self){(core::Object*) →* self::Class*};
+    v = let final core::Map<self::Class*, self::Class*>* #t15 = map in let final self::Class* #t16 = #t15.{core::Map::[]}(this){(core::Object*) →* self::Class*}.{self::Class::+}(this){(self::Class*) →* self::Class*} in let final void #t17 = #t15.{core::Map::[]=}(this, #t16){(self::Class*, self::Class*) →* void} in #t16;
+    v = let final core::Map<self::Class*, self::Class*>* #t18 = map in let final self::Class* #t19 = #t18.{core::Map::[]}(self){(core::Object*) →* self::Class*}.{self::Class::+}(self){(self::Class*) →* self::Class*} in let final void #t20 = #t18.{core::Map::[]=}(self, #t19){(self::Class*, self::Class*) →* void} in #t19;
   }
   method implicitExtensionGetSetForEffect(core::int* i) → void {
     final self::Class* self = this;
-    let final core::int* #t21 = i in self::Extension|[](#t21, this).{self::Class::==}(null) ?{self::Class*} self::Extension|[]=(#t21, this, this) : null;
-    let final core::int* #t22 = i in self::Extension|[](#t22, self).{self::Class::==}(null) ?{self::Class*} self::Extension|[]=(#t22, self, self) : null;
+    let final core::int* #t21 = i in self::Extension|[](#t21, this) == null ?{self::Class*} self::Extension|[]=(#t21, this, this) : null;
+    let final core::int* #t22 = i in self::Extension|[](#t22, self) == null ?{self::Class*} self::Extension|[]=(#t22, self, self) : null;
     self::Extension|[]=(i, this, this);
     self::Extension|[]=(i, self, self);
     self::Extension|[](i, this);
     self::Extension|[](i, self);
-    let final core::int* #t23 = i in self::Extension|[]=(#t23, this, self::Extension|[](#t23, this).{self::Class::+}(this));
-    let final core::int* #t24 = i in self::Extension|[]=(#t24, self, self::Extension|[](#t24, self).{self::Class::+}(self));
+    let final core::int* #t23 = i in self::Extension|[]=(#t23, this, self::Extension|[](#t23, this).{self::Class::+}(this){(self::Class*) →* self::Class*});
+    let final core::int* #t24 = i in self::Extension|[]=(#t24, self, self::Extension|[](#t24, self).{self::Class::+}(self){(self::Class*) →* self::Class*});
   }
   method implicitExtensionGetSetForValue(core::int* i) → void {
     final self::Class* self = this;
     dynamic v;
-    v = let final core::int* #t25 = i in let final self::Class* #t26 = self::Extension|[](#t25, this) in #t26.{self::Class::==}(null) ?{self::Class*} let final void #t27 = self::Extension|[]=(#t25, this, this) in this : #t26;
-    v = let final core::int* #t28 = i in let final self::Class* #t29 = self::Extension|[](#t28, self) in #t29.{self::Class::==}(null) ?{self::Class*} let final void #t30 = self::Extension|[]=(#t28, self, self) in self : #t29;
+    v = let final core::int* #t25 = i in let final self::Class* #t26 = self::Extension|[](#t25, this) in #t26 == null ?{self::Class*} let final void #t27 = self::Extension|[]=(#t25, this, this) in this : #t26;
+    v = let final core::int* #t28 = i in let final self::Class* #t29 = self::Extension|[](#t28, self) in #t29 == null ?{self::Class*} let final void #t30 = self::Extension|[]=(#t28, self, self) in self : #t29;
     v = let final core::int* #t31 = i in let final void #t32 = self::Extension|[]=(#t31, this, this) in this;
     v = let final core::int* #t33 = i in let final void #t34 = self::Extension|[]=(#t33, self, self) in self;
     v = self::Extension|[](i, this);
     v = self::Extension|[](i, self);
-    v = let final core::int* #t35 = i in let final self::Class* #t36 = self::Extension|[](#t35, this).{self::Class::+}(this) in let final void #t37 = self::Extension|[]=(#t35, this, #t36) in #t36;
-    v = let final core::int* #t38 = i in let final self::Class* #t39 = self::Extension|[](#t38, self).{self::Class::+}(self) in let final void #t40 = self::Extension|[]=(#t38, self, #t39) in #t39;
+    v = let final core::int* #t35 = i in let final self::Class* #t36 = self::Extension|[](#t35, this).{self::Class::+}(this){(self::Class*) →* self::Class*} in let final void #t37 = self::Extension|[]=(#t35, this, #t36) in #t36;
+    v = let final core::int* #t38 = i in let final self::Class* #t39 = self::Extension|[](#t38, self).{self::Class::+}(self){(self::Class*) →* self::Class*} in let final void #t40 = self::Extension|[]=(#t38, self, #t39) in #t39;
   }
   method explicitExtensionGetSetForEffect(core::int* i) → void {
     final self::Class* self = this;
-    let final core::int* #t41 = i in self::Extension|[](#t41, this).{self::Class::==}(null) ?{self::Class*} self::Extension|[]=(#t41, this, this) : null;
-    let final core::int* #t42 = i in self::Extension|[](#t42, self).{self::Class::==}(null) ?{self::Class*} self::Extension|[]=(#t42, self, self) : null;
+    let final core::int* #t41 = i in self::Extension|[](#t41, this) == null ?{self::Class*} self::Extension|[]=(#t41, this, this) : null;
+    let final core::int* #t42 = i in self::Extension|[](#t42, self) == null ?{self::Class*} self::Extension|[]=(#t42, self, self) : null;
     self::Extension|[]=(i, this, this);
     self::Extension|[]=(i, self, self);
     self::Extension|[](i, this);
     self::Extension|[](i, self);
-    let final core::int* #t43 = i in self::Extension|[]=(#t43, this, self::Extension|[](#t43, this).{self::Class::+}(this));
-    let final core::int* #t44 = i in self::Extension|[]=(#t44, self, self::Extension|[](#t44, self).{self::Class::+}(self));
+    let final core::int* #t43 = i in self::Extension|[]=(#t43, this, self::Extension|[](#t43, this).{self::Class::+}(this){(self::Class*) →* self::Class*});
+    let final core::int* #t44 = i in self::Extension|[]=(#t44, self, self::Extension|[](#t44, self).{self::Class::+}(self){(self::Class*) →* self::Class*});
   }
   method explicitExtensionGetSetForValue(core::int* i) → void {
     final self::Class* self = this;
     dynamic v;
-    v = let final core::int* #t45 = i in let final self::Class* #t46 = self::Extension|[](#t45, this) in #t46.{self::Class::==}(null) ?{self::Class*} let final void #t47 = self::Extension|[]=(#t45, this, this) in this : #t46;
-    v = let final core::int* #t48 = i in let final self::Class* #t49 = self::Extension|[](#t48, self) in #t49.{self::Class::==}(null) ?{self::Class*} let final void #t50 = self::Extension|[]=(#t48, self, self) in self : #t49;
+    v = let final core::int* #t45 = i in let final self::Class* #t46 = self::Extension|[](#t45, this) in #t46 == null ?{self::Class*} let final void #t47 = self::Extension|[]=(#t45, this, this) in this : #t46;
+    v = let final core::int* #t48 = i in let final self::Class* #t49 = self::Extension|[](#t48, self) in #t49 == null ?{self::Class*} let final void #t50 = self::Extension|[]=(#t48, self, self) in self : #t49;
     v = let final core::int* #t51 = i in let final void #t52 = self::Extension|[]=(#t51, this, this) in this;
     v = let final core::int* #t53 = i in let final void #t54 = self::Extension|[]=(#t53, self, self) in self;
     v = self::Extension|[](i, this);
     v = self::Extension|[](i, self);
-    v = let final core::int* #t55 = i in let final self::Class* #t56 = self::Extension|[](#t55, this).{self::Class::+}(this) in let final void #t57 = self::Extension|[]=(#t55, this, #t56) in #t56;
-    v = let final core::int* #t58 = i in let final self::Class* #t59 = self::Extension|[](#t58, self).{self::Class::+}(self) in let final void #t60 = self::Extension|[]=(#t58, self, #t59) in #t59;
+    v = let final core::int* #t55 = i in let final self::Class* #t56 = self::Extension|[](#t55, this).{self::Class::+}(this){(self::Class*) →* self::Class*} in let final void #t57 = self::Extension|[]=(#t55, this, #t56) in #t56;
+    v = let final core::int* #t58 = i in let final self::Class* #t59 = self::Extension|[](#t58, self).{self::Class::+}(self){(self::Class*) →* self::Class*} in let final void #t60 = self::Extension|[]=(#t58, self, #t59) in #t59;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -97,26 +97,26 @@
     ;
   method superIndexGetSetForEffect() → void {
     final self::Class* self = this;
-    super.{self::Class::[]}(this).{self::Class::==}(null) ?{self::Class*} super.{self::Class::[]=}(this, this) : null;
-    super.{self::Class::[]}(self).{self::Class::==}(null) ?{self::Class*} super.{self::Class::[]=}(self, self) : null;
+    super.{self::Class::[]}(this) == null ?{self::Class*} super.{self::Class::[]=}(this, this) : null;
+    super.{self::Class::[]}(self) == null ?{self::Class*} super.{self::Class::[]=}(self, self) : null;
     super.{self::Class::[]=}(this, this);
     super.{self::Class::[]=}(self, self);
     super.{self::Class::[]}(this);
     super.{self::Class::[]}(self);
-    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this));
-    super.{self::Class::[]=}(self, super.{self::Class::[]}(self).{self::Class::+}(self));
+    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class*) →* self::Class*});
+    super.{self::Class::[]=}(self, super.{self::Class::[]}(self).{self::Class::+}(self){(self::Class*) →* self::Class*});
   }
   method superIndexGetSetForValue() → void {
     final self::Class* self = this;
     dynamic v;
-    v = let final self::Class* #t61 = super.{self::Class::[]}(this) in #t61.{self::Class::==}(null) ?{self::Class*} let final void #t62 = super.{self::Class::[]=}(this, this) in this : #t61;
-    v = let final self::Class* #t63 = super.{self::Class::[]}(self) in #t63.{self::Class::==}(null) ?{self::Class*} let final void #t64 = super.{self::Class::[]=}(self, self) in self : #t63;
+    v = let final self::Class* #t61 = super.{self::Class::[]}(this) in #t61 == null ?{self::Class*} let final void #t62 = super.{self::Class::[]=}(this, this) in this : #t61;
+    v = let final self::Class* #t63 = super.{self::Class::[]}(self) in #t63 == null ?{self::Class*} let final void #t64 = super.{self::Class::[]=}(self, self) in self : #t63;
     v = let final void #t65 = super.{self::Class::[]=}(this, this) in this;
     v = let final void #t66 = super.{self::Class::[]=}(self, self) in self;
     v = super.{self::Class::[]}(this);
     v = super.{self::Class::[]}(self);
-    v = let final self::Class* #t67 = super.{self::Class::[]}(this).{self::Class::+}(this) in let final void #t68 = super.{self::Class::[]=}(this, #t67) in #t67;
-    v = let final self::Class* #t69 = super.{self::Class::[]}(self).{self::Class::+}(self) in let final void #t70 = super.{self::Class::[]=}(self, #t69) in #t69;
+    v = let final self::Class* #t67 = super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class*) →* self::Class*} in let final void #t68 = super.{self::Class::[]=}(this, #t67) in #t67;
+    v = let final self::Class* #t69 = super.{self::Class::[]}(self).{self::Class::+}(self){(self::Class*) →* self::Class*} in let final void #t70 = super.{self::Class::[]=}(self, #t69) in #t69;
   }
 }
 class Class2 extends core::Object {
@@ -127,49 +127,49 @@
     return cls;
   method implicitExtensionGetSetForEffect() → void {
     final self::Class2* self = this;
-    self::Extension2|[](this, this).{self::Class2::==}(null) ?{self::Class2*} self::Extension2|[]=(this, this, this) : null;
-    self::Extension2|[](self, self).{self::Class2::==}(null) ?{self::Class2*} self::Extension2|[]=(self, self, self) : null;
+    self::Extension2|[](this, this) == null ?{self::Class2*} self::Extension2|[]=(this, this, this) : null;
+    self::Extension2|[](self, self) == null ?{self::Class2*} self::Extension2|[]=(self, self, self) : null;
     self::Extension2|[]=(this, this, this);
     self::Extension2|[]=(self, self, self);
     self::Extension2|[](this, this);
     self::Extension2|[](self, self);
-    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this));
-    self::Extension2|[]=(self, self, self::Extension2|[](self, self).{self::Class2::+}(self));
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2*) →* self::Class2*});
+    self::Extension2|[]=(self, self, self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2*) →* self::Class2*});
   }
   method implicitExtensionGetSetForValue() → void {
     final self::Class2* self = this;
     dynamic v;
-    v = let final self::Class2* #t71 = self::Extension2|[](this, this) in #t71.{self::Class2::==}(null) ?{self::Class2*} let final void #t72 = self::Extension2|[]=(this, this, this) in this : #t71;
-    v = let final self::Class2* #t73 = self::Extension2|[](self, self) in #t73.{self::Class2::==}(null) ?{self::Class2*} let final void #t74 = self::Extension2|[]=(self, self, self) in self : #t73;
+    v = let final self::Class2* #t71 = self::Extension2|[](this, this) in #t71 == null ?{self::Class2*} let final void #t72 = self::Extension2|[]=(this, this, this) in this : #t71;
+    v = let final self::Class2* #t73 = self::Extension2|[](self, self) in #t73 == null ?{self::Class2*} let final void #t74 = self::Extension2|[]=(self, self, self) in self : #t73;
     v = let final void #t75 = self::Extension2|[]=(this, this, this) in this;
     v = let final void #t76 = self::Extension2|[]=(self, self, self) in self;
     v = self::Extension2|[](this, this);
     v = self::Extension2|[](self, self);
-    v = let final self::Class2* #t77 = self::Extension2|[](this, this).{self::Class2::+}(this) in let final void #t78 = self::Extension2|[]=(this, this, #t77) in #t77;
-    v = let final self::Class2* #t79 = self::Extension2|[](self, self).{self::Class2::+}(self) in let final void #t80 = self::Extension2|[]=(self, self, #t79) in #t79;
+    v = let final self::Class2* #t77 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2*) →* self::Class2*} in let final void #t78 = self::Extension2|[]=(this, this, #t77) in #t77;
+    v = let final self::Class2* #t79 = self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2*) →* self::Class2*} in let final void #t80 = self::Extension2|[]=(self, self, #t79) in #t79;
   }
   method explicitExtensionGetSetForEffect() → void {
     final self::Class2* self = this;
-    self::Extension2|[](this, this).{self::Class2::==}(null) ?{self::Class2*} self::Extension2|[]=(this, this, this) : null;
-    self::Extension2|[](self, self).{self::Class2::==}(null) ?{self::Class2*} self::Extension2|[]=(self, self, self) : null;
+    self::Extension2|[](this, this) == null ?{self::Class2*} self::Extension2|[]=(this, this, this) : null;
+    self::Extension2|[](self, self) == null ?{self::Class2*} self::Extension2|[]=(self, self, self) : null;
     self::Extension2|[]=(this, this, this);
     self::Extension2|[]=(self, self, self);
     self::Extension2|[](this, this);
     self::Extension2|[](self, self);
-    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this));
-    self::Extension2|[]=(self, self, self::Extension2|[](self, self).{self::Class2::+}(self));
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2*) →* self::Class2*});
+    self::Extension2|[]=(self, self, self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2*) →* self::Class2*});
   }
   method explicitExtensionGetSetForValue() → void {
     final self::Class2* self = this;
     dynamic v;
-    v = let final self::Class2* #t81 = self::Extension2|[](this, this) in #t81.{self::Class2::==}(null) ?{self::Class2*} let final void #t82 = self::Extension2|[]=(this, this, this) in this : #t81;
-    v = let final self::Class2* #t83 = self::Extension2|[](self, self) in #t83.{self::Class2::==}(null) ?{self::Class2*} let final void #t84 = self::Extension2|[]=(self, self, self) in self : #t83;
+    v = let final self::Class2* #t81 = self::Extension2|[](this, this) in #t81 == null ?{self::Class2*} let final void #t82 = self::Extension2|[]=(this, this, this) in this : #t81;
+    v = let final self::Class2* #t83 = self::Extension2|[](self, self) in #t83 == null ?{self::Class2*} let final void #t84 = self::Extension2|[]=(self, self, self) in self : #t83;
     v = let final void #t85 = self::Extension2|[]=(this, this, this) in this;
     v = let final void #t86 = self::Extension2|[]=(self, self, self) in self;
     v = self::Extension2|[](this, this);
     v = self::Extension2|[](self, self);
-    v = let final self::Class2* #t87 = self::Extension2|[](this, this).{self::Class2::+}(this) in let final void #t88 = self::Extension2|[]=(this, this, #t87) in #t87;
-    v = let final self::Class2* #t89 = self::Extension2|[](self, self).{self::Class2::+}(self) in let final void #t90 = self::Extension2|[]=(self, self, #t89) in #t89;
+    v = let final self::Class2* #t87 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2*) →* self::Class2*} in let final void #t88 = self::Extension2|[]=(this, this, #t87) in #t87;
+    v = let final self::Class2* #t89 = self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2*) →* self::Class2*} in let final void #t90 = self::Extension2|[]=(self, self, #t89) in #t89;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.expect b/pkg/front_end/testcases/general/qualified.dart.weak.expect
index b829051..6bf765c 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.expect
@@ -100,8 +100,8 @@
   new lib::C::•<core::String*>();
   new lib::C::a<core::String*>();
   new lib::C::a<core::String*>();
-  new self::WithMixin::•().{lib::Supertype::supertypeMethod}();
-  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}();
+  new self::WithMixin::•().{lib::Supertype::supertypeMethod}(){() →* dynamic};
+  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}(){() →* dynamic};
   new self::IllegalSupertype::•();
 }
 
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect b/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
index 003ca00..ea5014d 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
@@ -101,8 +101,8 @@
   new lib::C::•<core::String*>();
   new lib::C::a<core::String*>();
   new lib::C::a<core::String*>();
-  new self::WithMixin::•().{lib::Supertype::supertypeMethod}();
-  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}();
+  new self::WithMixin::•().{lib::Supertype::supertypeMethod}(){() →* dynamic};
+  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}(){() →* dynamic};
   new self::IllegalSupertype::•();
 }
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
index 71c6c5f..aa4bbfe 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
@@ -158,7 +158,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::Bar::•<core::String*, core::double*>(4).{self::FooBase::x});
+  core::print(new self::Bar::•<core::String*, core::double*>(4).{self::FooBase::x}{core::int*});
   new self::SimpleCaseImpl2::•<core::int*, core::double*>();
   new self::Mix::•<core::double*>();
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
index 704411a..e22b2b0 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
@@ -158,7 +158,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::Bar::•<core::String*, core::double*>(4).{self::FooBase::x});
+  core::print(new self::Bar::•<core::String*, core::double*>(4).{self::FooBase::x}{core::int*});
   new self::SimpleCaseImpl2::•<core::int*, core::double*>();
   new self::Mix::•<core::double*>();
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
index 85d39b62..3841bc7 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
@@ -54,9 +54,9 @@
     ;
 }
 static method main() → dynamic {
-  dynamic x = new self::B::•<dynamic>().{self::A::x};
+  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_X<dynamic>*};
   if(!(x is self::_Y<Null>*)) {
-    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}}, but `_Y<Null>` expected";
+    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}{core::Type*}}, but `_Y<Null>` expected";
   }
 }
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
index 46c38ec..ce397b6 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
@@ -54,9 +54,9 @@
     ;
 }
 static method main() → dynamic {
-  dynamic x = new self::B::•<dynamic>().{self::A::x};
+  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_X<dynamic>*};
   if(!(x is self::_Y<Null>*)) {
-    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}}, but `_Y<Null>` expected";
+    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}{core::Type*}}, but `_Y<Null>` expected";
   }
 }
 
diff --git a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.expect b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.expect
index f3a4286..7cc953e 100644
--- a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.expect
+++ b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.expect
@@ -36,4 +36,4 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic async 
-  return <asy::Future<void>*>[new self::A::•().{self::A::foo}(await null), new self::B::•().{self::B::bar}(await null)];
+  return <asy::Future<void>*>[new self::A::•().{self::A::foo}(await null){(dynamic) →* asy::Future<void>*}, new self::B::•().{self::B::bar}(await null){(dynamic) →* asy::Future<void>*}];
diff --git a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect
index d5f89c9..90952fd 100644
--- a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect
@@ -99,10 +99,10 @@
       {
         :async_temporary_1 = new self::A::•();
         [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_1 = _in::unsafeCast<self::A*>(:async_temporary_1).{self::A::foo}(_in::unsafeCast<Null>(:result));
+        :async_temporary_1 = _in::unsafeCast<self::A*>(:async_temporary_1).{self::A::foo}(_in::unsafeCast<Null>(:result)){(dynamic) →* asy::Future<void>*};
         :async_temporary_0 = new self::B::•();
         [yield] let dynamic #t2 = asy::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = core::_GrowableList::_literal2<asy::Future<void>*>(_in::unsafeCast<asy::Future<void>*>(:async_temporary_1), _in::unsafeCast<self::B*>(:async_temporary_0).{self::B::bar}(_in::unsafeCast<Null>(:result)));
+        :return_value = core::_GrowableList::_literal2<asy::Future<void>*>(_in::unsafeCast<asy::Future<void>*>(:async_temporary_1), _in::unsafeCast<self::B*>(:async_temporary_0).{self::B::bar}(_in::unsafeCast<Null>(:result)){(dynamic) →* asy::Future<void>*});
         break #L3;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.expect
index 4bfac34..7704535 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.expect
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-  }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
+    return y{dynamic}.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+  }){((dynamic) →* core::Iterable<dynamic>*) →* core::Iterable<dynamic>*}.{core::Iterable::any}((dynamic y) → core::bool* => y =={core::Object::==}{(core::Object*) →* core::bool*} "z"){((dynamic) →* core::bool*) →* core::bool*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.transformed.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.transformed.expect
index 4bfac34..7704535 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-  }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
+    return y{dynamic}.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+  }){((dynamic) →* core::Iterable<dynamic>*) →* core::Iterable<dynamic>*}.{core::Iterable::any}((dynamic y) → core::bool* => y =={core::Object::==}{(core::Object*) →* core::bool*} "z"){((dynamic) →* core::bool*) →* core::bool*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/spread_collection.dart.weak.expect b/pkg/front_end/testcases/general/spread_collection.dart.weak.expect
index 2fda137..6200efa 100644
--- a/pkg/front_end/testcases/general/spread_collection.dart.weak.expect
+++ b/pkg/front_end/testcases/general/spread_collection.dart.weak.expect
@@ -14,28 +14,28 @@
 static method main() → dynamic {
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[1];
-    #t1.{core::List::addAll}{Invariant}(<core::int*>[2]);
+    #t1.{core::List::addAll}(<core::int*>[2]){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<core::int*>* #t2 = <core::int*>[3];
-    if(!#t2.{core::Object::==}(null))
-      #t1.{core::List::addAll}{Invariant}(#t2);
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}(#t2){(core::Iterable<core::int*>*) →* void};
   } =>#t1;
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
-    #t3.{core::Map::[]=}{Invariant}(1, 1);
-    for (final core::MapEntry<core::int*, core::int*>* #t4 in <core::int*, core::int*>{2: 2}.{core::Map::entries})
-      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}, #t4.{core::MapEntry::value});
+    #t3.{core::Map::[]=}(1, 1){(core::int*, core::int*) →* void};
+    for (final core::MapEntry<core::int*, core::int*>* #t4 in <core::int*, core::int*>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
+      #t3.{core::Map::[]=}(#t4.{core::MapEntry::key}{core::int*}, #t4.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
     final core::Map<core::int*, core::int*>* #t5 = <core::int*, core::int*>{3: 3};
-    if(!#t5.{core::Object::==}(null))
-      for (final core::MapEntry<core::int*, core::int*>* #t6 in #t5.{core::Map::entries})
-        #t3.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
+    if(!(#t5 == null))
+      for (final core::MapEntry<core::int*, core::int*>* #t6 in #t5.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
+        #t3.{core::Map::[]=}(#t6.{core::MapEntry::key}{core::int*}, #t6.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
   } =>#t3;
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
-    #t7.{core::Set::add}{Invariant}(1);
-    #t7.{core::Set::addAll}{Invariant}(<core::int*>[2]);
+    #t7.{core::Set::add}(1){(core::int*) →* core::bool*};
+    #t7.{core::Set::addAll}(<core::int*>[2]){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<core::int*>* #t8 = <core::int*>[3];
-    if(!#t8.{core::Object::==}(null))
-      #t7.{core::Set::addAll}{Invariant}(#t8);
+    if(!(#t8 == null))
+      #t7.{core::Set::addAll}(#t8){(core::Iterable<core::int*>*) →* void};
   } =>#t7;
   final Never* aSetOrMap = invalid-expression "pkg/front_end/testcases/general/spread_collection.dart:21:21: Error: Not enough type information to disambiguate between literal set and literal map.
 Try providing type arguments for the literal explicitly to disambiguate it.
diff --git a/pkg/front_end/testcases/general/spread_collection.dart.weak.transformed.expect b/pkg/front_end/testcases/general/spread_collection.dart.weak.transformed.expect
index a2765d8..048552b 100644
--- a/pkg/front_end/testcases/general/spread_collection.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/spread_collection.dart.weak.transformed.expect
@@ -14,37 +14,37 @@
 static method main() → dynamic {
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = core::_GrowableList::_literal1<core::int*>(1);
-    #t1.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(2));
+    #t1.{core::List::addAll}(core::_GrowableList::_literal1<core::int*>(2)){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<core::int*>* #t2 = core::_GrowableList::_literal1<core::int*>(3);
-    if(!#t2.{core::Object::==}(null))
-      #t1.{core::List::addAll}{Invariant}(#t2);
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}(#t2){(core::Iterable<core::int*>*) →* void};
   } =>#t1;
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
-    #t3.{core::Map::[]=}{Invariant}(1, 1);
+    #t3.{core::Map::[]=}(1, 1){(core::int*, core::int*) →* void};
     {
-      core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{2: 2}.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int*, core::int*>* #t4 = :sync-for-iterator.{core::Iterator::current};
-        #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}, #t4.{core::MapEntry::value});
+        #t3.{core::Map::[]=}(#t4.{core::MapEntry::key}{core::int*}, #t4.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
       }
     }
     final core::Map<core::int*, core::int*>* #t5 = <core::int*, core::int*>{3: 3};
-    if(!#t5.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = #t5.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t5 == null)) {
+      core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = #t5.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int*, core::int*>* #t6 = :sync-for-iterator.{core::Iterator::current};
-        #t3.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
+        #t3.{core::Map::[]=}(#t6.{core::MapEntry::key}{core::int*}, #t6.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
       }
     }
   } =>#t3;
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t7 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t7.{core::Set::add}{Invariant}(1);
-    #t7.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(2));
+    #t7.{core::Set::add}(1){(core::int*) →* core::bool*};
+    #t7.{core::Set::addAll}(core::_GrowableList::_literal1<core::int*>(2)){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<core::int*>* #t8 = core::_GrowableList::_literal1<core::int*>(3);
-    if(!#t8.{core::Object::==}(null))
-      #t7.{core::Set::addAll}{Invariant}(#t8);
+    if(!(#t8 == null))
+      #t7.{core::Set::addAll}(#t8){(core::Iterable<core::int*>*) →* void};
   } =>#t7;
   final Never* aSetOrMap = invalid-expression "pkg/front_end/testcases/general/spread_collection.dart:21:21: Error: Not enough type information to disambiguate between literal set and literal map.
 Try providing type arguments for the literal explicitly to disambiguate it.
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect
index ce15d14..44ce1a9 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect
@@ -113,51 +113,51 @@
   } =>#t2;
   core::Map<dynamic, dynamic>* map10 = block {
     final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t4 in <dynamic, dynamic>{}.{core::Map::entries})
-      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}, #t4.{core::MapEntry::value});
+    for (final core::MapEntry<dynamic, dynamic>* #t4 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t3.{core::Map::[]=}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
   } =>#t3;
   core::Map<dynamic, dynamic>* map10ambiguous = block {
     final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t6 in <dynamic, dynamic>{}.{core::Map::entries})
-      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
+    for (final core::MapEntry<dynamic, dynamic>* #t6 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t5.{core::Map::[]=}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
   } =>#t5;
   core::List<core::int*>* lhs20 = block {
     final core::List<core::int*>* #t7 = core::List::of<core::int*>(spread);
   } =>#t7;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t8 = col::LinkedHashSet::of<core::int*>(spread);
-    #t8.{core::Set::add}{Invariant}(42);
+    #t8.{core::Set::add}(42){(core::int*) →* core::bool*};
   } =>#t8;
   core::Set<core::int*>* set20ambiguous = block {
     final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
     for (final dynamic #t10 in spread) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
-      #t9.{core::Set::add}{Invariant}(#t11);
+      #t9.{core::Set::add}(#t11){(core::int*) →* core::bool*};
     }
   } =>#t9;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t12 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t13 in mapSpread.{core::Map::entries})
-      #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}, #t13.{core::MapEntry::value});
-    #t12.{core::Map::[]=}{Invariant}("baz", 42);
+    for (final core::MapEntry<core::String*, core::int*>* #t13 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t12.{core::Map::[]=}(#t13.{core::MapEntry::key}{core::String*}, #t13.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t12.{core::Map::[]=}("baz", 42){(core::String*, core::int*) →* void};
   } =>#t12;
   core::Map<core::String*, core::int*>* map20ambiguous = block {
     final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t15 in mapSpread.{core::Map::entries})
-      #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
+    for (final core::MapEntry<core::String*, core::int*>* #t15 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t14.{core::Map::[]=}(#t15.{core::MapEntry::key}{core::String*}, #t15.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t14;
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t16 = core::List::of<dynamic>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*);
   } =>#t16;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t17 = col::LinkedHashSet::of<dynamic>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*);
-    #t17.{core::Set::add}{Invariant}(42);
+    #t17.{core::Set::add}(42){(dynamic) →* core::bool*};
   } =>#t17;
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t18 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t19 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries})
-      #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}, #t19.{core::MapEntry::value});
-    #t18.{core::Map::[]=}{Invariant}("baz", 42);
+    for (final core::MapEntry<dynamic, dynamic>* #t19 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t18.{core::Map::[]=}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    #t18.{core::Map::[]=}("baz", 42){(dynamic, dynamic) →* void};
   } =>#t18;
   dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: Error: Not enough type information to disambiguate between literal set and literal map.
 Try providing type arguments for the literal explicitly to disambiguate it.
@@ -168,38 +168,38 @@
   } =>#t20;
   core::Set<core::int*>* set22 = block {
     final core::Set<core::int*>* #t21 = col::LinkedHashSet::of<core::int*>(<core::int*>[]);
-    #t21.{core::Set::add}{Invariant}(42);
+    #t21.{core::Set::add}(42){(core::int*) →* core::bool*};
   } =>#t21;
   core::Set<core::int*>* set22ambiguous = block {
     final core::Set<core::int*>* #t22 = col::LinkedHashSet::•<core::int*>();
     for (final dynamic #t23 in <core::int*>[]) {
       final core::int* #t24 = #t23 as{TypeError} core::int*;
-      #t22.{core::Set::add}{Invariant}(#t24);
+      #t22.{core::Set::add}(#t24){(core::int*) →* core::bool*};
     }
   } =>#t22;
   core::Map<core::String*, core::int*>* map22 = block {
     final core::Map<core::String*, core::int*>* #t25 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t26 in <core::String*, core::int*>{}.{core::Map::entries})
-      #t25.{core::Map::[]=}{Invariant}(#t26.{core::MapEntry::key}, #t26.{core::MapEntry::value});
+    for (final core::MapEntry<core::String*, core::int*>* #t26 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t25.{core::Map::[]=}(#t26.{core::MapEntry::key}{core::String*}, #t26.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t25;
   core::List<core::List<core::int*>*>* lhs23 = block {
     final core::List<core::List<core::int*>*>* #t27 = core::List::of<core::List<core::int*>*>(<core::List<core::int*>*>[<core::int*>[]]);
   } =>#t27;
   core::Set<core::List<core::int*>*>* set23 = block {
     final core::Set<core::List<core::int*>*>* #t28 = col::LinkedHashSet::of<core::List<core::int*>*>(<core::List<core::int*>*>[<core::int*>[]]);
-    #t28.{core::Set::add}{Invariant}(<core::int*>[42]);
+    #t28.{core::Set::add}(<core::int*>[42]){(core::List<core::int*>*) →* core::bool*};
   } =>#t28;
   core::Set<core::List<core::int*>*>* set23ambiguous = block {
     final core::Set<core::List<core::int*>*>* #t29 = col::LinkedHashSet::•<core::List<core::int*>*>();
     for (final dynamic #t30 in <core::List<core::int*>*>[<core::int*>[]]) {
       final core::List<core::int*>* #t31 = #t30 as{TypeError} core::List<core::int*>*;
-      #t29.{core::Set::add}{Invariant}(#t31);
+      #t29.{core::Set::add}(#t31){(core::List<core::int*>*) →* core::bool*};
     }
   } =>#t29;
   core::Map<core::String*, core::List<core::int*>*>* map23 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t32 = <core::String*, core::List<core::int*>*>{};
-    for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"baz": <core::int*>[]}.{core::Map::entries})
-      #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
+    for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"baz": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+      #t32.{core::Map::[]=}(#t33.{core::MapEntry::key}{core::String*}, #t33.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
   } =>#t32;
   dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   dynamic map24ambiguous = {...spread, ...mapSpread};
@@ -215,7 +215,7 @@
   int set30 = /*@ typeArgs=int* */ {...spread, 42};
                                    ^" in ( block {
     final core::Set<core::int*>* #t37 = col::LinkedHashSet::of<core::int*>(spread);
-    #t37.{core::Set::add}{Invariant}(42);
+    #t37.{core::Set::add}(42){(core::int*) →* core::bool*};
   } =>#t37) as{TypeError} core::int*;
   core::int* set30ambiguous = let final Never* #t38 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
@@ -224,7 +224,7 @@
     final core::Set<core::int*>* #t39 = col::LinkedHashSet::•<core::int*>();
     for (final dynamic #t40 in spread) {
       final core::int* #t41 = #t40 as{TypeError} core::int*;
-      #t39.{core::Set::add}{Invariant}(#t41);
+      #t39.{core::Set::add}(#t41){(core::int*) →* core::bool*};
     }
   } =>#t39) as{TypeError} core::int*;
   core::int* map30 = let final Never* #t42 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
@@ -232,26 +232,26 @@
       {...mapSpread, \"baz\": 42};
       ^" in ( block {
     final core::Map<core::String*, core::int*>* #t43 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t44 in mapSpread.{core::Map::entries})
-      #t43.{core::Map::[]=}{Invariant}(#t44.{core::MapEntry::key}, #t44.{core::MapEntry::value});
-    #t43.{core::Map::[]=}{Invariant}("baz", 42);
+    for (final core::MapEntry<core::String*, core::int*>* #t44 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t43.{core::Map::[]=}(#t44.{core::MapEntry::key}{core::String*}, #t44.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t43.{core::Map::[]=}("baz", 42){(core::String*, core::int*) →* void};
   } =>#t43) as{TypeError} core::int*;
   core::int* map30ambiguous = let final Never* #t45 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
       {...mapSpread};
       ^" in ( block {
     final core::Map<core::String*, core::int*>* #t46 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t47 in mapSpread.{core::Map::entries})
-      #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}, #t47.{core::MapEntry::value});
+    for (final core::MapEntry<core::String*, core::int*>* #t47 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t46.{core::Map::[]=}(#t47.{core::MapEntry::key}{core::String*}, #t47.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t46) as{TypeError} core::int*;
   core::List<dynamic>* lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
                                      ^"];
   core::Set<dynamic>* set40 = block {
     final core::Set<dynamic>* #t48 = col::LinkedHashSet::•<dynamic>();
-    #t48.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+    #t48.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
-                                    ^");
+                                    ^"){(dynamic) →* core::bool*};
   } =>#t48;
   core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
@@ -261,9 +261,9 @@
                                      ^"];
   core::Set<dynamic>* set50 = block {
     final core::Set<dynamic>* #t49 = col::LinkedHashSet::•<dynamic>();
-    #t49.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+    #t49.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
-                                    ^");
+                                    ^"){(dynamic) →* core::bool*};
   } =>#t49;
   core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
@@ -273,9 +273,9 @@
                                    ^"];
   core::Set<core::String*>* set60 = block {
     final core::Set<core::String*>* #t50 = col::LinkedHashSet::•<core::String*>();
-    #t50.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+    #t50.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
   Set<String> set60 = <String>{...spread};
-                                  ^");
+                                  ^"){(core::String*) →* core::bool*};
   } =>#t50;
   core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
   Map<int, int> map60 = <int, int>{...mapSpread};
@@ -288,18 +288,18 @@
                              ^"];
   core::Set<core::int*>* set70 = block {
     final core::Set<core::int*>* #t51 = col::LinkedHashSet::•<core::int*>();
-    #t51.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
+    #t51.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
   Set<int> set70 = <int>{...null};
-                            ^");
+                            ^"){(core::int*) →* core::bool*};
   } =>#t51;
   core::Set<dynamic>* set71ambiguous = block {
     final core::Set<dynamic>* #t52 = col::LinkedHashSet::•<dynamic>();
-    #t52.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
+    #t52.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
     ...null,
-       ^");
+       ^"){(dynamic) →* core::bool*};
     for (final dynamic #t53 in <dynamic>[]) {
       final dynamic #t54 = #t53 as{TypeError} dynamic;
-      #t52.{core::Set::add}{Invariant}(#t54);
+      #t52.{core::Set::add}(#t54){(dynamic) →* core::bool*};
     }
   } =>#t52;
   core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
@@ -308,68 +308,68 @@
   core::List<core::int*>* lhs80 = block {
     final core::List<core::int*>* #t55 = <core::int*>[];
     final core::Iterable<core::int*>* #t56 = null;
-    if(!#t56.{core::Object::==}(null))
-      #t55.{core::List::addAll}{Invariant}(#t56);
+    if(!(#t56 == null))
+      #t55.{core::List::addAll}(#t56){(core::Iterable<core::int*>*) →* void};
   } =>#t55;
   core::Set<core::int*>* set80 = block {
     final core::Set<core::int*>* #t57 = col::LinkedHashSet::•<core::int*>();
     final core::Iterable<core::int*>* #t58 = null;
-    if(!#t58.{core::Object::==}(null))
-      #t57.{core::Set::addAll}{Invariant}(#t58);
+    if(!(#t58 == null))
+      #t57.{core::Set::addAll}(#t58){(core::Iterable<core::int*>*) →* void};
   } =>#t57;
   core::Set<dynamic>* set81ambiguous = block {
     final core::Set<dynamic>* #t59 = col::LinkedHashSet::•<dynamic>();
     final core::Iterable<dynamic>* #t60 = null;
-    if(!#t60.{core::Object::==}(null))
+    if(!(#t60 == null))
       for (final dynamic #t61 in #t60) {
         final dynamic #t62 = #t61 as{TypeError} dynamic;
-        #t59.{core::Set::add}{Invariant}(#t62);
+        #t59.{core::Set::add}(#t62){(dynamic) →* core::bool*};
       }
     for (final dynamic #t63 in <dynamic>[]) {
       final dynamic #t64 = #t63 as{TypeError} dynamic;
-      #t59.{core::Set::add}{Invariant}(#t64);
+      #t59.{core::Set::add}(#t64){(dynamic) →* core::bool*};
     }
   } =>#t59;
   core::Map<core::String*, core::int*>* map80 = block {
     final core::Map<core::String*, core::int*>* #t65 = <core::String*, core::int*>{};
     final core::Map<core::String*, core::int*>* #t66 = null;
-    if(!#t66.{core::Object::==}(null))
-      for (final core::MapEntry<core::String*, core::int*>* #t67 in #t66.{core::Map::entries})
-        #t65.{core::Map::[]=}{Invariant}(#t67.{core::MapEntry::key}, #t67.{core::MapEntry::value});
+    if(!(#t66 == null))
+      for (final core::MapEntry<core::String*, core::int*>* #t67 in #t66.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t65.{core::Map::[]=}(#t67.{core::MapEntry::key}{core::String*}, #t67.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t65;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t68 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t69 in self::bar<core::String*, core::int*>().{core::Map::entries})
-      #t68.{core::Map::[]=}{Invariant}(#t69.{core::MapEntry::key}, #t69.{core::MapEntry::value});
+    for (final core::MapEntry<core::String*, core::int*>* #t69 in self::bar<core::String*, core::int*>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t68.{core::Map::[]=}(#t69.{core::MapEntry::key}{core::String*}, #t69.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t68;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t70 = <core::int*>[];
     for (final dynamic #t71 in listNum) {
       final core::int* #t72 = #t71 as{TypeError} core::int*;
-      #t70.{core::List::add}{Invariant}(#t72);
+      #t70.{core::List::add}(#t72){(core::int*) →* void};
     }
   } =>#t70;
   core::Map<core::num*, core::int*>* map100 = block {
     final core::Map<core::num*, core::int*>* #t73 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t74 in mapIntNum.{core::Map::entries}) {
-      final core::num* #t75 = #t74.{core::MapEntry::key} as{TypeError} core::num*;
-      final core::int* #t76 = #t74.{core::MapEntry::value} as{TypeError} core::int*;
-      #t73.{core::Map::[]=}{Invariant}(#t75, #t76);
+    for (final core::MapEntry<dynamic, dynamic>* #t74 in mapIntNum.{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
+      final core::num* #t75 = #t74.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
+      final core::int* #t76 = #t74.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+      #t73.{core::Map::[]=}(#t75, #t76){(core::num*, core::int*) →* void};
     }
   } =>#t73;
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t77 = <core::int*>[];
     for (final dynamic #t78 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t79 = #t78 as{TypeError} core::int*;
-      #t77.{core::List::add}{Invariant}(#t79);
+      #t77.{core::List::add}(#t79){(core::int*) →* void};
     }
   } =>#t77;
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t80 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t81 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
-      final core::num* #t82 = #t81.{core::MapEntry::key} as{TypeError} core::num*;
-      final core::int* #t83 = #t81.{core::MapEntry::value} as{TypeError} core::int*;
-      #t80.{core::Map::[]=}{Invariant}(#t82, #t83);
+    for (final core::MapEntry<dynamic, dynamic>* #t81 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
+      final core::num* #t82 = #t81.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
+      final core::int* #t83 = #t81.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+      #t80.{core::Map::[]=}(#t82, #t83){(core::num*, core::int*) →* void};
     }
   } =>#t80;
 }
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect
index ceca37a..11d244a 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect
@@ -114,20 +114,20 @@
   core::Map<dynamic, dynamic>* map10 = block {
     final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = <dynamic, dynamic>{}.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t4 = :sync-for-iterator.{core::Iterator::current};
-        #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}, #t4.{core::MapEntry::value});
+        #t3.{core::Map::[]=}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
       }
     }
   } =>#t3;
   core::Map<dynamic, dynamic>* map10ambiguous = block {
     final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = <dynamic, dynamic>{}.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t6 = :sync-for-iterator.{core::Iterator::current};
-        #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
+        #t5.{core::Map::[]=}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
       }
     }
   } =>#t5;
@@ -136,7 +136,7 @@
   } =>#t7;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t8 = col::LinkedHashSet::of<core::int*>(spread);
-    #t8.{core::Set::add}{Invariant}(42);
+    #t8.{core::Set::add}(42){(core::int*) →* core::bool*};
   } =>#t8;
   core::Set<core::int*>* set20ambiguous = block {
     final core::Set<core::int*>* #t9 = new col::_CompactLinkedHashSet::•<core::int*>();
@@ -146,7 +146,7 @@
         final dynamic #t10 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t11 = #t10 as{TypeError} core::int*;
-          #t9.{core::Set::add}{Invariant}(#t11);
+          #t9.{core::Set::add}(#t11){(core::int*) →* core::bool*};
         }
       }
     }
@@ -154,21 +154,21 @@
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t12 = <core::String*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t13 = :sync-for-iterator.{core::Iterator::current};
-        #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}, #t13.{core::MapEntry::value});
+        #t12.{core::Map::[]=}(#t13.{core::MapEntry::key}{core::String*}, #t13.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-    #t12.{core::Map::[]=}{Invariant}("baz", 42);
+    #t12.{core::Map::[]=}("baz", 42){(core::String*, core::int*) →* void};
   } =>#t12;
   core::Map<core::String*, core::int*>* map20ambiguous = block {
     final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t15 = :sync-for-iterator.{core::Iterator::current};
-        #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
+        #t14.{core::Map::[]=}(#t15.{core::MapEntry::key}{core::String*}, #t15.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
   } =>#t14;
@@ -177,18 +177,18 @@
   } =>#t16;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t17 = col::LinkedHashSet::of<dynamic>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*);
-    #t17.{core::Set::add}{Invariant}(42);
+    #t17.{core::Set::add}(42){(dynamic) →* core::bool*};
   } =>#t17;
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t18 = <dynamic, dynamic>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t19 = :sync-for-iterator.{core::Iterator::current};
-        #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}, #t19.{core::MapEntry::value});
+        #t18.{core::Map::[]=}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
       }
     }
-    #t18.{core::Map::[]=}{Invariant}("baz", 42);
+    #t18.{core::Map::[]=}("baz", 42){(dynamic, dynamic) →* void};
   } =>#t18;
   dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: Error: Not enough type information to disambiguate between literal set and literal map.
 Try providing type arguments for the literal explicitly to disambiguate it.
@@ -199,7 +199,7 @@
   } =>#t20;
   core::Set<core::int*>* set22 = block {
     final core::Set<core::int*>* #t21 = col::LinkedHashSet::of<core::int*>(core::_GrowableList::•<core::int*>(0));
-    #t21.{core::Set::add}{Invariant}(42);
+    #t21.{core::Set::add}(42){(core::int*) →* core::bool*};
   } =>#t21;
   core::Set<core::int*>* set22ambiguous = block {
     final core::Set<core::int*>* #t22 = new col::_CompactLinkedHashSet::•<core::int*>();
@@ -209,7 +209,7 @@
         final dynamic #t23 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t24 = #t23 as{TypeError} core::int*;
-          #t22.{core::Set::add}{Invariant}(#t24);
+          #t22.{core::Set::add}(#t24){(core::int*) →* core::bool*};
         }
       }
     }
@@ -217,10 +217,10 @@
   core::Map<core::String*, core::int*>* map22 = block {
     final core::Map<core::String*, core::int*>* #t25 = <core::String*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{}.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t26 = :sync-for-iterator.{core::Iterator::current};
-        #t25.{core::Map::[]=}{Invariant}(#t26.{core::MapEntry::key}, #t26.{core::MapEntry::value});
+        #t25.{core::Map::[]=}(#t26.{core::MapEntry::key}{core::String*}, #t26.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
   } =>#t25;
@@ -229,7 +229,7 @@
   } =>#t27;
   core::Set<core::List<core::int*>*>* set23 = block {
     final core::Set<core::List<core::int*>*>* #t28 = col::LinkedHashSet::of<core::List<core::int*>*>(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)));
-    #t28.{core::Set::add}{Invariant}(core::_GrowableList::_literal1<core::int*>(42));
+    #t28.{core::Set::add}(core::_GrowableList::_literal1<core::int*>(42)){(core::List<core::int*>*) →* core::bool*};
   } =>#t28;
   core::Set<core::List<core::int*>*>* set23ambiguous = block {
     final core::Set<core::List<core::int*>*>* #t29 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
@@ -239,7 +239,7 @@
         final dynamic #t30 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::List<core::int*>* #t31 = #t30 as{TypeError} core::List<core::int*>*;
-          #t29.{core::Set::add}{Invariant}(#t31);
+          #t29.{core::Set::add}(#t31){(core::List<core::int*>*) →* core::bool*};
         }
       }
     }
@@ -247,10 +247,10 @@
   core::Map<core::String*, core::List<core::int*>*>* map23 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t32 = <core::String*, core::List<core::int*>*>{};
     {
-      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"baz": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"baz": core::_GrowableList::•<core::int*>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 = :sync-for-iterator.{core::Iterator::current};
-        #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
+        #t32.{core::Map::[]=}(#t33.{core::MapEntry::key}{core::String*}, #t33.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
       }
     }
   } =>#t32;
@@ -268,7 +268,7 @@
   int set30 = /*@ typeArgs=int* */ {...spread, 42};
                                    ^" in ( block {
     final core::Set<core::int*>* #t37 = col::LinkedHashSet::of<core::int*>(spread);
-    #t37.{core::Set::add}{Invariant}(42);
+    #t37.{core::Set::add}(42){(core::int*) →* core::bool*};
   } =>#t37) as{TypeError} core::int*;
   core::int* set30ambiguous = let final Never* #t38 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
@@ -281,7 +281,7 @@
         final dynamic #t40 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t41 = #t40 as{TypeError} core::int*;
-          #t39.{core::Set::add}{Invariant}(#t41);
+          #t39.{core::Set::add}(#t41){(core::int*) →* core::bool*};
         }
       }
     }
@@ -292,13 +292,13 @@
       ^" in ( block {
     final core::Map<core::String*, core::int*>* #t43 = <core::String*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t44 = :sync-for-iterator.{core::Iterator::current};
-        #t43.{core::Map::[]=}{Invariant}(#t44.{core::MapEntry::key}, #t44.{core::MapEntry::value});
+        #t43.{core::Map::[]=}(#t44.{core::MapEntry::key}{core::String*}, #t44.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
-    #t43.{core::Map::[]=}{Invariant}("baz", 42);
+    #t43.{core::Map::[]=}("baz", 42){(core::String*, core::int*) →* void};
   } =>#t43) as{TypeError} core::int*;
   core::int* map30ambiguous = let final Never* #t45 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
@@ -306,10 +306,10 @@
       ^" in ( block {
     final core::Map<core::String*, core::int*>* #t46 = <core::String*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t47 = :sync-for-iterator.{core::Iterator::current};
-        #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}, #t47.{core::MapEntry::value});
+        #t46.{core::Map::[]=}(#t47.{core::MapEntry::key}{core::String*}, #t47.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
   } =>#t46) as{TypeError} core::int*;
@@ -318,9 +318,9 @@
                                      ^");
   core::Set<dynamic>* set40 = block {
     final core::Set<dynamic>* #t48 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t48.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+    #t48.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
-                                    ^");
+                                    ^"){(dynamic) →* core::bool*};
   } =>#t48;
   core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
@@ -330,9 +330,9 @@
                                      ^");
   core::Set<dynamic>* set50 = block {
     final core::Set<dynamic>* #t49 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t49.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+    #t49.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
-                                    ^");
+                                    ^"){(dynamic) →* core::bool*};
   } =>#t49;
   core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
@@ -342,9 +342,9 @@
                                    ^");
   core::Set<core::String*>* set60 = block {
     final core::Set<core::String*>* #t50 = new col::_CompactLinkedHashSet::•<core::String*>();
-    #t50.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+    #t50.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
   Set<String> set60 = <String>{...spread};
-                                  ^");
+                                  ^"){(core::String*) →* core::bool*};
   } =>#t50;
   core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
   Map<int, int> map60 = <int, int>{...mapSpread};
@@ -357,22 +357,22 @@
                              ^");
   core::Set<core::int*>* set70 = block {
     final core::Set<core::int*>* #t51 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t51.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
+    #t51.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
   Set<int> set70 = <int>{...null};
-                            ^");
+                            ^"){(core::int*) →* core::bool*};
   } =>#t51;
   core::Set<dynamic>* set71ambiguous = block {
     final core::Set<dynamic>* #t52 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t52.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
+    #t52.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
     ...null,
-       ^");
+       ^"){(dynamic) →* core::bool*};
     {
       core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t53 = :sync-for-iterator.{core::Iterator::current};
         {
           final dynamic #t54 = #t53 as{TypeError} dynamic;
-          #t52.{core::Set::add}{Invariant}(#t54);
+          #t52.{core::Set::add}(#t54){(dynamic) →* core::bool*};
         }
       }
     }
@@ -383,25 +383,25 @@
   core::List<core::int*>* lhs80 = block {
     final core::List<core::int*>* #t55 = core::_GrowableList::•<core::int*>(0);
     final core::Iterable<core::int*>* #t56 = null;
-    if(!#t56.{core::Object::==}(null))
-      #t55.{core::List::addAll}{Invariant}(#t56);
+    if(!(#t56 == null))
+      #t55.{core::List::addAll}(#t56){(core::Iterable<core::int*>*) →* void};
   } =>#t55;
   core::Set<core::int*>* set80 = block {
     final core::Set<core::int*>* #t57 = new col::_CompactLinkedHashSet::•<core::int*>();
     final core::Iterable<core::int*>* #t58 = null;
-    if(!#t58.{core::Object::==}(null))
-      #t57.{core::Set::addAll}{Invariant}(#t58);
+    if(!(#t58 == null))
+      #t57.{core::Set::addAll}(#t58){(core::Iterable<core::int*>*) →* void};
   } =>#t57;
   core::Set<dynamic>* set81ambiguous = block {
     final core::Set<dynamic>* #t59 = new col::_CompactLinkedHashSet::•<dynamic>();
     final core::Iterable<dynamic>* #t60 = null;
-    if(!#t60.{core::Object::==}(null)) {
+    if(!(#t60 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t60.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t61 = :sync-for-iterator.{core::Iterator::current};
         {
           final dynamic #t62 = #t61 as{TypeError} dynamic;
-          #t59.{core::Set::add}{Invariant}(#t62);
+          #t59.{core::Set::add}(#t62){(dynamic) →* core::bool*};
         }
       }
     }
@@ -411,7 +411,7 @@
         final dynamic #t63 = :sync-for-iterator.{core::Iterator::current};
         {
           final dynamic #t64 = #t63 as{TypeError} dynamic;
-          #t59.{core::Set::add}{Invariant}(#t64);
+          #t59.{core::Set::add}(#t64){(dynamic) →* core::bool*};
         }
       }
     }
@@ -419,21 +419,21 @@
   core::Map<core::String*, core::int*>* map80 = block {
     final core::Map<core::String*, core::int*>* #t65 = <core::String*, core::int*>{};
     final core::Map<core::String*, core::int*>* #t66 = null;
-    if(!#t66.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = #t66.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t66 == null)) {
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = #t66.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t67 = :sync-for-iterator.{core::Iterator::current};
-        #t65.{core::Map::[]=}{Invariant}(#t67.{core::MapEntry::key}, #t67.{core::MapEntry::value});
+        #t65.{core::Map::[]=}(#t67.{core::MapEntry::key}{core::String*}, #t67.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
   } =>#t65;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t68 = <core::String*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = self::bar<core::String*, core::int*>().{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = self::bar<core::String*, core::int*>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t69 = :sync-for-iterator.{core::Iterator::current};
-        #t68.{core::Map::[]=}{Invariant}(#t69.{core::MapEntry::key}, #t69.{core::MapEntry::value});
+        #t68.{core::Map::[]=}(#t69.{core::MapEntry::key}{core::String*}, #t69.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
       }
     }
   } =>#t68;
@@ -445,7 +445,7 @@
         final dynamic #t71 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t72 = #t71 as{TypeError} core::int*;
-          #t70.{core::List::add}{Invariant}(#t72);
+          #t70.{core::List::add}(#t72){(core::int*) →* void};
         }
       }
     }
@@ -453,13 +453,13 @@
   core::Map<core::num*, core::int*>* map100 = block {
     final core::Map<core::num*, core::int*>* #t73 = <core::num*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<core::int*, core::num*>>* :sync-for-iterator = mapIntNum.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::num*, core::int*>>* :sync-for-iterator = mapIntNum.{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t74 = :sync-for-iterator.{core::Iterator::current};
         {
-          final core::num* #t75 = #t74.{core::MapEntry::key} as{TypeError} core::num*;
-          final core::int* #t76 = #t74.{core::MapEntry::value} as{TypeError} core::int*;
-          #t73.{core::Map::[]=}{Invariant}(#t75, #t76);
+          final core::num* #t75 = #t74.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
+          final core::int* #t76 = #t74.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+          #t73.{core::Map::[]=}(#t75, #t76){(core::num*, core::int*) →* void};
         }
       }
     }
@@ -472,7 +472,7 @@
         final dynamic #t78 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t79 = #t78 as{TypeError} core::int*;
-          #t77.{core::List::add}{Invariant}(#t79);
+          #t77.{core::List::add}(#t79){(core::int*) →* void};
         }
       }
     }
@@ -480,13 +480,13 @@
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t80 = <core::num*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::num*, core::int*>>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t81 = :sync-for-iterator.{core::Iterator::current};
         {
-          final core::num* #t82 = #t81.{core::MapEntry::key} as{TypeError} core::num*;
-          final core::int* #t83 = #t81.{core::MapEntry::value} as{TypeError} core::int*;
-          #t80.{core::Map::[]=}{Invariant}(#t82, #t83);
+          final core::num* #t82 = #t81.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
+          final core::int* #t83 = #t81.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+          #t80.{core::Map::[]=}(#t82, #t83){(core::num*, core::int*) →* void};
         }
       }
     }
diff --git a/pkg/front_end/testcases/general/statements.dart.weak.expect b/pkg/front_end/testcases/general/statements.dart.weak.expect
index 7e7194b..8d3c256 100644
--- a/pkg/front_end/testcases/general/statements.dart.weak.expect
+++ b/pkg/front_end/testcases/general/statements.dart.weak.expect
@@ -134,7 +134,7 @@
     #L14:
     {
       core::print("Hello from do-while!");
-      if((i = i.{core::num::+}(1)).{core::num::<}(3))
+      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
         break #L14;
       break #L13;
     }
@@ -145,7 +145,7 @@
     #L16:
     {
       core::print("Hello from while!");
-      if((i = i.{core::num::+}(1)).{core::num::<}(3))
+      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
         break #L16;
       break #L15;
     }
diff --git a/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect b/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
index dd17252..e0b0a7c 100644
--- a/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
@@ -214,7 +214,7 @@
     #L16:
     {
       core::print("Hello from do-while!");
-      if((i = i.{core::num::+}(1)).{core::num::<}(3))
+      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
         break #L16;
       break #L15;
     }
@@ -225,7 +225,7 @@
     #L18:
     {
       core::print("Hello from while!");
-      if((i = i.{core::num::+}(1)).{core::num::<}(3))
+      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
         break #L18;
       break #L17;
     }
diff --git a/pkg/front_end/testcases/general/store_load.dart.weak.expect b/pkg/front_end/testcases/general/store_load.dart.weak.expect
index a6c7200..b5b20a2 100644
--- a/pkg/front_end/testcases/general/store_load.dart.weak.expect
+++ b/pkg/front_end/testcases/general/store_load.dart.weak.expect
@@ -67,10 +67,10 @@
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
   foo.{self::Foo::_field} = new self::FooValue::•();
-  dynamic fooValue = foo.{self::Foo::_field};
+  dynamic fooValue = foo.{self::Foo::_field}{dynamic};
   core::print(fooValue);
   self::Bar* bar = new self::Bar::•();
   bar.{self::Bar::_field} = new self::BarValue::•();
-  dynamic barValue = bar.{self::Bar::_field};
+  dynamic barValue = bar.{self::Bar::_field}{dynamic};
   core::print(barValue);
 }
diff --git a/pkg/front_end/testcases/general/store_load.dart.weak.transformed.expect b/pkg/front_end/testcases/general/store_load.dart.weak.transformed.expect
index a6c7200..b5b20a2 100644
--- a/pkg/front_end/testcases/general/store_load.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/store_load.dart.weak.transformed.expect
@@ -67,10 +67,10 @@
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
   foo.{self::Foo::_field} = new self::FooValue::•();
-  dynamic fooValue = foo.{self::Foo::_field};
+  dynamic fooValue = foo.{self::Foo::_field}{dynamic};
   core::print(fooValue);
   self::Bar* bar = new self::Bar::•();
   bar.{self::Bar::_field} = new self::BarValue::•();
-  dynamic barValue = bar.{self::Bar::_field};
+  dynamic barValue = bar.{self::Bar::_field}{dynamic};
   core::print(barValue);
 }
diff --git a/pkg/front_end/testcases/general/super_call.dart.weak.expect b/pkg/front_end/testcases/general/super_call.dart.weak.expect
index b6efac9..29d979a 100644
--- a/pkg/front_end/testcases/general/super_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.weak.expect
@@ -15,7 +15,7 @@
     : super core::Object::•()
     ;
   method call(core::int* x) → core::int*
-    return x.{core::num::*}(2);
+    return x.{core::num::*}(2){(core::num*) →* core::int*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -32,7 +32,7 @@
     : super self::A::•()
     ;
   method call(core::int* x) → core::int*
-    return x.{core::num::*}(3);
+    return x.{core::num::*}(3){(core::num*) →* core::int*};
   method call_super() → core::int* {
     return invalid-expression "pkg/front_end/testcases/general/super_call.dart:17:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
@@ -41,5 +41,5 @@
   }
 }
 static method main() → dynamic {
-  assert(new self::B::•().{self::B::call_super}().{core::num::==}(10));
+  assert(new self::B::•().{self::B::call_super}(){() →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 10);
 }
diff --git a/pkg/front_end/testcases/general/super_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_call.dart.weak.transformed.expect
index 648c4cf..6c726a4 100644
--- a/pkg/front_end/testcases/general/super_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
     : super core::Object::•()
     ;
   method call(core::int* x) → core::int*
-    return x.{core::num::*}(2);
+    return x.{core::num::*}(2){(core::num*) →* core::int*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -32,7 +32,7 @@
     : super self::A::•()
     ;
   method call(core::int* x) → core::int*
-    return x.{core::num::*}(3);
+    return x.{core::num::*}(3){(core::num*) →* core::int*};
   method call_super() → core::int* {
     return invalid-expression "pkg/front_end/testcases/general/super_call.dart:17:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
@@ -41,5 +41,5 @@
   }
 }
 static method main() → dynamic {
-  assert(new self::B::•().{self::B::call_super}().{core::num::==}(10));
+  assert(new self::B::•().{self::B::call_super}(){() →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 10);
 }
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.weak.expect b/pkg/front_end/testcases/general/super_nsm.dart.weak.expect
index 0924671..949ce24 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.weak.expect
@@ -34,7 +34,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
@@ -46,8 +46,8 @@
     return super.{self::C::interfaceMethod}();
 }
 static method main() → dynamic {
-  dynamic result = new self::D::•().{self::D::dMethod}();
-  if(!result.{core::Object::==}("D"))
+  dynamic result = new self::D::•().{self::D::dMethod}(){() →* dynamic};
+  if(!(result =={core::Object::==}{(core::Object*) →* core::bool*} "D"))
     throw "Expected 'D' but got: '${result}'";
 }
 
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.weak.outline.expect b/pkg/front_end/testcases/general/super_nsm.dart.weak.outline.expect
index 1e84833..8b77ef2 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.weak.outline.expect
@@ -32,7 +32,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_nsm.dart.weak.transformed.expect
index 0924671..949ce24 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
@@ -46,8 +46,8 @@
     return super.{self::C::interfaceMethod}();
 }
 static method main() → dynamic {
-  dynamic result = new self::D::•().{self::D::dMethod}();
-  if(!result.{core::Object::==}("D"))
+  dynamic result = new self::D::•().{self::D::dMethod}(){() →* dynamic};
+  if(!(result =={core::Object::==}{(core::Object*) →* core::bool*} "D"))
     throw "Expected 'D' but got: '${result}'";
 }
 
diff --git a/pkg/front_end/testcases/general/this_field_call.dart.weak.expect b/pkg/front_end/testcases/general/this_field_call.dart.weak.expect
index 28e7d76..4acba29 100644
--- a/pkg/front_end/testcases/general/this_field_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/this_field_call.dart.weak.expect
@@ -8,7 +8,7 @@
     : self::A::f = f, super core::Object::•()
     ;
   method foo(generic-covariant-impl self::A::T* x) → dynamic
-    return let final self::A::T* #t1 = x in this.{self::A::f}.call(#t1);
+    return let final self::A::T* #t1 = x in this.{self::A::f}{(self::A::T*) →* void}(#t1){(self::A::T*) →* void};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -21,5 +21,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::A::•<core::int*>((core::int* x) → Null {}).{self::A::foo}(3);
+  new self::A::•<core::int*>((core::int* x) → Null {}).{self::A::foo}(3){(core::int*) →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/this_field_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/this_field_call.dart.weak.transformed.expect
index 28e7d76..4acba29 100644
--- a/pkg/front_end/testcases/general/this_field_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/this_field_call.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     : self::A::f = f, super core::Object::•()
     ;
   method foo(generic-covariant-impl self::A::T* x) → dynamic
-    return let final self::A::T* #t1 = x in this.{self::A::f}.call(#t1);
+    return let final self::A::T* #t1 = x in this.{self::A::f}{(self::A::T*) →* void}(#t1){(self::A::T*) →* void};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -21,5 +21,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::A::•<core::int*>((core::int* x) → Null {}).{self::A::foo}(3);
+  new self::A::•<core::int*>((core::int* x) → Null {}).{self::A::foo}(3){(core::int*) →* dynamic};
 }
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect
index 1e70230..13976c1 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect
@@ -17,7 +17,7 @@
     : self::DynamicClass::field1 = field1, self::DynamicClass::field2 = field2, super core::Object::•()
     ;
   method method() → dynamic
-    return this.{self::DynamicClass::field1}.*(this.{self::DynamicClass::field2});
+    return this.{self::DynamicClass::field1}{self::DynamicClass::T*}{dynamic}.*(this.{self::DynamicClass::field2}{self::DynamicClass::T*});
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,12 +36,12 @@
     : self::NumClass::field1 = field1, self::NumClass::field2 = field2, super core::Object::•()
     ;
   method method1() → core::num*
-    return this.{self::NumClass::field1}.{core::num::*}(this.{self::NumClass::field2});
+    return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::*}(this.{self::NumClass::field2}{self::NumClass::S*}){(core::num*) →* core::num*};
   method method2() → core::num*
-    return this.{self::NumClass::field1}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
+    return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^" as{TypeError,ForDynamic} core::num*);
+                                   ^^^^^^" as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -64,12 +64,12 @@
     : super core::Object::•()
     ;
   method method() → dynamic {
-    this.{self::Class::field0}.{core::int::isEven};
-    this.{self::Class::field1}.{core::int::isEven};
-    this.{self::Class::field2}.{core::int::isEven};
-    this.{self::Class::field3}.{core::int::isEven};
-    this.{self::Class::field4}.{core::int::isEven};
-    this.{self::Class::field5}.{core::int::isEven};
+    this.{self::Class::field0}{self::Class::X0*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field1}{self::Class::X1*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field2}{self::Class::X2*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field3}{self::Class::X3*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field4}{self::Class::X4*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field5}{self::Class::X5*}.{core::int::isEven}{core::bool*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -83,6 +83,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}();
-  new self::NumClass::•<core::num*, core::double*>(2, 0.5).{self::NumClass::method1}();
+  new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}(){() →* dynamic};
+  new self::NumClass::•<core::num*, core::double*>(2, 0.5).{self::NumClass::method1}(){() →* core::num*};
 }
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect
index d9c7800..6ed0eeb 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
     : self::DynamicClass::field1 = field1, self::DynamicClass::field2 = field2, super core::Object::•()
     ;
   method method() → dynamic
-    return this.{self::DynamicClass::field1}.*(this.{self::DynamicClass::field2});
+    return this.{self::DynamicClass::field1}{self::DynamicClass::T*}{dynamic}.*(this.{self::DynamicClass::field2}{self::DynamicClass::T*});
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,12 +36,12 @@
     : self::NumClass::field1 = field1, self::NumClass::field2 = field2, super core::Object::•()
     ;
   method method1() → core::num*
-    return this.{self::NumClass::field1}.{core::num::*}(this.{self::NumClass::field2});
+    return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::*}(this.{self::NumClass::field2}{self::NumClass::S*}){(core::num*) →* core::num*};
   method method2() → core::num*
-    return this.{self::NumClass::field1}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
+    return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^");
+                                   ^^^^^^"){(core::num*) →* core::num*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -64,12 +64,12 @@
     : super core::Object::•()
     ;
   method method() → dynamic {
-    this.{self::Class::field0}.{core::int::isEven};
-    this.{self::Class::field1}.{core::int::isEven};
-    this.{self::Class::field2}.{core::int::isEven};
-    this.{self::Class::field3}.{core::int::isEven};
-    this.{self::Class::field4}.{core::int::isEven};
-    this.{self::Class::field5}.{core::int::isEven};
+    this.{self::Class::field0}{self::Class::X0*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field1}{self::Class::X1*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field2}{self::Class::X2*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field3}{self::Class::X3*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field4}{self::Class::X4*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field5}{self::Class::X5*}.{core::int::isEven}{core::bool*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -83,6 +83,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}();
-  new self::NumClass::•<core::num*, core::double*>(2, 0.5).{self::NumClass::method1}();
+  new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}(){() →* dynamic};
+  new self::NumClass::•<core::num*, core::double*>(2, 0.5).{self::NumClass::method1}(){() →* core::num*};
 }
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.expect
index f33e878..93f9c23 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.expect
@@ -29,6 +29,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::String* s = new self::C::•<dynamic>().{self::C::method}();
+  core::String* s = new self::C::•<dynamic>().{self::C::method}(){() →* invalid-type};
   core::print(s);
 }
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.transformed.expect
index f33e878..93f9c23 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.transformed.expect
@@ -29,6 +29,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::String* s = new self::C::•<dynamic>().{self::C::method}();
+  core::String* s = new self::C::•<dynamic>().{self::C::method}(){() →* invalid-type};
   core::print(s);
 }
diff --git a/pkg/front_end/testcases/general/undefined.dart.weak.expect b/pkg/front_end/testcases/general/undefined.dart.weak.expect
index 3bd9b1a..dd04769 100644
--- a/pkg/front_end/testcases/general/undefined.dart.weak.expect
+++ b/pkg/front_end/testcases/general/undefined.dart.weak.expect
@@ -41,13 +41,13 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C* c) → void {
-  c.{self::C::x};
+  c.{self::C::x}{dynamic};
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:12:5: Error: The getter 'y' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
   c.y;
     ^";
-  c.{self::C::f}();
+  c.{self::C::f}(){() →* void};
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:14:5: Error: The method 'g' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'g'.
diff --git a/pkg/front_end/testcases/general/undefined.dart.weak.transformed.expect b/pkg/front_end/testcases/general/undefined.dart.weak.transformed.expect
index 3bd9b1a..dd04769 100644
--- a/pkg/front_end/testcases/general/undefined.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/undefined.dart.weak.transformed.expect
@@ -41,13 +41,13 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C* c) → void {
-  c.{self::C::x};
+  c.{self::C::x}{dynamic};
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:12:5: Error: The getter 'y' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
   c.y;
     ^";
-  c.{self::C::f}();
+  c.{self::C::f}(){() →* void};
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:14:5: Error: The method 'g' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'g'.
diff --git a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.expect b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.expect
index b0b1563..99c4726 100644
--- a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.expect
+++ b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.expect
@@ -39,11 +39,11 @@
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x += 1;
-    ^".+(1);
+    ^"{dynamic}.+(1);
   let final self::C* #t2 = c in invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:12:5: Error: The getter 'x' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x ??= 1;
-    ^".{core::Object::==}(null) ?{dynamic} #t2.{self::C::x} = 1 : null;
+    ^" == null ?{dynamic} #t2.{self::C::x} = 1 : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.transformed.expect b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.transformed.expect
index b0b1563..99c4726 100644
--- a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.transformed.expect
@@ -39,11 +39,11 @@
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x += 1;
-    ^".+(1);
+    ^"{dynamic}.+(1);
   let final self::C* #t2 = c in invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:12:5: Error: The getter 'x' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x ??= 1;
-    ^".{core::Object::==}(null) ?{dynamic} #t2.{self::C::x} = 1 : null;
+    ^" == null ?{dynamic} #t2.{self::C::x} = 1 : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/unsound_promotion.dart.weak.expect b/pkg/front_end/testcases/general/unsound_promotion.dart.weak.expect
index bf4731f..e5a07f2 100644
--- a/pkg/front_end/testcases/general/unsound_promotion.dart.weak.expect
+++ b/pkg/front_end/testcases/general/unsound_promotion.dart.weak.expect
@@ -52,7 +52,7 @@
 static field core::List<self::A*>* list;
 static method g<T extends self::A*>(self::g::T* t) → core::List<self::g::T*>* {
   self::list = <self::g::T*>[];
-  core::print(self::list.{core::Object::runtimeType});
+  core::print(self::list.{core::Object::runtimeType}{core::Type*});
   return self::list as{TypeError} core::List<self::g::T*>*;
 }
 static method f<S extends core::Object* = dynamic>(self::f::S* s) → core::List<self::f::S*>* {
@@ -64,7 +64,7 @@
 }
 static method main() → dynamic {
   self::f<self::B*>(new self::C::•());
-  core::print(self::list.{core::Object::runtimeType});
+  core::print(self::list.{core::Object::runtimeType}{core::Type*});
   core::List<self::A*>* aList;
   aList = self::list;
   core::Object* o = aList;
diff --git a/pkg/front_end/testcases/general/unused_methods.dart.weak.expect b/pkg/front_end/testcases/general/unused_methods.dart.weak.expect
index e571d37..060120a 100644
--- a/pkg/front_end/testcases/general/unused_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/general/unused_methods.dart.weak.expect
@@ -26,7 +26,7 @@
     core::print("Unused");
   }
   method calledFromB() → void {
-    this.{self::UsedAsBaseClass::calledFromSubclass}();
+    this.{self::UsedAsBaseClass::calledFromSubclass}(){() →* void};
   }
   method calledFromSubclass() → void {
     core::print("Unused");
@@ -92,21 +92,21 @@
     ;
   method usedInSubclass() → void {
     core::print("B");
-    this.{self::UsedAsBaseClass::calledFromB}();
+    this.{self::UsedAsBaseClass::calledFromB}(){() →* void};
   }
   method calledFromSubclass() → void {}
 }
 static method baseClassCall(self::UsedAsBaseClass* object) → void {
-  object.{self::UsedAsBaseClass::usedInSubclass}();
+  object.{self::UsedAsBaseClass::usedInSubclass}(){() →* void};
 }
 static method interfaceCall(self::UsedAsInterface* object) → void {
-  object.{self::UsedAsInterface::usedInSubclass}();
+  object.{self::UsedAsInterface::usedInSubclass}(){() →* void};
 }
 static method exactCallA(self::ClassA* object) → void {
-  object.{self::ClassA::usedInSubclass}();
+  object.{self::ClassA::usedInSubclass}(){() →* void};
 }
 static method exactCallB(self::ClassB* object) → void {
-  object.{self::ClassB::usedInSubclass}();
+  object.{self::ClassB::usedInSubclass}(){() →* void};
 }
 static method unusedTopLevel() → dynamic {
   core::print("Unused");
diff --git a/pkg/front_end/testcases/general/unused_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/general/unused_methods.dart.weak.transformed.expect
index e571d37..060120a 100644
--- a/pkg/front_end/testcases/general/unused_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/unused_methods.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
     core::print("Unused");
   }
   method calledFromB() → void {
-    this.{self::UsedAsBaseClass::calledFromSubclass}();
+    this.{self::UsedAsBaseClass::calledFromSubclass}(){() →* void};
   }
   method calledFromSubclass() → void {
     core::print("Unused");
@@ -92,21 +92,21 @@
     ;
   method usedInSubclass() → void {
     core::print("B");
-    this.{self::UsedAsBaseClass::calledFromB}();
+    this.{self::UsedAsBaseClass::calledFromB}(){() →* void};
   }
   method calledFromSubclass() → void {}
 }
 static method baseClassCall(self::UsedAsBaseClass* object) → void {
-  object.{self::UsedAsBaseClass::usedInSubclass}();
+  object.{self::UsedAsBaseClass::usedInSubclass}(){() →* void};
 }
 static method interfaceCall(self::UsedAsInterface* object) → void {
-  object.{self::UsedAsInterface::usedInSubclass}();
+  object.{self::UsedAsInterface::usedInSubclass}(){() →* void};
 }
 static method exactCallA(self::ClassA* object) → void {
-  object.{self::ClassA::usedInSubclass}();
+  object.{self::ClassA::usedInSubclass}(){() →* void};
 }
 static method exactCallB(self::ClassB* object) → void {
-  object.{self::ClassB::usedInSubclass}();
+  object.{self::ClassB::usedInSubclass}(){() →* void};
 }
 static method unusedTopLevel() → dynamic {
   core::print("Unused");
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.expect b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.expect
index 2091c88..017b651 100644
--- a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.expect
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.expect
@@ -48,7 +48,7 @@
     if(z is self::C<core::Map<self::D::foo3::T1*, self::D::P*>*, core::List<self::D::foo3::T2*>*, self::D::Q*>*) {
       core::print("32");
     }
-    return (z as core::Map<self::D::foo3::T2*, self::D::Q*>*).{core::Map::values};
+    return (z as core::Map<self::D::foo3::T2*, self::D::Q*>*).{core::Map::values}{core::Iterable<self::D::Q*>*};
   }
   method foo4(dynamic w) → core::Map<self::D::P*, self::D::Q*>* {
     core::List<core::Map<self::D::P*, self::D::Q*>*>* list = <core::Map<self::D::P*, self::D::Q*>*>[w as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*];
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.transformed.expect b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.transformed.expect
index ce44cfa..ace3959 100644
--- a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.transformed.expect
@@ -48,7 +48,7 @@
     if(z is self::C<core::Map<self::D::foo3::T1*, self::D::P*>*, core::List<self::D::foo3::T2*>*, self::D::Q*>*) {
       core::print("32");
     }
-    return (z as core::Map<self::D::foo3::T2*, self::D::Q*>*).{core::Map::values};
+    return (z as core::Map<self::D::foo3::T2*, self::D::Q*>*).{core::Map::values}{core::Iterable<self::D::Q*>*};
   }
   method foo4(dynamic w) → core::Map<self::D::P*, self::D::Q*>* {
     core::List<core::Map<self::D::P*, self::D::Q*>*>* list = core::_GrowableList::_literal1<core::Map<self::D::P*, self::D::Q*>*>(w as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*);
diff --git a/pkg/front_end/testcases/general/void_methods.dart.weak.expect b/pkg/front_end/testcases/general/void_methods.dart.weak.expect
index 70705a1..dff46ae 100644
--- a/pkg/front_end/testcases/general/void_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/general/void_methods.dart.weak.expect
@@ -8,11 +8,11 @@
     : super core::Object::•()
     ;
   set first(dynamic x) → void
-    return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
+    return let final core::List<dynamic>* #t1 = this.{self::Foo::list}{core::List<dynamic>*} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, dynamic) →* void} in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list}{core::List<dynamic>*} in let final dynamic #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7){(core::int*, dynamic) →* void} in #t7;
   method clear() → void
-    return this.{self::Foo::list}.{core::List::clear}();
+    return this.{self::Foo::list}{core::List<dynamic>*}.{core::List::clear}(){() →* void};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -26,6 +26,6 @@
 }
 static method main() → dynamic {
   new self::Foo::•().{self::Foo::first} = 4;
-  new self::Foo::•().{self::Foo::[]=}(3, 4);
-  new self::Foo::•().{self::Foo::clear}();
+  new self::Foo::•().{self::Foo::[]=}(3, 4){(dynamic, dynamic) →* void};
+  new self::Foo::•().{self::Foo::clear}(){() →* void};
 }
diff --git a/pkg/front_end/testcases/general/void_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/general/void_methods.dart.weak.transformed.expect
index 8844178..a6dfbf8 100644
--- a/pkg/front_end/testcases/general/void_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/void_methods.dart.weak.transformed.expect
@@ -8,11 +8,11 @@
     : super core::Object::•()
     ;
   set first(dynamic x) → void
-    return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
+    return let final core::List<dynamic>* #t1 = this.{self::Foo::list}{core::List<dynamic>*} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, dynamic) →* void} in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list}{core::List<dynamic>*} in let final core::int* #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7){(core::int*, dynamic) →* void} in #t7;
   method clear() → void
-    return this.{self::Foo::list}.{core::List::clear}();
+    return this.{self::Foo::list}{core::List<dynamic>*}.{core::List::clear}(){() →* void};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -26,8 +26,8 @@
 }
 static method main() → dynamic {
   new self::Foo::•().{self::Foo::first} = 4;
-  new self::Foo::•().{self::Foo::[]=}(3, 4);
-  new self::Foo::•().{self::Foo::clear}();
+  new self::Foo::•().{self::Foo::[]=}(3, 4){(dynamic, dynamic) →* void};
+  new self::Foo::•().{self::Foo::clear}(){() →* void};
 }
 
 
diff --git a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.expect b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.expect
index 27e3b71..aa48737 100644
--- a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.expect
+++ b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.expect
@@ -74,25 +74,25 @@
     return null;
   method method() → dynamic {}
   method test() → void {
-    this.{self::D::field};
-    this.{self::C::superField};
+    this.{self::D::field}{dynamic};
+    this.{self::C::superField}{dynamic};
     this.{self::D::field} = 0;
     this.{self::C::superField} = 0;
-    this.{self::D::method}();
-    this.{self::C::superMethod}();
-    this.{self::C::setterOnly};
+    this.{self::D::method}(){() →* dynamic};
+    this.{self::C::superMethod}(){() →* dynamic};
+    this.{self::C::setterOnly}{dynamic};
     this.{self::D::setterOnly} = 0;
-    this.{self::D::getterOnly};
+    this.{self::D::getterOnly}{dynamic};
     this.{self::C::getterOnly} = 0;
-    this.{self::D::field};
-    this.{self::C::superField};
+    this.{self::D::field}{dynamic};
+    this.{self::C::superField}{dynamic};
     this.{self::D::field} = 0;
     this.{self::C::superField} = 0;
-    this.{self::D::method}();
-    this.{self::C::superMethod}();
-    this.{self::C::setterOnly};
+    this.{self::D::method}(){() →* dynamic};
+    this.{self::C::superMethod}(){() →* dynamic};
+    this.{self::C::setterOnly}{dynamic};
     this.{self::D::setterOnly} = 0;
-    this.{self::D::getterOnly};
+    this.{self::D::getterOnly}{dynamic};
     this.{self::C::getterOnly} = 0;
     invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:48:10: Error: The getter 'missingField' isn't defined for the class 'D'.
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
diff --git a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.transformed.expect b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.transformed.expect
index 27e3b71..aa48737 100644
--- a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.transformed.expect
@@ -74,25 +74,25 @@
     return null;
   method method() → dynamic {}
   method test() → void {
-    this.{self::D::field};
-    this.{self::C::superField};
+    this.{self::D::field}{dynamic};
+    this.{self::C::superField}{dynamic};
     this.{self::D::field} = 0;
     this.{self::C::superField} = 0;
-    this.{self::D::method}();
-    this.{self::C::superMethod}();
-    this.{self::C::setterOnly};
+    this.{self::D::method}(){() →* dynamic};
+    this.{self::C::superMethod}(){() →* dynamic};
+    this.{self::C::setterOnly}{dynamic};
     this.{self::D::setterOnly} = 0;
-    this.{self::D::getterOnly};
+    this.{self::D::getterOnly}{dynamic};
     this.{self::C::getterOnly} = 0;
-    this.{self::D::field};
-    this.{self::C::superField};
+    this.{self::D::field}{dynamic};
+    this.{self::C::superField}{dynamic};
     this.{self::D::field} = 0;
     this.{self::C::superField} = 0;
-    this.{self::D::method}();
-    this.{self::C::superMethod}();
-    this.{self::C::setterOnly};
+    this.{self::D::method}(){() →* dynamic};
+    this.{self::C::superMethod}(){() →* dynamic};
+    this.{self::C::setterOnly}{dynamic};
     this.{self::D::setterOnly} = 0;
-    this.{self::D::getterOnly};
+    this.{self::D::getterOnly}{dynamic};
     this.{self::C::getterOnly} = 0;
     invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:48:10: Error: The getter 'missingField' isn't defined for the class 'D'.
  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.expect
index 99bdeb7..9c0b260 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.expect
@@ -7,11 +7,11 @@
 
 static const field con::B* crossModule = #C3;
 static method main() → dynamic {
-  self::expect(2.71, (#C3).{con::A::d});
-  self::expect("default", (#C3).{con::A::s});
+  self::expect(2.71, (#C3).{con::A::d}{core::double*});
+  self::expect("default", (#C3).{con::A::s}{core::String*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.transformed.expect
index 99bdeb7..9c0b260 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.transformed.expect
@@ -7,11 +7,11 @@
 
 static const field con::B* crossModule = #C3;
 static method main() → dynamic {
-  self::expect(2.71, (#C3).{con::A::d});
-  self::expect("default", (#C3).{con::A::s});
+  self::expect(2.71, (#C3).{con::A::d}{core::double*});
+  self::expect("default", (#C3).{con::A::s}{core::String*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.expect
index 477d3c1..3a36e05 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.expect
@@ -1,6 +1,7 @@
 library;
 import self as self;
 import "mixin_from_dill_lib1.dart" as mix;
+import "dart:core" as core;
 import "mixin_from_dill_lib2.dart" as mix2;
 
 import "org-dartlang-testcase:///mixin_from_dill_lib1.dart" as lib1;
@@ -8,17 +9,17 @@
 
 static method main() → dynamic {
   mix::Foo* foo1 = new mix::Foo::•();
-  if(foo1.{mix::_Foo&B&D::==}(null))
+  if(foo1 == null)
     throw "what?";
-  if(!foo1.{mix::_Foo&B&D::==}(foo1))
+  if(!(foo1 =={mix::_Foo&B&D::==}{(dynamic) →* core::bool*} foo1))
     throw "what?";
-  foo1.{mix::_Foo&B&D::x}();
+  foo1.{mix::_Foo&B&D::x}(){() →* void};
   mix2::Foo* foo2 = new mix2::Foo::•();
-  if(foo2.{mix2::_Foo&B&D::==}(null))
+  if(foo2 == null)
     throw "what?";
-  if(!foo2.{mix2::_Foo&B&D::==}(foo2))
+  if(!(foo2 =={mix2::_Foo&B&D::==}{(dynamic) →* core::bool*} foo2))
     throw "what?";
-  foo2.{mix2::_Foo&B&D::x}();
+  foo2.{mix2::_Foo&B&D::x}(){() →* void};
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.transformed.expect
index 82923f0..5649484 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.transformed.expect
@@ -1,6 +1,7 @@
 library;
 import self as self;
 import "mixin_from_dill_lib1.dart" as mix;
+import "dart:core" as core;
 import "mixin_from_dill_lib2.dart" as mix2;
 
 import "org-dartlang-testcase:///mixin_from_dill_lib1.dart" as lib1;
@@ -8,17 +9,17 @@
 
 static method main() → dynamic {
   mix::Foo* foo1 = new mix::Foo::•();
-  if(foo1.{mix::_Foo&B&D::==}(null))
+  if(foo1 == null)
     throw "what?";
-  if(!foo1.{mix::_Foo&B&D::==}(foo1))
+  if(!(foo1 =={mix::_Foo&B&D::==}{(dynamic) →* core::bool*} foo1))
     throw "what?";
-  foo1.{mix::_Foo&B&D::x}();
+  foo1.{mix::_Foo&B&D::x}(){() →* void};
   mix2::Foo* foo2 = new mix2::Foo::•();
-  if(foo2.{mix2::_Foo&B&D::==}(null))
+  if(foo2 == null)
     throw "what?";
-  if(!foo2.{mix2::_Foo&B&D::==}(foo2))
+  if(!(foo2 =={mix2::_Foo&B&D::==}{(dynamic) →* core::bool*} foo2))
     throw "what?";
-  foo2.{mix2::_Foo&B&D::x}();
+  foo2.{mix2::_Foo&B&D::x}(){() →* void};
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.expect
index 23b3c5d..787fde3 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.expect
@@ -1,6 +1,7 @@
 library;
 import self as self;
 import "mixin_from_dill_lib1.dart" as mix;
+import "dart:core" as core;
 import "mixin_from_dill_lib2.dart" as mix2;
 
 import "org-dartlang-testcase:///mixin_from_dill_lib1.dart" as lib1;
@@ -8,17 +9,17 @@
 
 static method main() → dynamic {
   mix::Foo* foo1 = new mix::Foo::•();
-  if(foo1.{mix::_Foo&B&D::==}(null))
+  if(foo1 == null)
     throw "what?";
-  if(!foo1.{mix::_Foo&B&D::==}(foo1))
+  if(!(foo1 =={mix::_Foo&B&D::==}{(dynamic) →* core::bool*} foo1))
     throw "what?";
-  foo1.{mix::_Foo&B&D::x}();
+  foo1.{mix::_Foo&B&D::x}(){() →* void};
   mix2::Foo* foo2 = new mix2::Foo::•();
-  if(foo2.{mix2::_Foo&B&D::==}(null))
+  if(foo2 == null)
     throw "what?";
-  if(!foo2.{mix2::_Foo&B&D::==}(foo2))
+  if(!(foo2 =={mix2::_Foo&B&D::==}{(dynamic) →* core::bool*} foo2))
     throw "what?";
-  foo2.{mix2::_Foo&B&D::x}();
+  foo2.{mix2::_Foo&B&D::x}(){() →* void};
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.transformed.expect
index 06efdba..f100680 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.transformed.expect
@@ -1,6 +1,7 @@
 library;
 import self as self;
 import "mixin_from_dill_lib1.dart" as mix;
+import "dart:core" as core;
 import "mixin_from_dill_lib2.dart" as mix2;
 
 import "org-dartlang-testcase:///mixin_from_dill_lib1.dart" as lib1;
@@ -8,17 +9,17 @@
 
 static method main() → dynamic {
   mix::Foo* foo1 = new mix::Foo::•();
-  if(foo1.{mix::_Foo&B&D::==}(null))
+  if(foo1 == null)
     throw "what?";
-  if(!foo1.{mix::_Foo&B&D::==}(foo1))
+  if(!(foo1 =={mix::_Foo&B&D::==}{(dynamic) →* core::bool*} foo1))
     throw "what?";
-  foo1.{mix::_Foo&B&D::x}();
+  foo1.{mix::_Foo&B&D::x}(){() →* void};
   mix2::Foo* foo2 = new mix2::Foo::•();
-  if(foo2.{mix2::_Foo&B&D::==}(null))
+  if(foo2 == null)
     throw "what?";
-  if(!foo2.{mix2::_Foo&B&D::==}(foo2))
+  if(!(foo2 =={mix2::_Foo&B&D::==}{(dynamic) →* core::bool*} foo2))
     throw "what?";
-  foo2.{mix2::_Foo&B&D::x}();
+  foo2.{mix2::_Foo&B&D::x}(){() →* void};
 }
 
 library;
diff --git a/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.strong.expect b/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.strong.expect
index 189f2c4..80cb97b 100644
--- a/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.strong.expect
+++ b/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.strong.expect
@@ -67,7 +67,7 @@
   }
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.strong.transformed.expect
index 189f2c4..80cb97b 100644
--- a/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.strong.transformed.expect
@@ -67,7 +67,7 @@
   }
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.weak.expect b/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.weak.expect
index 941af3f..979b373 100644
--- a/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.weak.expect
@@ -67,7 +67,7 @@
   }
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.weak.transformed.expect
index 941af3f..979b373 100644
--- a/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.weak.transformed.expect
@@ -67,7 +67,7 @@
   }
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.strong.expect b/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.strong.expect
index 19d9303..7906e15 100644
--- a/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.strong.expect
+++ b/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.strong.expect
@@ -15,7 +15,7 @@
   core::List<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> y = <<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>>[#C1];
   core::Set<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> z = block {
     final core::Set<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> #t1 = col::LinkedHashSet::•<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>>();
-    #t1.{core::Set::add}{Invariant}(y.{core::Iterable::first});
+    #t1.{core::Set::add}(y.{core::Iterable::first}{<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>}){(<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>) → core::bool};
   } =>#t1;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.strong.transformed.expect b/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.strong.transformed.expect
index 82c52ba..45504ea 100644
--- a/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
   core::List<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> y = core::_GrowableList::_literal1<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>>(#C1);
   core::Set<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> z = block {
     final core::Set<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> #t1 = new col::_CompactLinkedHashSet::•<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>>();
-    #t1.{core::Set::add}{Invariant}(y.{core::Iterable::first});
+    #t1.{core::Set::add}(y.{core::Iterable::first}{<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>}){(<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>) → core::bool};
   } =>#t1;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.weak.expect b/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.weak.expect
index 19d9303..7906e15 100644
--- a/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.weak.expect
+++ b/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.weak.expect
@@ -15,7 +15,7 @@
   core::List<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> y = <<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>>[#C1];
   core::Set<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> z = block {
     final core::Set<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> #t1 = col::LinkedHashSet::•<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>>();
-    #t1.{core::Set::add}{Invariant}(y.{core::Iterable::first});
+    #t1.{core::Set::add}(y.{core::Iterable::first}{<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>}){(<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>) → core::bool};
   } =>#t1;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.weak.transformed.expect b/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.weak.transformed.expect
index 82c52ba..45504ea 100644
--- a/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
   core::List<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> y = core::_GrowableList::_literal1<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>>(#C1);
   core::Set<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> z = block {
     final core::Set<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> #t1 = new col::_CompactLinkedHashSet::•<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>>();
-    #t1.{core::Set::add}{Invariant}(y.{core::Iterable::first});
+    #t1.{core::Set::add}(y.{core::Iterable::first}{<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>}){(<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>) → core::bool};
   } =>#t1;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/incremental/changing_modules_4.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_4.yaml.world.1.expect
index 4f177a0..24ffa21 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_4.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_4.yaml.world.1.expect
@@ -4,7 +4,7 @@
   import "package:moduleB/b.dart";
 
   static field dart.core::String* foo = c::baz;
-  static field dart.core::int* x = b::mya2.{b::A2::bar};
+  static field dart.core::int* x = b::mya2.{b::A2::bar}{dart.core::int*};
 }
 library from "package:moduleB/b.dart" as b {
 additionalExports = (c::baz,
diff --git a/pkg/front_end/testcases/incremental/changing_modules_7.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_7.yaml.world.1.expect
index 00db382..a3215f8d 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_7.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_7.yaml.world.1.expect
@@ -10,7 +10,7 @@
       ;
     method class1() → lib1::Class1* {
       lib1::Class1* class1 = new lib1::Class1::•();
-      class1.{lib1::Class1::c3a}.{lib3::Class3a::c3b}.{lib3::Class3b::str}();
+      class1.{lib1::Class1::c3a}{lib3::Class3a*}.{lib3::Class3a::c3b}{lib3::Class3b*}.{lib3::Class3b::str}(){() →* dart.core::String*};
       return class1;
     }
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.1.expect b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.1.expect
index e4a08ef..45c9ab4 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.1.expect
@@ -83,7 +83,7 @@
     get renderObject() → main::Adaptor*
       return super.{obj::RenderObject::renderObject} as{TypeError} main::Adaptor*;
     method foo() → void {
-      dart.core::print(this.{main::AdaptorElement::renderObject}.{main::_Adaptor&RenderFoo&LibMixin::constraints}.{obj::FooConstraints::axis});
+      dart.core::print(this.{main::AdaptorElement::renderObject}{main::Adaptor*}.{main::_Adaptor&RenderFoo&LibMixin::constraints}{obj::FooConstraints*}.{obj::FooConstraints::axis}{dart.core::String*});
     }
     abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.2.expect b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.2.expect
index e4a08ef..45c9ab4 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml.world.2.expect
@@ -83,7 +83,7 @@
     get renderObject() → main::Adaptor*
       return super.{obj::RenderObject::renderObject} as{TypeError} main::Adaptor*;
     method foo() → void {
-      dart.core::print(this.{main::AdaptorElement::renderObject}.{main::_Adaptor&RenderFoo&LibMixin::constraints}.{obj::FooConstraints::axis});
+      dart.core::print(this.{main::AdaptorElement::renderObject}{main::Adaptor*}.{main::_Adaptor&RenderFoo&LibMixin::constraints}{obj::FooConstraints*}.{obj::FooConstraints::axis}{dart.core::String*});
     }
     abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.1.expect b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.1.expect
index 49289d9..ec1075d 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.1.expect
@@ -89,7 +89,7 @@
     get renderObject() → lib1::Adaptor*
       return super.{obj::RenderObject::renderObject} as{TypeError} lib1::Adaptor*;
     method foo() → void {
-      dart.core::print(this.{main::AdaptorElement::renderObject}.{lib1::_Adaptor&RenderFoo&LibMixin::constraints}.{obj::FooConstraints::axis});
+      dart.core::print(this.{main::AdaptorElement::renderObject}{lib1::Adaptor*}.{lib1::_Adaptor&RenderFoo&LibMixin::constraints}{obj::FooConstraints*}.{obj::FooConstraints::axis}{dart.core::String*});
     }
     abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.2.expect b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.2.expect
index 49289d9..ec1075d 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml.world.2.expect
@@ -89,7 +89,7 @@
     get renderObject() → lib1::Adaptor*
       return super.{obj::RenderObject::renderObject} as{TypeError} lib1::Adaptor*;
     method foo() → void {
-      dart.core::print(this.{main::AdaptorElement::renderObject}.{lib1::_Adaptor&RenderFoo&LibMixin::constraints}.{obj::FooConstraints::axis});
+      dart.core::print(this.{main::AdaptorElement::renderObject}{lib1::Adaptor*}.{lib1::_Adaptor&RenderFoo&LibMixin::constraints}{obj::FooConstraints*}.{obj::FooConstraints::axis}{dart.core::String*});
     }
     abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/incremental/experiments_enabled_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/experiments_enabled_1.yaml.world.1.expect
index 2542952..976a041 100644
--- a/pkg/front_end/testcases/incremental/experiments_enabled_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/experiments_enabled_1.yaml.world.1.expect
@@ -8,7 +8,7 @@
   }
   static method main() → dynamic {
     dynamic x;
-    dart.core::print(x.>>>(2));
+    dart.core::print(x{dynamic}.>>>(2));
     main::Class? c = new main::Class::•();
     dart.core::print(c!);
   }
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
index 48fec45..9aa86a1 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
@@ -47,9 +47,9 @@
 
   static method main() → dynamic {
     lib::Coordinate* coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
-    dart.core::print(coordinate.{lib::Coordinate::x});
-    dart.core::print(coordinate.{lib::Coordinate::y});
-    dart.core::print(coordinate.{lib::Coordinate::next});
+    dart.core::print(coordinate.{lib::Coordinate::x}{dart.core::double*});
+    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double*});
+    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate*>*});
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
index 0f27d3c..42aba72 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
@@ -47,9 +47,9 @@
 
   static method main() → dynamic {
     lib::Coordinate* coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
-    dart.core::print(coordinate.{lib::Coordinate::x});
-    dart.core::print(coordinate.{lib::Coordinate::y});
-    dart.core::print(coordinate.{lib::Coordinate::next});
+    dart.core::print(coordinate.{lib::Coordinate::x}{dart.core::double*});
+    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double*});
+    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate*>*});
     main::done();
   }
   static method done() → dynamic {
diff --git a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
index 969a92d..5d0efe7 100644
--- a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
@@ -48,9 +48,9 @@
   static field lib::Coordinate* coordinate;
   static method main() → dynamic {
     main::coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
-    dart.core::print(main::coordinate.{lib::Coordinate::x});
-    dart.core::print(main::coordinate.{lib::Coordinate::y});
-    dart.core::print(main::coordinate.{lib::Coordinate::next});
+    dart.core::print(main::coordinate.{lib::Coordinate::x}{dart.core::double*});
+    dart.core::print(main::coordinate.{lib::Coordinate::y}{dart.core::double*});
+    dart.core::print(main::coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate*>*});
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expression.1.expect b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expression.1.expect
index 35a37c6..c3ece07 100644
--- a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expression.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expression.1.expect
@@ -1,2 +1,2 @@
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return dart.core::print(#lib1::coordinate.{#lib2::Coordinate::x});
+  return dart.core::print(#lib1::coordinate.{#lib2::Coordinate::x}{dart.core::double*});
diff --git a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.1.expect b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.1.expect
index 559b247..5296948 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.1.expect
@@ -26,6 +26,6 @@
 
   static method main() → dynamic {
     foo::Foo* foo = new foo::Foo::•();
-    foo.{foo::Foo::foo}();
+    foo.{foo::Foo::foo}(){() →* dynamic};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.3.expect b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.3.expect
index 559b247..5296948 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml.world.3.expect
@@ -26,6 +26,6 @@
 
   static method main() → dynamic {
     foo::Foo* foo = new foo::Foo::•();
-    foo.{foo::Foo::foo}();
+    foo.{foo::Foo::foo}(){() →* dynamic};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.1.expect b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.1.expect
index ba7de5d..7f55824 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.1.expect
@@ -5,7 +5,7 @@
 
   static method main() → dynamic {
     foo::Foo* foo = new foo::Foo::•();
-    foo.{foo::Foo::foo}();
+    foo.{foo::Foo::foo}(){() →* dynamic};
   }
 }
 library from "package:mypackage/foo.dart" as foo {
diff --git a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.3.expect b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.3.expect
index ba7de5d..7f55824 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml.world.3.expect
@@ -5,7 +5,7 @@
 
   static method main() → dynamic {
     foo::Foo* foo = new foo::Foo::•();
-    foo.{foo::Foo::foo}();
+    foo.{foo::Foo::foo}(){() →* dynamic};
   }
 }
 library from "package:mypackage/foo.dart" as foo {
diff --git a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expression.2.expect b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expression.2.expect
index 97a108c..caf27dd 100644
--- a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expression.2.expect
+++ b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expression.2.expect
@@ -1,5 +1,5 @@
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return (() → dart.core::int* {
     #lib1::Key* x = new #lib1::ValueKey::•("t");
-    return x.{#lib1::Key::hashCode};
-  }).call();
+    return x.{#lib1::Key::hashCode}{dart.core::int*};
+  })(){() →* dart.core::int*};
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.1.expect
index b05ab6a..4843839 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.1.expect
@@ -36,7 +36,7 @@
 
   static method lib3Method(lib1::Foo* foo) → void {
     lib1::Foo* bar = new lib2::Bar::•();
-    dart.core::bool* equal = foo.{lib1::Foo::==}(bar);
+    dart.core::bool* equal = foo =={lib1::Foo::==}{(dynamic) →* dart.core::bool*} bar;
     dart.core::print("foo == bar = ${equal}");
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.2.expect
index 1039ffd..8485011 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.2.expect
@@ -38,7 +38,7 @@
 
   static method lib3Method(lib1::Foo* foo) → void {
     lib1::Foo* bar = new lib2::Bar::•();
-    dart.core::bool* equal = foo.{lib1::Foo::==}(bar);
+    dart.core::bool* equal = foo =={lib1::Foo::==}{(dynamic) →* dart.core::bool*} bar;
     dart.core::print("foo == bar = ${equal}");
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.3.expect
index aa0d21e..d8f13774 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml.world.3.expect
@@ -38,7 +38,7 @@
 
   static method lib3Method(lib1::Foo* foo) → void {
     lib1::Foo* bar = new lib2::Bar::•();
-    dart.core::bool* equal = foo.{lib1::Foo::==}(bar);
+    dart.core::bool* equal = foo =={lib1::Foo::==}{(dynamic) →* dart.core::bool*} bar;
     dart.core::print("foo == bar = ${equal}");
     dart.core::print("Done!");
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
index 7eec56c..e289c2a 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
@@ -21,7 +21,7 @@
   static method libMethod() → void {
     lib1::Foo* foo = new lib2::Bar::•();
     lib2::Bar* bar = new lib2::Bar::•();
-    dart.core::print(foo.{lib1::Foo::==}(bar));
+    dart.core::print(foo =={lib1::Foo::==}{(dynamic) →* dart.core::bool*} bar);
   }
 }
 library from "org-dartlang-test:///lib2.dart" as lib2 {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.1.expect
index 724237f..9c81633 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.1.expect
@@ -33,11 +33,11 @@
       dart.core::print("noSouchMethod!");
     }
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ getter() → dart.core::bool*
-      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder method /* from org-dartlang-test:///lib1.dart */ method() → void
-      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
-      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
   }
   class Foo2 extends dart.core::Object implements lib1::Bar {
     synthetic constructor •() → main::Foo2*
@@ -56,15 +56,15 @@
     abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ getter() → dart.core::bool*
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ field() → dart.core::bool*
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder method /* from org-dartlang-test:///lib1.dart */ method() → void
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ field(dart.core::bool* value) → void
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C8, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(value)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C8, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(value)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.2.expect
index 80df4d2..b2fcdc2 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml.world.2.expect
@@ -33,11 +33,11 @@
       dart.core::print("noSouchMethod!!");
     }
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ getter() → dart.core::bool*
-      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder method /* from org-dartlang-test:///lib1.dart */ method() → void
-      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
-      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
   }
   class Foo2 extends dart.core::Object implements lib1::Bar {
     synthetic constructor •() → main::Foo2*
@@ -56,15 +56,15 @@
     abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ getter() → dart.core::bool*
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ field() → dart.core::bool*
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder method /* from org-dartlang-test:///lib1.dart */ method() → void
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(b)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ field(dart.core::bool* value) → void
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C8, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(value)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C8, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(value)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation*) →* dynamic};
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.1.expect
index c8ec18e..88cc8e1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.1.expect
@@ -11,7 +11,7 @@
 
   static method main() → dynamic {
     () →* dart.async::Future<dynamic>* f = #C1;
-    f.call();
+    f(){() →* dart.async::Future<dynamic>*};
   }
   static method _#loadLibrary_foo() → dart.async::Future<dynamic>*
     return LoadLibrary(foo);
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.2.expect
index 54f989f..8edd69c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml.world.2.expect
@@ -11,7 +11,7 @@
 
   static method main() → dynamic {
     () →* dart.async::Future<dynamic>* f = #C1;
-    f.call();
+    f(){() →* dart.async::Future<dynamic>*};
     dart.core::print("Done");
   }
   static method _#loadLibrary_foo() → dart.async::Future<dynamic>*
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect
index ecaf0eb..5c66b3c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect
@@ -18,7 +18,7 @@
       ;
     @#C1
     method toString() → dart.core::String* {
-      return "${this.{main::Foo::message}}";
+      return "${this.{main::Foo::message}{dynamic}}";
     }
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
@@ -42,7 +42,7 @@
       : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name};
+      return this.{main::CompilationStrategy::_name}{dart.core::String*};
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect
index 3610c0e..654e34c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect
@@ -18,7 +18,7 @@
       ;
     @#C1
     method toString() → dart.core::String* {
-      return "${this.{main::Foo::message}}!";
+      return "${this.{main::Foo::message}{dynamic}}!";
     }
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
@@ -42,7 +42,7 @@
       : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name};
+      return this.{main::CompilationStrategy::_name}{dart.core::String*};
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect
index 8177839..97bf72f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect
@@ -12,143 +12,143 @@
     abstract member-signature operator [](dart.core::int* index) → dart.core::int*; -> dart.core::List::[]
     abstract member-signature operator []=(dart.core::int* index, generic-covariant-impl dart.core::int* value) → void; -> dart.core::List::[]=
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first() → dart.core::int* {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0))
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      return this.{dart.core::List::[]}(0);
+      return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
     }
     set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first(generic-covariant-impl dart.core::int* value) → void {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0))
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      this.{dart.core::List::[]=}(0, value);
+      this.{dart.core::List::[]=}(0, value){(dart.core::int, dart.core::int*) → void};
     }
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last() → dart.core::int* {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0))
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      return this.{dart.core::List::[]}(this.{dart.core::List::length}.{dart.core::num::-}(1));
+      return this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*};
     }
     set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last(generic-covariant-impl dart.core::int* value) → void {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0))
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      this.{dart.core::List::[]=}(this.{dart.core::List::length}.{dart.core::num::-}(1), value);
+      this.{dart.core::List::[]=}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}, value){(dart.core::int, dart.core::int*) → void};
     }
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ iterator() → dart.core::Iterator<dart.core::int*>
       return new dart._internal::ListIterator::•<dart.core::int*>(this);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ elementAt(dart.core::int index) → dart.core::int*
-      return this.{dart.core::List::[]}(index);
+      return this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int*};
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(generic-covariant-impl dart.core::Iterable<dart.core::int*> other) → dart.core::Iterable<dart.core::int*>
       return dart._internal::FollowedByIterable::firstEfficient<dart.core::int*>(this, other);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ forEach((dart.core::int*) → void action) → void {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        action.call(this.{dart.core::List::[]}(i));
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        action(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → void};
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
     }
     @#C3
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isEmpty() → dart.core::bool
-      return this.{dart.core::List::length}.{dart.core::num::==}(0);
+      return this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0;
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isNotEmpty() → dart.core::bool
-      return !this.{dart.collection::ListMixin::isEmpty};
+      return !this.{dart.collection::ListMixin::isEmpty}{dart.core::bool};
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ single() → dart.core::int* {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0))
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      if(this.{dart.core::List::length}.{dart.core::num::>}(1))
+      if(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::>}(1){(dart.core::num) → dart.core::bool})
         throw dart._internal::IterableElementError::tooMany();
-      return this.{dart.core::List::[]}(0);
+      return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ contains(dart.core::Object? element) → dart.core::bool {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        if(this.{dart.core::List::[]}(i).{dart.core::Object::==}(element))
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
           return true;
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       return false;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ every((dart.core::int*) → dart.core::bool test) → dart.core::bool {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        if(!test.call(this.{dart.core::List::[]}(i)))
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        if(!test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
           return false;
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       return true;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ any((dart.core::int*) → dart.core::bool test) → dart.core::bool {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        if(test.call(this.{dart.core::List::[]}(i)))
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
           return true;
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       return false;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ firstWhere((dart.core::int*) → dart.core::bool test, {generic-covariant-impl () →? dart.core::int* orElse = #C2}) → dart.core::int* {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        dart.core::int* element = this.{dart.core::List::[]}(i);
-        if(test.call(element))
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
+        if(test(element){(dart.core::int*) → dart.core::bool})
           return element;
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
-      if(!orElse.{dart.core::Object::==}(null))
-        return orElse{() → dart.core::int*}.call();
+      if(!(orElse == null))
+        return orElse{() → dart.core::int*}(){() → dart.core::int*};
       throw dart._internal::IterableElementError::noElement();
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastWhere((dart.core::int*) → dart.core::bool test, {generic-covariant-impl () →? dart.core::int* orElse = #C2}) → dart.core::int* {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = length.{dart.core::num::-}(1); i.{dart.core::num::>=}(0); i = i.{dart.core::num::-}(1)) {
-        dart.core::int* element = this.{dart.core::List::[]}(i);
-        if(test.call(element))
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
+        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
+        if(test(element){(dart.core::int*) → dart.core::bool})
           return element;
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
-      if(!orElse.{dart.core::Object::==}(null))
-        return orElse{() → dart.core::int*}.call();
+      if(!(orElse == null))
+        return orElse{() → dart.core::int*}(){() → dart.core::int*};
       throw dart._internal::IterableElementError::noElement();
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ singleWhere((dart.core::int*) → dart.core::bool test, {generic-covariant-impl () →? dart.core::int* orElse = #C2}) → dart.core::int* {
-      dart.core::int length = this.{dart.core::List::length};
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       late dart.core::int* match;
       dart.core::bool matchFound = false;
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        dart.core::int* element = this.{dart.core::List::[]}(i);
-        if(test.call(element)) {
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
+        if(test(element){(dart.core::int*) → dart.core::bool}) {
           if(matchFound) {
             throw dart._internal::IterableElementError::tooMany();
           }
           matchFound = true;
           match = element;
         }
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       if(matchFound)
         return match;
-      if(!orElse.{dart.core::Object::==}(null))
-        return orElse{() → dart.core::int*}.call();
+      if(!(orElse == null))
+        return orElse{() → dart.core::int*}(){() → dart.core::int*};
       throw dart._internal::IterableElementError::noElement();
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ join([dart.core::String separator = #C4]) → dart.core::String {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0))
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         return "";
       dart.core::StringBuffer buffer = let final dart.core::StringBuffer #t1 = new dart.core::StringBuffer::•() in block {
-        #t1.{dart.core::StringBuffer::writeAll}(this, separator);
+        #t1.{dart.core::StringBuffer::writeAll}(this, separator){(dart.core::Iterable<dynamic>, [dart.core::String]) → void};
       } =>#t1;
-      return buffer.{dart.core::StringBuffer::toString}();
+      return buffer.{dart.core::StringBuffer::toString}(){() → dart.core::String};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ where((dart.core::int*) → dart.core::bool test) → dart.core::Iterable<dart.core::int*>
       return new dart._internal::WhereIterable::•<dart.core::int*>(this, test);
@@ -159,13 +159,13 @@
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ expand<T extends dart.core::Object? = dynamic>((dart.core::int*) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%> f) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%>
       return new dart._internal::ExpandIterable::•<dart.core::int*, main::_WithListMixin&Object&ListMixin::expand::T%>(this, f);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reduce(generic-covariant-impl (dart.core::int*, dart.core::int*) → dart.core::int* combine) → dart.core::int* {
-      dart.core::int length = this.{dart.core::List::length};
-      if(length.{dart.core::num::==}(0))
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      if(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      dart.core::int* value = this.{dart.core::List::[]}(0);
-      for (dart.core::int i = 1; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        value = combine.call(value, this.{dart.core::List::[]}(i));
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+      dart.core::int* value = this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
+      for (dart.core::int i = 1; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        value = combine(value, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*, dart.core::int*) → dart.core::int*};
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
@@ -173,10 +173,10 @@
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fold<T extends dart.core::Object? = dynamic>(main::_WithListMixin&Object&ListMixin::fold::T% initialValue, (main::_WithListMixin&Object&ListMixin::fold::T%, dart.core::int*) → main::_WithListMixin&Object&ListMixin::fold::T% combine) → main::_WithListMixin&Object&ListMixin::fold::T% {
       main::_WithListMixin&Object&ListMixin::fold::T% value = initialValue;
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        value = combine.call(value, this.{dart.core::List::[]}(i));
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        value = combine(value, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(main::_WithListMixin&Object&ListMixin::fold::T%, dart.core::int*) → main::_WithListMixin&Object&ListMixin::fold::T%};
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
@@ -193,80 +193,80 @@
       return new dart._internal::TakeWhileIterable::•<dart.core::int*>(this, test);
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toList({dart.core::bool growable = #C5}) → dart.core::List<dart.core::int*> {
-      if(this.{dart.collection::ListMixin::isEmpty})
+      if(this.{dart.collection::ListMixin::isEmpty}{dart.core::bool})
         return dart.core::List::empty<dart.core::int*>(growable: growable);
-      dart.core::int* first = this.{dart.core::List::[]}(0);
-      dart.core::List<dart.core::int*> result = dart.core::List::filled<dart.core::int*>(this.{dart.core::List::length}, first, growable: growable);
-      for (dart.core::int i = 1; i.{dart.core::num::<}(this.{dart.core::List::length}); i = i.{dart.core::num::+}(1)) {
-        result.{dart.core::List::[]=}(i, this.{dart.core::List::[]}(i));
+      dart.core::int* first = this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
+      dart.core::List<dart.core::int*> result = dart.core::List::filled<dart.core::int*>(this.{dart.core::List::length}{dart.core::int}, first, growable: growable);
+      for (dart.core::int i = 1; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        result.{dart.core::List::[]=}(i, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
       }
       return result;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toSet() → dart.core::Set<dart.core::int*> {
       dart.core::Set<dart.core::int*> result = new dart.collection::_CompactLinkedHashSet::•<dart.core::int*>();
-      for (dart.core::int i = 0; i.{dart.core::num::<}(this.{dart.core::List::length}); i = i.{dart.core::num::+}(1)) {
-        result.{dart.core::Set::add}(this.{dart.core::List::[]}(i));
+      for (dart.core::int i = 0; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        result.{dart.core::Set::add}(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool};
       }
       return result;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ add(generic-covariant-impl dart.core::int* element) → void {
-      this.{dart.core::List::[]=}(let final dart.core::int #t2 = this.{dart.core::List::length} in let final dart.core::int #t3 = this.{dart.core::List::length} = #t2.{dart.core::num::+}(1) in #t2, element);
+      this.{dart.core::List::[]=}(let final dart.core::int #t2 = this.{dart.core::List::length}{dart.core::int} in let final dart.core::int #t3 = this.{dart.core::List::length} = #t2.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t2, element){(dart.core::int, dart.core::int*) → void};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ addAll(generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable) → void {
-      dart.core::int i = this.{dart.core::List::length};
+      dart.core::int i = this.{dart.core::List::length}{dart.core::int};
       {
         dart.core::Iterator<dart.core::int*> :sync-for-iterator = iterable.{dart.core::Iterable::iterator};
         for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
           dart.core::int* element = :sync-for-iterator.{dart.core::Iterator::current};
           {
-            assert(this.{dart.core::List::length}.{dart.core::num::==}(i) || (throw new dart.core::ConcurrentModificationError::•(this)));
-            this.{dart.collection::ListMixin::add}(element);
-            i = i.{dart.core::num::+}(1);
+            assert(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} i || (throw new dart.core::ConcurrentModificationError::•(this)));
+            this.{dart.collection::ListMixin::add}(element){(dart.core::int*) → void};
+            i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int};
           }
         }
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ remove(dart.core::Object? element) → dart.core::bool {
-      for (dart.core::int i = 0; i.{dart.core::num::<}(this.{dart.core::List::length}); i = i.{dart.core::num::+}(1)) {
-        if(this.{dart.core::List::[]}(i).{dart.core::Object::==}(element)) {
-          this.{dart.collection::ListMixin::_closeGap}(i, i.{dart.core::num::+}(1));
+      for (dart.core::int i = 0; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element) {
+          this.{dart.collection::ListMixin::_closeGap}(i, i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}){(dart.core::int, dart.core::int) → void};
           return true;
         }
       }
       return false;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _closeGap(dart.core::int start, dart.core::int end) → void {
-      dart.core::int length = this.{dart.core::List::length};
-      assert(0.{dart.core::num::<=}(start));
-      assert(start.{dart.core::num::<}(end));
-      assert(end.{dart.core::num::<=}(length));
-      dart.core::int size = end.{dart.core::num::-}(start);
-      for (dart.core::int i = end; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        this.{dart.core::List::[]=}(i.{dart.core::num::-}(size), this.{dart.core::List::[]}(i));
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      assert(0.{dart.core::num::<=}(start){(dart.core::num) → dart.core::bool});
+      assert(start.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool});
+      assert(end.{dart.core::num::<=}(length){(dart.core::num) → dart.core::bool});
+      dart.core::int size = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
+      for (dart.core::int i = end; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        this.{dart.core::List::[]=}(i.{dart.core::num::-}(size){(dart.core::num) → dart.core::int}, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
       }
-      this.{dart.core::List::length} = length.{dart.core::num::-}(size);
+      this.{dart.core::List::length} = length.{dart.core::num::-}(size){(dart.core::num) → dart.core::int};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeWhere((dart.core::int*) → dart.core::bool test) → void {
-      this.{dart.collection::ListMixin::_filter}(test, false);
+      this.{dart.collection::ListMixin::_filter}(test, false){((dart.core::int*) → dart.core::bool, dart.core::bool) → void};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ retainWhere((dart.core::int*) → dart.core::bool test) → void {
-      this.{dart.collection::ListMixin::_filter}(test, true);
+      this.{dart.collection::ListMixin::_filter}(test, true){((dart.core::int*) → dart.core::bool, dart.core::bool) → void};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _filter((dart.core::int*) → dart.core::bool test, dart.core::bool retainMatching) → void {
       dart.core::List<dart.core::int*> retained = dart.core::_GrowableList::•<dart.core::int*>(0);
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        dart.core::int* element = this.{dart.core::List::[]}(i);
-        if(test.call(element).{dart.core::Object::==}(retainMatching)) {
-          retained.{dart.core::List::add}(element);
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
+        if(test(element){(dart.core::int*) → dart.core::bool} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} retainMatching) {
+          retained.{dart.core::List::add}(element){(dart.core::int*) → void};
         }
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
-      if(!retained.{dart.core::List::length}.{dart.core::num::==}(this.{dart.core::List::length})) {
-        this.{dart.collection::ListMixin::setRange}(0, retained.{dart.core::List::length}, retained);
-        this.{dart.core::List::length} = retained.{dart.core::List::length};
+      if(!(retained.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
+        this.{dart.collection::ListMixin::setRange}(0, retained.{dart.core::List::length}{dart.core::int}, retained){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        this.{dart.core::List::length} = retained.{dart.core::List::length}{dart.core::int};
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ clear() → void {
@@ -275,27 +275,27 @@
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ cast<R extends dart.core::Object? = dynamic>() → dart.core::List<main::_WithListMixin&Object&ListMixin::cast::R%>
       return dart.core::List::castFrom<dart.core::int*, main::_WithListMixin&Object&ListMixin::cast::R%>(this);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeLast() → dart.core::int* {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0)) {
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0) {
         throw dart._internal::IterableElementError::noElement();
       }
-      dart.core::int* result = this.{dart.core::List::[]}(this.{dart.core::List::length}.{dart.core::num::-}(1));
-      this.{dart.core::List::length} = this.{dart.core::List::length}.{dart.core::num::-}(1);
+      dart.core::int* result = this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*};
+      this.{dart.core::List::length} = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
       return result;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sort([(dart.core::int*, dart.core::int*) →? dart.core::int compare = #C2]) → void {
-      dart._internal::Sort::sort<dart.core::int*>(this, let final (dart.core::int*, dart.core::int*) →? dart.core::int #t4 = compare in #t4.{dart.core::Object::==}(null) ?{(dart.core::int*, dart.core::int*) → dart.core::int} #C6 : #t4{(dart.core::int*, dart.core::int*) → dart.core::int});
+      dart._internal::Sort::sort<dart.core::int*>(this, let final (dart.core::int*, dart.core::int*) →? dart.core::int #t4 = compare in #t4 == null ?{(dart.core::int*, dart.core::int*) → dart.core::int} #C6 : #t4{(dart.core::int*, dart.core::int*) → dart.core::int});
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random? random = #C2]) → void {
-      random.{dart.core::Object::==}(null) ?{dart.math::Random} random = dart.math::Random::•() : null;
-      if(random{dart.math::Random}.{dart.core::Object::==}(null))
+      random == null ?{dart.math::Random} random = dart.math::Random::•() : null;
+      if(random{dart.math::Random} == null)
         throw "!";
-      dart.core::int length = this.{dart.core::List::length};
-      while (length.{dart.core::num::>}(1)) {
-        dart.core::int pos = random{dart.math::Random}.{dart.math::Random::nextInt}(length);
-        length = length.{dart.core::num::-}(1);
-        dart.core::int* tmp = this.{dart.core::List::[]}(length);
-        this.{dart.core::List::[]=}(length, this.{dart.core::List::[]}(pos));
-        this.{dart.core::List::[]=}(pos, tmp);
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      while (length.{dart.core::num::>}(1){(dart.core::num) → dart.core::bool}) {
+        dart.core::int pos = random{dart.math::Random}.{dart.math::Random::nextInt}(length){(dart.core::int) → dart.core::int};
+        length = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
+        dart.core::int* tmp = this.{dart.core::List::[]}(length){(dart.core::int) → dart.core::int*};
+        this.{dart.core::List::[]=}(length, this.{dart.core::List::[]}(pos){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
+        this.{dart.core::List::[]=}(pos, tmp){(dart.core::int, dart.core::int*) → void};
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ asMap() → dart.core::Map<dart.core::int, dart.core::int*> {
@@ -304,37 +304,37 @@
     operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(generic-covariant-impl dart.core::List<dart.core::int*> other) → dart.core::List<dart.core::int*>
       return block {
         final dart.core::List<dart.core::int*> #t5 = dart.core::List::of<dart.core::int*>(this);
-        #t5.{dart.core::List::addAll}{Invariant}(other);
+        #t5.{dart.core::List::addAll}(other){(dart.core::Iterable<dart.core::int*>) → void};
       } =>#t5;
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(dart.core::int start, [dart.core::int? end = #C2]) → dart.core::List<dart.core::int*> {
-      dart.core::int listLength = this.{dart.core::List::length};
-      end.{dart.core::num::==}(null) ?{dart.core::int} end = listLength : null;
-      if(end{dart.core::int}.{dart.core::num::==}(null))
+      dart.core::int listLength = this.{dart.core::List::length}{dart.core::int};
+      end == null ?{dart.core::int} end = listLength : null;
+      if(end{dart.core::int} == null)
         throw "!";
       dart.core::RangeError::checkValidRange(start, end{dart.core::int}, listLength);
-      return dart.core::List::from<dart.core::int*>(this.{dart.collection::ListMixin::getRange}(start, end{dart.core::int}));
+      return dart.core::List::from<dart.core::int*>(this.{dart.collection::ListMixin::getRange}(start, end{dart.core::int}){(dart.core::int, dart.core::int) → dart.core::Iterable<dart.core::int*>});
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ getRange(dart.core::int start, dart.core::int end) → dart.core::Iterable<dart.core::int*> {
-      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length});
+      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       return new dart._internal::SubListIterable::•<dart.core::int*>(this, start, end);
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeRange(dart.core::int start, dart.core::int end) → void {
-      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length});
-      if(end.{dart.core::num::>}(start)) {
-        this.{dart.collection::ListMixin::_closeGap}(start, end);
+      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
+      if(end.{dart.core::num::>}(start){(dart.core::num) → dart.core::bool}) {
+        this.{dart.collection::ListMixin::_closeGap}(start, end){(dart.core::int, dart.core::int) → void};
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fillRange(dart.core::int start, dart.core::int end, [generic-covariant-impl dart.core::int? fill = #C2]) → void {
       dart.core::int* value = let dart.core::int? #t6 = fill in #t6.==(null) ?{dart.core::int*} #t6 : #t6{dart.core::int*};
-      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length});
-      for (dart.core::int i = start; i.{dart.core::num::<}(end); i = i.{dart.core::num::+}(1)) {
-        this.{dart.core::List::[]=}(i, value);
+      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
+      for (dart.core::int i = start; i.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        this.{dart.core::List::[]=}(i, value){(dart.core::int, dart.core::int*) → void};
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setRange(dart.core::int start, dart.core::int end, generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable, [dart.core::int skipCount = #C7]) → void {
-      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length});
-      dart.core::int length = end.{dart.core::num::-}(start);
-      if(length.{dart.core::num::==}(0))
+      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
+      dart.core::int length = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
+      if(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         return;
       dart.core::RangeError::checkNotNegative(skipCount, "skipCount");
       dart.core::List<dart.core::int*> otherList;
@@ -344,158 +344,158 @@
         otherStart = skipCount;
       }
       else {
-        otherList = iterable.{dart.core::Iterable::skip}(skipCount).{dart.core::Iterable::toList}(growable: false);
+        otherList = iterable.{dart.core::Iterable::skip}(skipCount){(dart.core::int) → dart.core::Iterable<dart.core::int*>}.{dart.core::Iterable::toList}(growable: false){({growable: dart.core::bool}) → dart.core::List<dart.core::int*>};
         otherStart = 0;
       }
-      if(otherStart.{dart.core::num::+}(length).{dart.core::num::>}(otherList.{dart.core::List::length})) {
+      if(otherStart.{dart.core::num::+}(length){(dart.core::num) → dart.core::int}.{dart.core::num::>}(otherList.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}) {
         throw dart._internal::IterableElementError::tooFew();
       }
-      if(otherStart.{dart.core::num::<}(start)) {
-        for (dart.core::int i = length.{dart.core::num::-}(1); i.{dart.core::num::>=}(0); i = i.{dart.core::num::-}(1)) {
-          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i), otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i)));
+      if(otherStart.{dart.core::num::<}(start){(dart.core::num) → dart.core::bool}) {
+        for (dart.core::int i = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
+          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}, otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
         }
       }
       else {
-        for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i), otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i)));
+        for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}, otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
         }
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ replaceRange(dart.core::int start, dart.core::int end, generic-covariant-impl dart.core::Iterable<dart.core::int*> newContents) → void {
-      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length});
-      if(start.{dart.core::num::==}(this.{dart.core::List::length})) {
-        this.{dart.collection::ListMixin::addAll}(newContents);
+      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
+      if(start =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
+        this.{dart.collection::ListMixin::addAll}(newContents){(dart.core::Iterable<dart.core::int*>) → void};
         return;
       }
       if(!(newContents is{ForNonNullableByDefault} dart._internal::EfficientLengthIterable<dynamic>)) {
-        newContents = newContents.{dart.core::Iterable::toList}();
+        newContents = newContents.{dart.core::Iterable::toList}(){({growable: dart.core::bool}) → dart.core::List<dart.core::int*>};
       }
-      dart.core::int removeLength = end.{dart.core::num::-}(start);
-      dart.core::int insertLength = newContents.{dart.core::Iterable::length};
-      if(removeLength.{dart.core::num::>=}(insertLength)) {
-        dart.core::int insertEnd = start.{dart.core::num::+}(insertLength);
-        this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents);
-        if(removeLength.{dart.core::num::>}(insertLength)) {
-          this.{dart.collection::ListMixin::_closeGap}(insertEnd, end);
+      dart.core::int removeLength = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
+      dart.core::int insertLength = newContents.{dart.core::Iterable::length}{dart.core::int};
+      if(removeLength.{dart.core::num::>=}(insertLength){(dart.core::num) → dart.core::bool}) {
+        dart.core::int insertEnd = start.{dart.core::num::+}(insertLength){(dart.core::num) → dart.core::int};
+        this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        if(removeLength.{dart.core::num::>}(insertLength){(dart.core::num) → dart.core::bool}) {
+          this.{dart.collection::ListMixin::_closeGap}(insertEnd, end){(dart.core::int, dart.core::int) → void};
         }
       }
       else
-        if(end.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(end =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
           dart.core::int i = start;
           {
             dart.core::Iterator<dart.core::int*> :sync-for-iterator = newContents.{dart.core::Iterable::iterator};
             for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
               dart.core::int* element = :sync-for-iterator.{dart.core::Iterator::current};
               {
-                if(i.{dart.core::num::<}(end)) {
-                  this.{dart.core::List::[]=}(i, element);
+                if(i.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool}) {
+                  this.{dart.core::List::[]=}(i, element){(dart.core::int, dart.core::int*) → void};
                 }
                 else {
-                  this.{dart.collection::ListMixin::add}(element);
+                  this.{dart.collection::ListMixin::add}(element){(dart.core::int*) → void};
                 }
-                i = i.{dart.core::num::+}(1);
+                i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int};
               }
             }
           }
         }
         else {
-          dart.core::int delta = insertLength.{dart.core::num::-}(removeLength);
-          dart.core::int oldLength = this.{dart.core::List::length};
-          dart.core::int insertEnd = start.{dart.core::num::+}(insertLength);
-          for (dart.core::int i = oldLength.{dart.core::num::-}(delta); i.{dart.core::num::<}(oldLength); i = i.{dart.core::num::+}(1)) {
-            this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0) ?{dart.core::int} i : 0));
+          dart.core::int delta = insertLength.{dart.core::num::-}(removeLength){(dart.core::num) → dart.core::int};
+          dart.core::int oldLength = this.{dart.core::List::length}{dart.core::int};
+          dart.core::int insertEnd = start.{dart.core::num::+}(insertLength){(dart.core::num) → dart.core::int};
+          for (dart.core::int i = oldLength.{dart.core::num::-}(delta){(dart.core::num) → dart.core::int}; i.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+            this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool} ?{dart.core::int} i : 0){(dart.core::int) → dart.core::int*}){(dart.core::int*) → void};
           }
-          if(insertEnd.{dart.core::num::<}(oldLength)) {
-            this.{dart.collection::ListMixin::setRange}(insertEnd, oldLength, this, end);
+          if(insertEnd.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}) {
+            this.{dart.collection::ListMixin::setRange}(insertEnd, oldLength, this, end){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
           }
-          this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents);
+          this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
         }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexOf(generic-covariant-impl dart.core::Object? element, [dart.core::int start = #C7]) → dart.core::int {
-      if(start.{dart.core::num::<}(0))
+      if(start.{dart.core::num::<}(0){(dart.core::num) → dart.core::bool})
         start = 0;
-      for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}); i = i.{dart.core::num::+}(1)) {
-        if(this.{dart.core::List::[]}(i).{dart.core::Object::==}(element))
+      for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
           return i;
       }
-      return 1.{dart.core::int::unary-}();
+      return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexWhere((dart.core::int*) → dart.core::bool test, [dart.core::int start = #C7]) → dart.core::int {
-      if(start.{dart.core::num::<}(0))
+      if(start.{dart.core::num::<}(0){(dart.core::num) → dart.core::bool})
         start = 0;
-      for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}); i = i.{dart.core::num::+}(1)) {
-        if(test.call(this.{dart.core::List::[]}(i)))
+      for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
           return i;
       }
-      return 1.{dart.core::int::unary-}();
+      return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexOf(generic-covariant-impl dart.core::Object? element, [dart.core::int? start = #C2]) → dart.core::int {
-      if(start.{dart.core::num::==}(null) || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}))
-        start = this.{dart.core::List::length}.{dart.core::num::-}(1);
-      if(start{dart.core::int}.{dart.core::num::==}(null))
+      if(start == null || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool})
+        start = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
+      if(start{dart.core::int} == null)
         throw "!";
-      for (dart.core::int i = start{dart.core::int}; i.{dart.core::num::>=}(0); i = i.{dart.core::num::-}(1)) {
-        if(this.{dart.core::List::[]}(i).{dart.core::Object::==}(element))
+      for (dart.core::int i = start{dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
           return i;
       }
-      return 1.{dart.core::int::unary-}();
+      return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexWhere((dart.core::int*) → dart.core::bool test, [dart.core::int? start = #C2]) → dart.core::int {
-      if(start.{dart.core::num::==}(null) || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}))
-        start = this.{dart.core::List::length}.{dart.core::num::-}(1);
-      if(start{dart.core::int}.{dart.core::num::==}(null))
+      if(start == null || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool})
+        start = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
+      if(start{dart.core::int} == null)
         throw "!";
-      for (dart.core::int i = start{dart.core::int}; i.{dart.core::num::>=}(0); i = i.{dart.core::num::-}(1)) {
-        if(test.call(this.{dart.core::List::[]}(i)))
+      for (dart.core::int i = start{dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
+        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
           return i;
       }
-      return 1.{dart.core::int::unary-}();
+      return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insert(dart.core::int index, generic-covariant-impl dart.core::int* element) → void {
       dart._internal::checkNotNullable<dart.core::int>(index, "index");
-      dart.core::int length = this.{dart.core::List::length};
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       dart.core::RangeError::checkValueInInterval(index, 0, length, "index");
-      this.{dart.collection::ListMixin::add}(element);
-      if(!index.{dart.core::num::==}(length)) {
-        this.{dart.collection::ListMixin::setRange}(index.{dart.core::num::+}(1), length.{dart.core::num::+}(1), this, index);
-        this.{dart.core::List::[]=}(index, element);
+      this.{dart.collection::ListMixin::add}(element){(dart.core::int*) → void};
+      if(!(index =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} length)) {
+        this.{dart.collection::ListMixin::setRange}(index.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}, length.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}, this, index){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        this.{dart.core::List::[]=}(index, element){(dart.core::int, dart.core::int*) → void};
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeAt(dart.core::int index) → dart.core::int* {
-      dart.core::int* result = this.{dart.core::List::[]}(index);
-      this.{dart.collection::ListMixin::_closeGap}(index, index.{dart.core::num::+}(1));
+      dart.core::int* result = this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int*};
+      this.{dart.collection::ListMixin::_closeGap}(index, index.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}){(dart.core::int, dart.core::int) → void};
       return result;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insertAll(dart.core::int index, generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable) → void {
-      dart.core::RangeError::checkValueInInterval(index, 0, this.{dart.core::List::length}, "index");
-      if(index.{dart.core::num::==}(this.{dart.core::List::length})) {
-        this.{dart.collection::ListMixin::addAll}(iterable);
+      dart.core::RangeError::checkValueInInterval(index, 0, this.{dart.core::List::length}{dart.core::int}, "index");
+      if(index =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
+        this.{dart.collection::ListMixin::addAll}(iterable){(dart.core::Iterable<dart.core::int*>) → void};
         return;
       }
       if(!(iterable is{ForNonNullableByDefault} dart._internal::EfficientLengthIterable<dynamic>) || dart.core::identical(iterable, this)) {
-        iterable = iterable.{dart.core::Iterable::toList}();
+        iterable = iterable.{dart.core::Iterable::toList}(){({growable: dart.core::bool}) → dart.core::List<dart.core::int*>};
       }
-      dart.core::int insertionLength = iterable.{dart.core::Iterable::length};
-      if(insertionLength.{dart.core::num::==}(0)) {
+      dart.core::int insertionLength = iterable.{dart.core::Iterable::length}{dart.core::int};
+      if(insertionLength =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0) {
         return;
       }
-      dart.core::int oldLength = this.{dart.core::List::length};
-      for (dart.core::int i = oldLength.{dart.core::num::-}(insertionLength); i.{dart.core::num::<}(oldLength); i = i.{dart.core::num::+}(1)) {
-        this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0) ?{dart.core::int} i : 0));
+      dart.core::int oldLength = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = oldLength.{dart.core::num::-}(insertionLength){(dart.core::num) → dart.core::int}; i.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool} ?{dart.core::int} i : 0){(dart.core::int) → dart.core::int*}){(dart.core::int*) → void};
       }
-      if(!iterable.{dart.core::Iterable::length}.{dart.core::num::==}(insertionLength)) {
-        this.{dart.core::List::length} = this.{dart.core::List::length}.{dart.core::num::-}(insertionLength);
+      if(!(iterable.{dart.core::Iterable::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} insertionLength)) {
+        this.{dart.core::List::length} = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(insertionLength){(dart.core::num) → dart.core::int};
         throw new dart.core::ConcurrentModificationError::•(iterable);
       }
-      dart.core::int oldCopyStart = index.{dart.core::num::+}(insertionLength);
-      if(oldCopyStart.{dart.core::num::<}(oldLength)) {
-        this.{dart.collection::ListMixin::setRange}(oldCopyStart, oldLength, this, index);
+      dart.core::int oldCopyStart = index.{dart.core::num::+}(insertionLength){(dart.core::num) → dart.core::int};
+      if(oldCopyStart.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}) {
+        this.{dart.collection::ListMixin::setRange}(oldCopyStart, oldLength, this, index){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
       }
-      this.{dart.collection::ListMixin::setAll}(index, iterable);
+      this.{dart.collection::ListMixin::setAll}(index, iterable){(dart.core::int, dart.core::Iterable<dart.core::int*>) → void};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setAll(dart.core::int index, generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable) → void {
       if(iterable is{ForNonNullableByDefault} dart.core::List<dynamic>) {
-        this.{dart.collection::ListMixin::setRange}(index, index.{dart.core::num::+}(iterable.{dart.core::Iterable::length}), iterable);
+        this.{dart.collection::ListMixin::setRange}(index, index.{dart.core::num::+}(iterable.{dart.core::Iterable::length}{dart.core::int}){(dart.core::num) → dart.core::int}, iterable){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
       }
       else {
         {
@@ -503,7 +503,7 @@
           for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
             dart.core::int* element = :sync-for-iterator.{dart.core::Iterator::current};
             {
-              this.{dart.core::List::[]=}(let final dart.core::int #t7 = index in let final dart.core::int #t8 = index = #t7.{dart.core::num::+}(1) in #t7, element);
+              this.{dart.core::List::[]=}(let final dart.core::int #t7 = index in let final dart.core::int #t8 = index = #t7.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t7, element){(dart.core::int, dart.core::int*) → void};
             }
           }
         }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect
index 8177839..97bf72f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect
@@ -12,143 +12,143 @@
     abstract member-signature operator [](dart.core::int* index) → dart.core::int*; -> dart.core::List::[]
     abstract member-signature operator []=(dart.core::int* index, generic-covariant-impl dart.core::int* value) → void; -> dart.core::List::[]=
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first() → dart.core::int* {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0))
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      return this.{dart.core::List::[]}(0);
+      return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
     }
     set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first(generic-covariant-impl dart.core::int* value) → void {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0))
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      this.{dart.core::List::[]=}(0, value);
+      this.{dart.core::List::[]=}(0, value){(dart.core::int, dart.core::int*) → void};
     }
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last() → dart.core::int* {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0))
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      return this.{dart.core::List::[]}(this.{dart.core::List::length}.{dart.core::num::-}(1));
+      return this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*};
     }
     set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last(generic-covariant-impl dart.core::int* value) → void {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0))
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      this.{dart.core::List::[]=}(this.{dart.core::List::length}.{dart.core::num::-}(1), value);
+      this.{dart.core::List::[]=}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}, value){(dart.core::int, dart.core::int*) → void};
     }
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ iterator() → dart.core::Iterator<dart.core::int*>
       return new dart._internal::ListIterator::•<dart.core::int*>(this);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ elementAt(dart.core::int index) → dart.core::int*
-      return this.{dart.core::List::[]}(index);
+      return this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int*};
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(generic-covariant-impl dart.core::Iterable<dart.core::int*> other) → dart.core::Iterable<dart.core::int*>
       return dart._internal::FollowedByIterable::firstEfficient<dart.core::int*>(this, other);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ forEach((dart.core::int*) → void action) → void {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        action.call(this.{dart.core::List::[]}(i));
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        action(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → void};
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
     }
     @#C3
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isEmpty() → dart.core::bool
-      return this.{dart.core::List::length}.{dart.core::num::==}(0);
+      return this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0;
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ isNotEmpty() → dart.core::bool
-      return !this.{dart.collection::ListMixin::isEmpty};
+      return !this.{dart.collection::ListMixin::isEmpty}{dart.core::bool};
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ single() → dart.core::int* {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0))
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      if(this.{dart.core::List::length}.{dart.core::num::>}(1))
+      if(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::>}(1){(dart.core::num) → dart.core::bool})
         throw dart._internal::IterableElementError::tooMany();
-      return this.{dart.core::List::[]}(0);
+      return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ contains(dart.core::Object? element) → dart.core::bool {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        if(this.{dart.core::List::[]}(i).{dart.core::Object::==}(element))
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
           return true;
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       return false;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ every((dart.core::int*) → dart.core::bool test) → dart.core::bool {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        if(!test.call(this.{dart.core::List::[]}(i)))
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        if(!test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
           return false;
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       return true;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ any((dart.core::int*) → dart.core::bool test) → dart.core::bool {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        if(test.call(this.{dart.core::List::[]}(i)))
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
           return true;
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       return false;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ firstWhere((dart.core::int*) → dart.core::bool test, {generic-covariant-impl () →? dart.core::int* orElse = #C2}) → dart.core::int* {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        dart.core::int* element = this.{dart.core::List::[]}(i);
-        if(test.call(element))
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
+        if(test(element){(dart.core::int*) → dart.core::bool})
           return element;
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
-      if(!orElse.{dart.core::Object::==}(null))
-        return orElse{() → dart.core::int*}.call();
+      if(!(orElse == null))
+        return orElse{() → dart.core::int*}(){() → dart.core::int*};
       throw dart._internal::IterableElementError::noElement();
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastWhere((dart.core::int*) → dart.core::bool test, {generic-covariant-impl () →? dart.core::int* orElse = #C2}) → dart.core::int* {
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = length.{dart.core::num::-}(1); i.{dart.core::num::>=}(0); i = i.{dart.core::num::-}(1)) {
-        dart.core::int* element = this.{dart.core::List::[]}(i);
-        if(test.call(element))
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
+        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
+        if(test(element){(dart.core::int*) → dart.core::bool})
           return element;
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
-      if(!orElse.{dart.core::Object::==}(null))
-        return orElse{() → dart.core::int*}.call();
+      if(!(orElse == null))
+        return orElse{() → dart.core::int*}(){() → dart.core::int*};
       throw dart._internal::IterableElementError::noElement();
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ singleWhere((dart.core::int*) → dart.core::bool test, {generic-covariant-impl () →? dart.core::int* orElse = #C2}) → dart.core::int* {
-      dart.core::int length = this.{dart.core::List::length};
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       late dart.core::int* match;
       dart.core::bool matchFound = false;
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        dart.core::int* element = this.{dart.core::List::[]}(i);
-        if(test.call(element)) {
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
+        if(test(element){(dart.core::int*) → dart.core::bool}) {
           if(matchFound) {
             throw dart._internal::IterableElementError::tooMany();
           }
           matchFound = true;
           match = element;
         }
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
       if(matchFound)
         return match;
-      if(!orElse.{dart.core::Object::==}(null))
-        return orElse{() → dart.core::int*}.call();
+      if(!(orElse == null))
+        return orElse{() → dart.core::int*}(){() → dart.core::int*};
       throw dart._internal::IterableElementError::noElement();
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ join([dart.core::String separator = #C4]) → dart.core::String {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0))
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         return "";
       dart.core::StringBuffer buffer = let final dart.core::StringBuffer #t1 = new dart.core::StringBuffer::•() in block {
-        #t1.{dart.core::StringBuffer::writeAll}(this, separator);
+        #t1.{dart.core::StringBuffer::writeAll}(this, separator){(dart.core::Iterable<dynamic>, [dart.core::String]) → void};
       } =>#t1;
-      return buffer.{dart.core::StringBuffer::toString}();
+      return buffer.{dart.core::StringBuffer::toString}(){() → dart.core::String};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ where((dart.core::int*) → dart.core::bool test) → dart.core::Iterable<dart.core::int*>
       return new dart._internal::WhereIterable::•<dart.core::int*>(this, test);
@@ -159,13 +159,13 @@
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ expand<T extends dart.core::Object? = dynamic>((dart.core::int*) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%> f) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%>
       return new dart._internal::ExpandIterable::•<dart.core::int*, main::_WithListMixin&Object&ListMixin::expand::T%>(this, f);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reduce(generic-covariant-impl (dart.core::int*, dart.core::int*) → dart.core::int* combine) → dart.core::int* {
-      dart.core::int length = this.{dart.core::List::length};
-      if(length.{dart.core::num::==}(0))
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      if(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
-      dart.core::int* value = this.{dart.core::List::[]}(0);
-      for (dart.core::int i = 1; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        value = combine.call(value, this.{dart.core::List::[]}(i));
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+      dart.core::int* value = this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
+      for (dart.core::int i = 1; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        value = combine(value, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*, dart.core::int*) → dart.core::int*};
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
@@ -173,10 +173,10 @@
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fold<T extends dart.core::Object? = dynamic>(main::_WithListMixin&Object&ListMixin::fold::T% initialValue, (main::_WithListMixin&Object&ListMixin::fold::T%, dart.core::int*) → main::_WithListMixin&Object&ListMixin::fold::T% combine) → main::_WithListMixin&Object&ListMixin::fold::T% {
       main::_WithListMixin&Object&ListMixin::fold::T% value = initialValue;
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        value = combine.call(value, this.{dart.core::List::[]}(i));
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        value = combine(value, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(main::_WithListMixin&Object&ListMixin::fold::T%, dart.core::int*) → main::_WithListMixin&Object&ListMixin::fold::T%};
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
@@ -193,80 +193,80 @@
       return new dart._internal::TakeWhileIterable::•<dart.core::int*>(this, test);
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toList({dart.core::bool growable = #C5}) → dart.core::List<dart.core::int*> {
-      if(this.{dart.collection::ListMixin::isEmpty})
+      if(this.{dart.collection::ListMixin::isEmpty}{dart.core::bool})
         return dart.core::List::empty<dart.core::int*>(growable: growable);
-      dart.core::int* first = this.{dart.core::List::[]}(0);
-      dart.core::List<dart.core::int*> result = dart.core::List::filled<dart.core::int*>(this.{dart.core::List::length}, first, growable: growable);
-      for (dart.core::int i = 1; i.{dart.core::num::<}(this.{dart.core::List::length}); i = i.{dart.core::num::+}(1)) {
-        result.{dart.core::List::[]=}(i, this.{dart.core::List::[]}(i));
+      dart.core::int* first = this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
+      dart.core::List<dart.core::int*> result = dart.core::List::filled<dart.core::int*>(this.{dart.core::List::length}{dart.core::int}, first, growable: growable);
+      for (dart.core::int i = 1; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        result.{dart.core::List::[]=}(i, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
       }
       return result;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ toSet() → dart.core::Set<dart.core::int*> {
       dart.core::Set<dart.core::int*> result = new dart.collection::_CompactLinkedHashSet::•<dart.core::int*>();
-      for (dart.core::int i = 0; i.{dart.core::num::<}(this.{dart.core::List::length}); i = i.{dart.core::num::+}(1)) {
-        result.{dart.core::Set::add}(this.{dart.core::List::[]}(i));
+      for (dart.core::int i = 0; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        result.{dart.core::Set::add}(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool};
       }
       return result;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ add(generic-covariant-impl dart.core::int* element) → void {
-      this.{dart.core::List::[]=}(let final dart.core::int #t2 = this.{dart.core::List::length} in let final dart.core::int #t3 = this.{dart.core::List::length} = #t2.{dart.core::num::+}(1) in #t2, element);
+      this.{dart.core::List::[]=}(let final dart.core::int #t2 = this.{dart.core::List::length}{dart.core::int} in let final dart.core::int #t3 = this.{dart.core::List::length} = #t2.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t2, element){(dart.core::int, dart.core::int*) → void};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ addAll(generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable) → void {
-      dart.core::int i = this.{dart.core::List::length};
+      dart.core::int i = this.{dart.core::List::length}{dart.core::int};
       {
         dart.core::Iterator<dart.core::int*> :sync-for-iterator = iterable.{dart.core::Iterable::iterator};
         for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
           dart.core::int* element = :sync-for-iterator.{dart.core::Iterator::current};
           {
-            assert(this.{dart.core::List::length}.{dart.core::num::==}(i) || (throw new dart.core::ConcurrentModificationError::•(this)));
-            this.{dart.collection::ListMixin::add}(element);
-            i = i.{dart.core::num::+}(1);
+            assert(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} i || (throw new dart.core::ConcurrentModificationError::•(this)));
+            this.{dart.collection::ListMixin::add}(element){(dart.core::int*) → void};
+            i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int};
           }
         }
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ remove(dart.core::Object? element) → dart.core::bool {
-      for (dart.core::int i = 0; i.{dart.core::num::<}(this.{dart.core::List::length}); i = i.{dart.core::num::+}(1)) {
-        if(this.{dart.core::List::[]}(i).{dart.core::Object::==}(element)) {
-          this.{dart.collection::ListMixin::_closeGap}(i, i.{dart.core::num::+}(1));
+      for (dart.core::int i = 0; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element) {
+          this.{dart.collection::ListMixin::_closeGap}(i, i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}){(dart.core::int, dart.core::int) → void};
           return true;
         }
       }
       return false;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _closeGap(dart.core::int start, dart.core::int end) → void {
-      dart.core::int length = this.{dart.core::List::length};
-      assert(0.{dart.core::num::<=}(start));
-      assert(start.{dart.core::num::<}(end));
-      assert(end.{dart.core::num::<=}(length));
-      dart.core::int size = end.{dart.core::num::-}(start);
-      for (dart.core::int i = end; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        this.{dart.core::List::[]=}(i.{dart.core::num::-}(size), this.{dart.core::List::[]}(i));
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      assert(0.{dart.core::num::<=}(start){(dart.core::num) → dart.core::bool});
+      assert(start.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool});
+      assert(end.{dart.core::num::<=}(length){(dart.core::num) → dart.core::bool});
+      dart.core::int size = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
+      for (dart.core::int i = end; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        this.{dart.core::List::[]=}(i.{dart.core::num::-}(size){(dart.core::num) → dart.core::int}, this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
       }
-      this.{dart.core::List::length} = length.{dart.core::num::-}(size);
+      this.{dart.core::List::length} = length.{dart.core::num::-}(size){(dart.core::num) → dart.core::int};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeWhere((dart.core::int*) → dart.core::bool test) → void {
-      this.{dart.collection::ListMixin::_filter}(test, false);
+      this.{dart.collection::ListMixin::_filter}(test, false){((dart.core::int*) → dart.core::bool, dart.core::bool) → void};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ retainWhere((dart.core::int*) → dart.core::bool test) → void {
-      this.{dart.collection::ListMixin::_filter}(test, true);
+      this.{dart.collection::ListMixin::_filter}(test, true){((dart.core::int*) → dart.core::bool, dart.core::bool) → void};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _filter((dart.core::int*) → dart.core::bool test, dart.core::bool retainMatching) → void {
       dart.core::List<dart.core::int*> retained = dart.core::_GrowableList::•<dart.core::int*>(0);
-      dart.core::int length = this.{dart.core::List::length};
-      for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-        dart.core::int* element = this.{dart.core::List::[]}(i);
-        if(test.call(element).{dart.core::Object::==}(retainMatching)) {
-          retained.{dart.core::List::add}(element);
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
+        if(test(element){(dart.core::int*) → dart.core::bool} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} retainMatching) {
+          retained.{dart.core::List::add}(element){(dart.core::int*) → void};
         }
-        if(!length.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(!(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
           throw new dart.core::ConcurrentModificationError::•(this);
         }
       }
-      if(!retained.{dart.core::List::length}.{dart.core::num::==}(this.{dart.core::List::length})) {
-        this.{dart.collection::ListMixin::setRange}(0, retained.{dart.core::List::length}, retained);
-        this.{dart.core::List::length} = retained.{dart.core::List::length};
+      if(!(retained.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int})) {
+        this.{dart.collection::ListMixin::setRange}(0, retained.{dart.core::List::length}{dart.core::int}, retained){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        this.{dart.core::List::length} = retained.{dart.core::List::length}{dart.core::int};
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ clear() → void {
@@ -275,27 +275,27 @@
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ cast<R extends dart.core::Object? = dynamic>() → dart.core::List<main::_WithListMixin&Object&ListMixin::cast::R%>
       return dart.core::List::castFrom<dart.core::int*, main::_WithListMixin&Object&ListMixin::cast::R%>(this);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeLast() → dart.core::int* {
-      if(this.{dart.core::List::length}.{dart.core::num::==}(0)) {
+      if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0) {
         throw dart._internal::IterableElementError::noElement();
       }
-      dart.core::int* result = this.{dart.core::List::[]}(this.{dart.core::List::length}.{dart.core::num::-}(1));
-      this.{dart.core::List::length} = this.{dart.core::List::length}.{dart.core::num::-}(1);
+      dart.core::int* result = this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*};
+      this.{dart.core::List::length} = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
       return result;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sort([(dart.core::int*, dart.core::int*) →? dart.core::int compare = #C2]) → void {
-      dart._internal::Sort::sort<dart.core::int*>(this, let final (dart.core::int*, dart.core::int*) →? dart.core::int #t4 = compare in #t4.{dart.core::Object::==}(null) ?{(dart.core::int*, dart.core::int*) → dart.core::int} #C6 : #t4{(dart.core::int*, dart.core::int*) → dart.core::int});
+      dart._internal::Sort::sort<dart.core::int*>(this, let final (dart.core::int*, dart.core::int*) →? dart.core::int #t4 = compare in #t4 == null ?{(dart.core::int*, dart.core::int*) → dart.core::int} #C6 : #t4{(dart.core::int*, dart.core::int*) → dart.core::int});
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random? random = #C2]) → void {
-      random.{dart.core::Object::==}(null) ?{dart.math::Random} random = dart.math::Random::•() : null;
-      if(random{dart.math::Random}.{dart.core::Object::==}(null))
+      random == null ?{dart.math::Random} random = dart.math::Random::•() : null;
+      if(random{dart.math::Random} == null)
         throw "!";
-      dart.core::int length = this.{dart.core::List::length};
-      while (length.{dart.core::num::>}(1)) {
-        dart.core::int pos = random{dart.math::Random}.{dart.math::Random::nextInt}(length);
-        length = length.{dart.core::num::-}(1);
-        dart.core::int* tmp = this.{dart.core::List::[]}(length);
-        this.{dart.core::List::[]=}(length, this.{dart.core::List::[]}(pos));
-        this.{dart.core::List::[]=}(pos, tmp);
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
+      while (length.{dart.core::num::>}(1){(dart.core::num) → dart.core::bool}) {
+        dart.core::int pos = random{dart.math::Random}.{dart.math::Random::nextInt}(length){(dart.core::int) → dart.core::int};
+        length = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
+        dart.core::int* tmp = this.{dart.core::List::[]}(length){(dart.core::int) → dart.core::int*};
+        this.{dart.core::List::[]=}(length, this.{dart.core::List::[]}(pos){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
+        this.{dart.core::List::[]=}(pos, tmp){(dart.core::int, dart.core::int*) → void};
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ asMap() → dart.core::Map<dart.core::int, dart.core::int*> {
@@ -304,37 +304,37 @@
     operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(generic-covariant-impl dart.core::List<dart.core::int*> other) → dart.core::List<dart.core::int*>
       return block {
         final dart.core::List<dart.core::int*> #t5 = dart.core::List::of<dart.core::int*>(this);
-        #t5.{dart.core::List::addAll}{Invariant}(other);
+        #t5.{dart.core::List::addAll}(other){(dart.core::Iterable<dart.core::int*>) → void};
       } =>#t5;
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(dart.core::int start, [dart.core::int? end = #C2]) → dart.core::List<dart.core::int*> {
-      dart.core::int listLength = this.{dart.core::List::length};
-      end.{dart.core::num::==}(null) ?{dart.core::int} end = listLength : null;
-      if(end{dart.core::int}.{dart.core::num::==}(null))
+      dart.core::int listLength = this.{dart.core::List::length}{dart.core::int};
+      end == null ?{dart.core::int} end = listLength : null;
+      if(end{dart.core::int} == null)
         throw "!";
       dart.core::RangeError::checkValidRange(start, end{dart.core::int}, listLength);
-      return dart.core::List::from<dart.core::int*>(this.{dart.collection::ListMixin::getRange}(start, end{dart.core::int}));
+      return dart.core::List::from<dart.core::int*>(this.{dart.collection::ListMixin::getRange}(start, end{dart.core::int}){(dart.core::int, dart.core::int) → dart.core::Iterable<dart.core::int*>});
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ getRange(dart.core::int start, dart.core::int end) → dart.core::Iterable<dart.core::int*> {
-      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length});
+      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       return new dart._internal::SubListIterable::•<dart.core::int*>(this, start, end);
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeRange(dart.core::int start, dart.core::int end) → void {
-      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length});
-      if(end.{dart.core::num::>}(start)) {
-        this.{dart.collection::ListMixin::_closeGap}(start, end);
+      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
+      if(end.{dart.core::num::>}(start){(dart.core::num) → dart.core::bool}) {
+        this.{dart.collection::ListMixin::_closeGap}(start, end){(dart.core::int, dart.core::int) → void};
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fillRange(dart.core::int start, dart.core::int end, [generic-covariant-impl dart.core::int? fill = #C2]) → void {
       dart.core::int* value = let dart.core::int? #t6 = fill in #t6.==(null) ?{dart.core::int*} #t6 : #t6{dart.core::int*};
-      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length});
-      for (dart.core::int i = start; i.{dart.core::num::<}(end); i = i.{dart.core::num::+}(1)) {
-        this.{dart.core::List::[]=}(i, value);
+      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
+      for (dart.core::int i = start; i.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        this.{dart.core::List::[]=}(i, value){(dart.core::int, dart.core::int*) → void};
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setRange(dart.core::int start, dart.core::int end, generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable, [dart.core::int skipCount = #C7]) → void {
-      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length});
-      dart.core::int length = end.{dart.core::num::-}(start);
-      if(length.{dart.core::num::==}(0))
+      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
+      dart.core::int length = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
+      if(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         return;
       dart.core::RangeError::checkNotNegative(skipCount, "skipCount");
       dart.core::List<dart.core::int*> otherList;
@@ -344,158 +344,158 @@
         otherStart = skipCount;
       }
       else {
-        otherList = iterable.{dart.core::Iterable::skip}(skipCount).{dart.core::Iterable::toList}(growable: false);
+        otherList = iterable.{dart.core::Iterable::skip}(skipCount){(dart.core::int) → dart.core::Iterable<dart.core::int*>}.{dart.core::Iterable::toList}(growable: false){({growable: dart.core::bool}) → dart.core::List<dart.core::int*>};
         otherStart = 0;
       }
-      if(otherStart.{dart.core::num::+}(length).{dart.core::num::>}(otherList.{dart.core::List::length})) {
+      if(otherStart.{dart.core::num::+}(length){(dart.core::num) → dart.core::int}.{dart.core::num::>}(otherList.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}) {
         throw dart._internal::IterableElementError::tooFew();
       }
-      if(otherStart.{dart.core::num::<}(start)) {
-        for (dart.core::int i = length.{dart.core::num::-}(1); i.{dart.core::num::>=}(0); i = i.{dart.core::num::-}(1)) {
-          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i), otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i)));
+      if(otherStart.{dart.core::num::<}(start){(dart.core::num) → dart.core::bool}) {
+        for (dart.core::int i = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
+          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}, otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
         }
       }
       else {
-        for (dart.core::int i = 0; i.{dart.core::num::<}(length); i = i.{dart.core::num::+}(1)) {
-          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i), otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i)));
+        for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+          this.{dart.core::List::[]=}(start.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}, otherList.{dart.core::List::[]}(otherStart.{dart.core::num::+}(i){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*}){(dart.core::int, dart.core::int*) → void};
         }
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ replaceRange(dart.core::int start, dart.core::int end, generic-covariant-impl dart.core::Iterable<dart.core::int*> newContents) → void {
-      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length});
-      if(start.{dart.core::num::==}(this.{dart.core::List::length})) {
-        this.{dart.collection::ListMixin::addAll}(newContents);
+      dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
+      if(start =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
+        this.{dart.collection::ListMixin::addAll}(newContents){(dart.core::Iterable<dart.core::int*>) → void};
         return;
       }
       if(!(newContents is{ForNonNullableByDefault} dart._internal::EfficientLengthIterable<dynamic>)) {
-        newContents = newContents.{dart.core::Iterable::toList}();
+        newContents = newContents.{dart.core::Iterable::toList}(){({growable: dart.core::bool}) → dart.core::List<dart.core::int*>};
       }
-      dart.core::int removeLength = end.{dart.core::num::-}(start);
-      dart.core::int insertLength = newContents.{dart.core::Iterable::length};
-      if(removeLength.{dart.core::num::>=}(insertLength)) {
-        dart.core::int insertEnd = start.{dart.core::num::+}(insertLength);
-        this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents);
-        if(removeLength.{dart.core::num::>}(insertLength)) {
-          this.{dart.collection::ListMixin::_closeGap}(insertEnd, end);
+      dart.core::int removeLength = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
+      dart.core::int insertLength = newContents.{dart.core::Iterable::length}{dart.core::int};
+      if(removeLength.{dart.core::num::>=}(insertLength){(dart.core::num) → dart.core::bool}) {
+        dart.core::int insertEnd = start.{dart.core::num::+}(insertLength){(dart.core::num) → dart.core::int};
+        this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        if(removeLength.{dart.core::num::>}(insertLength){(dart.core::num) → dart.core::bool}) {
+          this.{dart.collection::ListMixin::_closeGap}(insertEnd, end){(dart.core::int, dart.core::int) → void};
         }
       }
       else
-        if(end.{dart.core::num::==}(this.{dart.core::List::length})) {
+        if(end =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
           dart.core::int i = start;
           {
             dart.core::Iterator<dart.core::int*> :sync-for-iterator = newContents.{dart.core::Iterable::iterator};
             for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
               dart.core::int* element = :sync-for-iterator.{dart.core::Iterator::current};
               {
-                if(i.{dart.core::num::<}(end)) {
-                  this.{dart.core::List::[]=}(i, element);
+                if(i.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool}) {
+                  this.{dart.core::List::[]=}(i, element){(dart.core::int, dart.core::int*) → void};
                 }
                 else {
-                  this.{dart.collection::ListMixin::add}(element);
+                  this.{dart.collection::ListMixin::add}(element){(dart.core::int*) → void};
                 }
-                i = i.{dart.core::num::+}(1);
+                i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int};
               }
             }
           }
         }
         else {
-          dart.core::int delta = insertLength.{dart.core::num::-}(removeLength);
-          dart.core::int oldLength = this.{dart.core::List::length};
-          dart.core::int insertEnd = start.{dart.core::num::+}(insertLength);
-          for (dart.core::int i = oldLength.{dart.core::num::-}(delta); i.{dart.core::num::<}(oldLength); i = i.{dart.core::num::+}(1)) {
-            this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0) ?{dart.core::int} i : 0));
+          dart.core::int delta = insertLength.{dart.core::num::-}(removeLength){(dart.core::num) → dart.core::int};
+          dart.core::int oldLength = this.{dart.core::List::length}{dart.core::int};
+          dart.core::int insertEnd = start.{dart.core::num::+}(insertLength){(dart.core::num) → dart.core::int};
+          for (dart.core::int i = oldLength.{dart.core::num::-}(delta){(dart.core::num) → dart.core::int}; i.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+            this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool} ?{dart.core::int} i : 0){(dart.core::int) → dart.core::int*}){(dart.core::int*) → void};
           }
-          if(insertEnd.{dart.core::num::<}(oldLength)) {
-            this.{dart.collection::ListMixin::setRange}(insertEnd, oldLength, this, end);
+          if(insertEnd.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}) {
+            this.{dart.collection::ListMixin::setRange}(insertEnd, oldLength, this, end){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
           }
-          this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents);
+          this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
         }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexOf(generic-covariant-impl dart.core::Object? element, [dart.core::int start = #C7]) → dart.core::int {
-      if(start.{dart.core::num::<}(0))
+      if(start.{dart.core::num::<}(0){(dart.core::num) → dart.core::bool})
         start = 0;
-      for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}); i = i.{dart.core::num::+}(1)) {
-        if(this.{dart.core::List::[]}(i).{dart.core::Object::==}(element))
+      for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
           return i;
       }
-      return 1.{dart.core::int::unary-}();
+      return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexWhere((dart.core::int*) → dart.core::bool test, [dart.core::int start = #C7]) → dart.core::int {
-      if(start.{dart.core::num::<}(0))
+      if(start.{dart.core::num::<}(0){(dart.core::num) → dart.core::bool})
         start = 0;
-      for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}); i = i.{dart.core::num::+}(1)) {
-        if(test.call(this.{dart.core::List::[]}(i)))
+      for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
           return i;
       }
-      return 1.{dart.core::int::unary-}();
+      return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexOf(generic-covariant-impl dart.core::Object? element, [dart.core::int? start = #C2]) → dart.core::int {
-      if(start.{dart.core::num::==}(null) || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}))
-        start = this.{dart.core::List::length}.{dart.core::num::-}(1);
-      if(start{dart.core::int}.{dart.core::num::==}(null))
+      if(start == null || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool})
+        start = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
+      if(start{dart.core::int} == null)
         throw "!";
-      for (dart.core::int i = start{dart.core::int}; i.{dart.core::num::>=}(0); i = i.{dart.core::num::-}(1)) {
-        if(this.{dart.core::List::[]}(i).{dart.core::Object::==}(element))
+      for (dart.core::int i = start{dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
+        if(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*} =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} element)
           return i;
       }
-      return 1.{dart.core::int::unary-}();
+      return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexWhere((dart.core::int*) → dart.core::bool test, [dart.core::int? start = #C2]) → dart.core::int {
-      if(start.{dart.core::num::==}(null) || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}))
-        start = this.{dart.core::List::length}.{dart.core::num::-}(1);
-      if(start{dart.core::int}.{dart.core::num::==}(null))
+      if(start == null || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool})
+        start = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
+      if(start{dart.core::int} == null)
         throw "!";
-      for (dart.core::int i = start{dart.core::int}; i.{dart.core::num::>=}(0); i = i.{dart.core::num::-}(1)) {
-        if(test.call(this.{dart.core::List::[]}(i)))
+      for (dart.core::int i = start{dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
+        if(test(this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*}){(dart.core::int*) → dart.core::bool})
           return i;
       }
-      return 1.{dart.core::int::unary-}();
+      return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insert(dart.core::int index, generic-covariant-impl dart.core::int* element) → void {
       dart._internal::checkNotNullable<dart.core::int>(index, "index");
-      dart.core::int length = this.{dart.core::List::length};
+      dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       dart.core::RangeError::checkValueInInterval(index, 0, length, "index");
-      this.{dart.collection::ListMixin::add}(element);
-      if(!index.{dart.core::num::==}(length)) {
-        this.{dart.collection::ListMixin::setRange}(index.{dart.core::num::+}(1), length.{dart.core::num::+}(1), this, index);
-        this.{dart.core::List::[]=}(index, element);
+      this.{dart.collection::ListMixin::add}(element){(dart.core::int*) → void};
+      if(!(index =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} length)) {
+        this.{dart.collection::ListMixin::setRange}(index.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}, length.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}, this, index){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
+        this.{dart.core::List::[]=}(index, element){(dart.core::int, dart.core::int*) → void};
       }
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ removeAt(dart.core::int index) → dart.core::int* {
-      dart.core::int* result = this.{dart.core::List::[]}(index);
-      this.{dart.collection::ListMixin::_closeGap}(index, index.{dart.core::num::+}(1));
+      dart.core::int* result = this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int*};
+      this.{dart.collection::ListMixin::_closeGap}(index, index.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}){(dart.core::int, dart.core::int) → void};
       return result;
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insertAll(dart.core::int index, generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable) → void {
-      dart.core::RangeError::checkValueInInterval(index, 0, this.{dart.core::List::length}, "index");
-      if(index.{dart.core::num::==}(this.{dart.core::List::length})) {
-        this.{dart.collection::ListMixin::addAll}(iterable);
+      dart.core::RangeError::checkValueInInterval(index, 0, this.{dart.core::List::length}{dart.core::int}, "index");
+      if(index =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
+        this.{dart.collection::ListMixin::addAll}(iterable){(dart.core::Iterable<dart.core::int*>) → void};
         return;
       }
       if(!(iterable is{ForNonNullableByDefault} dart._internal::EfficientLengthIterable<dynamic>) || dart.core::identical(iterable, this)) {
-        iterable = iterable.{dart.core::Iterable::toList}();
+        iterable = iterable.{dart.core::Iterable::toList}(){({growable: dart.core::bool}) → dart.core::List<dart.core::int*>};
       }
-      dart.core::int insertionLength = iterable.{dart.core::Iterable::length};
-      if(insertionLength.{dart.core::num::==}(0)) {
+      dart.core::int insertionLength = iterable.{dart.core::Iterable::length}{dart.core::int};
+      if(insertionLength =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0) {
         return;
       }
-      dart.core::int oldLength = this.{dart.core::List::length};
-      for (dart.core::int i = oldLength.{dart.core::num::-}(insertionLength); i.{dart.core::num::<}(oldLength); i = i.{dart.core::num::+}(1)) {
-        this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0) ?{dart.core::int} i : 0));
+      dart.core::int oldLength = this.{dart.core::List::length}{dart.core::int};
+      for (dart.core::int i = oldLength.{dart.core::num::-}(insertionLength){(dart.core::num) → dart.core::int}; i.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+        this.{dart.collection::ListMixin::add}(this.{dart.core::List::[]}(i.{dart.core::num::>}(0){(dart.core::num) → dart.core::bool} ?{dart.core::int} i : 0){(dart.core::int) → dart.core::int*}){(dart.core::int*) → void};
       }
-      if(!iterable.{dart.core::Iterable::length}.{dart.core::num::==}(insertionLength)) {
-        this.{dart.core::List::length} = this.{dart.core::List::length}.{dart.core::num::-}(insertionLength);
+      if(!(iterable.{dart.core::Iterable::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} insertionLength)) {
+        this.{dart.core::List::length} = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(insertionLength){(dart.core::num) → dart.core::int};
         throw new dart.core::ConcurrentModificationError::•(iterable);
       }
-      dart.core::int oldCopyStart = index.{dart.core::num::+}(insertionLength);
-      if(oldCopyStart.{dart.core::num::<}(oldLength)) {
-        this.{dart.collection::ListMixin::setRange}(oldCopyStart, oldLength, this, index);
+      dart.core::int oldCopyStart = index.{dart.core::num::+}(insertionLength){(dart.core::num) → dart.core::int};
+      if(oldCopyStart.{dart.core::num::<}(oldLength){(dart.core::num) → dart.core::bool}) {
+        this.{dart.collection::ListMixin::setRange}(oldCopyStart, oldLength, this, index){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
       }
-      this.{dart.collection::ListMixin::setAll}(index, iterable);
+      this.{dart.collection::ListMixin::setAll}(index, iterable){(dart.core::int, dart.core::Iterable<dart.core::int*>) → void};
     }
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setAll(dart.core::int index, generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable) → void {
       if(iterable is{ForNonNullableByDefault} dart.core::List<dynamic>) {
-        this.{dart.collection::ListMixin::setRange}(index, index.{dart.core::num::+}(iterable.{dart.core::Iterable::length}), iterable);
+        this.{dart.collection::ListMixin::setRange}(index, index.{dart.core::num::+}(iterable.{dart.core::Iterable::length}{dart.core::int}){(dart.core::num) → dart.core::int}, iterable){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
       }
       else {
         {
@@ -503,7 +503,7 @@
           for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
             dart.core::int* element = :sync-for-iterator.{dart.core::Iterator::current};
             {
-              this.{dart.core::List::[]=}(let final dart.core::int #t7 = index in let final dart.core::int #t8 = index = #t7.{dart.core::num::+}(1) in #t7, element);
+              this.{dart.core::List::[]=}(let final dart.core::int #t7 = index in let final dart.core::int #t8 = index = #t7.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t7, element){(dart.core::int, dart.core::int*) → void};
             }
           }
         }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect
index 1a9acd5..7e300e4 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect
@@ -23,7 +23,7 @@
       dart.core::print("bar 1");
     }
     method callBar() → void {
-      invalid-expression "org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.\n    bar();\n    ^".call();
+      invalid-expression "org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.\n    bar();\n    ^"{dynamic}.call();
     }
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect
index 1a9acd5..7e300e4 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect
@@ -23,7 +23,7 @@
       dart.core::print("bar 1");
     }
     method callBar() → void {
-      invalid-expression "org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.\n    bar();\n    ^".call();
+      invalid-expression "org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.\n    bar();\n    ^"{dynamic}.call();
     }
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_29.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_29.yaml.world.1.expect
index f687cd9..5293243 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_29.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_29.yaml.world.1.expect
@@ -22,36 +22,36 @@
       : super dart.core::Object::•()
       ;
     get field5() → dart.core::int? {
-      if(!this.{main::C::_#C#field5#isSet}) {
+      if(!this.{main::C::_#C#field5#isSet}{dart.core::bool}) {
         this.{main::C::_#C#field5} = 42;
         this.{main::C::_#C#field5#isSet} = true;
       }
-      return this.{main::C::_#C#field5};
+      return this.{main::C::_#C#field5}{dart.core::int?};
     }
     set field5(dart.core::int? #t1) → void {
       this.{main::C::_#C#field5#isSet} = true;
       this.{main::C::_#C#field5} = #t1;
     }
     get field6() → dart.core::int?
-      return this.{main::C::_#C#field6#isSet} ?{dart.core::int?} this.{main::C::_#C#field6} : throw new dart._internal::LateError::fieldNI("field6");
+      return this.{main::C::_#C#field6#isSet}{dart.core::bool} ?{dart.core::int?} this.{main::C::_#C#field6}{dart.core::int?} : throw new dart._internal::LateError::fieldNI("field6");
     set field6(dart.core::int? #t2) → void {
       this.{main::C::_#C#field6#isSet} = true;
       this.{main::C::_#C#field6} = #t2;
     }
     get field7() → dart.core::int? {
-      if(!this.{main::C::_#C#field7#isSet}) {
+      if(!this.{main::C::_#C#field7#isSet}{dart.core::bool}) {
         final dart.core::int? #t3 = 42;
-        if(this.{main::C::_#C#field7#isSet})
+        if(this.{main::C::_#C#field7#isSet}{dart.core::bool})
           throw new dart._internal::LateError::fieldADI("field7");
         this.{main::C::_#C#field7} = #t3;
         this.{main::C::_#C#field7#isSet} = true;
       }
-      return this.{main::C::_#C#field7};
+      return this.{main::C::_#C#field7}{dart.core::int?};
     }
     get field8() → dart.core::int?
-      return this.{main::C::_#C#field8#isSet} ?{dart.core::int?} this.{main::C::_#C#field8} : throw new dart._internal::LateError::fieldNI("field8");
+      return this.{main::C::_#C#field8#isSet}{dart.core::bool} ?{dart.core::int?} this.{main::C::_#C#field8}{dart.core::int?} : throw new dart._internal::LateError::fieldNI("field8");
     set field8(dart.core::int? #t4) → void
-      if(this.{main::C::_#C#field8#isSet})
+      if(this.{main::C::_#C#field8#isSet}{dart.core::bool})
         throw new dart._internal::LateError::fieldAI("field8");
       else {
         this.{main::C::_#C#field8#isSet} = true;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_29.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_29.yaml.world.2.expect
index 672f9b9..20d8f89 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_29.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_29.yaml.world.2.expect
@@ -22,36 +22,36 @@
       : super dart.core::Object::•()
       ;
     get field5() → dart.core::int? {
-      if(!this.{main::C::_#C#field5#isSet}) {
+      if(!this.{main::C::_#C#field5#isSet}{dart.core::bool}) {
         this.{main::C::_#C#field5} = 42;
         this.{main::C::_#C#field5#isSet} = true;
       }
-      return this.{main::C::_#C#field5};
+      return this.{main::C::_#C#field5}{dart.core::int?};
     }
     set field5(dart.core::int? #t1) → void {
       this.{main::C::_#C#field5#isSet} = true;
       this.{main::C::_#C#field5} = #t1;
     }
     get field6() → dart.core::int?
-      return this.{main::C::_#C#field6#isSet} ?{dart.core::int?} this.{main::C::_#C#field6} : throw new dart._internal::LateError::fieldNI("field6");
+      return this.{main::C::_#C#field6#isSet}{dart.core::bool} ?{dart.core::int?} this.{main::C::_#C#field6}{dart.core::int?} : throw new dart._internal::LateError::fieldNI("field6");
     set field6(dart.core::int? #t2) → void {
       this.{main::C::_#C#field6#isSet} = true;
       this.{main::C::_#C#field6} = #t2;
     }
     get field7() → dart.core::int? {
-      if(!this.{main::C::_#C#field7#isSet}) {
+      if(!this.{main::C::_#C#field7#isSet}{dart.core::bool}) {
         final dart.core::int? #t3 = 42;
-        if(this.{main::C::_#C#field7#isSet})
+        if(this.{main::C::_#C#field7#isSet}{dart.core::bool})
           throw new dart._internal::LateError::fieldADI("field7");
         this.{main::C::_#C#field7} = #t3;
         this.{main::C::_#C#field7#isSet} = true;
       }
-      return this.{main::C::_#C#field7};
+      return this.{main::C::_#C#field7}{dart.core::int?};
     }
     get field8() → dart.core::int?
-      return this.{main::C::_#C#field8#isSet} ?{dart.core::int?} this.{main::C::_#C#field8} : throw new dart._internal::LateError::fieldNI("field8");
+      return this.{main::C::_#C#field8#isSet}{dart.core::bool} ?{dart.core::int?} this.{main::C::_#C#field8}{dart.core::int?} : throw new dart._internal::LateError::fieldNI("field8");
     set field8(dart.core::int? #t4) → void
-      if(this.{main::C::_#C#field8#isSet})
+      if(this.{main::C::_#C#field8#isSet}{dart.core::bool})
         throw new dart._internal::LateError::fieldAI("field8");
       else {
         this.{main::C::_#C#field8#isSet} = true;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
index 48fec45..9aa86a1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
@@ -47,9 +47,9 @@
 
   static method main() → dynamic {
     lib::Coordinate* coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
-    dart.core::print(coordinate.{lib::Coordinate::x});
-    dart.core::print(coordinate.{lib::Coordinate::y});
-    dart.core::print(coordinate.{lib::Coordinate::next});
+    dart.core::print(coordinate.{lib::Coordinate::x}{dart.core::double*});
+    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double*});
+    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate*>*});
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
index f74978e..32b8ad5 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
@@ -47,9 +47,9 @@
 
   static method main() → dynamic {
     lib::Coordinate* coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
-    dart.core::print(coordinate.{lib::Coordinate::x});
-    dart.core::print(coordinate.{lib::Coordinate::y});
-    dart.core::print(coordinate.{lib::Coordinate::next});
+    dart.core::print(coordinate.{lib::Coordinate::x}{dart.core::double*});
+    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double*});
+    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate*>*});
     dart.core::print("Done!");
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
index 392f43a..cf35c48 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
@@ -48,9 +48,9 @@
 
   static method main() → dynamic {
     lib::Coordinate* coordinate = lib::Coordinate::allocate(42.0, 42.0, null);
-    dart.core::print(coordinate.{lib::Coordinate::x});
-    dart.core::print(coordinate.{lib::Coordinate::y});
-    dart.core::print(coordinate.{lib::Coordinate::next});
+    dart.core::print(coordinate.{lib::Coordinate::x}{dart.core::double*});
+    dart.core::print(coordinate.{lib::Coordinate::y}{dart.core::double*});
+    dart.core::print(coordinate.{lib::Coordinate::next}{dart.ffi::Pointer<lib::Coordinate*>*});
     dart.core::print("Done!");
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.1.expect
index beeaf14..f8fa7652b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.1.expect
@@ -41,6 +41,6 @@
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo(main::X* x) → dart.core::int* {
-    return x is lib::Y* ?{dart.core::int*} x{lib::Y*}.{lib::Y::foo} : null;
+    return x is lib::Y* ?{dart.core::int*} x{lib::Y*}.{lib::Y::foo}{dart.core::int*} : null;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.2.expect
index beeaf14..f8fa7652b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.2.expect
@@ -41,6 +41,6 @@
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo(main::X* x) → dart.core::int* {
-    return x is lib::Y* ?{dart.core::int*} x{lib::Y*}.{lib::Y::foo} : null;
+    return x is lib::Y* ?{dart.core::int*} x{lib::Y*}.{lib::Y::foo}{dart.core::int*} : null;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.3.expect
index beeaf14..f8fa7652b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml.world.3.expect
@@ -41,6 +41,6 @@
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   static method foo(main::X* x) → dart.core::int* {
-    return x is lib::Y* ?{dart.core::int*} x{lib::Y*}.{lib::Y::foo} : null;
+    return x is lib::Y* ?{dart.core::int*} x{lib::Y*}.{lib::Y::foo}{dart.core::int*} : null;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.1.expect
index 1bcab1b..a91314f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.1.expect
@@ -26,7 +26,7 @@
       : super libA::_Bar&Object&Foo::•()
       ;
     method method2() → dynamic {
-      this.{libA::_Bar&Object&Foo::method}();
+      this.{libA::_Bar&Object&Foo::method}(){() →* dynamic};
     }
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.2.expect
index eb76ec5..82880e2 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml.world.2.expect
@@ -26,7 +26,7 @@
       : super libA::_Bar&Object&Foo::•()
       ;
     method method2() → dynamic {
-      this.{libA::_Bar&Object&Foo::method}();
+      this.{libA::_Bar&Object&Foo::method}(){() →* dynamic};
     }
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.1.expect
index 83a60c98..3fa4b88 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.1.expect
@@ -23,6 +23,6 @@
 
   static method foo() → void {
     dart.core::int* value = lib::libField;
-    lib::libField = value.{dart.core::num::+}(1);
+    lib::libField = value.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.2.expect
index 83a60c98..3fa4b88 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.2.expect
@@ -23,6 +23,6 @@
 
   static method foo() → void {
     dart.core::int* value = lib::libField;
-    lib::libField = value.{dart.core::num::+}(1);
+    lib::libField = value.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.3.expect
index 83a60c98..3fa4b88 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.3.expect
@@ -23,6 +23,6 @@
 
   static method foo() → void {
     dart.core::int* value = lib::libField;
-    lib::libField = value.{dart.core::num::+}(1);
+    lib::libField = value.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.4.expect b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.4.expect
index 83a60c98..3fa4b88 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml.world.4.expect
@@ -23,6 +23,6 @@
 
   static method foo() → void {
     dart.core::int* value = lib::libField;
-    lib::libField = value.{dart.core::num::+}(1);
+    lib::libField = value.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
index 9091dbc..fa8fec9 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
@@ -25,7 +25,7 @@
       ;
     @#C1
     method toString() → dart.core::String* {
-      return "${this.{main::Foo::message}}";
+      return "${this.{main::Foo::message}{dynamic}}";
     }
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
@@ -49,7 +49,7 @@
       : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name};
+      return this.{main::CompilationStrategy::_name}{dart.core::String*};
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
index f6720c8..2311e2e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
@@ -25,7 +25,7 @@
       ;
     @#C1
     method toString() → dart.core::String* {
-      return "${this.{main::Foo::message}}!!!";
+      return "${this.{main::Foo::message}{dynamic}}!!!";
     }
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
@@ -49,7 +49,7 @@
       : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name};
+      return this.{main::CompilationStrategy::_name}{dart.core::String*};
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect
index f8e3bb3..395e141 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect
@@ -18,7 +18,7 @@
       ;
     @#C1
     method toString() → dart.core::String* {
-      return "${this.{main::Foo::message}}?!?";
+      return "${this.{main::Foo::message}{dynamic}}?!?";
     }
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
@@ -42,7 +42,7 @@
       : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name};
+      return this.{main::CompilationStrategy::_name}{dart.core::String*};
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect
index 9514f9c..28c10a2 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect
@@ -38,7 +38,7 @@
       ;
     @#C2
     method toString() → dart.core::String* {
-      return "${this.{main::Foo::message}}";
+      return "${this.{main::Foo::message}{dynamic}}";
     }
   }
   @#C1
@@ -58,7 +58,7 @@
       : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name};
+      return this.{main::CompilationStrategy::_name}{dart.core::String*};
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect
index 9514f9c..28c10a2 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect
@@ -38,7 +38,7 @@
       ;
     @#C2
     method toString() → dart.core::String* {
-      return "${this.{main::Foo::message}}";
+      return "${this.{main::Foo::message}{dynamic}}";
     }
   }
   @#C1
@@ -58,7 +58,7 @@
       : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name};
+      return this.{main::CompilationStrategy::_name}{dart.core::String*};
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.1.expect
index 4871eff..e12f28a 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.1.expect
@@ -22,7 +22,7 @@
   }
   static method main() → dynamic {
     main::Foo* foo = new main::Foo::•();
-    dart.core::print(foo.{main::Foo::x});
+    dart.core::print(foo.{main::Foo::x}{dart.core::String*});
     foo.{main::Foo::x} = "hello";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.2.expect
index 6de6baf..bc1e6cb 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml.world.2.expect
@@ -22,7 +22,7 @@
   }
   static method main() → dynamic {
     main::Foo* foo = new main::Foo::•();
-    dart.core::print(foo.{main::Foo::x});
+    dart.core::print(foo.{main::Foo::x}{dart.core::String*});
     foo.{main::Foo::x} = "hello";
   }
 }
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.3.expect b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.3.expect
index eb9a3f3..6769929 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.3.expect
@@ -4,6 +4,6 @@
   import "org-dartlang-test:///lib.dart";
 
   static method main() → dynamic {
-    dart.core::print(#lib1::lib().+("!"));
+    dart.core::print(#lib1::lib(){dynamic}.+("!"));
   }
 }
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.5.expect b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.5.expect
index a4d9f55..c3d91f8 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.5.expect
@@ -10,7 +10,7 @@
   import "org-dartlang-test:///lib.dart";
 
   static method main() → dynamic {
-    dart.core::print(lib::lib().+("!!"));
+    dart.core::print(lib::lib(){dynamic}.+("!!"));
   }
 }
 
diff --git a/pkg/front_end/testcases/incremental/regress_46004.yaml.world.1.expect b/pkg/front_end/testcases/incremental/regress_46004.yaml.world.1.expect
index 7918e0b..702407d 100644
--- a/pkg/front_end/testcases/incremental/regress_46004.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/regress_46004.yaml.world.1.expect
@@ -16,7 +16,7 @@
     set lpVtbl(dart.ffi::Pointer<dart.ffi::IntPtr> #externalFieldValue) → void
       return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}, (#C8).{dart.core::List::[]}(dart.ffi::_abi()), #externalFieldValue.{dart.ffi::Pointer::address});
     get vtable() → dart.ffi::Pointer<dart.ffi::IntPtr>
-      return dart.ffi::Pointer::fromAddress<dart.ffi::IntPtr>(dart.ffi::IntPtrPointer|get#value(this.{lib::COMObject::lpVtbl}));
+      return dart.ffi::Pointer::fromAddress<dart.ffi::IntPtr>(dart.ffi::IntPtrPointer|get#value(this.{lib::COMObject::lpVtbl}{dart.ffi::Pointer<dart.ffi::IntPtr>}));
     @#C10
     static get #sizeOf() → dart.core::int*
       return (#C13).{dart.core::List::[]}(dart.ffi::_abi());
diff --git a/pkg/front_end/testcases/incremental/regress_46004.yaml.world.2.expect b/pkg/front_end/testcases/incremental/regress_46004.yaml.world.2.expect
index 7918e0b..702407d 100644
--- a/pkg/front_end/testcases/incremental/regress_46004.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/regress_46004.yaml.world.2.expect
@@ -16,7 +16,7 @@
     set lpVtbl(dart.ffi::Pointer<dart.ffi::IntPtr> #externalFieldValue) → void
       return dart.ffi::_storeIntPtr(this.{dart.ffi::_Compound::_typedDataBase}, (#C8).{dart.core::List::[]}(dart.ffi::_abi()), #externalFieldValue.{dart.ffi::Pointer::address});
     get vtable() → dart.ffi::Pointer<dart.ffi::IntPtr>
-      return dart.ffi::Pointer::fromAddress<dart.ffi::IntPtr>(dart.ffi::IntPtrPointer|get#value(this.{lib::COMObject::lpVtbl}));
+      return dart.ffi::Pointer::fromAddress<dart.ffi::IntPtr>(dart.ffi::IntPtrPointer|get#value(this.{lib::COMObject::lpVtbl}{dart.ffi::Pointer<dart.ffi::IntPtr>}));
     @#C10
     static get #sizeOf() → dart.core::int*
       return (#C13).{dart.core::List::[]}(dart.ffi::_abi());
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.1.expect
index 72e701a..a45e928 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.1.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
index 678510c..b7a31e0 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
index 1f5c8b7..63b9159 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
index 989f313..a127102 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.5.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.5.expect
index 28f7969..2d91ec1 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.5.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.1.expect
index 72e701a..a45e928 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.1.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
index 14ebe65..e13f758 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.3.expect
index 27a3ce0..ae3bfe7 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.3.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.1.expect
index 72e701a..a45e928 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.1.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
index b0e7394..72d51f4 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.3.expect
index 72e701a..a45e928 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.3.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.1.expect
index 72e701a..a45e928 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.1.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
index d892035..0fd2abb 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.3.expect
index 51df21a..dc713d3 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.3.expect
@@ -3,7 +3,7 @@
 
   class Foo extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •(dart.core::int* i) → lib::Foo*
-      : assert(i.{dart.core::num::>}(0)), super dart.core::Object::•()
+      : assert(i.{dart.core::num::>}(0){(dart.core::num*) →* dart.core::bool*}), super dart.core::Object::•()
       ;
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.1.expect b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.1.expect
index 6c62e4d..71ed943 100644
--- a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.1.expect
@@ -4,6 +4,6 @@
   import "dart:typed_data";
 
   static method setUint8List(dart.typed_data::Uint8List* list, dart.core::int* index, dart.core::int* value) → void {
-    list.{dart.core::List::[]=}(index, value);
+    list.{dart.core::List::[]=}(index, value){(dart.core::int*, dart.core::int*) →* void};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.2.expect b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.2.expect
index 543a390..5cb6157 100644
--- a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.2.expect
@@ -4,6 +4,6 @@
   import "dart:typed_data";
 
   static method setInt8List(dart.typed_data::Int8List* list, dart.core::int* index, dart.core::int* value) → void {
-    list.{dart.core::List::[]=}(index, value);
+    list.{dart.core::List::[]=}(index, value){(dart.core::int*, dart.core::int*) →* void};
   }
 }
diff --git a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.3.expect b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.3.expect
index 6c62e4d..71ed943 100644
--- a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml.world.3.expect
@@ -4,6 +4,6 @@
   import "dart:typed_data";
 
   static method setUint8List(dart.typed_data::Uint8List* list, dart.core::int* index, dart.core::int* value) → void {
-    list.{dart.core::List::[]=}(index, value);
+    list.{dart.core::List::[]=}(index, value){(dart.core::int*, dart.core::int*) →* void};
   }
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.expect
index 4637a4f..f19d465 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.expect
@@ -9,14 +9,14 @@
 
 static method test() → dynamic {
   () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async {
-    if(math::Random::•().{math::Random::nextBool}()) {
+    if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
       return asy::Future::value<core::int*>(1);
     }
     else {
       return asy::Future::value<core::double*>(2.0);
     }
   };
-  asy::Future<core::num*>* g = f.call();
-  asy::Future<core::int*>* h = f.call() as{TypeError} asy::Future<core::int*>*;
+  asy::Future<core::num*>* g = f(){() →* asy::Future<core::num*>*};
+  asy::Future<core::int*>* h = f(){() →* asy::Future<core::num*>*} as{TypeError} asy::Future<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect
index 5bac272..1f47c71 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
       try {
         #L1:
         {
-          if(math::Random::•().{math::Random::nextBool}()) {
+          if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
             :return_value = asy::Future::value<core::int*>(1);
             break #L1;
           }
@@ -41,7 +41,7 @@
     :is_sync = true;
     return :async_future;
   };
-  asy::Future<core::num*>* g = f.call();
-  asy::Future<core::int*>* h = f.call() as{TypeError} asy::Future<core::int*>*;
+  asy::Future<core::num*>* g = f(){() →* asy::Future<core::num*>*};
+  asy::Future<core::int*>* h = f(){() →* asy::Future<core::num*>*} as{TypeError} asy::Future<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.expect
index 99817a4..419ef81 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.expect
@@ -9,14 +9,14 @@
 
 static method test() → dynamic {
   () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async {
-    if(math::Random::•().{math::Random::nextBool}()) {
+    if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
       return 1;
     }
     else {
       return 2.0;
     }
   };
-  asy::Future<core::num*>* g = f.call();
-  asy::Future<core::int*>* h = f.call() as{TypeError} asy::Future<core::int*>*;
+  asy::Future<core::num*>* g = f(){() →* asy::Future<core::num*>*};
+  asy::Future<core::int*>* h = f(){() →* asy::Future<core::num*>*} as{TypeError} asy::Future<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect
index 6d91810..95a5eab 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
       try {
         #L1:
         {
-          if(math::Random::•().{math::Random::nextBool}()) {
+          if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
             :return_value = 1;
             break #L1;
           }
@@ -41,7 +41,7 @@
     :is_sync = true;
     return :async_future;
   };
-  asy::Future<core::num*>* g = f.call();
-  asy::Future<core::int*>* h = f.call() as{TypeError} asy::Future<core::int*>*;
+  asy::Future<core::num*>* g = f(){() →* asy::Future<core::num*>*};
+  asy::Future<core::int*>* h = f(){() →* asy::Future<core::num*>*} as{TypeError} asy::Future<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.expect
index 8bc9037..3af04ad 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.expect
@@ -9,14 +9,14 @@
 
 static method test() → dynamic {
   () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async {
-    if(math::Random::•().{math::Random::nextBool}()) {
+    if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
       return asy::Future::value<core::int*>(1);
     }
     else {
       return 2.0;
     }
   };
-  asy::Future<core::num*>* g = f.call();
-  asy::Future<core::int*>* h = f.call() as{TypeError} asy::Future<core::int*>*;
+  asy::Future<core::num*>* g = f(){() →* asy::Future<core::num*>*};
+  asy::Future<core::int*>* h = f(){() →* asy::Future<core::num*>*} as{TypeError} asy::Future<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect
index 5cd44bc..1ce4583 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
       try {
         #L1:
         {
-          if(math::Random::•().{math::Random::nextBool}()) {
+          if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
             :return_value = asy::Future::value<core::int*>(1);
             break #L1;
           }
@@ -41,7 +41,7 @@
     :is_sync = true;
     return :async_future;
   };
-  asy::Future<core::num*>* g = f.call();
-  asy::Future<core::int*>* h = f.call() as{TypeError} asy::Future<core::int*>*;
+  asy::Future<core::num*>* g = f(){() →* asy::Future<core::num*>*};
+  asy::Future<core::int*>* h = f(){() →* asy::Future<core::num*>*} as{TypeError} asy::Future<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.expect
index 056a025..f68b064 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.expect
@@ -11,7 +11,7 @@
     asy::Stream<core::double*>* s;
     yield* s;
   };
-  asy::Stream<core::num*>* g = f.call();
-  asy::Stream<core::int*>* h = f.call() as{TypeError} asy::Stream<core::int*>*;
+  asy::Stream<core::num*>* g = f(){() →* asy::Stream<core::num*>*};
+  asy::Stream<core::int*>* h = f(){() →* asy::Stream<core::num*>*} as{TypeError} asy::Stream<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect
index adbe951..097e9a3 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect
@@ -44,7 +44,7 @@
     :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
     return :controller_stream;
   };
-  asy::Stream<core::num*>* g = f.call();
-  asy::Stream<core::int*>* h = f.call() as{TypeError} asy::Stream<core::int*>*;
+  asy::Stream<core::num*>* g = f(){() →* asy::Stream<core::num*>*};
+  asy::Stream<core::int*>* h = f(){() →* asy::Stream<core::num*>*} as{TypeError} asy::Stream<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.expect
index 1d59222..add23e8 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.expect
@@ -5,8 +5,8 @@
 static method test1() → dynamic {
   core::List<core::int*>* o;
   core::Iterable<core::int*>* y = o.{core::Iterable::map}<core::int*>((core::int* x) → core::int* {
-    return x.{core::num::+}(1);
-  });
+    return x.{core::num::+}(1){(core::num*) →* core::int*};
+  }){((core::int*) →* core::int*) →* core::Iterable<core::int*>*};
   core::Iterable<core::int*>* z = y;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.transformed.expect
index 1d59222..add23e8 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.transformed.expect
@@ -5,8 +5,8 @@
 static method test1() → dynamic {
   core::List<core::int*>* o;
   core::Iterable<core::int*>* y = o.{core::Iterable::map}<core::int*>((core::int* x) → core::int* {
-    return x.{core::num::+}(1);
-  });
+    return x.{core::num::+}(1){(core::num*) →* core::int*};
+  }){((core::int*) →* core::int*) →* core::Iterable<core::int*>*};
   core::Iterable<core::int*>* z = y;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.expect
index 77b16ea..446c911 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.expect
@@ -5,7 +5,7 @@
 static method f() → dynamic {
   core::List<core::int*>* o;
   o.{core::Iterable::where}((core::int* i) → core::bool* {
-    return i.{core::num::==}(0);
-  });
+    return i =={core::num::==}{(core::Object*) →* core::bool*} 0;
+  }){((core::int*) →* core::bool*) →* core::Iterable<core::int*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.transformed.expect
index 77b16ea..446c911 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 static method f() → dynamic {
   core::List<core::int*>* o;
   o.{core::Iterable::where}((core::int* i) → core::bool* {
-    return i.{core::num::==}(0);
-  });
+    return i =={core::num::==}{(core::Object*) →* core::bool*} 0;
+  }){((core::int*) →* core::bool*) →* core::Iterable<core::int*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.expect
index 1b41da7..729dbe7 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.expect
@@ -9,7 +9,7 @@
   () →* asy::Future<Null>* f = () → asy::Future<Null>* async {
     return null;
   };
-  asy::Future<dynamic>* y = f.call();
-  asy::Future<core::String*>* z = f.call();
-  core::String* s = await f.call();
+  asy::Future<dynamic>* y = f(){() →* asy::Future<Null>*};
+  asy::Future<core::String*>* z = f(){() →* asy::Future<Null>*};
+  core::String* s = await f(){() →* asy::Future<Null>*};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
index bd417fc..1c8b19c 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
@@ -46,9 +46,9 @@
           :is_sync = true;
           return :async_future;
         };
-        asy::Future<dynamic>* y = f.call();
-        asy::Future<core::String*>* z = f.call();
-        [yield] let dynamic #t1 = asy::_awaitHelper(f.call(), :async_op_then, :async_op_error, :async_op) in null;
+        asy::Future<dynamic>* y = f(){() →* asy::Future<Null>*};
+        asy::Future<core::String*>* z = f(){() →* asy::Future<Null>*};
+        [yield] let dynamic #t1 = asy::_awaitHelper(f(){() →* asy::Future<Null>*}, :async_op_then, :async_op_error, :async_op) in null;
         core::String* s = _in::unsafeCast<Null>(:result);
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.expect
index 4f2a9bc..a85a79c 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.expect
@@ -9,7 +9,7 @@
   () →* asy::Stream<Null>* f = () → asy::Stream<Null>* async* {
     yield null;
   };
-  asy::Stream<dynamic>* y = f.call();
-  asy::Stream<core::String*>* z = f.call();
-  core::String* s = await f.call().{asy::Stream::first};
+  asy::Stream<dynamic>* y = f(){() →* asy::Stream<Null>*};
+  asy::Stream<core::String*>* z = f(){() →* asy::Stream<Null>*};
+  core::String* s = await f(){() →* asy::Stream<Null>*}.{asy::Stream::first}{asy::Future<Null>*};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
index fa13ae6..236bc34 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
@@ -52,9 +52,9 @@
           :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
           return :controller_stream;
         };
-        asy::Stream<dynamic>* y = f.call();
-        asy::Stream<core::String*>* z = f.call();
-        [yield] let dynamic #t1 = asy::_awaitHelper(f.call().{asy::Stream::first}, :async_op_then, :async_op_error, :async_op) in null;
+        asy::Stream<dynamic>* y = f(){() →* asy::Stream<Null>*};
+        asy::Stream<core::String*>* z = f(){() →* asy::Stream<Null>*};
+        [yield] let dynamic #t1 = asy::_awaitHelper(f(){() →* asy::Stream<Null>*}.{asy::Stream::first}{asy::Future<Null>*}, :async_op_then, :async_op_error, :async_op) in null;
         core::String* s = _in::unsafeCast<Null>(:result);
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.weak.expect
index cdf3f6a..4f32533 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.weak.expect
@@ -8,7 +8,7 @@
   (core::Object*) →* Null f = (core::Object* x) → Null {
     return null;
   };
-  core::String* y = f.call(42);
+  core::String* y = f(42){(core::Object*) →* Null};
   f = (core::Object* x) → Null => "hello" as{TypeError} Null;
   self::foo((core::Object* x) → Null {
     return null;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.weak.transformed.expect
index cdf3f6a..4f32533 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
   (core::Object*) →* Null f = (core::Object* x) → Null {
     return null;
   };
-  core::String* y = f.call(42);
+  core::String* y = f(42){(core::Object*) →* Null};
   f = (core::Object* x) → Null => "hello" as{TypeError} Null;
   self::foo((core::Object* x) → Null {
     return null;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.expect
index 58702d6..579df9a 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.expect
@@ -6,7 +6,7 @@
   () →* core::Iterable<Null>* f = () → core::Iterable<Null>* sync* {
     yield null;
   };
-  core::Iterable<dynamic>* y = f.call();
-  core::Iterable<core::String*>* z = f.call();
-  core::String* s = f.call().{core::Iterable::first};
+  core::Iterable<dynamic>* y = f(){() →* core::Iterable<Null>*};
+  core::Iterable<core::String*>* z = f(){() →* core::Iterable<Null>*};
+  core::String* s = f(){() →* core::Iterable<Null>*}.{core::Iterable::first}{Null};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.transformed.expect
index a73b655..90ecc1f 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
     }
     return new core::_SyncIterable::•<Null>(:sync_op_gen);
   };
-  core::Iterable<dynamic>* y = f.call();
-  core::Iterable<core::String*>* z = f.call();
-  core::String* s = f.call().{core::Iterable::first};
+  core::Iterable<dynamic>* y = f(){() →* core::Iterable<Null>*};
+  core::Iterable<core::String*>* z = f(){() →* core::Iterable<Null>*};
+  core::String* s = f(){() →* core::Iterable<Null>*}.{core::Iterable::first}{Null};
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.expect
index 3f5499c..314b863 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.expect
@@ -8,13 +8,13 @@
 static method test2() → dynamic {
   core::List<core::num*>* o;
   core::Iterable<core::num*>* y = o.{core::Iterable::map}<core::num*>((core::num* x) → core::num* {
-    if(math::Random::•().{math::Random::nextBool}()) {
-      return x.{core::num::toInt}().{core::num::+}(1);
+    if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
+      return x.{core::num::toInt}(){() →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
     }
     else {
-      return x.{core::num::toDouble}();
+      return x.{core::num::toDouble}(){() →* core::double*};
     }
-  });
+  }){((core::num*) →* core::num*) →* core::Iterable<core::num*>*};
   core::Iterable<core::num*>* w = y;
   core::Iterable<core::int*>* z = y as{TypeError} core::Iterable<core::int*>*;
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.transformed.expect
index 3f5499c..314b863 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.transformed.expect
@@ -8,13 +8,13 @@
 static method test2() → dynamic {
   core::List<core::num*>* o;
   core::Iterable<core::num*>* y = o.{core::Iterable::map}<core::num*>((core::num* x) → core::num* {
-    if(math::Random::•().{math::Random::nextBool}()) {
-      return x.{core::num::toInt}().{core::num::+}(1);
+    if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
+      return x.{core::num::toInt}(){() →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
     }
     else {
-      return x.{core::num::toDouble}();
+      return x.{core::num::toDouble}(){() →* core::double*};
     }
-  });
+  }){((core::num*) →* core::num*) →* core::Iterable<core::num*>*};
   core::Iterable<core::num*>* w = y;
   core::Iterable<core::int*>* z = y as{TypeError} core::Iterable<core::int*>*;
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.expect
index 51f25d2..e9db0d8 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.expect
@@ -5,7 +5,7 @@
 static method main() → dynamic {
   () →* (core::int*) →* core::double* f = () → (core::int*) →* core::double* {
     return (core::int* x) → core::double* {
-      return 2.0.{core::double::*}(x);
+      return 2.0.{core::double::*}(x){(core::num*) →* core::double*};
     };
   };
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.transformed.expect
index 51f25d2..e9db0d8 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 static method main() → dynamic {
   () →* (core::int*) →* core::double* f = () → (core::int*) →* core::double* {
     return (core::int* x) → core::double* {
-      return 2.0.{core::double::*}(x);
+      return 2.0.{core::double::*}(x){(core::num*) →* core::double*};
     };
   };
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.expect
index 6a55e9b..f309388 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method test1() → dynamic {
   core::List<core::int*>* o;
-  core::Iterable<Null>* y = o.{core::Iterable::map}<Null>((core::int* x) → Null {});
+  core::Iterable<Null>* y = o.{core::Iterable::map}<Null>((core::int* x) → Null {}){((core::int*) →* Null) →* core::Iterable<Null>*};
   core::Iterable<core::int*>* z = y;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.transformed.expect
index 6a55e9b..f309388 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method test1() → dynamic {
   core::List<core::int*>* o;
-  core::Iterable<Null>* y = o.{core::Iterable::map}<Null>((core::int* x) → Null {});
+  core::Iterable<Null>* y = o.{core::Iterable::map}<Null>((core::int* x) → Null {}){((core::int*) →* Null) →* core::Iterable<Null>*};
   core::Iterable<core::int*>* z = y;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.weak.expect
index 58f8c43..09f2baf 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.weak.expect
@@ -7,7 +7,7 @@
     yield 1;
     yield*<core::num*>[3, 4.0];
   };
-  core::Iterable<core::num*>* g = f.call();
-  core::Iterable<core::int*>* h = f.call() as{TypeError} core::Iterable<core::int*>*;
+  core::Iterable<core::num*>* g = f(){() →* core::Iterable<core::num*>*};
+  core::Iterable<core::int*>* h = f(){() →* core::Iterable<core::num*>*} as{TypeError} core::Iterable<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.weak.transformed.expect
index f79049f..7bdb16ae 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
     }
     return new core::_SyncIterable::•<core::num*>(:sync_op_gen);
   };
-  core::Iterable<core::num*>* g = f.call();
-  core::Iterable<core::int*>* h = f.call() as{TypeError} core::Iterable<core::int*>*;
+  core::Iterable<core::num*>* g = f(){() →* core::Iterable<core::num*>*};
+  core::Iterable<core::int*>* h = f(){() →* core::Iterable<core::num*>*} as{TypeError} core::Iterable<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.weak.expect
index 632c733..246d431 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.weak.expect
@@ -5,7 +5,7 @@
 static method f() → dynamic {
   core::List<core::int*>* o;
   o.{core::Iterable::forEach}((core::int* i) → core::int* {
-    return i.{core::num::+}(1);
-  });
+    return i.{core::num::+}(1){(core::num*) →* core::int*};
+  }){((core::int*) →* void) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.weak.transformed.expect
index 632c733..246d431 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 static method f() → dynamic {
   core::List<core::int*>* o;
   o.{core::Iterable::forEach}((core::int* i) → core::int* {
-    return i.{core::num::+}(1);
-  });
+    return i.{core::num::+}(1){(core::num*) →* core::int*};
+  }){((core::int*) →* void) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.weak.expect b/pkg/front_end/testcases/inference/bug30251.dart.weak.expect
index 8785f07..0622d1c 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.weak.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   final field dynamic x;
   constructor •(core::int* p) → self::C*
-    : self::C::x = self::f<core::int*>(1.{core::num::+}(p)), super core::Object::•()
+    : self::C::x = self::f<core::int*>(1.{core::num::+}(p){(core::num*) →* core::int*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30251.dart.weak.transformed.expect
index 8785f07..0622d1c 100644
--- a/pkg/front_end/testcases/inference/bug30251.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug30251.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   final field dynamic x;
   constructor •(core::int* p) → self::C*
-    : self::C::x = self::f<core::int*>(1.{core::num::+}(p)), super core::Object::•()
+    : self::C::x = self::f<core::int*>(1.{core::num::+}(p){(core::num*) →* core::int*}), super core::Object::•()
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/bug30620.dart.weak.expect b/pkg/front_end/testcases/inference/bug30620.dart.weak.expect
index 18f6328..e2320e0 100644
--- a/pkg/front_end/testcases/inference/bug30620.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug30620.dart.weak.expect
@@ -8,7 +8,7 @@
     : self::A::foo = foo, super core::Object::•()
     ;
   operator ==(core::Object* other) → core::bool*
-    return other is self::A* && other{self::A*}.{self::A::foo}.{core::String::==}(this.{self::A::foo});
+    return other is self::A* && other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -20,5 +20,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::A::•("hello").{self::A::==}(new self::A::•("hello")));
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object*) →* core::bool*} new self::A::•("hello"));
 }
diff --git a/pkg/front_end/testcases/inference/bug30620.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30620.dart.weak.transformed.expect
index 18f6328..e2320e0 100644
--- a/pkg/front_end/testcases/inference/bug30620.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug30620.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     : self::A::foo = foo, super core::Object::•()
     ;
   operator ==(core::Object* other) → core::bool*
-    return other is self::A* && other{self::A*}.{self::A::foo}.{core::String::==}(this.{self::A::foo});
+    return other is self::A* && other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -20,5 +20,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::A::•("hello").{self::A::==}(new self::A::•("hello")));
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object*) →* core::bool*} new self::A::•("hello"));
 }
diff --git a/pkg/front_end/testcases/inference/bug30620_b.dart.weak.expect b/pkg/front_end/testcases/inference/bug30620_b.dart.weak.expect
index 498d4b8..bc320a3 100644
--- a/pkg/front_end/testcases/inference/bug30620_b.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug30620_b.dart.weak.expect
@@ -8,7 +8,7 @@
     : self::A::foo = foo, super core::Object::•()
     ;
   operator ==(core::Object* other) → core::bool*
-    return other is self::A* && other{self::A*}.{self::A::foo}.{core::String::==}(this.{self::A::foo}) && other{self::A*}.{self::A::foo}.{core::String::==}(this.{self::A::foo});
+    return other is self::A* && other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*} && other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -20,5 +20,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::A::•("hello").{self::A::==}(new self::A::•("hello")));
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object*) →* core::bool*} new self::A::•("hello"));
 }
diff --git a/pkg/front_end/testcases/inference/bug30620_b.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30620_b.dart.weak.transformed.expect
index 498d4b8..bc320a3 100644
--- a/pkg/front_end/testcases/inference/bug30620_b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug30620_b.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     : self::A::foo = foo, super core::Object::•()
     ;
   operator ==(core::Object* other) → core::bool*
-    return other is self::A* && other{self::A*}.{self::A::foo}.{core::String::==}(this.{self::A::foo}) && other{self::A*}.{self::A::foo}.{core::String::==}(this.{self::A::foo});
+    return other is self::A* && other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*} && other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -20,5 +20,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::A::•("hello").{self::A::==}(new self::A::•("hello")));
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object*) →* core::bool*} new self::A::•("hello"));
 }
diff --git a/pkg/front_end/testcases/inference/bug30620_c.dart.weak.expect b/pkg/front_end/testcases/inference/bug30620_c.dart.weak.expect
index 1046cf2..5a1ff19 100644
--- a/pkg/front_end/testcases/inference/bug30620_c.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug30620_c.dart.weak.expect
@@ -8,8 +8,8 @@
     : self::A::foo = foo, super core::Object::•()
     ;
   operator ==(core::Object* other) → core::bool* {
-    if(other is self::A* && other{self::A*}.{self::A::foo}.{core::String::==}(this.{self::A::foo})) {
-      if(other{self::A*}.{self::A::foo}.{core::String::==}(this.{self::A::foo})) {
+    if(other is self::A* && other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*}) {
+      if(other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*}) {
       }
     }
     return true;
@@ -25,5 +25,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::A::•("hello").{self::A::==}(new self::A::•("hello")));
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object*) →* core::bool*} new self::A::•("hello"));
 }
diff --git a/pkg/front_end/testcases/inference/bug30620_c.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30620_c.dart.weak.transformed.expect
index 1046cf2..5a1ff19 100644
--- a/pkg/front_end/testcases/inference/bug30620_c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug30620_c.dart.weak.transformed.expect
@@ -8,8 +8,8 @@
     : self::A::foo = foo, super core::Object::•()
     ;
   operator ==(core::Object* other) → core::bool* {
-    if(other is self::A* && other{self::A*}.{self::A::foo}.{core::String::==}(this.{self::A::foo})) {
-      if(other{self::A*}.{self::A::foo}.{core::String::==}(this.{self::A::foo})) {
+    if(other is self::A* && other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*}) {
+      if(other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*}) {
       }
     }
     return true;
@@ -25,5 +25,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::A::•("hello").{self::A::==}(new self::A::•("hello")));
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object*) →* core::bool*} new self::A::•("hello"));
 }
diff --git a/pkg/front_end/testcases/inference/bug30620_d.dart.weak.expect b/pkg/front_end/testcases/inference/bug30620_d.dart.weak.expect
index f8023a0..bfc06da 100644
--- a/pkg/front_end/testcases/inference/bug30620_d.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug30620_d.dart.weak.expect
@@ -3,5 +3,5 @@
 import "dart:core" as core;
 
 static method foo(dynamic obj) → core::String*
-  return obj is core::String* ?{core::String*} obj{core::String*}.{core::String::toUpperCase}() : null;
+  return obj is core::String* ?{core::String*} obj{core::String*}.{core::String::toUpperCase}(){() →* core::String*} : null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30620_d.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30620_d.dart.weak.transformed.expect
index f8023a0..bfc06da 100644
--- a/pkg/front_end/testcases/inference/bug30620_d.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug30620_d.dart.weak.transformed.expect
@@ -3,5 +3,5 @@
 import "dart:core" as core;
 
 static method foo(dynamic obj) → core::String*
-  return obj is core::String* ?{core::String*} obj{core::String*}.{core::String::toUpperCase}() : null;
+  return obj is core::String* ?{core::String*} obj{core::String*}.{core::String::toUpperCase}(){() →* core::String*} : null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30624.dart b/pkg/front_end/testcases/inference/bug30624.dart
index 123da0a..c074277 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart
+++ b/pkg/front_end/testcases/inference/bug30624.dart
@@ -28,12 +28,12 @@
 
   void barE([int cmp(E a, E b)]) {
     /*@ typeArgs=C::E* */ foo(
-        this, cmp /*@target=Object.==*/ == null ? _default : cmp);
+        this, cmp  == null ? _default : cmp);
   }
 
   void barF([int cmp(E a, E b)]) {
     /*@ typeArgs=C::E* */ foo(
-        this, cmp /*@target=Object.==*/ != null ? cmp : _default);
+        this, cmp  != null ? cmp : _default);
   }
 
   static int _default(a, b) {
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.weak.expect b/pkg/front_end/testcases/inference/bug30624.dart.weak.expect
index 11fea03..679fdf5 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.weak.expect
@@ -7,26 +7,26 @@
     : super core::Object::•()
     ;
   method barA([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
-    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = cmp in #t1.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
+    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = cmp in #t1 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
   }
   method barB([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
-    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t2 = cmp in #t2.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} (#C2) as (self::C::E*, self::C::E*) →* core::int* : #t2);
+    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t2 = cmp in #t2 == null ?{(self::C::E*, self::C::E*) →* core::int*} (#C2) as (self::C::E*, self::C::E*) →* core::int* : #t2);
   }
   method barC([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
     (self::C::E*, self::C::E*) →* core::int* v = #C2;
-    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t3 = cmp in #t3.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} v : #t3);
+    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t3 = cmp in #t3 == null ?{(self::C::E*, self::C::E*) →* core::int*} v : #t3);
   }
   method barD([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
-    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t4 = cmp in #t4.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t4);
+    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t4 = cmp in #t4 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t4);
   }
   method barE([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
-    self::foo<self::C::E*>(this, cmp.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : cmp);
+    self::foo<self::C::E*>(this, cmp == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : cmp);
   }
   method barF([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
-    self::foo<self::C::E*>(this, !cmp.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} cmp : #C2);
+    self::foo<self::C::E*>(this, !(cmp == null) ?{(self::C::E*, self::C::E*) →* core::int*} cmp : #C2);
   }
   static method _default(dynamic a, dynamic b) → core::int* {
-    return 1.{core::int::unary-}();
+    return 1.{core::int::unary-}(){() →* core::int*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug30624.dart.weak.transformed.expect
index e985e99..9449aa55 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.weak.transformed.expect
@@ -7,26 +7,26 @@
     : super core::Object::•()
     ;
   method barA([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
-    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = cmp in #t1.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
+    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = cmp in #t1 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
   }
   method barB([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
-    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t2 = cmp in #t2.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t2);
+    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t2 = cmp in #t2 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t2);
   }
   method barC([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
     (self::C::E*, self::C::E*) →* core::int* v = #C2;
-    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t3 = cmp in #t3.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} v : #t3);
+    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t3 = cmp in #t3 == null ?{(self::C::E*, self::C::E*) →* core::int*} v : #t3);
   }
   method barD([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
-    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t4 = cmp in #t4.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t4);
+    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t4 = cmp in #t4 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t4);
   }
   method barE([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
-    self::foo<self::C::E*>(this, cmp.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : cmp);
+    self::foo<self::C::E*>(this, cmp == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : cmp);
   }
   method barF([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
-    self::foo<self::C::E*>(this, !cmp.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} cmp : #C2);
+    self::foo<self::C::E*>(this, !(cmp == null) ?{(self::C::E*, self::C::E*) →* core::int*} cmp : #C2);
   }
   static method _default(dynamic a, dynamic b) → core::int* {
-    return 1.{core::int::unary-}();
+    return 1.{core::int::unary-}(){() →* core::int*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -48,5 +48,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///bug30624.dart:40:35 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///bug30624.dart:40:35 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 47, effectively constant: 1
diff --git a/pkg/front_end/testcases/inference/bug31132.dart.weak.expect b/pkg/front_end/testcases/inference/bug31132.dart.weak.expect
index 2aa019a..135614f 100644
--- a/pkg/front_end/testcases/inference/bug31132.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug31132.dart.weak.expect
@@ -25,6 +25,6 @@
 }
 static method test(self::B* x) → void {
   self::C* y = x is self::C* ?{self::C*} x{self::C*} : new self::C::•();
-  core::print(y.{self::C::z});
+  core::print(y.{self::C::z}{dynamic});
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug31132.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug31132.dart.weak.transformed.expect
index 2aa019a..135614f 100644
--- a/pkg/front_end/testcases/inference/bug31132.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug31132.dart.weak.transformed.expect
@@ -25,6 +25,6 @@
 }
 static method test(self::B* x) → void {
   self::C* y = x is self::C* ?{self::C*} x{self::C*} : new self::C::•();
-  core::print(y.{self::C::z});
+  core::print(y.{self::C::z}{dynamic});
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug31133.dart.weak.expect b/pkg/front_end/testcases/inference/bug31133.dart.weak.expect
index 006ace8..46ea8a2 100644
--- a/pkg/front_end/testcases/inference/bug31133.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug31133.dart.weak.expect
@@ -4,13 +4,13 @@
 
 static method test() → void {
   core::int* i = 0;
-  for (final core::int* #t1 = i = i.{core::num::+}(1); i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (final core::int* #t1 = i = i.{core::num::+}(1){(core::num*) →* core::int*}; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
   }
-  for (final core::int* #t2 = i = i.{core::num::+}(1); i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (final core::int* #t2 = i = i.{core::num::+}(1){(core::num*) →* core::int*}; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
   }
-  for (final core::int* #t3 = i = i.{core::num::-}(1); i.{core::num::>=}(0); i = i.{core::num::-}(1)) {
+  for (final core::int* #t3 = i = i.{core::num::-}(1){(core::num*) →* core::int*}; i.{core::num::>=}(0){(core::num*) →* core::bool*}; i = i.{core::num::-}(1){(core::num*) →* core::int*}) {
   }
-  for (final core::int* #t4 = i = i.{core::num::-}(1); i.{core::num::>=}(0); i = i.{core::num::-}(1)) {
+  for (final core::int* #t4 = i = i.{core::num::-}(1){(core::num*) →* core::int*}; i.{core::num::>=}(0){(core::num*) →* core::bool*}; i = i.{core::num::-}(1){(core::num*) →* core::int*}) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug31133.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug31133.dart.weak.transformed.expect
index 006ace8..46ea8a2 100644
--- a/pkg/front_end/testcases/inference/bug31133.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug31133.dart.weak.transformed.expect
@@ -4,13 +4,13 @@
 
 static method test() → void {
   core::int* i = 0;
-  for (final core::int* #t1 = i = i.{core::num::+}(1); i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (final core::int* #t1 = i = i.{core::num::+}(1){(core::num*) →* core::int*}; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
   }
-  for (final core::int* #t2 = i = i.{core::num::+}(1); i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (final core::int* #t2 = i = i.{core::num::+}(1){(core::num*) →* core::int*}; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
   }
-  for (final core::int* #t3 = i = i.{core::num::-}(1); i.{core::num::>=}(0); i = i.{core::num::-}(1)) {
+  for (final core::int* #t3 = i = i.{core::num::-}(1){(core::num*) →* core::int*}; i.{core::num::>=}(0){(core::num*) →* core::bool*}; i = i.{core::num::-}(1){(core::num*) →* core::int*}) {
   }
-  for (final core::int* #t4 = i = i.{core::num::-}(1); i.{core::num::>=}(0); i = i.{core::num::-}(1)) {
+  for (final core::int* #t4 = i = i.{core::num::-}(1){(core::num*) →* core::int*}; i.{core::num::>=}(0){(core::num*) →* core::bool*}; i = i.{core::num::-}(1){(core::num*) →* core::int*}) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug31436.dart.weak.expect b/pkg/front_end/testcases/inference/bug31436.dart.weak.expect
index e1194d4..adc6d4a 100644
--- a/pkg/front_end/testcases/inference/bug31436.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug31436.dart.weak.expect
@@ -9,7 +9,7 @@
   };
   assert(g is () →* core::List<core::Object*>*);
   assert(!(g is () →* core::List<core::int*>*));
-  g.call().{core::List::add}("hello");
+  g(){() →* core::List<core::Object*>*}.{core::List::add}("hello"){(core::Object*) →* void};
   core::List<core::int*>* l = <core::int*>[3];
   g = () → core::List<core::int*>* {
     return l;
@@ -17,7 +17,7 @@
   assert(g is () →* core::List<core::Object*>*);
   assert(g is () →* core::List<core::int*>*);
   try {
-    g.call().{core::List::add}("hello");
+    g(){() →* core::List<core::Object*>*}.{core::List::add}("hello"){(core::Object*) →* void};
     throw "expected a runtime error";
   }
   on core::TypeError* catch(no-exception-var) {
@@ -29,10 +29,10 @@
   assert(g is () →* core::List<core::Object*>*);
   assert(!(g is () →* core::List<core::int*>*));
   assert(!(g is () →* core::Object*));
-  g.call();
+  g(){() →* core::List<core::Object*>*};
   o = 3;
   try {
-    g.call();
+    g(){() →* core::List<core::Object*>*};
     throw "expected a runtime error";
   }
   on core::TypeError* catch(no-exception-var) {
@@ -43,13 +43,13 @@
   g = () → core::List<core::Object*>* => <core::Object*>[3];
   assert(g is () →* core::List<core::Object*>*);
   assert(!(g is () →* core::List<core::int*>*));
-  g.call().{core::List::add}("hello");
+  g(){() →* core::List<core::Object*>*}.{core::List::add}("hello"){(core::Object*) →* void};
   core::List<core::int*>* l = <core::int*>[3];
   g = () → core::List<core::int*>* => l;
   assert(g is () →* core::List<core::Object*>*);
   assert(g is () →* core::List<core::int*>*);
   try {
-    g.call().{core::List::add}("hello");
+    g(){() →* core::List<core::Object*>*}.{core::List::add}("hello"){(core::Object*) →* void};
     throw "expected a runtime error";
   }
   on core::TypeError* catch(no-exception-var) {
@@ -59,10 +59,10 @@
   assert(g is () →* core::List<core::Object*>*);
   assert(!(g is () →* core::List<core::int*>*));
   assert(!(g is () →* core::Object*));
-  g.call();
+  g(){() →* core::List<core::Object*>*};
   o = 3;
   try {
-    g.call();
+    g(){() →* core::List<core::Object*>*};
     throw "expected a runtime error";
   }
   on core::TypeError* catch(no-exception-var) {
diff --git a/pkg/front_end/testcases/inference/bug31436.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug31436.dart.weak.transformed.expect
index 055a113..1fb28d3 100644
--- a/pkg/front_end/testcases/inference/bug31436.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug31436.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
   };
   assert(g is () →* core::List<core::Object*>*);
   assert(!(g is () →* core::List<core::int*>*));
-  g.call().{core::List::add}("hello");
+  g(){() →* core::List<core::Object*>*}.{core::List::add}("hello"){(core::Object*) →* void};
   core::List<core::int*>* l = core::_GrowableList::_literal1<core::int*>(3);
   g = () → core::List<core::int*>* {
     return l;
@@ -17,7 +17,7 @@
   assert(g is () →* core::List<core::Object*>*);
   assert(g is () →* core::List<core::int*>*);
   try {
-    g.call().{core::List::add}("hello");
+    g(){() →* core::List<core::Object*>*}.{core::List::add}("hello"){(core::Object*) →* void};
     throw "expected a runtime error";
   }
   on core::TypeError* catch(no-exception-var) {
@@ -29,10 +29,10 @@
   assert(g is () →* core::List<core::Object*>*);
   assert(!(g is () →* core::List<core::int*>*));
   assert(!(g is () →* core::Object*));
-  g.call();
+  g(){() →* core::List<core::Object*>*};
   o = 3;
   try {
-    g.call();
+    g(){() →* core::List<core::Object*>*};
     throw "expected a runtime error";
   }
   on core::TypeError* catch(no-exception-var) {
@@ -43,13 +43,13 @@
   g = () → core::List<core::Object*>* => core::_GrowableList::_literal1<core::Object*>(3);
   assert(g is () →* core::List<core::Object*>*);
   assert(!(g is () →* core::List<core::int*>*));
-  g.call().{core::List::add}("hello");
+  g(){() →* core::List<core::Object*>*}.{core::List::add}("hello"){(core::Object*) →* void};
   core::List<core::int*>* l = core::_GrowableList::_literal1<core::int*>(3);
   g = () → core::List<core::int*>* => l;
   assert(g is () →* core::List<core::Object*>*);
   assert(g is () →* core::List<core::int*>*);
   try {
-    g.call().{core::List::add}("hello");
+    g(){() →* core::List<core::Object*>*}.{core::List::add}("hello"){(core::Object*) →* void};
     throw "expected a runtime error";
   }
   on core::TypeError* catch(no-exception-var) {
@@ -59,10 +59,10 @@
   assert(g is () →* core::List<core::Object*>*);
   assert(!(g is () →* core::List<core::int*>*));
   assert(!(g is () →* core::Object*));
-  g.call();
+  g(){() →* core::List<core::Object*>*};
   o = 3;
   try {
-    g.call();
+    g(){() →* core::List<core::Object*>*};
     throw "expected a runtime error";
   }
   on core::TypeError* catch(no-exception-var) {
diff --git a/pkg/front_end/testcases/inference/bug32291.dart.weak.expect b/pkg/front_end/testcases/inference/bug32291.dart.weak.expect
index b8775a7..b473c4f 100644
--- a/pkg/front_end/testcases/inference/bug32291.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug32291.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method main() → void {
   core::List<core::List<core::String*>*>* l = <core::List<core::String*>*>[<core::String*>["hi", "world"]];
-  core::Iterable<core::List<core::String*>*>* i1 = l.{core::Iterable::map}<core::List<core::String*>*>((core::List<core::String*>* ll) → core::List<core::String*>* => let final core::List<core::String*>* #t1 = ll in #t1.{core::List::==}(null) ?{core::List<core::String*>*} <core::String*>[] : #t1);
-  core::Iterable<core::int*>* i2 = i1.{core::Iterable::map}<core::int*>((core::List<core::String*>* l) → core::int* => l.{core::List::length});
+  core::Iterable<core::List<core::String*>*>* i1 = l.{core::Iterable::map}<core::List<core::String*>*>((core::List<core::String*>* ll) → core::List<core::String*>* => let final core::List<core::String*>* #t1 = ll in #t1 == null ?{core::List<core::String*>*} <core::String*>[] : #t1){((core::List<core::String*>*) →* core::List<core::String*>*) →* core::Iterable<core::List<core::String*>*>*};
+  core::Iterable<core::int*>* i2 = i1.{core::Iterable::map}<core::int*>((core::List<core::String*>* l) → core::int* => l.{core::List::length}{core::int*}){((core::List<core::String*>*) →* core::int*) →* core::Iterable<core::int*>*};
   core::print(i2);
 }
diff --git a/pkg/front_end/testcases/inference/bug32291.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug32291.dart.weak.transformed.expect
index 1af625e..6d8c4fe 100644
--- a/pkg/front_end/testcases/inference/bug32291.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug32291.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method main() → void {
   core::List<core::List<core::String*>*>* l = core::_GrowableList::_literal1<core::List<core::String*>*>(core::_GrowableList::_literal2<core::String*>("hi", "world"));
-  core::Iterable<core::List<core::String*>*>* i1 = l.{core::Iterable::map}<core::List<core::String*>*>((core::List<core::String*>* ll) → core::List<core::String*>* => let final core::List<core::String*>* #t1 = ll in #t1.{core::List::==}(null) ?{core::List<core::String*>*} core::_GrowableList::•<core::String*>(0) : #t1);
-  core::Iterable<core::int*>* i2 = i1.{core::Iterable::map}<core::int*>((core::List<core::String*>* l) → core::int* => l.{core::List::length});
+  core::Iterable<core::List<core::String*>*>* i1 = l.{core::Iterable::map}<core::List<core::String*>*>((core::List<core::String*>* ll) → core::List<core::String*>* => let final core::List<core::String*>* #t1 = ll in #t1 == null ?{core::List<core::String*>*} core::_GrowableList::•<core::String*>(0) : #t1){((core::List<core::String*>*) →* core::List<core::String*>*) →* core::Iterable<core::List<core::String*>*>*};
+  core::Iterable<core::int*>* i2 = i1.{core::Iterable::map}<core::int*>((core::List<core::String*>* l) → core::int* => l.{core::List::length}{core::int*}){((core::List<core::String*>*) →* core::int*) →* core::Iterable<core::int*>*};
   core::print(i2);
 }
diff --git a/pkg/front_end/testcases/inference/bug33324.dart.weak.expect b/pkg/front_end/testcases/inference/bug33324.dart.weak.expect
index 74b0bb6..318df8a 100644
--- a/pkg/front_end/testcases/inference/bug33324.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/bug33324.dart.weak.expect
@@ -4,8 +4,8 @@
 
 static method foo() → core::int* {
   core::Function* f = (dynamic x) → dynamic => x;
-  core::List<dynamic>* l = <core::String*>["bar"].{core::Iterable::map}<dynamic>(f as{TypeError} (core::String*) →* dynamic).{core::Iterable::toList}();
-  l.{core::List::add}(42);
-  return l.{core::Iterable::first}.length as{TypeError,ForDynamic} core::int*;
+  core::List<dynamic>* l = <core::String*>["bar"].{core::Iterable::map}<dynamic>(f as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*};
+  l.{core::List::add}(42){(dynamic) →* void};
+  return l.{core::Iterable::first}{dynamic}{dynamic}.length as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug33324.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/bug33324.dart.weak.transformed.expect
index f5164b7..7e3530b 100644
--- a/pkg/front_end/testcases/inference/bug33324.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug33324.dart.weak.transformed.expect
@@ -4,8 +4,8 @@
 
 static method foo() → core::int* {
   core::Function* f = (dynamic x) → dynamic => x;
-  core::List<dynamic>* l = core::_GrowableList::_literal1<core::String*>("bar").{core::Iterable::map}<dynamic>(f as{TypeError} (core::String*) →* dynamic).{core::Iterable::toList}();
-  l.{core::List::add}(42);
-  return l.{core::Iterable::first}.length as{TypeError,ForDynamic} core::int*;
+  core::List<dynamic>* l = core::_GrowableList::_literal1<core::String*>("bar").{core::Iterable::map}<dynamic>(f as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*};
+  l.{core::List::add}(42){(dynamic) →* void};
+  return l.{core::Iterable::first}{dynamic}{dynamic}.length as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.expect
index c9fa5d1..bc9a2a22 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.expect
@@ -58,10 +58,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  core::int* callA = new self::A::•().{self::A::call}();
-  core::int* callFieldA = new self::D::•().{self::D::fieldA}.{self::A::call}();
-  core::int* callGetA = new self::D::•().{self::D::getA}.{self::A::call}();
-  core::int* callFieldB = new self::D::•().{self::D::fieldB}.{self::B::call}.{self::A::call}();
-  core::int* callGetB = new self::D::•().{self::D::getB}.{self::B::call}.{self::A::call}();
+  core::int* callA = new self::A::•().{self::A::call}(){() →* core::int*};
+  core::int* callFieldA = new self::D::•().{self::D::fieldA}{self::A*}.{self::A::call}(){() →* core::int*};
+  core::int* callGetA = new self::D::•().{self::D::getA}{self::A*}.{self::A::call}(){() →* core::int*};
+  core::int* callFieldB = new self::D::•().{self::D::fieldB}{self::B*}.{self::B::call}{self::A*}.{self::A::call}(){() →* core::int*};
+  core::int* callGetB = new self::D::•().{self::D::getB}{self::B*}.{self::B::call}{self::A*}.{self::A::call}(){() →* core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.transformed.expect
index c9fa5d1..bc9a2a22 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.transformed.expect
@@ -58,10 +58,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  core::int* callA = new self::A::•().{self::A::call}();
-  core::int* callFieldA = new self::D::•().{self::D::fieldA}.{self::A::call}();
-  core::int* callGetA = new self::D::•().{self::D::getA}.{self::A::call}();
-  core::int* callFieldB = new self::D::•().{self::D::fieldB}.{self::B::call}.{self::A::call}();
-  core::int* callGetB = new self::D::•().{self::D::getB}.{self::B::call}.{self::A::call}();
+  core::int* callA = new self::A::•().{self::A::call}(){() →* core::int*};
+  core::int* callFieldA = new self::D::•().{self::D::fieldA}{self::A*}.{self::A::call}(){() →* core::int*};
+  core::int* callGetA = new self::D::•().{self::D::getA}{self::A*}.{self::A::call}(){() →* core::int*};
+  core::int* callFieldB = new self::D::•().{self::D::fieldB}{self::B*}.{self::B::call}{self::A*}.{self::A::call}(){() →* core::int*};
+  core::int* callGetB = new self::D::•().{self::D::getB}{self::B*}.{self::B::call}{self::A*}.{self::A::call}(){() →* core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.expect
index e8c4310..4b28fa6 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.expect
@@ -51,9 +51,9 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  let final self::FooActions* #t1 = new self::FooActions::•() in let final self::Bar* #t2 = new self::Bar::•() in #t1.{self::FooActions::foo}.{self::ActionDispatcher::call}(#t2);
-  new self::FooActions::•().{self::FooActions::foo}.{self::ActionDispatcher::call}(new self::Bar::•());
-  new self::FooActions::•().{self::FooActions::foo}.{self::ActionDispatcher::call}(new self::Bar::•());
+  let final self::FooActions* #t1 = new self::FooActions::•() in let final self::Bar* #t2 = new self::Bar::•() in #t1.{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(#t2){([self::Bar*]) →* void};
+  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar*]) →* void};
+  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar*]) →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.transformed.expect
index e8c4310..4b28fa6 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.transformed.expect
@@ -51,9 +51,9 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
-  let final self::FooActions* #t1 = new self::FooActions::•() in let final self::Bar* #t2 = new self::Bar::•() in #t1.{self::FooActions::foo}.{self::ActionDispatcher::call}(#t2);
-  new self::FooActions::•().{self::FooActions::foo}.{self::ActionDispatcher::call}(new self::Bar::•());
-  new self::FooActions::•().{self::FooActions::foo}.{self::ActionDispatcher::call}(new self::Bar::•());
+  let final self::FooActions* #t1 = new self::FooActions::•() in let final self::Bar* #t2 = new self::Bar::•() in #t1.{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(#t2){([self::Bar*]) →* void};
+  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar*]) →* void};
+  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar*]) →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.expect b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.expect
index 7008291..a27510a 100644
--- a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.expect
@@ -4,5 +4,5 @@
 
 static method main() → dynamic {
   core::List<core::int*>* foo = <core::int*>[1, 2, 3];
-  core::print(let final core::List<core::int*>* #t1 = foo in let final core::int* #t2 = 0 in let final core::int* #t3 = #t1.{core::List::[]}(#t2).{core::num::-}(1) in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3);
+  core::print(let final core::List<core::int*>* #t1 = foo in let final core::int* #t2 = 0 in let final core::int* #t3 = #t1.{core::List::[]}(#t2){(core::int*) →* core::int*}.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, core::int*) →* void} in #t3);
 }
diff --git a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.transformed.expect
index 58d23b5..a3e1f12 100644
--- a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method main() → dynamic {
   core::List<core::int*>* foo = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
-  core::print(let final core::List<core::int*>* #t1 = foo in let final core::int* #t2 = 0 in let final core::int* #t3 = #t1.{core::List::[]}(#t2).{core::num::-}(1) in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3);
+  core::print(let final core::List<core::int*>* #t1 = foo in let final core::int* #t2 = 0 in let final core::int* #t3 = #t1.{core::List::[]}(#t2){(core::int*) →* core::int*}.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, core::int*) →* void} in #t3);
 }
 
 
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.expect
index 1a362f1..048cb94 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.expect
@@ -8,7 +8,7 @@
     : self::C::t = t, super core::Object::•()
     ;
   constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
-    : this self::C::•(t.{core::List::[]}(0))
+    : this self::C::•(t.{core::List::[]}(0){(core::int*) →* self::C::T*})
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.transformed.expect
index fa86723..832cd3f 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     : self::C::t = t, super core::Object::•()
     ;
   constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
-    : this self::C::•(t.{core::List::[]}(0))
+    : this self::C::•(t.{core::List::[]}(0){(core::int*) →* self::C::T*})
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.expect
index 556e0d0..4793404 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.expect
@@ -48,7 +48,7 @@
     : self::Pair::u = null, self::Pair::t = null, super core::Object::•()
     ;
   get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
-    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}, this.{self::Pair::t});
+    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}{self::Pair::U*}, this.{self::Pair::t}{self::Pair::T*});
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.transformed.expect
index 556e0d0..4793404 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.transformed.expect
@@ -48,7 +48,7 @@
     : self::Pair::u = null, self::Pair::t = null, super core::Object::•()
     ;
   get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
-    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}, this.{self::Pair::t});
+    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}{self::Pair::U*}, this.{self::Pair::t}{self::Pair::T*});
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.expect
index e71956d..2fddef8 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.expect
@@ -9,7 +9,7 @@
     : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
     ;
   get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
-    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}, this.{self::Pair::t});
+    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}{self::Pair::U*}, this.{self::Pair::t}{self::Pair::T*});
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.transformed.expect
index e71956d..2fddef8 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
     : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
     ;
   get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
-    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}, this.{self::Pair::t});
+    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}{self::Pair::U*}, this.{self::Pair::t}{self::Pair::T*});
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.expect
index 76c7bbb..51015b3 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.expect
@@ -47,8 +47,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
+  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.expect
index 41089c5..012a172 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.expect
@@ -25,7 +25,7 @@
     core::int* y = 3;
     function f(core::List<core::Map<core::int*, core::String*>*>* l) → void {}
     ;
-    f.call(<core::Map<core::int*, core::String*>*>[<core::int*, core::String*>{y: x}]);
+    f(<core::Map<core::int*, core::String*>*>[<core::int*, core::String*>{y: x}]){(core::List<core::Map<core::int*, core::String*>*>*) →* void};
   }
   {
     function f(core::int* x) → core::int*
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.transformed.expect
index 9a82bf3..541ab60 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
     core::int* y = 3;
     function f(core::List<core::Map<core::int*, core::String*>*>* l) → void {}
     ;
-    f.call(core::_GrowableList::_literal1<core::Map<core::int*, core::String*>*>(<core::int*, core::String*>{y: x}));
+    f(core::_GrowableList::_literal1<core::Map<core::int*, core::String*>*>(<core::int*, core::String*>{y: x})){(core::List<core::Map<core::int*, core::String*>*>*) →* void};
   }
   {
     function f(core::int* x) → core::int*
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.expect
index 21d93c9..c56e8ad 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.expect
@@ -18,7 +18,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  for (@#C1 core::int* i = 0; i.{core::num::<}(1); i = i.{core::num::+}(1)) {
+  for (@#C1 core::int* i = 0; i.{core::num::<}(1){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
   }
   for (@#C1 core::int* i in <core::int*>[0]) {
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.transformed.expect
index c63b4f8..3ae57113 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → void {
-  for (@#C1 core::int* i = 0; i.{core::num::<}(1); i = i.{core::num::+}(1)) {
+  for (@#C1 core::int* i = 0; i.{core::num::<}(1){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
   }
   {
     core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal1<core::int*>(0).{core::Iterable::iterator};
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.expect
index 27841f3..750de9c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.expect
@@ -103,7 +103,7 @@
   }
   {
     (core::int*) →* core::int* l0 = (core::int* x) → core::int* => x;
-    (core::int*) →* core::int* l1 = (core::int* x) → core::int* => x.{core::num::+}(1);
+    (core::int*) →* core::int* l1 = (core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
     (core::int*) →* core::String* l2 = (core::int* x) → core::String* => let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
             x;
             ^" in x as{TypeError} core::String*;
@@ -111,7 +111,7 @@
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
             .substring(3);
              ^^^^^^^^^" as{TypeError,ForDynamic} core::String*;
-    (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3);
+    (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.transformed.expect
index b615c04..6529a86 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.transformed.expect
@@ -103,7 +103,7 @@
   }
   {
     (core::int*) →* core::int* l0 = (core::int* x) → core::int* => x;
-    (core::int*) →* core::int* l1 = (core::int* x) → core::int* => x.{core::num::+}(1);
+    (core::int*) →* core::int* l1 = (core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
     (core::int*) →* core::String* l2 = (core::int* x) → core::String* => let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
             x;
             ^" in x as{TypeError} core::String*;
@@ -111,7 +111,7 @@
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
             .substring(3);
              ^^^^^^^^^";
-    (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3);
+    (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.expect
index 3231434..a686107 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.expect
@@ -14,10 +14,10 @@
       return null;
     <T extends core::Object* = dynamic>(T*) →* core::List<T*>* v2 = f;
     v2 = <S extends core::Object* = dynamic>(S* x) → core::List<S*>* => <S*>[x];
-    core::Iterable<core::int*>* r = v2.call<core::int*>(42);
-    core::Iterable<core::String*>* s = v2.call<core::String*>("hello");
-    core::Iterable<core::List<core::int*>*>* t = v2.call<core::List<core::int*>*>(<core::int*>[]);
-    core::Iterable<core::num*>* u = v2.call<core::num*>(42);
-    core::Iterable<core::num*>* v = v2.call<core::num*>(42);
+    core::Iterable<core::int*>* r = v2<core::int*>(42){(core::int*) →* core::List<core::int*>*};
+    core::Iterable<core::String*>* s = v2<core::String*>("hello"){(core::String*) →* core::List<core::String*>*};
+    core::Iterable<core::List<core::int*>*>* t = v2<core::List<core::int*>*>(<core::int*>[]){(core::List<core::int*>*) →* core::List<core::List<core::int*>*>*};
+    core::Iterable<core::num*>* u = v2<core::num*>(42){(core::num*) →* core::List<core::num*>*};
+    core::Iterable<core::num*>* v = v2<core::num*>(42){(core::num*) →* core::List<core::num*>*};
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.transformed.expect
index b50f945..6660189 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.transformed.expect
@@ -14,10 +14,10 @@
       return null;
     <T extends core::Object* = dynamic>(T*) →* core::List<T*>* v2 = f;
     v2 = <S extends core::Object* = dynamic>(S* x) → core::List<S*>* => core::_GrowableList::_literal1<S*>(x);
-    core::Iterable<core::int*>* r = v2.call<core::int*>(42);
-    core::Iterable<core::String*>* s = v2.call<core::String*>("hello");
-    core::Iterable<core::List<core::int*>*>* t = v2.call<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0));
-    core::Iterable<core::num*>* u = v2.call<core::num*>(42);
-    core::Iterable<core::num*>* v = v2.call<core::num*>(42);
+    core::Iterable<core::int*>* r = v2<core::int*>(42){(core::int*) →* core::List<core::int*>*};
+    core::Iterable<core::String*>* s = v2<core::String*>("hello"){(core::String*) →* core::List<core::String*>*};
+    core::Iterable<core::List<core::int*>*>* t = v2<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0)){(core::List<core::int*>*) →* core::List<core::List<core::int*>*>*};
+    core::Iterable<core::num*>* u = v2<core::num*>(42){(core::num*) →* core::List<core::num*>*};
+    core::Iterable<core::num*>* v = v2<core::num*>(42){(core::num*) →* core::List<core::num*>*};
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.expect
index a2629f9..efa8da0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.expect
@@ -118,7 +118,7 @@
       return null;
     <S extends core::Object* = dynamic>(core::int*) →* core::int* x = int2int;
     x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x;
-    x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x.{core::num::+}(1);
+    x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
     <T extends core::Object* = dynamic>(core::int*) →* core::String* y = int2String;
     y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         x;
@@ -128,7 +128,7 @@
         .substring(3);
          ^^^^^^^^^" as{TypeError,ForDynamic} core::String*;
     <T extends core::Object* = dynamic>(core::String*) →* core::String* z = string2String;
-    z = <T extends core::Object* = dynamic>(core::String* x) → core::String* => x.{core::String::substring}(3);
+    z = <T extends core::Object* = dynamic>(core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.transformed.expect
index f068ae5..a4b85cb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.transformed.expect
@@ -118,7 +118,7 @@
       return null;
     <S extends core::Object* = dynamic>(core::int*) →* core::int* x = int2int;
     x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x;
-    x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x.{core::num::+}(1);
+    x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
     <T extends core::Object* = dynamic>(core::int*) →* core::String* y = int2String;
     y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => let final Never* #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
         x;
@@ -128,7 +128,7 @@
         .substring(3);
          ^^^^^^^^^";
     <T extends core::Object* = dynamic>(core::String*) →* core::String* z = string2String;
-    z = <T extends core::Object* = dynamic>(core::String* x) → core::String* => x.{core::String::substring}(3);
+    z = <T extends core::Object* = dynamic>(core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.expect
index e16a1a8..c0dae24 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.expect
@@ -29,11 +29,11 @@
     return null;
   abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
   method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic {
-    let final core::List<(self::DartType*) →* void>* #t1 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::C::assertAOf}.call(#t1);
-    self::C::assertBOf.call(<(self::DartType*) →* void>[self::_isInt, self::_isString]);
-    self::C::assertCOf.call(<(self::DartType*) →* void>[self::_isInt, self::_isString]);
-    let final core::List<(self::DartType*) →* void>* #t2 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::C::assertDOf}.call(#t2);
-    assertEOf.call(<(self::DartType*) →* void>[self::_isInt, self::_isString]);
+    let final core::List<(self::DartType*) →* void>* #t1 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::C::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t1){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    self::C::assertBOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    self::C::assertCOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    let final core::List<(self::DartType*) →* void>* #t2 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::C::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t2){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    assertEOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -53,10 +53,10 @@
     ;
   abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
   method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic {
-    let final core::List<(self::DartType*) →* void>* #t3 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}.call(#t3);
-    let final core::List<(self::DartType*) →* void>* #t4 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}.call(#t4);
-    let final core::List<(self::DartType*) →* void>* #t5 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertDOf}.call(#t5);
-    assertEOf.call(<(self::DartType*) →* void>[self::_isInt, self::_isString]);
+    let final core::List<(self::DartType*) →* void>* #t3 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t3){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    let final core::List<(self::DartType*) →* void>* #t4 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t4){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    let final core::List<(self::DartType*) →* void>* #t5 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t5){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    assertEOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -76,16 +76,16 @@
   return null;
 static method test() → dynamic {
   (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf;
-  assertAOf.call(<(self::DartType*) →* void>[self::_isInt, self::_isString]);
-  self::assertBOf.call(<(self::DartType*) →* void>[self::_isInt, self::_isString]);
-  self::assertCOf.call(<(self::DartType*) →* void>[self::_isInt, self::_isString]);
-  self::C::assertBOf.call(<(self::DartType*) →* void>[self::_isInt, self::_isString]);
-  self::C::assertCOf.call(<(self::DartType*) →* void>[self::_isInt, self::_isString]);
+  assertAOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::assertBOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::assertCOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::C::assertBOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::C::assertCOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
   self::C* c;
-  let final self::C* #t6 = c in let final core::List<(self::DartType*) →* void>* #t7 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t6.{self::C::assertAOf}.call(#t7);
-  let final self::C* #t8 = c in let final core::List<(self::DartType*) →* void>* #t9 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t8.{self::C::assertDOf}.call(#t9);
+  let final self::C* #t6 = c in let final core::List<(self::DartType*) →* void>* #t7 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t6.{self::C::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t7){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  let final self::C* #t8 = c in let final core::List<(self::DartType*) →* void>* #t9 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t8.{self::C::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t9){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
   self::G<core::int*>* g;
-  let final self::G<core::int*>* #t10 = g in let final core::List<(self::DartType*) →* void>* #t11 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t10.{self::G::assertAOf}.call(#t11);
-  let final self::G<core::int*>* #t12 = g in let final core::List<(self::DartType*) →* void>* #t13 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t12.{self::G::assertDOf}.call(#t13);
+  let final self::G<core::int*>* #t10 = g in let final core::List<(self::DartType*) →* void>* #t11 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t10.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t11){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  let final self::G<core::int*>* #t12 = g in let final core::List<(self::DartType*) →* void>* #t13 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t12.{self::G::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t13){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.transformed.expect
index 660139a..26ec6f6 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.transformed.expect
@@ -29,11 +29,11 @@
     return null;
   abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
   method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic {
-    let final core::List<(self::DartType*) →* void>* #t1 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::C::assertAOf}.call(#t1);
-    self::C::assertBOf.call(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString));
-    self::C::assertCOf.call(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString));
-    let final core::List<(self::DartType*) →* void>* #t2 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::C::assertDOf}.call(#t2);
-    assertEOf.call(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString));
+    let final core::List<(self::DartType*) →* void>* #t1 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::C::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t1){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    self::C::assertBOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    self::C::assertCOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    let final core::List<(self::DartType*) →* void>* #t2 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::C::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t2){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    assertEOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -53,10 +53,10 @@
     ;
   abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
   method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic {
-    let final core::List<(self::DartType*) →* void>* #t3 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::G::assertAOf}.call(#t3);
-    let final core::List<(self::DartType*) →* void>* #t4 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::G::assertAOf}.call(#t4);
-    let final core::List<(self::DartType*) →* void>* #t5 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::G::assertDOf}.call(#t5);
-    assertEOf.call(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString));
+    let final core::List<(self::DartType*) →* void>* #t3 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t3){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    let final core::List<(self::DartType*) →* void>* #t4 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t4){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    let final core::List<(self::DartType*) →* void>* #t5 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in this.{self::G::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t5){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    assertEOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -76,16 +76,16 @@
   return null;
 static method test() → dynamic {
   (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf;
-  assertAOf.call(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString));
-  self::assertBOf.call(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString));
-  self::assertCOf.call(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString));
-  self::C::assertBOf.call(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString));
-  self::C::assertCOf.call(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString));
+  assertAOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::assertBOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::assertCOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::C::assertBOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::C::assertCOf(core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString)){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
   self::C* c;
-  let final self::C* #t6 = c in let final core::List<(self::DartType*) →* void>* #t7 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in #t6.{self::C::assertAOf}.call(#t7);
-  let final self::C* #t8 = c in let final core::List<(self::DartType*) →* void>* #t9 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in #t8.{self::C::assertDOf}.call(#t9);
+  let final self::C* #t6 = c in let final core::List<(self::DartType*) →* void>* #t7 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in #t6.{self::C::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t7){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  let final self::C* #t8 = c in let final core::List<(self::DartType*) →* void>* #t9 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in #t8.{self::C::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t9){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
   self::G<core::int*>* g;
-  let final self::G<core::int*>* #t10 = g in let final core::List<(self::DartType*) →* void>* #t11 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in #t10.{self::G::assertAOf}.call(#t11);
-  let final self::G<core::int*>* #t12 = g in let final core::List<(self::DartType*) →* void>* #t13 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in #t12.{self::G::assertDOf}.call(#t13);
+  let final self::G<core::int*>* #t10 = g in let final core::List<(self::DartType*) →* void>* #t11 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in #t10.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t11){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  let final self::G<core::int*>* #t12 = g in let final core::List<(self::DartType*) →* void>* #t13 = core::_GrowableList::_literal2<(self::DartType*) →* void>(self::_isInt, self::_isString) in #t12.{self::G::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t13){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart b/pkg/front_end/testcases/inference/dynamic_methods.dart
index f7b1e2b..a381658 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart
@@ -25,11 +25,11 @@
       d. /*@target=Object.noSuchMethod*/ noSuchMethod(null);
   var /*@ type=dynamic */ call_nsm2 = d.noSuchMethod(null, null);
   var /*@ type=bool* */ equals_self = d /*@target=Object.==*/ == d;
-  var /*@ type=bool* */ equals_null = d /*@target=Object.==*/ == null;
-  var /*@ type=bool* */ null_equals = null /*@target=Object.==*/ == d;
+  var /*@ type=bool* */ equals_null = d  == null;
+  var /*@ type=bool* */ null_equals = null  == d;
   var /*@ type=bool* */ not_equals_self = d /*@target=Object.==*/ != d;
-  var /*@ type=bool* */ not_equals_null = d /*@target=Object.==*/ != null;
-  var /*@ type=bool* */ null_not_equals = null /*@target=Object.==*/ != d;
+  var /*@ type=bool* */ not_equals_null = d  != null;
+  var /*@ type=bool* */ null_not_equals = null  != d;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.expect
index af56742..d86a1ff 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.expect
@@ -28,23 +28,23 @@
 }
 static method test() → dynamic {
   dynamic d = new self::Foo::•();
-  core::int* get_hashCode = d.{core::Object::hashCode};
+  core::int* get_hashCode = d.{core::Object::hashCode}{core::int*};
   dynamic call_hashCode = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:46: Error: 'hashCode' isn't a function or method and can't be invoked.
       d. /*@target=Object.hashCode*/ hashCode();
                                              ^^^^...";
-  core::String* call_toString = d.{core::Object::toString}();
-  dynamic call_toStringArg = d.toString(color: "pink");
-  dynamic call_foo0 = d.foo();
-  dynamic call_foo1 = d.foo(1);
-  dynamic call_foo2 = d.foo(1, 2);
-  dynamic call_nsm0 = d.noSuchMethod();
-  dynamic call_nsm1 = d.{core::Object::noSuchMethod}(null);
-  dynamic call_nsm2 = d.noSuchMethod(null, null);
-  core::bool* equals_self = d.{core::Object::==}(d);
-  core::bool* equals_null = d.{core::Object::==}(null);
-  core::bool* null_equals = null.{core::Object::==}(d);
-  core::bool* not_equals_self = !d.{core::Object::==}(d);
-  core::bool* not_equals_null = !d.{core::Object::==}(null);
-  core::bool* null_not_equals = !null.{core::Object::==}(d);
+  core::String* call_toString = d.{core::Object::toString}(){() →* core::String*};
+  dynamic call_toStringArg = d{dynamic}.toString(color: "pink");
+  dynamic call_foo0 = d{dynamic}.foo();
+  dynamic call_foo1 = d{dynamic}.foo(1);
+  dynamic call_foo2 = d{dynamic}.foo(1, 2);
+  dynamic call_nsm0 = d{dynamic}.noSuchMethod();
+  dynamic call_nsm1 = d.{core::Object::noSuchMethod}(null){(core::Invocation*) →* dynamic};
+  dynamic call_nsm2 = d{dynamic}.noSuchMethod(null, null);
+  core::bool* equals_self = d =={core::Object::==}{(core::Object*) →* core::bool*} d;
+  core::bool* equals_null = d == null;
+  core::bool* null_equals = d == null;
+  core::bool* not_equals_self = !(d =={core::Object::==}{(core::Object*) →* core::bool*} d);
+  core::bool* not_equals_null = !(d == null);
+  core::bool* null_not_equals = !(d == null);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.transformed.expect
index af56742..d86a1ff 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.transformed.expect
@@ -28,23 +28,23 @@
 }
 static method test() → dynamic {
   dynamic d = new self::Foo::•();
-  core::int* get_hashCode = d.{core::Object::hashCode};
+  core::int* get_hashCode = d.{core::Object::hashCode}{core::int*};
   dynamic call_hashCode = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:46: Error: 'hashCode' isn't a function or method and can't be invoked.
       d. /*@target=Object.hashCode*/ hashCode();
                                              ^^^^...";
-  core::String* call_toString = d.{core::Object::toString}();
-  dynamic call_toStringArg = d.toString(color: "pink");
-  dynamic call_foo0 = d.foo();
-  dynamic call_foo1 = d.foo(1);
-  dynamic call_foo2 = d.foo(1, 2);
-  dynamic call_nsm0 = d.noSuchMethod();
-  dynamic call_nsm1 = d.{core::Object::noSuchMethod}(null);
-  dynamic call_nsm2 = d.noSuchMethod(null, null);
-  core::bool* equals_self = d.{core::Object::==}(d);
-  core::bool* equals_null = d.{core::Object::==}(null);
-  core::bool* null_equals = null.{core::Object::==}(d);
-  core::bool* not_equals_self = !d.{core::Object::==}(d);
-  core::bool* not_equals_null = !d.{core::Object::==}(null);
-  core::bool* null_not_equals = !null.{core::Object::==}(d);
+  core::String* call_toString = d.{core::Object::toString}(){() →* core::String*};
+  dynamic call_toStringArg = d{dynamic}.toString(color: "pink");
+  dynamic call_foo0 = d{dynamic}.foo();
+  dynamic call_foo1 = d{dynamic}.foo(1);
+  dynamic call_foo2 = d{dynamic}.foo(1, 2);
+  dynamic call_nsm0 = d{dynamic}.noSuchMethod();
+  dynamic call_nsm1 = d.{core::Object::noSuchMethod}(null){(core::Invocation*) →* dynamic};
+  dynamic call_nsm2 = d{dynamic}.noSuchMethod(null, null);
+  core::bool* equals_self = d =={core::Object::==}{(core::Object*) →* core::bool*} d;
+  core::bool* equals_null = d == null;
+  core::bool* null_equals = d == null;
+  core::bool* not_equals_self = !(d =={core::Object::==}{(core::Object*) →* core::bool*} d);
+  core::bool* not_equals_null = !(d == null);
+  core::bool* null_not_equals = !(d == null);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.expect
index be5533f..f17816f 100644
--- a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.expect
@@ -4,8 +4,8 @@
 
 static method test() → void {
   #L1:
-  for (core::num* x = 0; ; x = x.{core::num::+}(1)) {
-    if(x.{core::num::>=}(10))
+  for (core::num* x = 0; ; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
+    if(x.{core::num::>=}(10){(core::num*) →* core::bool*})
       break #L1;
     if(x is core::int*) {
       core::int* y = x{core::int*};
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.transformed.expect
index be5533f..f17816f 100644
--- a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.transformed.expect
@@ -4,8 +4,8 @@
 
 static method test() → void {
   #L1:
-  for (core::num* x = 0; ; x = x.{core::num::+}(1)) {
-    if(x.{core::num::>=}(10))
+  for (core::num* x = 0; ; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
+    if(x.{core::num::>=}(10){(core::num*) →* core::bool*})
       break #L1;
     if(x is core::int*) {
       core::int* y = x{core::int*};
diff --git a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.expect b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.expect
index e03cca6..8f36a9c 100644
--- a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method test() → void {
   core::num* x;
-  for (final core::int* #t1 = x = 0; x.{core::num::<}(10); x = x.{core::num::+}(1)) {
+  for (final core::int* #t1 = x = 0; x.{core::num::<}(10){(core::num*) →* core::bool*}; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
     if(x is core::int*) {
       core::int* y = x{core::int*};
     }
diff --git a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.transformed.expect
index e03cca6..8f36a9c 100644
--- a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method test() → void {
   core::num* x;
-  for (final core::int* #t1 = x = 0; x.{core::num::<}(10); x = x.{core::num::+}(1)) {
+  for (final core::int* #t1 = x = 0; x.{core::num::<}(10){(core::num*) →* core::bool*}; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
     if(x is core::int*) {
       core::int* y = x{core::int*};
     }
diff --git a/pkg/front_end/testcases/inference/for_loop_promotion.dart.weak.expect b/pkg/front_end/testcases/inference/for_loop_promotion.dart.weak.expect
index de8249b..6cecf17 100644
--- a/pkg/front_end/testcases/inference/for_loop_promotion.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/for_loop_promotion.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method test() → void {
-  for (core::num* x = 0; x.{core::num::<}(10); x = x.{core::num::+}(1)) {
+  for (core::num* x = 0; x.{core::num::<}(10){(core::num*) →* core::bool*}; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
     if(x is core::int*) {
       core::int* y = x{core::int*};
     }
diff --git a/pkg/front_end/testcases/inference/for_loop_promotion.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/for_loop_promotion.dart.weak.transformed.expect
index de8249b..6cecf17 100644
--- a/pkg/front_end/testcases/inference/for_loop_promotion.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/for_loop_promotion.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method test() → void {
-  for (core::num* x = 0; x.{core::num::<}(10); x = x.{core::num::+}(1)) {
+  for (core::num* x = 0; x.{core::num::<}(10){(core::num*) →* core::bool*}; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
     if(x is core::int*) {
       core::int* y = x{core::int*};
     }
diff --git a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.expect b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.expect
index 17f4b19..656a85c 100644
--- a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.expect
@@ -9,8 +9,8 @@
 static method add2(core::int* y) → dynamic {}
 static method test() → dynamic {
   asy::Future<core::int*>* f;
-  asy::Future<void>* a = f.{asy::Future::then}<void>(#C1);
-  asy::Future<dynamic>* b = f.{asy::Future::then}<dynamic>(#C2);
+  asy::Future<void>* a = f.{asy::Future::then}<void>(#C1){((core::int*) →* FutureOr<void>*, {onError: core::Function*}) →* asy::Future<void>*};
+  asy::Future<dynamic>* b = f.{asy::Future::then}<dynamic>(#C2){((core::int*) →* FutureOr<dynamic>*, {onError: core::Function*}) →* asy::Future<dynamic>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.transformed.expect
index 17f4b19..656a85c 100644
--- a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.transformed.expect
@@ -9,8 +9,8 @@
 static method add2(core::int* y) → dynamic {}
 static method test() → dynamic {
   asy::Future<core::int*>* f;
-  asy::Future<void>* a = f.{asy::Future::then}<void>(#C1);
-  asy::Future<dynamic>* b = f.{asy::Future::then}<dynamic>(#C2);
+  asy::Future<void>* a = f.{asy::Future::then}<void>(#C1){((core::int*) →* FutureOr<void>*, {onError: core::Function*}) →* asy::Future<void>*};
+  asy::Future<dynamic>* b = f.{asy::Future::then}<dynamic>(#C2){((core::int*) →* FutureOr<dynamic>*, {onError: core::Function*}) →* asy::Future<dynamic>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.expect
index 2d476b4..43b73f6 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.expect
@@ -24,32 +24,32 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3));
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return await asy::Future::value<core::int*>(3);
-  });
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return 3;
-  });
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
-  });
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return asy::Future::value<core::int*>(3);
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
index 903b67e..29a6f55 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
index 31f36c1..6f7152b 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
@@ -63,7 +63,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -92,7 +92,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -119,7 +119,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -146,11 +146,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -177,7 +177,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -204,7 +204,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
index 9755c88..251ec40 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
@@ -24,32 +24,32 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3));
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return await new self::MyFuture::value<core::int*>(3);
-  });
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return 3;
-  });
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
-  });
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return new self::MyFuture::value<core::int*>(3);
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
index 590e815..36ab6a8 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
index 5e4f03c..fe6cbd2 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
@@ -63,7 +63,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -92,7 +92,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -119,7 +119,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -146,11 +146,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -177,7 +177,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -204,7 +204,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
index 79fbdd6..7eca3d0 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
@@ -24,32 +24,32 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3));
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return await asy::Future::value<core::int*>(3);
-  });
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return 3;
-  });
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
-  });
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return asy::Future::value<core::int*>(3);
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
index 127f049..e35da6b 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
index b811bc8..2cce0d4 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
@@ -63,7 +63,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -92,7 +92,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -119,7 +119,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -146,11 +146,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -177,7 +177,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -204,7 +204,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
index 090effe..37e0e62 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
@@ -24,32 +24,32 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3));
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return await new self::MyFuture::value<core::int*>(3);
-  });
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return 3;
-  });
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
-  });
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return new self::MyFuture::value<core::int*>(3);
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
index c3a7845..5908716 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
index dfb8161..d90c9e6 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
@@ -63,7 +63,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -92,7 +92,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -119,7 +119,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -146,11 +146,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -177,7 +177,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -204,7 +204,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
index 9988e76..1917e07 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
@@ -24,32 +24,32 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3));
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return await new self::MyFuture::value<core::int*>(3);
-  });
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return 3;
-  });
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
-  });
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return new self::MyFuture::value<core::int*>(3);
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
index 9bddbcd..b699b6c 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
index 2e741e8..79e4838 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<dynamic>* f;
@@ -63,7 +63,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -92,7 +92,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -119,7 +119,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -146,11 +146,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -177,7 +177,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -204,7 +204,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
index 7df4804..fa683c126 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
@@ -24,32 +24,32 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3));
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return await asy::Future::value<core::int*>(3);
-  });
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return 3;
-  });
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
-  });
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
     return asy::Future::value<core::int*>(3);
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
index 908df9c..d9c4871 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
index b0315bb..e796209 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<dynamic>* f;
@@ -63,7 +63,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -92,7 +92,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -119,7 +119,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -146,11 +146,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3));
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -177,7 +177,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -204,7 +204,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect
index 7bbdb21..484270e 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect
@@ -24,24 +24,24 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3));
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
     return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*);
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
     return (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
index f0c10fb..cfacce7 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
index d191f4c..e243878 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
@@ -70,7 +70,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -99,11 +99,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*);
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
     return (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect
index ac6c2b0..5052927 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect
@@ -24,24 +24,24 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3));
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
     return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*);
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
     return (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
index 6d7ac2e..7eb99be 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
index 43a3960..57a5fe1 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
@@ -70,7 +70,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -99,11 +99,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*);
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
     return (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect
index cf29dae..01ac303 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect
@@ -24,24 +24,24 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3));
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
     return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*);
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
     return (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
index 5942aa9..3b812af 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
index 5f3d17d..dd49882 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
@@ -70,7 +70,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -99,11 +99,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*);
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
     return (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect
index a3755b3..9f0633d 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect
@@ -24,24 +24,24 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3));
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
     return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*);
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
     return (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
index e3979f7..2d775ff 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
index 91d19c76..0dc6739 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
@@ -70,7 +70,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -99,11 +99,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*);
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
     return (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect
index 52b58db..41958f4 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect
@@ -24,24 +24,24 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3));
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
     return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*);
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
     return (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
index a52e25c..3026114 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
index 09ebce0..528b319 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
@@ -70,7 +70,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -99,11 +99,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*);
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
     return (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect
index 3603d46..8446ce804 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect
@@ -24,24 +24,24 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3));
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
     return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*);
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
     return (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
index 7b0d48e..cd341f3 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
index de83970..d783f2d 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
@@ -70,7 +70,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -99,11 +99,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*);
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
     return (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
-  });
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.weak.expect
index fb4af0a..7024c62 100644
--- a/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.weak.expect
@@ -7,7 +7,7 @@
 
 static method test() → dynamic {
   asy::Future<core::int*>* f;
-  asy::Future<core::List<core::int*>*>* b = f.{asy::Future::then}<core::List<dynamic>*>((core::int* x) → core::List<dynamic>* => <dynamic>[]).{asy::Future::whenComplete}(() → Null {}) as{TypeError} asy::Future<core::List<core::int*>*>*;
-  b = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => <core::int*>[]);
+  asy::Future<core::List<core::int*>*>* b = f.{asy::Future::then}<core::List<dynamic>*>((core::int* x) → core::List<dynamic>* => <dynamic>[]){((core::int*) →* FutureOr<core::List<dynamic>*>*, {onError: core::Function*}) →* asy::Future<core::List<dynamic>*>*}.{asy::Future::whenComplete}(() → Null {}){(() →* FutureOr<void>*) →* asy::Future<core::List<dynamic>*>*} as{TypeError} asy::Future<core::List<core::int*>*>*;
+  b = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => <core::int*>[]){((core::int*) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.weak.transformed.expect
index 53eb93c..947395c 100644
--- a/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
 
 static method test() → dynamic {
   asy::Future<core::int*>* f;
-  asy::Future<core::List<core::int*>*>* b = f.{asy::Future::then}<core::List<dynamic>*>((core::int* x) → core::List<dynamic>* => core::_GrowableList::•<dynamic>(0)).{asy::Future::whenComplete}(() → Null {}) as{TypeError} asy::Future<core::List<core::int*>*>*;
-  b = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => core::_GrowableList::•<core::int*>(0));
+  asy::Future<core::List<core::int*>*>* b = f.{asy::Future::then}<core::List<dynamic>*>((core::int* x) → core::List<dynamic>* => core::_GrowableList::•<dynamic>(0)){((core::int*) →* FutureOr<core::List<dynamic>*>*, {onError: core::Function*}) →* asy::Future<core::List<dynamic>*>*}.{asy::Future::whenComplete}(() → Null {}){(() →* FutureOr<void>*) →* asy::Future<core::List<dynamic>*>*} as{TypeError} asy::Future<core::List<core::int*>*>*;
+  b = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => core::_GrowableList::•<core::int*>(0)){((core::int*) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.expect
index 7876e51..354eb47 100644
--- a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.expect
@@ -26,7 +26,7 @@
  - 'List' is from 'dart:core'.
  - 'Future' is from 'dart:async'.
       /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
-                                                                                                  ^" in <dynamic>[] as{TypeError} FutureOr<asy::Future<core::List<core::int*>*>*>*);
+                                                                                                  ^" in <dynamic>[] as{TypeError} FutureOr<asy::Future<core::List<core::int*>*>*>*){((core::int*) →* FutureOr<asy::Future<core::List<core::int*>*>*>*, {onError: core::Function*}) →* asy::Future<asy::Future<core::List<core::int*>*>*>*};
   asy::Future<core::List<core::int*>*>* y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
  - 'Future' is from 'dart:async'.
  - 'List' is from 'dart:core'.
@@ -35,7 +35,7 @@
 }
 static method m2() → dynamic {
   asy::Future<core::int*>* f;
-  asy::Future<core::List<core::int*>*>* x = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => <core::int*>[]);
+  asy::Future<core::List<core::int*>*>* x = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => <core::int*>[]){((core::int*) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
   asy::Future<core::List<core::int*>*>* y = x;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.transformed.expect
index 980a154..008d899 100644
--- a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
  - 'List' is from 'dart:core'.
  - 'Future' is from 'dart:async'.
       /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
-                                                                                                  ^" in core::_GrowableList::•<dynamic>(0) as{TypeError} FutureOr<asy::Future<core::List<core::int*>*>*>*);
+                                                                                                  ^" in core::_GrowableList::•<dynamic>(0) as{TypeError} FutureOr<asy::Future<core::List<core::int*>*>*>*){((core::int*) →* FutureOr<asy::Future<core::List<core::int*>*>*>*, {onError: core::Function*}) →* asy::Future<asy::Future<core::List<core::int*>*>*>*};
   asy::Future<core::List<core::int*>*>* y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
  - 'Future' is from 'dart:async'.
  - 'List' is from 'dart:core'.
@@ -35,7 +35,7 @@
 }
 static method m2() → dynamic {
   asy::Future<core::int*>* f;
-  asy::Future<core::List<core::int*>*>* x = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => core::_GrowableList::•<core::int*>(0));
+  asy::Future<core::List<core::int*>*>* x = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => core::_GrowableList::•<core::int*>(0)){((core::int*) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
   asy::Future<core::List<core::int*>*>* y = x;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect
index 4771d6d..da7400e 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect
@@ -24,24 +24,24 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::int*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::int* x) → asy::Future<core::int*>* async => let final core::int* #t1 = x in #t1.{core::num::==}(null) ?{core::int*} await asy::Future::value<core::int*>(3) : #t1);
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::int* x) → asy::Future<core::int*>* async => let final core::int* #t1 = x in #t1 == null ?{core::int*} await asy::Future::value<core::int*>(3) : #t1){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* async {
-    return (let final core::int* #t2 = await x in #t2.{core::num::==}(null) ?{core::Object*} asy::Future::value<core::int*>(3) : #t2) as{TypeError} FutureOr<core::int*>*;
-  });
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* => (let final core::int* #t3 = x in #t3.{core::num::==}(null) ?{core::Object*} asy::Future::value<core::int*>(3) : #t3) as{TypeError} FutureOr<core::int*>*);
+    return (let final core::int* #t2 = await x in #t2 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t2) as{TypeError} FutureOr<core::int*>*;
+  }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* => (let final core::int* #t3 = x in #t3 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t3) as{TypeError} FutureOr<core::int*>*){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* {
-    return (let final core::int* #t4 = x in #t4.{core::num::==}(null) ?{core::Object*} asy::Future::value<core::int*>(3) : #t4) as{TypeError} FutureOr<core::int*>*;
-  });
+    return (let final core::int* #t4 = x in #t4 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t4) as{TypeError} FutureOr<core::int*>*;
+  }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
index e4600c3..ffd3fdd 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
index ecd8f2b..061b526 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
@@ -25,13 +25,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::int*>* f;
@@ -50,7 +50,7 @@
         #L1:
         {
           final core::int* #t1 = x;
-          if(#t1.{core::num::==}(null)) {
+          if(#t1 == null) {
             [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
             :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
           }
@@ -71,7 +71,7 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
+  }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
@@ -86,7 +86,7 @@
         #L2:
         {
           [yield] let dynamic #t3 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (let final core::int* #t4 = _in::unsafeCast<core::int*>(:result) in #t4.{core::num::==}(null) ?{core::Object*} asy::Future::value<core::int*>(3) : #t4) as{TypeError} FutureOr<core::int*>*;
+          :return_value = (let final core::int* #t4 = _in::unsafeCast<core::int*>(:result) in #t4 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t4) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -100,11 +100,11 @@
     :async_op.call();
     :is_sync = true;
     return :async_future;
-  });
-  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* => (let final core::int* #t5 = x in #t5.{core::num::==}(null) ?{core::Object*} asy::Future::value<core::int*>(3) : #t5) as{TypeError} FutureOr<core::int*>*);
+  }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* => (let final core::int* #t5 = x in #t5 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t5) as{TypeError} FutureOr<core::int*>*){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* {
-    return (let final core::int* #t6 = x in #t6.{core::num::==}(null) ?{core::Object*} asy::Future::value<core::int*>(3) : #t6) as{TypeError} FutureOr<core::int*>*;
-  });
+    return (let final core::int* #t6 = x in #t6 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t6) as{TypeError} FutureOr<core::int*>*;
+  }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
index 704d5e9..9d407d0 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
@@ -33,22 +33,22 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method main() → void {
-  self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
+  self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
   asy::Future<core::int*>* f2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards.dart'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in f as{TypeError} asy::Future<core::int*>*;
-  asy::Future<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3) as asy::Future<core::double*>*;
+  asy::Future<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*} as asy::Future<core::double*>*;
 }
 static method foo() → self::MyFuture<dynamic>*
   return new self::MyFuture::value<core::int*>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
index 5309f49..64672a6 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
index 10805f0..9e8fc77 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
@@ -33,22 +33,22 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method main() → void {
-  self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
+  self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
   asy::Future<core::int*>* f2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards.dart'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in f as{TypeError} asy::Future<core::int*>*;
-  asy::Future<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
+  asy::Future<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
 }
 static method foo() → self::MyFuture<dynamic>*
   return new self::MyFuture::value<core::int*>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
index 8a122aa..b6b8c88 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
@@ -32,21 +32,21 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method main() → void {
-  self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
+  self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
   self::MyFuture<core::int*>* f2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards_2.dart'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                   ^" in f as{TypeError} self::MyFuture<core::int*>*;
-  self::MyFuture<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3) as self::MyFuture<core::double*>*;
+  self::MyFuture<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*} as self::MyFuture<core::double*>*;
 }
 static method foo() → self::MyFuture<dynamic>*
   return new self::MyFuture::value<core::int*>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
index 6b301eb..cc0154e 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
index 754b3a9..2811c31 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
@@ -32,21 +32,21 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method main() → void {
-  self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
+  self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
   self::MyFuture<core::int*>* f2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards_2.dart'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                   ^" in f as{TypeError} self::MyFuture<core::int*>*;
-  self::MyFuture<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
+  self::MyFuture<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
 }
 static method foo() → self::MyFuture<dynamic>*
   return new self::MyFuture::value<core::int*>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
index db196c2..ca5d863 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
@@ -32,21 +32,21 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
-  asy::Future<core::double*>* f = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3);
+  asy::Future<core::double*>* f = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*};
   asy::Future<core::int*>* f2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in f as{TypeError} asy::Future<core::int*>*;
-  asy::Future<core::num*>* f3 = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3) as asy::Future<core::double*>*;
+  asy::Future<core::num*>* f3 = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*} as asy::Future<core::double*>*;
 }
 static method foo() → asy::Future<dynamic>*
   return asy::Future::value<core::int*>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
index 0085139..0108d81 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
index e3d9eb4..5cff642 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
@@ -32,21 +32,21 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
-  asy::Future<core::double*>* f = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3);
+  asy::Future<core::double*>* f = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*};
   asy::Future<core::int*>* f2 = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in f as{TypeError} asy::Future<core::int*>*;
-  asy::Future<core::num*>* f3 = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3);
+  asy::Future<core::num*>* f3 = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*};
 }
 static method foo() → asy::Future<dynamic>*
   return asy::Future::value<core::int*>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.expect
index a8c0b46..3acce35 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.expect
@@ -8,9 +8,9 @@
 static method test() → dynamic {
   asy::Future<core::int*>* base;
   asy::Future<core::bool*>* f = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* {
-    return x.{core::num::==}(0);
-  });
-  asy::Future<core::bool*>* g = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* => x.{core::num::==}(0));
+    return x =={core::num::==}{(core::Object*) →* core::bool*} 0;
+  }){((core::int*) →* FutureOr<core::bool*>*, {onError: core::Function*}) →* asy::Future<core::bool*>*};
+  asy::Future<core::bool*>* g = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* => x =={core::num::==}{(core::Object*) →* core::bool*} 0){((core::int*) →* FutureOr<core::bool*>*, {onError: core::Function*}) →* asy::Future<core::bool*>*};
   asy::Future<core::bool*>* b = f;
   b = g;
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.transformed.expect
index a8c0b46..3acce35 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.transformed.expect
@@ -8,9 +8,9 @@
 static method test() → dynamic {
   asy::Future<core::int*>* base;
   asy::Future<core::bool*>* f = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* {
-    return x.{core::num::==}(0);
-  });
-  asy::Future<core::bool*>* g = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* => x.{core::num::==}(0));
+    return x =={core::num::==}{(core::Object*) →* core::bool*} 0;
+  }){((core::int*) →* FutureOr<core::bool*>*, {onError: core::Function*}) →* asy::Future<core::bool*>*};
+  asy::Future<core::bool*>* g = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* => x =={core::num::==}{(core::Object*) →* core::bool*} 0){((core::int*) →* FutureOr<core::bool*>*, {onError: core::Function*}) →* asy::Future<core::bool*>*};
   asy::Future<core::bool*>* b = f;
   b = g;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect
index ea9473b..aacd7bb 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* async {
   return (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
index 739558d..2a73d70 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* async 
   ;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
index 5fc430a..8f744f7 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
   final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect
index 6ee66d9..dbfb2e6 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* async {
   return (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
index 04c973a..547c415 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* async 
   ;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
index 2ba5916..81ffcf6 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
   final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
index 5746283..2ac9820 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
@@ -31,19 +31,19 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
         new /*@ typeArgs=int* */ Future.value('hi'));
-                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?));
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]);
+                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
 static method g2() → asy::Future<core::List<core::int*>*>* async {
   return <core::int*>[3];
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
index ef0889f..2a918af 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
index f91a82c..bbe0213 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
@@ -31,19 +31,19 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
         new /*@ typeArgs=int* */ Future.value('hi'));
-                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?));
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3));
+                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
 static method g2() → asy::Future<core::List<core::int*>*>* /* originally async */ {
   final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
   core::bool* :is_sync = false;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
index bf4fd10..10efb8a 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
@@ -24,17 +24,17 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
-static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi"));
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]);
+static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
 static method g2() → asy::Future<core::List<core::int*>*>* async {
   return <core::int*>[3];
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
index 8471c54..cf32cfb 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
index 3e5228e..191e1c8 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
@@ -24,17 +24,17 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
-static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi"));
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3));
+static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
 static method g2() → asy::Future<core::List<core::int*>*>* /* originally async */ {
   final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
   core::bool* :is_sync = false;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
index 5811c28..ec1e7dc 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
@@ -31,19 +31,19 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
         new /*@ typeArgs=int* */ Future.value('hi'));
-                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?));
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]);
+                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
 static method g2() → asy::Future<core::List<core::int*>*>* async {
   return <core::int*>[3];
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
index d14c4a7..e4e19d0 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
index c3a836e..536aaad 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
@@ -31,19 +31,19 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
         new /*@ typeArgs=int* */ Future.value('hi'));
-                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?));
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3));
+                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
 static method g2() → asy::Future<core::List<core::int*>*>* /* originally async */ {
   final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
   core::bool* :is_sync = false;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
index 8ce0d07..4ab8890 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
@@ -24,17 +24,17 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
-static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi"));
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]);
+static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
 static method g2() → asy::Future<core::List<core::int*>*>* async {
   return <core::int*>[3];
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
index 3853e42..7a5d3d7 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
@@ -24,13 +24,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
index 82d9f9b..55d6d31 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
@@ -24,17 +24,17 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
-static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi"));
-static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3));
+static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
 static method g2() → asy::Future<core::List<core::int*>*>* /* originally async */ {
   final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
   core::bool* :is_sync = false;
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.expect
index 1f60cfe..b6875d1 100644
--- a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.expect
@@ -6,8 +6,8 @@
 static method main() → dynamic {
   function f<T extends core::Object* = dynamic>(T* x) → (T*) →* void
     return null;
-  (core::int*) →* void x = f.call<core::int*>(42);
-  (core::int*) →* void y = f.call<core::int*>(42);
+  (core::int*) →* void x = f<core::int*>(42){(core::int*) →* (core::int*) →* void};
+  (core::int*) →* void y = f<core::int*>(42){(core::int*) →* (core::int*) →* void};
   (core::int*) →* void takesInt = x;
   takesInt = y;
 }
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.transformed.expect
index 1f60cfe..b6875d1 100644
--- a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.transformed.expect
@@ -6,8 +6,8 @@
 static method main() → dynamic {
   function f<T extends core::Object* = dynamic>(T* x) → (T*) →* void
     return null;
-  (core::int*) →* void x = f.call<core::int*>(42);
-  (core::int*) →* void y = f.call<core::int*>(42);
+  (core::int*) →* void x = f<core::int*>(42){(core::int*) →* (core::int*) →* void};
+  (core::int*) →* void y = f<core::int*>(42){(core::int*) →* (core::int*) →* void};
   (core::int*) →* void takesInt = x;
   takesInt = y;
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.expect
index 3d831a4..19380c0 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.expect
@@ -6,7 +6,7 @@
   return null;
 static method main() → dynamic {
   core::String* x = self::f<core::int*, core::String*>(42);
-  core::String* y = (#C1).call<core::int*, core::String*>(42);
+  core::String* y = (#C1)<core::int*, core::String*>(42){(core::int*) →* core::String*};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.transformed.expect
index 3d831a4..19380c0 100644
--- a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   return null;
 static method main() → dynamic {
   core::String* x = self::f<core::int*, core::String*>(42);
-  core::String* y = (#C1).call<core::int*, core::String*>(42);
+  core::String* y = (#C1)<core::int*, core::String*>(42){(core::int*) →* core::String*};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.expect
index 3569bc6..fc573b1 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.expect
@@ -29,5 +29,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::Foo::•<core::String*>().{self::Foo::method}<core::int*>(42);
+  new self::Foo::•<core::String*>().{self::Foo::method}<core::int*>(42){(core::int*) →* core::int*};
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.expect
index 233b1cc..c42f670 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.expect
@@ -51,6 +51,6 @@
 static method main() → dynamic {
   core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:18:73: Error: Expected 0 type arguments.
       . /*error:WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD*/ /*@target=D.m*/ m<int>(
-                                                                        ^" in new self::D::•().{self::D::m}<core::int*>(42);
+                                                                        ^" in new self::D::•().{self::D::m}{<inapplicable>}.<core::int*>(42){(invalid-type) →* invalid-type};
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.expect
index dcb7d1d..b0966cb 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.expect
@@ -4,14 +4,14 @@
 
 static method test() → void {
   core::List<core::int*>* o;
-  core::int* y = o.{core::Iterable::fold}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
-  dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
+  core::int* y = o.{core::Iterable::fold}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y){(core::num*) →* core::int*}){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x{dynamic}.+(y)){(dynamic, (dynamic, core::int*) →* dynamic) →* dynamic};
   y = z as{TypeError,ForDynamic} core::int*;
 }
 static method functionExpressionInvocation() → void {
   core::List<core::int*>* o;
-  core::int* y = o.{core::Iterable::fold}.call<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
-  dynamic z = o.{core::Iterable::fold}.call<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
+  core::int* y = o.{core::Iterable::fold}{<T extends core::Object* = dynamic>(T*, (T*, core::int*) →* T*) →* T*}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y){(core::num*) →* core::int*}){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  dynamic z = o.{core::Iterable::fold}{<T extends core::Object* = dynamic>(T*, (T*, core::int*) →* T*) →* T*}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x{dynamic}.+(y)){(dynamic, (dynamic, core::int*) →* dynamic) →* dynamic};
   y = z as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.transformed.expect
index dcb7d1d..b0966cb 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.transformed.expect
@@ -4,14 +4,14 @@
 
 static method test() → void {
   core::List<core::int*>* o;
-  core::int* y = o.{core::Iterable::fold}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
-  dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
+  core::int* y = o.{core::Iterable::fold}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y){(core::num*) →* core::int*}){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x{dynamic}.+(y)){(dynamic, (dynamic, core::int*) →* dynamic) →* dynamic};
   y = z as{TypeError,ForDynamic} core::int*;
 }
 static method functionExpressionInvocation() → void {
   core::List<core::int*>* o;
-  core::int* y = o.{core::Iterable::fold}.call<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
-  dynamic z = o.{core::Iterable::fold}.call<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
+  core::int* y = o.{core::Iterable::fold}{<T extends core::Object* = dynamic>(T*, (T*, core::int*) →* T*) →* T*}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y){(core::num*) →* core::int*}){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  dynamic z = o.{core::Iterable::fold}{<T extends core::Object* = dynamic>(T*, (T*, core::int*) →* T*) →* T*}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x{dynamic}.+(y)){(dynamic, (dynamic, core::int*) →* dynamic) →* dynamic};
   y = z as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.expect
index 454ab90..7241ba2 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.expect
@@ -64,6 +64,6 @@
     return x;
 }
 static method main() → dynamic {
-  core::int* y = (new self::D::•() as self::C*).{self::C::m}(42) as{TypeError,ForDynamic} core::int*;
+  core::int* y = (new self::D::•() as self::C*).{self::C::m}(42){(dynamic) →* dynamic} as{TypeError,ForDynamic} core::int*;
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
index 527c4b0..22921fb 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
@@ -86,24 +86,24 @@
                                                                        ^" in (#C2<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
   self::takeOON((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeOOO((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
-  self::takeIII(new self::C::•().{self::C::m}<core::int*>);
-  self::takeDDD(new self::C::•().{self::C::m}<core::double*>);
-  self::takeNNN(new self::C::•().{self::C::m}<core::num*>);
-  self::takeIDN(new self::C::•().{self::C::m}<core::num*>);
-  self::takeDIN(new self::C::•().{self::C::m}<core::num*>);
-  self::takeIIN(new self::C::•().{self::C::m}<core::int*>);
-  self::takeDDN(new self::C::•().{self::C::m}<core::double*>);
-  self::takeIIO(new self::C::•().{self::C::m}<core::int*>);
-  self::takeDDO(new self::C::•().{self::C::m}<core::double*>);
-  self::takeOON((new self::C::•().{self::C::m}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
-  self::takeOOO((new self::C::•().{self::C::m}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
-  self::takeOOI((new self::C::•().{self::C::m}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
+  self::takeIII(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
+  self::takeDDD(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
+  self::takeNNN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
+  self::takeIDN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
+  self::takeDIN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
+  self::takeIIN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
+  self::takeDDN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
+  self::takeIIO(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
+  self::takeDDO(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
+  self::takeOON((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeOOO((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeOOI((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
   self::takeIDI(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
           . /*@target=C.m*/ m);
-                            ^" in (new self::C::•().{self::C::m}<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
+                            ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
   self::takeDID(let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
           . /*@target=C.m*/ m);
-                            ^" in (new self::C::•().{self::C::m}<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
+                            ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
 }
 static method takeIII((core::int*, core::int*) →* core::int* fn) → void {}
 static method takeDDD((core::double*, core::double*) →* core::double* fn) → void {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
index 3783f0e..5857dad 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
@@ -86,24 +86,24 @@
                                                                        ^" in (#C2<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
   self::takeOON((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
   self::takeOOO((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
-  self::takeIII(new self::C::•().{self::C::m}<core::int*>);
-  self::takeDDD(new self::C::•().{self::C::m}<core::double*>);
-  self::takeNNN(new self::C::•().{self::C::m}<core::num*>);
-  self::takeIDN(new self::C::•().{self::C::m}<core::num*>);
-  self::takeDIN(new self::C::•().{self::C::m}<core::num*>);
-  self::takeIIN(new self::C::•().{self::C::m}<core::int*>);
-  self::takeDDN(new self::C::•().{self::C::m}<core::double*>);
-  self::takeIIO(new self::C::•().{self::C::m}<core::int*>);
-  self::takeDDO(new self::C::•().{self::C::m}<core::double*>);
-  self::takeOON((new self::C::•().{self::C::m}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
-  self::takeOOO((new self::C::•().{self::C::m}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
-  self::takeOOI((new self::C::•().{self::C::m}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
+  self::takeIII(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
+  self::takeDDD(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
+  self::takeNNN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
+  self::takeIDN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
+  self::takeDIN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
+  self::takeIIN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
+  self::takeDDN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
+  self::takeIIO(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
+  self::takeDDO(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
+  self::takeOON((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeOOO((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeOOI((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
   self::takeIDI(let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
           . /*@target=C.m*/ m);
-                            ^" in (new self::C::•().{self::C::m}<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
+                            ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
   self::takeDID(let final Never* #t6 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
           . /*@target=C.m*/ m);
-                            ^" in (new self::C::•().{self::C::m}<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
+                            ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
 }
 static method takeIII((core::int*, core::int*) →* core::int* fn) → void {}
 static method takeDDD((core::double*, core::double*) →* core::double* fn) → void {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.expect
index 3d4db6d..530ec6a 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.expect
@@ -27,6 +27,6 @@
     return x;
 }
 static method main() → dynamic {
-  core::int* y = new self::D::•().{self::D::m}<core::int*>(42);
+  core::int* y = new self::D::•().{self::D::m}<core::int*>(42){(core::int*) →* core::int*};
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.transformed.expect
index 3d4db6d..530ec6a 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.transformed.expect
@@ -27,6 +27,6 @@
     return x;
 }
 static method main() → dynamic {
-  core::int* y = new self::D::•().{self::D::m}<core::int*>(42);
+  core::int* y = new self::D::•().{self::D::m}<core::int*>(42){(core::int*) →* core::int*};
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.expect
index 7ee3084..fedd32d 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.expect
@@ -13,6 +13,6 @@
   core::List<core::String*>* y;
   core::Iterable<core::String*>* x = y.{core::Iterable::map}<core::String*>((core::String* z) → core::String* => let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
           1.0);
-          ^" in 1.0 as{TypeError} core::String*);
+          ^" in 1.0 as{TypeError} core::String*){((core::String*) →* core::String*) →* core::Iterable<core::String*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.transformed.expect
index 7ee3084..fedd32d 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.transformed.expect
@@ -13,6 +13,6 @@
   core::List<core::String*>* y;
   core::Iterable<core::String*>* x = y.{core::Iterable::map}<core::String*>((core::String* z) → core::String* => let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
           1.0);
-          ^" in 1.0 as{TypeError} core::String*);
+          ^" in 1.0 as{TypeError} core::String*){((core::String*) →* core::String*) →* core::Iterable<core::String*>*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.expect
index 6523782..860faf4 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.expect
@@ -20,16 +20,16 @@
 static method make(core::int* x) → asy::Future<core::int*>*
   return asy::Future::•<core::int*>(() → core::int* => x);
 static method test() → dynamic {
-  core::Iterable<asy::Future<core::int*>*>* list = <core::int*>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int*>*>(#C1);
+  core::Iterable<asy::Future<core::int*>*>* list = <core::int*>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int*>*>(#C1){((core::int*) →* asy::Future<core::int*>*) →* core::Iterable<asy::Future<core::int*>*>*};
   asy::Future<core::List<core::int*>*>* results = asy::Future::wait<core::int*>(list);
   asy::Future<core::String*>* results2 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", (FutureOr<core::String*>* x, core::int* y) → FutureOr<core::String*>* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-                                                                                                                          ^" as{TypeError,ForDynamic} FutureOr<core::String*>*));
+                                                                                                                          ^" as{TypeError,ForDynamic} FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
   asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
-                                                                                                              ^" in ((core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}())) as{TypeError} (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*));
-  asy::Future<core::String*>* results4 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → core::String* => list.{core::Iterable::fold}<core::String*>("", (core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}())));
+                                                                                                              ^" in ((core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}) as{TypeError} (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
+  asy::Future<core::String*>* results4 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → core::String* => list.{core::Iterable::fold}<core::String*>("", (core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}){(core::String*, (core::String*, core::int*) →* core::String*) →* core::String*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.transformed.expect
index c25406f..99dc822 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.transformed.expect
@@ -20,16 +20,16 @@
 static method make(core::int* x) → asy::Future<core::int*>*
   return asy::Future::•<core::int*>(() → core::int* => x);
 static method test() → dynamic {
-  core::Iterable<asy::Future<core::int*>*>* list = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::map}<asy::Future<core::int*>*>(#C1);
+  core::Iterable<asy::Future<core::int*>*>* list = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::map}<asy::Future<core::int*>*>(#C1){((core::int*) →* asy::Future<core::int*>*) →* core::Iterable<asy::Future<core::int*>*>*};
   asy::Future<core::List<core::int*>*>* results = asy::Future::wait<core::int*>(list);
   asy::Future<core::String*>* results2 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", (FutureOr<core::String*>* x, core::int* y) → FutureOr<core::String*>* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-                                                                                                                          ^"));
+                                                                                                                          ^"){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
   asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
-                                                                                                              ^" in ((core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}())) as{TypeError} (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*));
-  asy::Future<core::String*>* results4 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → core::String* => list.{core::Iterable::fold}<core::String*>("", (core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}())));
+                                                                                                              ^" in ((core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}) as{TypeError} (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
+  asy::Future<core::String*>* results4 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → core::String* => list.{core::Iterable::fold}<core::String*>("", (core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}){(core::String*, (core::String*, core::int*) →* core::String*) →* core::String*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
index 76dfdff..34108a8 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
@@ -39,8 +39,8 @@
 static method main() → dynamic {
   core::List<self::Trace*>* traces = <self::Trace*>[];
   core::int* longest = traces.{core::Iterable::map}<core::int*>((self::Trace* trace) → core::int* {
-    return trace.{self::Trace::frames}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}.{core::String::length}).{core::Iterable::fold}<core::int*>(0, #C1<core::int*>);
-  }).{core::Iterable::fold}<core::int*>(0, #C1<core::int*>);
+    return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C1<core::int*>){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C1<core::int*>){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
index 944df3a..947bd81 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
@@ -39,8 +39,8 @@
 static method main() → dynamic {
   core::List<self::Trace*>* traces = core::_GrowableList::•<self::Trace*>(0);
   core::int* longest = traces.{core::Iterable::map}<core::int*>((self::Trace* trace) → core::int* {
-    return trace.{self::Trace::frames}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}.{core::String::length}).{core::Iterable::fold}<core::int*>(0, #C1<core::int*>);
-  }).{core::Iterable::fold}<core::int*>(0, #C1<core::int*>);
+    return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C1<core::int*>){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C1<core::int*>){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.expect
index f3664a9..5f6e2e6 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method sort([(self::C::E*, self::C::E*) →* core::int* compare = #C1]) → void {
-    self::C::sort2<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = compare in #t1.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
+    self::C::sort2<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = compare in #t1 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
   }
   static method _compareAny(dynamic a, dynamic b) → core::int* {
     throw "unimplemented";
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.transformed.expect
index f3664a9..5f6e2e6 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method sort([(self::C::E*, self::C::E*) →* core::int* compare = #C1]) → void {
-    self::C::sort2<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = compare in #t1.{core::Object::==}(null) ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
+    self::C::sort2<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = compare in #t1 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
   }
   static method _compareAny(dynamic a, dynamic b) → core::int* {
     throw "unimplemented";
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.expect
index a36e492..43a39ef 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.expect
@@ -42,19 +42,19 @@
     ;
   method test() → void {
     this.{self::Test::member} = self::f<self::B*>();
-    this.{self::Test::member}.{self::A::==}(null) ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::-}(1);
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::-}(1);
+    this.{self::Test::member}{self::B*} == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = this.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = this.{self::Test::member} in #t1.{self::A::==}(null) ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}.{self::B::-}(1);
-    self::B* v7 = let final self::B* #t2 = this.{self::Test::member} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1) in #t2;
+    self::B* v2 = let final self::B* #t1 = this.{self::Test::member}{self::B*} in #t1 == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
+    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::B* #t2 = this.{self::Test::member}{self::B*} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.transformed.expect
index a36e492..43a39ef 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.transformed.expect
@@ -42,19 +42,19 @@
     ;
   method test() → void {
     this.{self::Test::member} = self::f<self::B*>();
-    this.{self::Test::member}.{self::A::==}(null) ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::-}(1);
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::-}(1);
+    this.{self::Test::member}{self::B*} == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = this.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = this.{self::Test::member} in #t1.{self::A::==}(null) ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}.{self::B::-}(1);
-    self::B* v7 = let final self::B* #t2 = this.{self::Test::member} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1) in #t2;
+    self::B* v2 = let final self::B* #t1 = this.{self::Test::member}{self::B*} in #t1 == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
+    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::B* #t2 = this.{self::Test::member}{self::B*} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.weak.expect
index 0ae22f6..af067f3 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.weak.expect
@@ -9,10 +9,10 @@
     ;
   method test() → void {
     core::int* v1 = this.{self::Test1::t} = self::getInt();
-    core::int* v4 = let final core::int* #t1 = this.{self::Test1::t} in #t1.{core::num::==}(null) ?{core::int*} this.{self::Test1::t} = self::getInt() : #t1;
-    core::int* v7 = this.{self::Test1::t} = this.{self::Test1::t}.{core::num::+}(self::getInt());
-    core::int* v10 = this.{self::Test1::t} = this.{self::Test1::t}.{core::num::+}(1);
-    core::int* v11 = let final core::int* #t2 = this.{self::Test1::t} in let final core::int* #t3 = this.{self::Test1::t} = #t2.{core::num::+}(1) in #t2;
+    core::int* v4 = let final core::int* #t1 = this.{self::Test1::t}{core::int*} in #t1 == null ?{core::int*} this.{self::Test1::t} = self::getInt() : #t1;
+    core::int* v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::int* v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final core::int* #t2 = this.{self::Test1::t}{core::int*} in let final core::int* #t3 = this.{self::Test1::t} = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -34,14 +34,14 @@
     core::int* v1 = this.{self::Test2::t} = self::getInt();
     core::num* v2 = this.{self::Test2::t} = self::getNum();
     core::double* v3 = this.{self::Test2::t} = self::getDouble();
-    core::num* v4 = let final core::num* #t4 = this.{self::Test2::t} in #t4.{core::num::==}(null) ?{core::num*} this.{self::Test2::t} = self::getInt() : #t4;
-    core::num* v5 = let final core::num* #t5 = this.{self::Test2::t} in #t5.{core::num::==}(null) ?{core::num*} this.{self::Test2::t} = self::getNum() : #t5;
-    core::num* v6 = let final core::num* #t6 = this.{self::Test2::t} in #t6.{core::num::==}(null) ?{core::num*} this.{self::Test2::t} = self::getDouble() : #t6;
-    core::num* v7 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(self::getInt());
-    core::num* v8 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(self::getNum());
-    core::num* v9 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(self::getDouble());
-    core::num* v10 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(1);
-    core::num* v11 = let final core::num* #t7 = this.{self::Test2::t} in let final core::num* #t8 = this.{self::Test2::t} = #t7.{core::num::+}(1) in #t7;
+    core::num* v4 = let final core::num* #t4 = this.{self::Test2::t}{core::num*} in #t4 == null ?{core::num*} this.{self::Test2::t} = self::getInt() : #t4;
+    core::num* v5 = let final core::num* #t5 = this.{self::Test2::t}{core::num*} in #t5 == null ?{core::num*} this.{self::Test2::t} = self::getNum() : #t5;
+    core::num* v6 = let final core::num* #t6 = this.{self::Test2::t}{core::num*} in #t6 == null ?{core::num*} this.{self::Test2::t} = self::getDouble() : #t6;
+    core::num* v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final core::num* #t7 = this.{self::Test2::t}{core::num*} in let final core::num* #t8 = this.{self::Test2::t} = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -61,12 +61,12 @@
     ;
   method test3() → void {
     core::double* v3 = this.{self::Test3::t} = self::getDouble();
-    core::double* v6 = let final core::double* #t9 = this.{self::Test3::t} in #t9.{core::num::==}(null) ?{core::double*} this.{self::Test3::t} = self::getDouble() : #t9;
-    core::double* v7 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(self::getInt());
-    core::double* v8 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(self::getNum());
-    core::double* v9 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(self::getDouble());
-    core::double* v10 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(1);
-    core::double* v11 = let final core::double* #t10 = this.{self::Test3::t} in let final core::double* #t11 = this.{self::Test3::t} = #t10.{core::double::+}(1) in #t10;
+    core::double* v6 = let final core::double* #t9 = this.{self::Test3::t}{core::double*} in #t9 == null ?{core::double*} this.{self::Test3::t} = self::getDouble() : #t9;
+    core::double* v7 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final core::double* #t10 = this.{self::Test3::t}{core::double*} in let final core::double* #t11 = this.{self::Test3::t} = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.weak.transformed.expect
index 0ae22f6..af067f3 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.weak.transformed.expect
@@ -9,10 +9,10 @@
     ;
   method test() → void {
     core::int* v1 = this.{self::Test1::t} = self::getInt();
-    core::int* v4 = let final core::int* #t1 = this.{self::Test1::t} in #t1.{core::num::==}(null) ?{core::int*} this.{self::Test1::t} = self::getInt() : #t1;
-    core::int* v7 = this.{self::Test1::t} = this.{self::Test1::t}.{core::num::+}(self::getInt());
-    core::int* v10 = this.{self::Test1::t} = this.{self::Test1::t}.{core::num::+}(1);
-    core::int* v11 = let final core::int* #t2 = this.{self::Test1::t} in let final core::int* #t3 = this.{self::Test1::t} = #t2.{core::num::+}(1) in #t2;
+    core::int* v4 = let final core::int* #t1 = this.{self::Test1::t}{core::int*} in #t1 == null ?{core::int*} this.{self::Test1::t} = self::getInt() : #t1;
+    core::int* v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::int* v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final core::int* #t2 = this.{self::Test1::t}{core::int*} in let final core::int* #t3 = this.{self::Test1::t} = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -34,14 +34,14 @@
     core::int* v1 = this.{self::Test2::t} = self::getInt();
     core::num* v2 = this.{self::Test2::t} = self::getNum();
     core::double* v3 = this.{self::Test2::t} = self::getDouble();
-    core::num* v4 = let final core::num* #t4 = this.{self::Test2::t} in #t4.{core::num::==}(null) ?{core::num*} this.{self::Test2::t} = self::getInt() : #t4;
-    core::num* v5 = let final core::num* #t5 = this.{self::Test2::t} in #t5.{core::num::==}(null) ?{core::num*} this.{self::Test2::t} = self::getNum() : #t5;
-    core::num* v6 = let final core::num* #t6 = this.{self::Test2::t} in #t6.{core::num::==}(null) ?{core::num*} this.{self::Test2::t} = self::getDouble() : #t6;
-    core::num* v7 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(self::getInt());
-    core::num* v8 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(self::getNum());
-    core::num* v9 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(self::getDouble());
-    core::num* v10 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(1);
-    core::num* v11 = let final core::num* #t7 = this.{self::Test2::t} in let final core::num* #t8 = this.{self::Test2::t} = #t7.{core::num::+}(1) in #t7;
+    core::num* v4 = let final core::num* #t4 = this.{self::Test2::t}{core::num*} in #t4 == null ?{core::num*} this.{self::Test2::t} = self::getInt() : #t4;
+    core::num* v5 = let final core::num* #t5 = this.{self::Test2::t}{core::num*} in #t5 == null ?{core::num*} this.{self::Test2::t} = self::getNum() : #t5;
+    core::num* v6 = let final core::num* #t6 = this.{self::Test2::t}{core::num*} in #t6 == null ?{core::num*} this.{self::Test2::t} = self::getDouble() : #t6;
+    core::num* v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final core::num* #t7 = this.{self::Test2::t}{core::num*} in let final core::num* #t8 = this.{self::Test2::t} = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -61,12 +61,12 @@
     ;
   method test3() → void {
     core::double* v3 = this.{self::Test3::t} = self::getDouble();
-    core::double* v6 = let final core::double* #t9 = this.{self::Test3::t} in #t9.{core::num::==}(null) ?{core::double*} this.{self::Test3::t} = self::getDouble() : #t9;
-    core::double* v7 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(self::getInt());
-    core::double* v8 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(self::getNum());
-    core::double* v9 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(self::getDouble());
-    core::double* v10 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(1);
-    core::double* v11 = let final core::double* #t10 = this.{self::Test3::t} in let final core::double* #t11 = this.{self::Test3::t} = #t10.{core::double::+}(1) in #t10;
+    core::double* v6 = let final core::double* #t9 = this.{self::Test3::t}{core::double*} in #t9 == null ?{core::double*} this.{self::Test3::t} = self::getDouble() : #t9;
+    core::double* v7 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final core::double* #t10 = this.{self::Test3::t}{core::double*} in let final core::double* #t11 = this.{self::Test3::t} = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.expect
index b9de2fb..446a6ee 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.expect
@@ -59,21 +59,21 @@
   operator []=(self::Index* i, self::B* v) → void {}
   method test() → void {
     self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>());
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2).{self::A::==}(null) ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()) : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*);
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6).{self::B::*}(self::f<self::B*>()));
-    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8).{self::B::&}(self::f<self::A*>()));
-    t.{self::Test::[]}(self::f<self::Index*>());
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10).{self::B::-}(1) in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11) in #t11;
-    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14).{self::B::-}(1));
-    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17) in #t17;
-    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20) in #t21.{self::A::==}(null) ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22) in #t22 : #t21;
-    self::B* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = #t24.{self::Test::[]}(#t25).{self::B::*}(self::f<self::B*>()) in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26) in #t26;
-    self::C* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::C* #t30 = #t28.{self::Test::[]}(#t29).{self::B::&}(self::f<self::A*>()) in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30) in #t30;
-    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>());
-    self::B* v7 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::B* #t34 = #t32.{self::Test::[]}(#t33).{self::B::-}(1) in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34) in #t34;
-    self::B* v8 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37) in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38.{self::B::-}(1)) in #t38;
+    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
+    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
+    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
+    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
+    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
+    t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
+    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index*, self::B*) →* void} in #t11;
+    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
+    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
+    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20){(self::Index*) →* self::B*} in #t21 == null ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22){(self::Index*, self::B*) →* void} in #t22 : #t21;
+    self::B* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
+    self::C* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::C* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index*, self::B*) →* void} in #t30;
+    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
+    self::B* v7 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::B* #t34 = #t32.{self::Test::[]}(#t33){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index*, self::B*) →* void} in #t34;
+    self::B* v8 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37){(self::Index*) →* self::B*} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t38;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.transformed.expect
index b9de2fb..446a6ee 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.transformed.expect
@@ -59,21 +59,21 @@
   operator []=(self::Index* i, self::B* v) → void {}
   method test() → void {
     self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>());
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2).{self::A::==}(null) ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()) : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*);
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6).{self::B::*}(self::f<self::B*>()));
-    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8).{self::B::&}(self::f<self::A*>()));
-    t.{self::Test::[]}(self::f<self::Index*>());
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10).{self::B::-}(1) in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11) in #t11;
-    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14).{self::B::-}(1));
-    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17) in #t17;
-    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20) in #t21.{self::A::==}(null) ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22) in #t22 : #t21;
-    self::B* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = #t24.{self::Test::[]}(#t25).{self::B::*}(self::f<self::B*>()) in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26) in #t26;
-    self::C* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::C* #t30 = #t28.{self::Test::[]}(#t29).{self::B::&}(self::f<self::A*>()) in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30) in #t30;
-    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>());
-    self::B* v7 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::B* #t34 = #t32.{self::Test::[]}(#t33).{self::B::-}(1) in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34) in #t34;
-    self::B* v8 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37) in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38.{self::B::-}(1)) in #t38;
+    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
+    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
+    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
+    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
+    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
+    t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
+    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index*, self::B*) →* void} in #t11;
+    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
+    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
+    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20){(self::Index*) →* self::B*} in #t21 == null ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22){(self::Index*, self::B*) →* void} in #t22 : #t21;
+    self::B* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
+    self::C* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::C* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index*, self::B*) →* void} in #t30;
+    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
+    self::B* v7 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::B* #t34 = #t32.{self::Test::[]}(#t33){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index*, self::B*) →* void} in #t34;
+    self::B* v8 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37){(self::Index*) →* self::B*} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t38;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.weak.expect
index 96b0328..3a7a814 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.weak.expect
@@ -74,19 +74,19 @@
     ;
   method test() → void {
     super.{self::Base::[]=}(self::f<self::Index*>(), self::f<self::B*>());
-    let final self::Index* #t1 = self::f<self::Index*>() in super.{self::Base::[]}(#t1).{self::A::==}(null) ?{self::B*} super.{self::Base::[]=}(#t1, self::f<self::B*>()) : null;
-    let final self::Index* #t2 = self::f<self::Index*>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*);
-    let final self::Index* #t3 = self::f<self::Index*>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::*}(self::f<self::B*>()));
-    let final self::Index* #t4 = self::f<self::Index*>() in super.{self::Base::[]=}(#t4, super.{self::Base::[]}(#t4).{self::B::&}(self::f<self::A*>()));
-    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = super.{self::Base::[]}(#t5).{self::B::-}(1) in let final void #t7 = super.{self::Base::[]=}(#t5, #t6) in #t6;
-    let final self::Index* #t8 = self::f<self::Index*>() in super.{self::Base::[]=}(#t8, super.{self::Base::[]}(#t8).{self::B::-}(1));
+    let final self::Index* #t1 = self::f<self::Index*>() in super.{self::Base::[]}(#t1) == null ?{self::B*} super.{self::Base::[]=}(#t1, self::f<self::B*>()) : null;
+    let final self::Index* #t2 = self::f<self::Index*>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*);
+    let final self::Index* #t3 = self::f<self::Index*>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*});
+    let final self::Index* #t4 = self::f<self::Index*>() in super.{self::Base::[]=}(#t4, super.{self::Base::[]}(#t4).{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*});
+    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = super.{self::Base::[]}(#t5).{self::B::-}(1){(core::int*) →* self::B*} in let final void #t7 = super.{self::Base::[]=}(#t5, #t6) in #t6;
+    let final self::Index* #t8 = self::f<self::Index*>() in super.{self::Base::[]=}(#t8, super.{self::Base::[]}(#t8).{self::B::-}(1){(core::int*) →* self::B*});
     self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = super.{self::Base::[]=}(#t9, #t10) in #t10;
-    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = super.{self::Base::[]}(#t12) in #t13.{self::A::==}(null) ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = super.{self::Base::[]=}(#t12, #t14) in #t14 : #t13;
-    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = super.{self::Base::[]}(#t16).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t18 = super.{self::Base::[]=}(#t16, #t17) in #t17;
-    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = super.{self::Base::[]}(#t19).{self::B::*}(self::f<self::B*>()) in let final void #t21 = super.{self::Base::[]=}(#t19, #t20) in #t20;
-    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = super.{self::Base::[]}(#t22).{self::B::&}(self::f<self::A*>()) in let final void #t24 = super.{self::Base::[]=}(#t22, #t23) in #t23;
-    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = super.{self::Base::[]}(#t25).{self::B::-}(1) in let final void #t27 = super.{self::Base::[]=}(#t25, #t26) in #t26;
-    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = super.{self::Base::[]}(#t28) in let final void #t30 = super.{self::Base::[]=}(#t28, #t29.{self::B::-}(1)) in #t29;
+    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = super.{self::Base::[]}(#t12) in #t13 == null ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = super.{self::Base::[]=}(#t12, #t14) in #t14 : #t13;
+    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = super.{self::Base::[]}(#t16).{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t18 = super.{self::Base::[]=}(#t16, #t17) in #t17;
+    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = super.{self::Base::[]}(#t19).{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t21 = super.{self::Base::[]=}(#t19, #t20) in #t20;
+    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = super.{self::Base::[]}(#t22).{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t24 = super.{self::Base::[]=}(#t22, #t23) in #t23;
+    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = super.{self::Base::[]}(#t25).{self::B::-}(1){(core::int*) →* self::B*} in let final void #t27 = super.{self::Base::[]=}(#t25, #t26) in #t26;
+    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = super.{self::Base::[]}(#t28) in let final void #t30 = super.{self::Base::[]=}(#t28, #t29.{self::B::-}(1){(core::int*) →* self::B*}) in #t29;
   }
 }
 static method f<T extends core::Object* = dynamic>() → self::f::T*
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.weak.transformed.expect
index 96b0328..3a7a814 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.weak.transformed.expect
@@ -74,19 +74,19 @@
     ;
   method test() → void {
     super.{self::Base::[]=}(self::f<self::Index*>(), self::f<self::B*>());
-    let final self::Index* #t1 = self::f<self::Index*>() in super.{self::Base::[]}(#t1).{self::A::==}(null) ?{self::B*} super.{self::Base::[]=}(#t1, self::f<self::B*>()) : null;
-    let final self::Index* #t2 = self::f<self::Index*>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*);
-    let final self::Index* #t3 = self::f<self::Index*>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::*}(self::f<self::B*>()));
-    let final self::Index* #t4 = self::f<self::Index*>() in super.{self::Base::[]=}(#t4, super.{self::Base::[]}(#t4).{self::B::&}(self::f<self::A*>()));
-    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = super.{self::Base::[]}(#t5).{self::B::-}(1) in let final void #t7 = super.{self::Base::[]=}(#t5, #t6) in #t6;
-    let final self::Index* #t8 = self::f<self::Index*>() in super.{self::Base::[]=}(#t8, super.{self::Base::[]}(#t8).{self::B::-}(1));
+    let final self::Index* #t1 = self::f<self::Index*>() in super.{self::Base::[]}(#t1) == null ?{self::B*} super.{self::Base::[]=}(#t1, self::f<self::B*>()) : null;
+    let final self::Index* #t2 = self::f<self::Index*>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*);
+    let final self::Index* #t3 = self::f<self::Index*>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*});
+    let final self::Index* #t4 = self::f<self::Index*>() in super.{self::Base::[]=}(#t4, super.{self::Base::[]}(#t4).{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*});
+    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = super.{self::Base::[]}(#t5).{self::B::-}(1){(core::int*) →* self::B*} in let final void #t7 = super.{self::Base::[]=}(#t5, #t6) in #t6;
+    let final self::Index* #t8 = self::f<self::Index*>() in super.{self::Base::[]=}(#t8, super.{self::Base::[]}(#t8).{self::B::-}(1){(core::int*) →* self::B*});
     self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = super.{self::Base::[]=}(#t9, #t10) in #t10;
-    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = super.{self::Base::[]}(#t12) in #t13.{self::A::==}(null) ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = super.{self::Base::[]=}(#t12, #t14) in #t14 : #t13;
-    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = super.{self::Base::[]}(#t16).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t18 = super.{self::Base::[]=}(#t16, #t17) in #t17;
-    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = super.{self::Base::[]}(#t19).{self::B::*}(self::f<self::B*>()) in let final void #t21 = super.{self::Base::[]=}(#t19, #t20) in #t20;
-    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = super.{self::Base::[]}(#t22).{self::B::&}(self::f<self::A*>()) in let final void #t24 = super.{self::Base::[]=}(#t22, #t23) in #t23;
-    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = super.{self::Base::[]}(#t25).{self::B::-}(1) in let final void #t27 = super.{self::Base::[]=}(#t25, #t26) in #t26;
-    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = super.{self::Base::[]}(#t28) in let final void #t30 = super.{self::Base::[]=}(#t28, #t29.{self::B::-}(1)) in #t29;
+    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = super.{self::Base::[]}(#t12) in #t13 == null ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = super.{self::Base::[]=}(#t12, #t14) in #t14 : #t13;
+    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = super.{self::Base::[]}(#t16).{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t18 = super.{self::Base::[]=}(#t16, #t17) in #t17;
+    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = super.{self::Base::[]}(#t19).{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t21 = super.{self::Base::[]=}(#t19, #t20) in #t20;
+    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = super.{self::Base::[]}(#t22).{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t24 = super.{self::Base::[]=}(#t22, #t23) in #t23;
+    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = super.{self::Base::[]}(#t25).{self::B::-}(1){(core::int*) →* self::B*} in let final void #t27 = super.{self::Base::[]=}(#t25, #t26) in #t26;
+    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = super.{self::Base::[]}(#t28) in let final void #t30 = super.{self::Base::[]=}(#t28, #t29.{self::B::-}(1){(core::int*) →* self::B*}) in #t29;
   }
 }
 static method f<T extends core::Object* = dynamic>() → self::f::T*
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.weak.expect
index 15bd0f2..d61e224 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.weak.expect
@@ -58,20 +58,20 @@
     return null;
   operator []=(self::Index* i, self::B* v) → void {}
   method test() → void {
-    this.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>());
-    let final self::Index* #t1 = self::f<self::Index*>() in this.{self::Test::[]}(#t1).{self::A::==}(null) ?{self::B*} this.{self::Test::[]=}(#t1, self::f<self::B*>()) : null;
-    let final self::Index* #t2 = self::f<self::Index*>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*);
-    let final self::Index* #t3 = self::f<self::Index*>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3).{self::B::*}(self::f<self::B*>()));
-    let final self::Index* #t4 = self::f<self::Index*>() in this.{self::Test::[]=}(#t4, this.{self::Test::[]}(#t4).{self::B::&}(self::f<self::A*>()));
-    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = this.{self::Test::[]}(#t5).{self::B::-}(1) in let final void #t7 = this.{self::Test::[]=}(#t5, #t6) in #t6;
-    let final self::Index* #t8 = self::f<self::Index*>() in this.{self::Test::[]=}(#t8, this.{self::Test::[]}(#t8).{self::B::-}(1));
-    self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = this.{self::Test::[]=}(#t9, #t10) in #t10;
-    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = this.{self::Test::[]}(#t12) in #t13.{self::A::==}(null) ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = this.{self::Test::[]=}(#t12, #t14) in #t14 : #t13;
-    self::A* v4 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = this.{self::Test::[]}(#t16).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t18 = this.{self::Test::[]=}(#t16, #t17) in #t17;
-    self::B* v3 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = this.{self::Test::[]}(#t19).{self::B::*}(self::f<self::B*>()) in let final void #t21 = this.{self::Test::[]=}(#t19, #t20) in #t20;
-    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = this.{self::Test::[]}(#t22).{self::B::&}(self::f<self::A*>()) in let final void #t24 = this.{self::Test::[]=}(#t22, #t23) in #t23;
-    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = this.{self::Test::[]}(#t25).{self::B::-}(1) in let final void #t27 = this.{self::Test::[]=}(#t25, #t26) in #t26;
-    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = this.{self::Test::[]}(#t28) in let final void #t30 = this.{self::Test::[]=}(#t28, #t29.{self::B::-}(1)) in #t29;
+    this.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
+    let final self::Index* #t1 = self::f<self::Index*>() in this.{self::Test::[]}(#t1){(self::Index*) →* self::B*} == null ?{self::B*} this.{self::Test::[]=}(#t1, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
+    let final self::Index* #t2 = self::f<self::Index*>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
+    let final self::Index* #t3 = self::f<self::Index*>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
+    let final self::Index* #t4 = self::f<self::Index*>() in this.{self::Test::[]=}(#t4, this.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
+    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = this.{self::Test::[]}(#t5){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t7 = this.{self::Test::[]=}(#t5, #t6){(self::Index*, self::B*) →* void} in #t6;
+    let final self::Index* #t8 = self::f<self::Index*>() in this.{self::Test::[]=}(#t8, this.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
+    self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = this.{self::Test::[]=}(#t9, #t10){(self::Index*, self::B*) →* void} in #t10;
+    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = this.{self::Test::[]}(#t12){(self::Index*) →* self::B*} in #t13 == null ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = this.{self::Test::[]=}(#t12, #t14){(self::Index*, self::B*) →* void} in #t14 : #t13;
+    self::A* v4 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = this.{self::Test::[]}(#t16){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t18 = this.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
+    self::B* v3 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = this.{self::Test::[]}(#t19){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t21 = this.{self::Test::[]=}(#t19, #t20){(self::Index*, self::B*) →* void} in #t20;
+    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = this.{self::Test::[]}(#t22){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t24 = this.{self::Test::[]=}(#t22, #t23){(self::Index*, self::B*) →* void} in #t23;
+    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = this.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t27 = this.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
+    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = this.{self::Test::[]}(#t28){(self::Index*) →* self::B*} in let final void #t30 = this.{self::Test::[]=}(#t28, #t29.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t29;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.weak.transformed.expect
index 15bd0f2..d61e224 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.weak.transformed.expect
@@ -58,20 +58,20 @@
     return null;
   operator []=(self::Index* i, self::B* v) → void {}
   method test() → void {
-    this.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>());
-    let final self::Index* #t1 = self::f<self::Index*>() in this.{self::Test::[]}(#t1).{self::A::==}(null) ?{self::B*} this.{self::Test::[]=}(#t1, self::f<self::B*>()) : null;
-    let final self::Index* #t2 = self::f<self::Index*>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*);
-    let final self::Index* #t3 = self::f<self::Index*>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3).{self::B::*}(self::f<self::B*>()));
-    let final self::Index* #t4 = self::f<self::Index*>() in this.{self::Test::[]=}(#t4, this.{self::Test::[]}(#t4).{self::B::&}(self::f<self::A*>()));
-    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = this.{self::Test::[]}(#t5).{self::B::-}(1) in let final void #t7 = this.{self::Test::[]=}(#t5, #t6) in #t6;
-    let final self::Index* #t8 = self::f<self::Index*>() in this.{self::Test::[]=}(#t8, this.{self::Test::[]}(#t8).{self::B::-}(1));
-    self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = this.{self::Test::[]=}(#t9, #t10) in #t10;
-    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = this.{self::Test::[]}(#t12) in #t13.{self::A::==}(null) ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = this.{self::Test::[]=}(#t12, #t14) in #t14 : #t13;
-    self::A* v4 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = this.{self::Test::[]}(#t16).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t18 = this.{self::Test::[]=}(#t16, #t17) in #t17;
-    self::B* v3 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = this.{self::Test::[]}(#t19).{self::B::*}(self::f<self::B*>()) in let final void #t21 = this.{self::Test::[]=}(#t19, #t20) in #t20;
-    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = this.{self::Test::[]}(#t22).{self::B::&}(self::f<self::A*>()) in let final void #t24 = this.{self::Test::[]=}(#t22, #t23) in #t23;
-    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = this.{self::Test::[]}(#t25).{self::B::-}(1) in let final void #t27 = this.{self::Test::[]=}(#t25, #t26) in #t26;
-    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = this.{self::Test::[]}(#t28) in let final void #t30 = this.{self::Test::[]=}(#t28, #t29.{self::B::-}(1)) in #t29;
+    this.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
+    let final self::Index* #t1 = self::f<self::Index*>() in this.{self::Test::[]}(#t1){(self::Index*) →* self::B*} == null ?{self::B*} this.{self::Test::[]=}(#t1, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
+    let final self::Index* #t2 = self::f<self::Index*>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
+    let final self::Index* #t3 = self::f<self::Index*>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
+    let final self::Index* #t4 = self::f<self::Index*>() in this.{self::Test::[]=}(#t4, this.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
+    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = this.{self::Test::[]}(#t5){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t7 = this.{self::Test::[]=}(#t5, #t6){(self::Index*, self::B*) →* void} in #t6;
+    let final self::Index* #t8 = self::f<self::Index*>() in this.{self::Test::[]=}(#t8, this.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
+    self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = this.{self::Test::[]=}(#t9, #t10){(self::Index*, self::B*) →* void} in #t10;
+    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = this.{self::Test::[]}(#t12){(self::Index*) →* self::B*} in #t13 == null ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = this.{self::Test::[]=}(#t12, #t14){(self::Index*, self::B*) →* void} in #t14 : #t13;
+    self::A* v4 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = this.{self::Test::[]}(#t16){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t18 = this.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
+    self::B* v3 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = this.{self::Test::[]}(#t19){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t21 = this.{self::Test::[]=}(#t19, #t20){(self::Index*, self::B*) →* void} in #t20;
+    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = this.{self::Test::[]}(#t22){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t24 = this.{self::Test::[]=}(#t22, #t23){(self::Index*, self::B*) →* void} in #t23;
+    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = this.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t27 = this.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
+    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = this.{self::Test::[]}(#t28){(self::Index*) →* self::B*} in let final void #t30 = this.{self::Test::[]=}(#t28, #t29.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t29;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.weak.expect
index cacec2e..5bdc052 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.weak.expect
@@ -40,18 +40,18 @@
 static method test() → void {
   self::B* local;
   local = self::f<self::B*>();
-  local.{self::A::==}(null) ?{self::B*} local = self::f<self::B*>() : null;
-  local = local.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  local = local.{self::B::*}(self::f<self::B*>());
-  local = local.{self::B::&}(self::f<self::A*>());
-  local = local.{self::B::-}(1);
-  local = local.{self::B::-}(1);
+  local == null ?{self::B*} local = self::f<self::B*>() : null;
+  local = local.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  local = local.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  local = local.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  local = local.{self::B::-}(1){(core::int*) →* self::B*};
   self::B* v1 = local = self::f<self::B*>();
-  self::B* v2 = let final self::B* #t1 = local in #t1.{self::A::==}(null) ?{self::B*} local = self::f<self::B*>() : #t1;
-  self::A* v3 = local = local.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B* v4 = local = local.{self::B::*}(self::f<self::B*>());
-  self::C* v5 = local = local.{self::B::&}(self::f<self::A*>());
-  self::B* v6 = local = local.{self::B::-}(1);
-  self::B* v7 = let final self::B* #t2 = local in let final self::B* #t3 = local = #t2.{self::B::-}(1) in #t2;
+  self::B* v2 = let final self::B* #t1 = local in #t1 == null ?{self::B*} local = self::f<self::B*>() : #t1;
+  self::A* v3 = local = local.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = local = local.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = local = local.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t2 = local in let final self::B* #t3 = local = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.weak.transformed.expect
index cacec2e..5bdc052 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.weak.transformed.expect
@@ -40,18 +40,18 @@
 static method test() → void {
   self::B* local;
   local = self::f<self::B*>();
-  local.{self::A::==}(null) ?{self::B*} local = self::f<self::B*>() : null;
-  local = local.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  local = local.{self::B::*}(self::f<self::B*>());
-  local = local.{self::B::&}(self::f<self::A*>());
-  local = local.{self::B::-}(1);
-  local = local.{self::B::-}(1);
+  local == null ?{self::B*} local = self::f<self::B*>() : null;
+  local = local.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  local = local.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  local = local.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  local = local.{self::B::-}(1){(core::int*) →* self::B*};
   self::B* v1 = local = self::f<self::B*>();
-  self::B* v2 = let final self::B* #t1 = local in #t1.{self::A::==}(null) ?{self::B*} local = self::f<self::B*>() : #t1;
-  self::A* v3 = local = local.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B* v4 = local = local.{self::B::*}(self::f<self::B*>());
-  self::C* v5 = local = local.{self::B::&}(self::f<self::A*>());
-  self::B* v6 = local = local.{self::B::-}(1);
-  self::B* v7 = let final self::B* #t2 = local in let final self::B* #t3 = local = #t2.{self::B::-}(1) in #t2;
+  self::B* v2 = let final self::B* #t1 = local in #t1 == null ?{self::B*} local = self::f<self::B*>() : #t1;
+  self::A* v3 = local = local.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = local = local.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = local = local.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t2 = local in let final self::B* #t3 = local = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.expect
index 2f274dc..eda9415 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.expect
@@ -10,31 +10,31 @@
   return 0.0;
 static method test1(core::int* t) → void {
   core::int* v1 = t = self::getInt();
-  core::int* v4 = let final core::int* #t1 = t in #t1.{core::num::==}(null) ?{core::int*} t = self::getInt() : #t1;
-  core::int* v7 = t = t.{core::num::+}(self::getInt());
-  core::int* v10 = t = t.{core::num::+}(1);
-  core::int* v11 = let final core::int* #t2 = t in let final core::int* #t3 = t = #t2.{core::num::+}(1) in #t2;
+  core::int* v4 = let final core::int* #t1 = t in #t1 == null ?{core::int*} t = self::getInt() : #t1;
+  core::int* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+  core::int* v10 = t = t.{core::num::+}(1){(core::num*) →* core::int*};
+  core::int* v11 = let final core::int* #t2 = t in let final core::int* #t3 = t = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
 }
 static method test2(core::num* t) → void {
   core::int* v1 = t = self::getInt();
   core::num* v2 = t = self::getNum();
   core::double* v3 = t = self::getDouble();
-  core::num* v4 = let final core::num* #t4 = t in #t4.{core::num::==}(null) ?{core::num*} t = self::getInt() : #t4;
-  core::num* v5 = let final core::num* #t5 = t in #t5.{core::num::==}(null) ?{core::num*} t = self::getNum() : #t5;
-  core::num* v6 = let final core::num* #t6 = t in #t6.{core::num::==}(null) ?{core::num*} t = self::getDouble() : #t6;
-  core::num* v7 = t = t.{core::num::+}(self::getInt());
-  core::num* v8 = t = t.{core::num::+}(self::getNum());
-  core::num* v9 = t = t.{core::num::+}(self::getDouble());
-  core::num* v10 = t = t.{core::num::+}(1);
-  core::num* v11 = let final core::num* #t7 = t in let final core::num* #t8 = t = #t7.{core::num::+}(1) in #t7;
+  core::num* v4 = let final core::num* #t4 = t in #t4 == null ?{core::num*} t = self::getInt() : #t4;
+  core::num* v5 = let final core::num* #t5 = t in #t5 == null ?{core::num*} t = self::getNum() : #t5;
+  core::num* v6 = let final core::num* #t6 = t in #t6 == null ?{core::num*} t = self::getDouble() : #t6;
+  core::num* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+  core::num* v8 = t = t.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+  core::num* v9 = t = t.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+  core::num* v10 = t = t.{core::num::+}(1){(core::num*) →* core::num*};
+  core::num* v11 = let final core::num* #t7 = t in let final core::num* #t8 = t = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
 }
 static method test3(core::double* t) → void {
   core::double* v3 = t = self::getDouble();
-  core::double* v6 = let final core::double* #t9 = t in #t9.{core::num::==}(null) ?{core::double*} t = self::getDouble() : #t9;
-  core::double* v7 = t = t.{core::double::+}(self::getInt());
-  core::double* v8 = t = t.{core::double::+}(self::getNum());
-  core::double* v9 = t = t.{core::double::+}(self::getDouble());
-  core::double* v10 = t = t.{core::double::+}(1);
-  core::double* v11 = let final core::double* #t10 = t in let final core::double* #t11 = t = #t10.{core::double::+}(1) in #t10;
+  core::double* v6 = let final core::double* #t9 = t in #t9 == null ?{core::double*} t = self::getDouble() : #t9;
+  core::double* v7 = t = t.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+  core::double* v8 = t = t.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+  core::double* v9 = t = t.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+  core::double* v10 = t = t.{core::double::+}(1){(core::num*) →* core::double*};
+  core::double* v11 = let final core::double* #t10 = t in let final core::double* #t11 = t = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.transformed.expect
index 2f274dc..eda9415 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.transformed.expect
@@ -10,31 +10,31 @@
   return 0.0;
 static method test1(core::int* t) → void {
   core::int* v1 = t = self::getInt();
-  core::int* v4 = let final core::int* #t1 = t in #t1.{core::num::==}(null) ?{core::int*} t = self::getInt() : #t1;
-  core::int* v7 = t = t.{core::num::+}(self::getInt());
-  core::int* v10 = t = t.{core::num::+}(1);
-  core::int* v11 = let final core::int* #t2 = t in let final core::int* #t3 = t = #t2.{core::num::+}(1) in #t2;
+  core::int* v4 = let final core::int* #t1 = t in #t1 == null ?{core::int*} t = self::getInt() : #t1;
+  core::int* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+  core::int* v10 = t = t.{core::num::+}(1){(core::num*) →* core::int*};
+  core::int* v11 = let final core::int* #t2 = t in let final core::int* #t3 = t = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
 }
 static method test2(core::num* t) → void {
   core::int* v1 = t = self::getInt();
   core::num* v2 = t = self::getNum();
   core::double* v3 = t = self::getDouble();
-  core::num* v4 = let final core::num* #t4 = t in #t4.{core::num::==}(null) ?{core::num*} t = self::getInt() : #t4;
-  core::num* v5 = let final core::num* #t5 = t in #t5.{core::num::==}(null) ?{core::num*} t = self::getNum() : #t5;
-  core::num* v6 = let final core::num* #t6 = t in #t6.{core::num::==}(null) ?{core::num*} t = self::getDouble() : #t6;
-  core::num* v7 = t = t.{core::num::+}(self::getInt());
-  core::num* v8 = t = t.{core::num::+}(self::getNum());
-  core::num* v9 = t = t.{core::num::+}(self::getDouble());
-  core::num* v10 = t = t.{core::num::+}(1);
-  core::num* v11 = let final core::num* #t7 = t in let final core::num* #t8 = t = #t7.{core::num::+}(1) in #t7;
+  core::num* v4 = let final core::num* #t4 = t in #t4 == null ?{core::num*} t = self::getInt() : #t4;
+  core::num* v5 = let final core::num* #t5 = t in #t5 == null ?{core::num*} t = self::getNum() : #t5;
+  core::num* v6 = let final core::num* #t6 = t in #t6 == null ?{core::num*} t = self::getDouble() : #t6;
+  core::num* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+  core::num* v8 = t = t.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+  core::num* v9 = t = t.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+  core::num* v10 = t = t.{core::num::+}(1){(core::num*) →* core::num*};
+  core::num* v11 = let final core::num* #t7 = t in let final core::num* #t8 = t = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
 }
 static method test3(core::double* t) → void {
   core::double* v3 = t = self::getDouble();
-  core::double* v6 = let final core::double* #t9 = t in #t9.{core::num::==}(null) ?{core::double*} t = self::getDouble() : #t9;
-  core::double* v7 = t = t.{core::double::+}(self::getInt());
-  core::double* v8 = t = t.{core::double::+}(self::getNum());
-  core::double* v9 = t = t.{core::double::+}(self::getDouble());
-  core::double* v10 = t = t.{core::double::+}(1);
-  core::double* v11 = let final core::double* #t10 = t in let final core::double* #t11 = t = #t10.{core::double::+}(1) in #t10;
+  core::double* v6 = let final core::double* #t9 = t in #t9 == null ?{core::double*} t = self::getDouble() : #t9;
+  core::double* v7 = t = t.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+  core::double* v8 = t = t.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+  core::double* v9 = t = t.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+  core::double* v10 = t = t.{core::double::+}(1){(core::num*) →* core::double*};
+  core::double* v11 = let final core::double* #t10 = t in let final core::double* #t11 = t = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.weak.expect
index 63ae5bb..2e41284 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.weak.expect
@@ -42,19 +42,19 @@
     ;
   static method test(self::Test* t) → void {
     t.{self::Test::member} = self::f<self::B*>();
-    let final self::Test* #t1 = t in #t1.{self::Test::member}.{self::A::==}(null) ?{self::B*} #t1.{self::Test::member} = self::f<self::B*>() : null;
-    let final self::Test* #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    let final self::Test* #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    let final self::Test* #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    let final self::Test* #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}.{self::B::-}(1);
-    let final self::Test* #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}.{self::B::-}(1);
+    let final self::Test* #t1 = t in #t1.{self::Test::member}{self::B*} == null ?{self::B*} #t1.{self::Test::member} = self::f<self::B*>() : null;
+    let final self::Test* #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    let final self::Test* #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    let final self::Test* #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    let final self::Test* #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = t.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::Test* #t7 = t in let final self::B* #t8 = #t7.{self::Test::member} in #t8.{self::A::==}(null) ?{self::B*} #t7.{self::Test::member} = self::f<self::B*>() : #t8;
-    self::A* v3 = let final self::Test* #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    self::B* v4 = let final self::Test* #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    self::C* v5 = let final self::Test* #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    self::B* v6 = let final self::Test* #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}.{self::B::-}(1);
-    self::B* v7 = let final self::Test* #t13 = t in let final self::B* #t14 = #t13.{self::Test::member} in let final self::B* #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1) in #t14;
+    self::B* v2 = let final self::Test* #t7 = t in let final self::B* #t8 = #t7.{self::Test::member}{self::B*} in #t8 == null ?{self::B*} #t7.{self::Test::member} = self::f<self::B*>() : #t8;
+    self::A* v3 = let final self::Test* #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = let final self::Test* #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = let final self::Test* #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = let final self::Test* #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::Test* #t13 = t in let final self::B* #t14 = #t13.{self::Test::member}{self::B*} in let final self::B* #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1){(core::int*) →* self::B*} in #t14;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.weak.transformed.expect
index 63ae5bb..2e41284 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.weak.transformed.expect
@@ -42,19 +42,19 @@
     ;
   static method test(self::Test* t) → void {
     t.{self::Test::member} = self::f<self::B*>();
-    let final self::Test* #t1 = t in #t1.{self::Test::member}.{self::A::==}(null) ?{self::B*} #t1.{self::Test::member} = self::f<self::B*>() : null;
-    let final self::Test* #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    let final self::Test* #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    let final self::Test* #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    let final self::Test* #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}.{self::B::-}(1);
-    let final self::Test* #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}.{self::B::-}(1);
+    let final self::Test* #t1 = t in #t1.{self::Test::member}{self::B*} == null ?{self::B*} #t1.{self::Test::member} = self::f<self::B*>() : null;
+    let final self::Test* #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    let final self::Test* #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    let final self::Test* #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    let final self::Test* #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = t.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::Test* #t7 = t in let final self::B* #t8 = #t7.{self::Test::member} in #t8.{self::A::==}(null) ?{self::B*} #t7.{self::Test::member} = self::f<self::B*>() : #t8;
-    self::A* v3 = let final self::Test* #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    self::B* v4 = let final self::Test* #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    self::C* v5 = let final self::Test* #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    self::B* v6 = let final self::Test* #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}.{self::B::-}(1);
-    self::B* v7 = let final self::Test* #t13 = t in let final self::B* #t14 = #t13.{self::Test::member} in let final self::B* #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1) in #t14;
+    self::B* v2 = let final self::Test* #t7 = t in let final self::B* #t8 = #t7.{self::Test::member}{self::B*} in #t8 == null ?{self::B*} #t7.{self::Test::member} = self::f<self::B*>() : #t8;
+    self::A* v3 = let final self::Test* #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = let final self::Test* #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = let final self::Test* #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = let final self::Test* #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::Test* #t13 = t in let final self::B* #t14 = #t13.{self::Test::member}{self::B*} in let final self::B* #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1){(core::int*) →* self::B*} in #t14;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.expect
index 189fd9a..681f9aa 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.expect
@@ -41,20 +41,20 @@
     : super core::Object::•()
     ;
   static method test(self::Test* t) → void {
-    let final self::Test* #t1 = t in #t1.{self::Test::==}(null) ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
-    let final self::Test* #t2 = t in #t2.{self::Test::==}(null) ?{self::B*} null : #t2.{self::Test::member}.{self::A::==}(null) ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
-    let final self::Test* #t3 = t in #t3.{self::Test::==}(null) ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    let final self::Test* #t4 = t in #t4.{self::Test::==}(null) ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    let final self::Test* #t5 = t in #t5.{self::Test::==}(null) ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    let final self::Test* #t6 = t in #t6.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}.{self::B::-}(1) in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
-    let final self::Test* #t9 = t in #t9.{self::Test::==}(null) ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}.{self::B::-}(1);
-    self::B* v1 = let final self::Test* #t10 = t in #t10.{self::Test::==}(null) ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::Test* #t11 = t in #t11.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member} in #t12.{self::A::==}(null) ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
-    self::A* v3 = let final self::Test* #t13 = t in #t13.{self::Test::==}(null) ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
-    self::B* v4 = let final self::Test* #t16 = t in #t16.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}.{self::B::*}(self::f<self::B*>()) in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
-    self::C* v5 = let final self::Test* #t19 = t in #t19.{self::Test::==}(null) ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}.{self::B::&}(self::f<self::A*>()) in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
-    self::B* v6 = let final self::Test* #t22 = t in #t22.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}.{self::B::-}(1) in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
-    self::B* v7 = let final self::Test* #t25 = t in #t25.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t26 = #t25.{self::Test::member} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1) in #t26;
+    let final self::Test* #t1 = t in #t1 == null ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
+    let final self::Test* #t2 = t in #t2 == null ?{self::B*} null : #t2.{self::Test::member}{self::B*} == null ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
+    let final self::Test* #t3 = t in #t3 == null ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t4 = t in #t4 == null ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    let final self::Test* #t5 = t in #t5 == null ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    let final self::Test* #t6 = t in #t6 == null ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
+    let final self::Test* #t9 = t in #t9 == null ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v1 = let final self::Test* #t10 = t in #t10 == null ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
+    self::B* v2 = let final self::Test* #t11 = t in #t11 == null ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member}{self::B*} in #t12 == null ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
+    self::A* v3 = let final self::Test* #t13 = t in #t13 == null ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B* v4 = let final self::Test* #t16 = t in #t16 == null ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
+    self::C* v5 = let final self::Test* #t19 = t in #t19 == null ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
+    self::B* v6 = let final self::Test* #t22 = t in #t22 == null ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
+    self::B* v7 = let final self::Test* #t25 = t in #t25 == null ?{self::B*} null : let final self::B* #t26 = #t25.{self::Test::member}{self::B*} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1){(core::int*) →* self::B*} in #t26;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.transformed.expect
index 189fd9a..681f9aa 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.transformed.expect
@@ -41,20 +41,20 @@
     : super core::Object::•()
     ;
   static method test(self::Test* t) → void {
-    let final self::Test* #t1 = t in #t1.{self::Test::==}(null) ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
-    let final self::Test* #t2 = t in #t2.{self::Test::==}(null) ?{self::B*} null : #t2.{self::Test::member}.{self::A::==}(null) ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
-    let final self::Test* #t3 = t in #t3.{self::Test::==}(null) ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    let final self::Test* #t4 = t in #t4.{self::Test::==}(null) ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    let final self::Test* #t5 = t in #t5.{self::Test::==}(null) ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    let final self::Test* #t6 = t in #t6.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}.{self::B::-}(1) in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
-    let final self::Test* #t9 = t in #t9.{self::Test::==}(null) ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}.{self::B::-}(1);
-    self::B* v1 = let final self::Test* #t10 = t in #t10.{self::Test::==}(null) ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::Test* #t11 = t in #t11.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member} in #t12.{self::A::==}(null) ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
-    self::A* v3 = let final self::Test* #t13 = t in #t13.{self::Test::==}(null) ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
-    self::B* v4 = let final self::Test* #t16 = t in #t16.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}.{self::B::*}(self::f<self::B*>()) in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
-    self::C* v5 = let final self::Test* #t19 = t in #t19.{self::Test::==}(null) ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}.{self::B::&}(self::f<self::A*>()) in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
-    self::B* v6 = let final self::Test* #t22 = t in #t22.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}.{self::B::-}(1) in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
-    self::B* v7 = let final self::Test* #t25 = t in #t25.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t26 = #t25.{self::Test::member} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1) in #t26;
+    let final self::Test* #t1 = t in #t1 == null ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
+    let final self::Test* #t2 = t in #t2 == null ?{self::B*} null : #t2.{self::Test::member}{self::B*} == null ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
+    let final self::Test* #t3 = t in #t3 == null ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t4 = t in #t4 == null ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    let final self::Test* #t5 = t in #t5 == null ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    let final self::Test* #t6 = t in #t6 == null ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
+    let final self::Test* #t9 = t in #t9 == null ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v1 = let final self::Test* #t10 = t in #t10 == null ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
+    self::B* v2 = let final self::Test* #t11 = t in #t11 == null ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member}{self::B*} in #t12 == null ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
+    self::A* v3 = let final self::Test* #t13 = t in #t13 == null ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B* v4 = let final self::Test* #t16 = t in #t16 == null ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
+    self::C* v5 = let final self::Test* #t19 = t in #t19 == null ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
+    self::B* v6 = let final self::Test* #t22 = t in #t22 == null ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
+    self::B* v7 = let final self::Test* #t25 = t in #t25 == null ?{self::B*} null : let final self::B* #t26 = #t25.{self::Test::member}{self::B*} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1){(core::int*) →* self::B*} in #t26;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.expect
index b435efb..defcb5a 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.expect
@@ -8,11 +8,11 @@
     : super core::Object::•()
     ;
   static method test(self::Test1* t) → void {
-    core::int* v1 = let final self::Test1* #t1 = t in #t1.{self::Test1::==}(null) ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
-    core::int* v4 = let final self::Test1* #t2 = t in #t2.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t3 = #t2.{self::Test1::prop} in #t3.{core::num::==}(null) ?{core::int*} #t2.{self::Test1::prop} = self::getInt() : #t3;
-    core::int* v7 = let final self::Test1* #t4 = t in #t4.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t5 = #t4.{self::Test1::prop}.{core::num::+}(self::getInt()) in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
-    core::int* v10 = let final self::Test1* #t7 = t in #t7.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}.{core::num::+}(1) in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
-    core::int* v11 = let final self::Test1* #t10 = t in #t10.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t11 = #t10.{self::Test1::prop} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1) in #t11;
+    core::int* v1 = let final self::Test1* #t1 = t in #t1 == null ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
+    core::int* v4 = let final self::Test1* #t2 = t in #t2 == null ?{core::int*} null : let final core::int* #t3 = #t2.{self::Test1::prop}{core::int*} in #t3 == null ?{core::int*} #t2.{self::Test1::prop} = self::getInt() : #t3;
+    core::int* v7 = let final self::Test1* #t4 = t in #t4 == null ?{core::int*} null : let final core::int* #t5 = #t4.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
+    core::int* v10 = let final self::Test1* #t7 = t in #t7 == null ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
+    core::int* v11 = let final self::Test1* #t10 = t in #t10 == null ?{core::int*} null : let final core::int* #t11 = #t10.{self::Test1::prop}{core::int*} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1){(core::num*) →* core::int*} in #t11;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -31,17 +31,17 @@
     : super core::Object::•()
     ;
   static method test(self::Test2* t) → void {
-    core::int* v1 = let final self::Test2* #t13 = t in #t13.{self::Test2::==}(null) ?{core::int*} null : #t13.{self::Test2::prop} = self::getInt();
-    core::num* v2 = let final self::Test2* #t14 = t in #t14.{self::Test2::==}(null) ?{core::num*} null : #t14.{self::Test2::prop} = self::getNum();
-    core::double* v3 = let final self::Test2* #t15 = t in #t15.{self::Test2::==}(null) ?{core::double*} null : #t15.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t16 = t in #t16.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t17 = #t16.{self::Test2::prop} in #t17.{core::num::==}(null) ?{core::num*} #t16.{self::Test2::prop} = self::getInt() : #t17;
-    core::num* v5 = let final self::Test2* #t18 = t in #t18.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t19 = #t18.{self::Test2::prop} in #t19.{core::num::==}(null) ?{core::num*} #t18.{self::Test2::prop} = self::getNum() : #t19;
-    core::num* v6 = let final self::Test2* #t20 = t in #t20.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t21 = #t20.{self::Test2::prop} in #t21.{core::num::==}(null) ?{core::num*} #t20.{self::Test2::prop} = self::getDouble() : #t21;
-    core::num* v7 = let final self::Test2* #t22 = t in #t22.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop}.{core::num::+}(self::getInt()) in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
-    core::num* v8 = let final self::Test2* #t25 = t in #t25.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t26 = #t25.{self::Test2::prop}.{core::num::+}(self::getNum()) in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
-    core::num* v9 = let final self::Test2* #t28 = t in #t28.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}.{core::num::+}(self::getDouble()) in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
-    core::num* v10 = let final self::Test2* #t31 = t in #t31.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}.{core::num::+}(1) in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
-    core::num* v11 = let final self::Test2* #t34 = t in #t34.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1) in #t35;
+    core::int* v1 = let final self::Test2* #t13 = t in #t13 == null ?{core::int*} null : #t13.{self::Test2::prop} = self::getInt();
+    core::num* v2 = let final self::Test2* #t14 = t in #t14 == null ?{core::num*} null : #t14.{self::Test2::prop} = self::getNum();
+    core::double* v3 = let final self::Test2* #t15 = t in #t15 == null ?{core::double*} null : #t15.{self::Test2::prop} = self::getDouble();
+    core::num* v4 = let final self::Test2* #t16 = t in #t16 == null ?{core::num*} null : let final core::num* #t17 = #t16.{self::Test2::prop}{core::num*} in #t17 == null ?{core::num*} #t16.{self::Test2::prop} = self::getInt() : #t17;
+    core::num* v5 = let final self::Test2* #t18 = t in #t18 == null ?{core::num*} null : let final core::num* #t19 = #t18.{self::Test2::prop}{core::num*} in #t19 == null ?{core::num*} #t18.{self::Test2::prop} = self::getNum() : #t19;
+    core::num* v6 = let final self::Test2* #t20 = t in #t20 == null ?{core::num*} null : let final core::num* #t21 = #t20.{self::Test2::prop}{core::num*} in #t21 == null ?{core::num*} #t20.{self::Test2::prop} = self::getDouble() : #t21;
+    core::num* v7 = let final self::Test2* #t22 = t in #t22 == null ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
+    core::num* v8 = let final self::Test2* #t25 = t in #t25 == null ?{core::num*} null : let final core::num* #t26 = #t25.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
+    core::num* v9 = let final self::Test2* #t28 = t in #t28 == null ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
+    core::num* v10 = let final self::Test2* #t31 = t in #t31 == null ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
+    core::num* v11 = let final self::Test2* #t34 = t in #t34 == null ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop}{core::num*} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1){(core::num*) →* core::num*} in #t35;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -60,13 +60,13 @@
     : super core::Object::•()
     ;
   static method test3(self::Test3* t) → void {
-    core::double* v3 = let final self::Test3* #t37 = t in #t37.{self::Test3::==}(null) ?{core::double*} null : #t37.{self::Test3::prop} = self::getDouble();
-    core::double* v6 = let final self::Test3* #t38 = t in #t38.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t39 = #t38.{self::Test3::prop} in #t39.{core::num::==}(null) ?{core::double*} #t38.{self::Test3::prop} = self::getDouble() : #t39;
-    core::double* v7 = let final self::Test3* #t40 = t in #t40.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t41 = #t40.{self::Test3::prop}.{core::double::+}(self::getInt()) in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
-    core::double* v8 = let final self::Test3* #t43 = t in #t43.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t44 = #t43.{self::Test3::prop}.{core::double::+}(self::getNum()) in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
-    core::double* v9 = let final self::Test3* #t46 = t in #t46.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t47 = #t46.{self::Test3::prop}.{core::double::+}(self::getDouble()) in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
-    core::double* v10 = let final self::Test3* #t49 = t in #t49.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}.{core::double::+}(1) in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
-    core::double* v11 = let final self::Test3* #t52 = t in #t52.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1) in #t53;
+    core::double* v3 = let final self::Test3* #t37 = t in #t37 == null ?{core::double*} null : #t37.{self::Test3::prop} = self::getDouble();
+    core::double* v6 = let final self::Test3* #t38 = t in #t38 == null ?{core::double*} null : let final core::double* #t39 = #t38.{self::Test3::prop}{core::double*} in #t39 == null ?{core::double*} #t38.{self::Test3::prop} = self::getDouble() : #t39;
+    core::double* v7 = let final self::Test3* #t40 = t in #t40 == null ?{core::double*} null : let final core::double* #t41 = #t40.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
+    core::double* v8 = let final self::Test3* #t43 = t in #t43 == null ?{core::double*} null : let final core::double* #t44 = #t43.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
+    core::double* v9 = let final self::Test3* #t46 = t in #t46 == null ?{core::double*} null : let final core::double* #t47 = #t46.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
+    core::double* v10 = let final self::Test3* #t49 = t in #t49 == null ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
+    core::double* v11 = let final self::Test3* #t52 = t in #t52 == null ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop}{core::double*} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1){(core::num*) →* core::double*} in #t53;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.transformed.expect
index b435efb..defcb5a 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.transformed.expect
@@ -8,11 +8,11 @@
     : super core::Object::•()
     ;
   static method test(self::Test1* t) → void {
-    core::int* v1 = let final self::Test1* #t1 = t in #t1.{self::Test1::==}(null) ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
-    core::int* v4 = let final self::Test1* #t2 = t in #t2.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t3 = #t2.{self::Test1::prop} in #t3.{core::num::==}(null) ?{core::int*} #t2.{self::Test1::prop} = self::getInt() : #t3;
-    core::int* v7 = let final self::Test1* #t4 = t in #t4.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t5 = #t4.{self::Test1::prop}.{core::num::+}(self::getInt()) in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
-    core::int* v10 = let final self::Test1* #t7 = t in #t7.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}.{core::num::+}(1) in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
-    core::int* v11 = let final self::Test1* #t10 = t in #t10.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t11 = #t10.{self::Test1::prop} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1) in #t11;
+    core::int* v1 = let final self::Test1* #t1 = t in #t1 == null ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
+    core::int* v4 = let final self::Test1* #t2 = t in #t2 == null ?{core::int*} null : let final core::int* #t3 = #t2.{self::Test1::prop}{core::int*} in #t3 == null ?{core::int*} #t2.{self::Test1::prop} = self::getInt() : #t3;
+    core::int* v7 = let final self::Test1* #t4 = t in #t4 == null ?{core::int*} null : let final core::int* #t5 = #t4.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
+    core::int* v10 = let final self::Test1* #t7 = t in #t7 == null ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
+    core::int* v11 = let final self::Test1* #t10 = t in #t10 == null ?{core::int*} null : let final core::int* #t11 = #t10.{self::Test1::prop}{core::int*} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1){(core::num*) →* core::int*} in #t11;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -31,17 +31,17 @@
     : super core::Object::•()
     ;
   static method test(self::Test2* t) → void {
-    core::int* v1 = let final self::Test2* #t13 = t in #t13.{self::Test2::==}(null) ?{core::int*} null : #t13.{self::Test2::prop} = self::getInt();
-    core::num* v2 = let final self::Test2* #t14 = t in #t14.{self::Test2::==}(null) ?{core::num*} null : #t14.{self::Test2::prop} = self::getNum();
-    core::double* v3 = let final self::Test2* #t15 = t in #t15.{self::Test2::==}(null) ?{core::double*} null : #t15.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t16 = t in #t16.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t17 = #t16.{self::Test2::prop} in #t17.{core::num::==}(null) ?{core::num*} #t16.{self::Test2::prop} = self::getInt() : #t17;
-    core::num* v5 = let final self::Test2* #t18 = t in #t18.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t19 = #t18.{self::Test2::prop} in #t19.{core::num::==}(null) ?{core::num*} #t18.{self::Test2::prop} = self::getNum() : #t19;
-    core::num* v6 = let final self::Test2* #t20 = t in #t20.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t21 = #t20.{self::Test2::prop} in #t21.{core::num::==}(null) ?{core::num*} #t20.{self::Test2::prop} = self::getDouble() : #t21;
-    core::num* v7 = let final self::Test2* #t22 = t in #t22.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop}.{core::num::+}(self::getInt()) in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
-    core::num* v8 = let final self::Test2* #t25 = t in #t25.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t26 = #t25.{self::Test2::prop}.{core::num::+}(self::getNum()) in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
-    core::num* v9 = let final self::Test2* #t28 = t in #t28.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}.{core::num::+}(self::getDouble()) in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
-    core::num* v10 = let final self::Test2* #t31 = t in #t31.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}.{core::num::+}(1) in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
-    core::num* v11 = let final self::Test2* #t34 = t in #t34.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1) in #t35;
+    core::int* v1 = let final self::Test2* #t13 = t in #t13 == null ?{core::int*} null : #t13.{self::Test2::prop} = self::getInt();
+    core::num* v2 = let final self::Test2* #t14 = t in #t14 == null ?{core::num*} null : #t14.{self::Test2::prop} = self::getNum();
+    core::double* v3 = let final self::Test2* #t15 = t in #t15 == null ?{core::double*} null : #t15.{self::Test2::prop} = self::getDouble();
+    core::num* v4 = let final self::Test2* #t16 = t in #t16 == null ?{core::num*} null : let final core::num* #t17 = #t16.{self::Test2::prop}{core::num*} in #t17 == null ?{core::num*} #t16.{self::Test2::prop} = self::getInt() : #t17;
+    core::num* v5 = let final self::Test2* #t18 = t in #t18 == null ?{core::num*} null : let final core::num* #t19 = #t18.{self::Test2::prop}{core::num*} in #t19 == null ?{core::num*} #t18.{self::Test2::prop} = self::getNum() : #t19;
+    core::num* v6 = let final self::Test2* #t20 = t in #t20 == null ?{core::num*} null : let final core::num* #t21 = #t20.{self::Test2::prop}{core::num*} in #t21 == null ?{core::num*} #t20.{self::Test2::prop} = self::getDouble() : #t21;
+    core::num* v7 = let final self::Test2* #t22 = t in #t22 == null ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
+    core::num* v8 = let final self::Test2* #t25 = t in #t25 == null ?{core::num*} null : let final core::num* #t26 = #t25.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
+    core::num* v9 = let final self::Test2* #t28 = t in #t28 == null ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
+    core::num* v10 = let final self::Test2* #t31 = t in #t31 == null ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
+    core::num* v11 = let final self::Test2* #t34 = t in #t34 == null ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop}{core::num*} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1){(core::num*) →* core::num*} in #t35;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -60,13 +60,13 @@
     : super core::Object::•()
     ;
   static method test3(self::Test3* t) → void {
-    core::double* v3 = let final self::Test3* #t37 = t in #t37.{self::Test3::==}(null) ?{core::double*} null : #t37.{self::Test3::prop} = self::getDouble();
-    core::double* v6 = let final self::Test3* #t38 = t in #t38.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t39 = #t38.{self::Test3::prop} in #t39.{core::num::==}(null) ?{core::double*} #t38.{self::Test3::prop} = self::getDouble() : #t39;
-    core::double* v7 = let final self::Test3* #t40 = t in #t40.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t41 = #t40.{self::Test3::prop}.{core::double::+}(self::getInt()) in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
-    core::double* v8 = let final self::Test3* #t43 = t in #t43.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t44 = #t43.{self::Test3::prop}.{core::double::+}(self::getNum()) in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
-    core::double* v9 = let final self::Test3* #t46 = t in #t46.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t47 = #t46.{self::Test3::prop}.{core::double::+}(self::getDouble()) in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
-    core::double* v10 = let final self::Test3* #t49 = t in #t49.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}.{core::double::+}(1) in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
-    core::double* v11 = let final self::Test3* #t52 = t in #t52.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1) in #t53;
+    core::double* v3 = let final self::Test3* #t37 = t in #t37 == null ?{core::double*} null : #t37.{self::Test3::prop} = self::getDouble();
+    core::double* v6 = let final self::Test3* #t38 = t in #t38 == null ?{core::double*} null : let final core::double* #t39 = #t38.{self::Test3::prop}{core::double*} in #t39 == null ?{core::double*} #t38.{self::Test3::prop} = self::getDouble() : #t39;
+    core::double* v7 = let final self::Test3* #t40 = t in #t40 == null ?{core::double*} null : let final core::double* #t41 = #t40.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
+    core::double* v8 = let final self::Test3* #t43 = t in #t43 == null ?{core::double*} null : let final core::double* #t44 = #t43.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
+    core::double* v9 = let final self::Test3* #t46 = t in #t46 == null ?{core::double*} null : let final core::double* #t47 = #t46.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
+    core::double* v10 = let final self::Test3* #t49 = t in #t49 == null ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
+    core::double* v11 = let final self::Test3* #t52 = t in #t52 == null ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop}{core::double*} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1){(core::num*) →* core::double*} in #t53;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.weak.expect
index fe71ec5..28b3433 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.weak.expect
@@ -57,19 +57,19 @@
     ;
   method test() → void {
     super.{self::Base::member} = self::f<self::B*>();
-    super.{self::Base::member}.{self::A::==}(null) ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : null;
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>());
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>());
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1);
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1);
+    super.{self::Base::member} == null ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : null;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = super.{self::Base::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = super.{self::Base::member} in #t1.{self::A::==}(null) ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    self::B* v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>());
-    self::C* v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>());
-    self::B* v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1);
-    self::B* v7 = let final self::B* #t2 = super.{self::Base::member} in let final self::B* #t3 = super.{self::Base::member} = #t2.{self::B::-}(1) in #t2;
+    self::B* v2 = let final self::B* #t1 = super.{self::Base::member} in #t1 == null ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : #t1;
+    self::A* v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::B* #t2 = super.{self::Base::member} in let final self::B* #t3 = super.{self::Base::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
   }
 }
 static method f<T extends core::Object* = dynamic>() → self::f::T*
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.weak.transformed.expect
index fe71ec5..28b3433 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.weak.transformed.expect
@@ -57,19 +57,19 @@
     ;
   method test() → void {
     super.{self::Base::member} = self::f<self::B*>();
-    super.{self::Base::member}.{self::A::==}(null) ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : null;
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>());
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>());
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1);
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1);
+    super.{self::Base::member} == null ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : null;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = super.{self::Base::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = super.{self::Base::member} in #t1.{self::A::==}(null) ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    self::B* v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>());
-    self::C* v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>());
-    self::B* v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1);
-    self::B* v7 = let final self::B* #t2 = super.{self::Base::member} in let final self::B* #t3 = super.{self::Base::member} = #t2.{self::B::-}(1) in #t2;
+    self::B* v2 = let final self::B* #t1 = super.{self::Base::member} in #t1 == null ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : #t1;
+    self::A* v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::B* #t2 = super.{self::Base::member} in let final self::B* #t3 = super.{self::Base::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
   }
 }
 static method f<T extends core::Object* = dynamic>() → self::f::T*
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.expect
index 70a957e..15883a8 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.expect
@@ -26,10 +26,10 @@
     ;
   method test() → void {
     core::int* v1 = super.{self::Base::intProp} = self::getInt();
-    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1.{core::num::==}(null) ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
-    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt());
-    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1);
-    core::int* v11 = let final core::int* #t2 = super.{self::Base::intProp} in let final core::int* #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1) in #t2;
+    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1 == null ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
+    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final core::int* #t2 = super.{self::Base::intProp} in let final core::int* #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
   }
 }
 class Test2 extends self::Base {
@@ -40,14 +40,14 @@
     core::int* v1 = super.{self::Base::numProp} = self::getInt();
     core::num* v2 = super.{self::Base::numProp} = self::getNum();
     core::double* v3 = super.{self::Base::numProp} = self::getDouble();
-    core::num* v4 = let final core::num* #t4 = super.{self::Base::numProp} in #t4.{core::num::==}(null) ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t4;
-    core::num* v5 = let final core::num* #t5 = super.{self::Base::numProp} in #t5.{core::num::==}(null) ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t5;
-    core::num* v6 = let final core::num* #t6 = super.{self::Base::numProp} in #t6.{core::num::==}(null) ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t6;
-    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt());
-    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum());
-    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble());
-    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1);
-    core::num* v11 = let final core::num* #t7 = super.{self::Base::numProp} in let final core::num* #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1) in #t7;
+    core::num* v4 = let final core::num* #t4 = super.{self::Base::numProp} in #t4 == null ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t4;
+    core::num* v5 = let final core::num* #t5 = super.{self::Base::numProp} in #t5 == null ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t5;
+    core::num* v6 = let final core::num* #t6 = super.{self::Base::numProp} in #t6 == null ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t6;
+    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final core::num* #t7 = super.{self::Base::numProp} in let final core::num* #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
   }
 }
 class Test3 extends self::Base {
@@ -56,12 +56,12 @@
     ;
   method test3() → void {
     core::double* v3 = super.{self::Base::doubleProp} = self::getDouble();
-    core::double* v6 = let final core::double* #t9 = super.{self::Base::doubleProp} in #t9.{core::num::==}(null) ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t9;
-    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt());
-    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum());
-    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble());
-    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1);
-    core::double* v11 = let final core::double* #t10 = super.{self::Base::doubleProp} in let final core::double* #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1) in #t10;
+    core::double* v6 = let final core::double* #t9 = super.{self::Base::doubleProp} in #t9 == null ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t9;
+    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final core::double* #t10 = super.{self::Base::doubleProp} in let final core::double* #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
   }
 }
 static method getInt() → core::int*
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.transformed.expect
index 70a957e..15883a8 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.transformed.expect
@@ -26,10 +26,10 @@
     ;
   method test() → void {
     core::int* v1 = super.{self::Base::intProp} = self::getInt();
-    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1.{core::num::==}(null) ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
-    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt());
-    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1);
-    core::int* v11 = let final core::int* #t2 = super.{self::Base::intProp} in let final core::int* #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1) in #t2;
+    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1 == null ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
+    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final core::int* #t2 = super.{self::Base::intProp} in let final core::int* #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
   }
 }
 class Test2 extends self::Base {
@@ -40,14 +40,14 @@
     core::int* v1 = super.{self::Base::numProp} = self::getInt();
     core::num* v2 = super.{self::Base::numProp} = self::getNum();
     core::double* v3 = super.{self::Base::numProp} = self::getDouble();
-    core::num* v4 = let final core::num* #t4 = super.{self::Base::numProp} in #t4.{core::num::==}(null) ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t4;
-    core::num* v5 = let final core::num* #t5 = super.{self::Base::numProp} in #t5.{core::num::==}(null) ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t5;
-    core::num* v6 = let final core::num* #t6 = super.{self::Base::numProp} in #t6.{core::num::==}(null) ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t6;
-    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt());
-    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum());
-    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble());
-    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1);
-    core::num* v11 = let final core::num* #t7 = super.{self::Base::numProp} in let final core::num* #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1) in #t7;
+    core::num* v4 = let final core::num* #t4 = super.{self::Base::numProp} in #t4 == null ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t4;
+    core::num* v5 = let final core::num* #t5 = super.{self::Base::numProp} in #t5 == null ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t5;
+    core::num* v6 = let final core::num* #t6 = super.{self::Base::numProp} in #t6 == null ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t6;
+    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final core::num* #t7 = super.{self::Base::numProp} in let final core::num* #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
   }
 }
 class Test3 extends self::Base {
@@ -56,12 +56,12 @@
     ;
   method test3() → void {
     core::double* v3 = super.{self::Base::doubleProp} = self::getDouble();
-    core::double* v6 = let final core::double* #t9 = super.{self::Base::doubleProp} in #t9.{core::num::==}(null) ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t9;
-    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt());
-    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum());
-    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble());
-    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1);
-    core::double* v11 = let final core::double* #t10 = super.{self::Base::doubleProp} in let final core::double* #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1) in #t10;
+    core::double* v6 = let final core::double* #t9 = super.{self::Base::doubleProp} in #t9 == null ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t9;
+    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final core::double* #t10 = super.{self::Base::doubleProp} in let final core::double* #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
   }
 }
 static method getInt() → core::int*
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.expect
index 00c3f25..1e03234 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.expect
@@ -9,10 +9,10 @@
     ;
   static method test(self::Test1* t) → void {
     core::int* v1 = t.{self::Test1::prop} = self::getInt();
-    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop} in #t2.{core::num::==}(null) ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
-    core::int* v7 = let final self::Test1* #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}.{core::num::+}(self::getInt());
-    core::int* v10 = let final self::Test1* #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}.{core::num::+}(1);
-    core::int* v11 = let final self::Test1* #t5 = t in let final core::int* #t6 = #t5.{self::Test1::prop} in let final core::int* #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1) in #t6;
+    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop}{core::int*} in #t2 == null ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
+    core::int* v7 = let final self::Test1* #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::int* v10 = let final self::Test1* #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final self::Test1* #t5 = t in let final core::int* #t6 = #t5.{self::Test1::prop}{core::int*} in let final core::int* #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1){(core::num*) →* core::int*} in #t6;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -34,14 +34,14 @@
     core::int* v1 = t.{self::Test2::prop} = self::getInt();
     core::num* v2 = t.{self::Test2::prop} = self::getNum();
     core::double* v3 = t.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t8 = t in let final core::num* #t9 = #t8.{self::Test2::prop} in #t9.{core::num::==}(null) ?{core::num*} #t8.{self::Test2::prop} = self::getInt() : #t9;
-    core::num* v5 = let final self::Test2* #t10 = t in let final core::num* #t11 = #t10.{self::Test2::prop} in #t11.{core::num::==}(null) ?{core::num*} #t10.{self::Test2::prop} = self::getNum() : #t11;
-    core::num* v6 = let final self::Test2* #t12 = t in let final core::num* #t13 = #t12.{self::Test2::prop} in #t13.{core::num::==}(null) ?{core::num*} #t12.{self::Test2::prop} = self::getDouble() : #t13;
-    core::num* v7 = let final self::Test2* #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}.{core::num::+}(self::getInt());
-    core::num* v8 = let final self::Test2* #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}.{core::num::+}(self::getNum());
-    core::num* v9 = let final self::Test2* #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}.{core::num::+}(self::getDouble());
-    core::num* v10 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}.{core::num::+}(1);
-    core::num* v11 = let final self::Test2* #t18 = t in let final core::num* #t19 = #t18.{self::Test2::prop} in let final core::num* #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1) in #t19;
+    core::num* v4 = let final self::Test2* #t8 = t in let final core::num* #t9 = #t8.{self::Test2::prop}{core::num*} in #t9 == null ?{core::num*} #t8.{self::Test2::prop} = self::getInt() : #t9;
+    core::num* v5 = let final self::Test2* #t10 = t in let final core::num* #t11 = #t10.{self::Test2::prop}{core::num*} in #t11 == null ?{core::num*} #t10.{self::Test2::prop} = self::getNum() : #t11;
+    core::num* v6 = let final self::Test2* #t12 = t in let final core::num* #t13 = #t12.{self::Test2::prop}{core::num*} in #t13 == null ?{core::num*} #t12.{self::Test2::prop} = self::getDouble() : #t13;
+    core::num* v7 = let final self::Test2* #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = let final self::Test2* #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = let final self::Test2* #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final self::Test2* #t18 = t in let final core::num* #t19 = #t18.{self::Test2::prop}{core::num*} in let final core::num* #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1){(core::num*) →* core::num*} in #t19;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -61,12 +61,12 @@
     ;
   static method test3(self::Test3* t) → void {
     core::double* v3 = t.{self::Test3::prop} = self::getDouble();
-    core::double* v6 = let final self::Test3* #t21 = t in let final core::double* #t22 = #t21.{self::Test3::prop} in #t22.{core::num::==}(null) ?{core::double*} #t21.{self::Test3::prop} = self::getDouble() : #t22;
-    core::double* v7 = let final self::Test3* #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}.{core::double::+}(self::getInt());
-    core::double* v8 = let final self::Test3* #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}.{core::double::+}(self::getNum());
-    core::double* v9 = let final self::Test3* #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}.{core::double::+}(self::getDouble());
-    core::double* v10 = let final self::Test3* #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}.{core::double::+}(1);
-    core::double* v11 = let final self::Test3* #t27 = t in let final core::double* #t28 = #t27.{self::Test3::prop} in let final core::double* #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1) in #t28;
+    core::double* v6 = let final self::Test3* #t21 = t in let final core::double* #t22 = #t21.{self::Test3::prop}{core::double*} in #t22 == null ?{core::double*} #t21.{self::Test3::prop} = self::getDouble() : #t22;
+    core::double* v7 = let final self::Test3* #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = let final self::Test3* #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = let final self::Test3* #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = let final self::Test3* #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final self::Test3* #t27 = t in let final core::double* #t28 = #t27.{self::Test3::prop}{core::double*} in let final core::double* #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1){(core::num*) →* core::double*} in #t28;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.transformed.expect
index 00c3f25..1e03234 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.transformed.expect
@@ -9,10 +9,10 @@
     ;
   static method test(self::Test1* t) → void {
     core::int* v1 = t.{self::Test1::prop} = self::getInt();
-    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop} in #t2.{core::num::==}(null) ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
-    core::int* v7 = let final self::Test1* #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}.{core::num::+}(self::getInt());
-    core::int* v10 = let final self::Test1* #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}.{core::num::+}(1);
-    core::int* v11 = let final self::Test1* #t5 = t in let final core::int* #t6 = #t5.{self::Test1::prop} in let final core::int* #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1) in #t6;
+    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop}{core::int*} in #t2 == null ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
+    core::int* v7 = let final self::Test1* #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::int* v10 = let final self::Test1* #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final self::Test1* #t5 = t in let final core::int* #t6 = #t5.{self::Test1::prop}{core::int*} in let final core::int* #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1){(core::num*) →* core::int*} in #t6;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -34,14 +34,14 @@
     core::int* v1 = t.{self::Test2::prop} = self::getInt();
     core::num* v2 = t.{self::Test2::prop} = self::getNum();
     core::double* v3 = t.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t8 = t in let final core::num* #t9 = #t8.{self::Test2::prop} in #t9.{core::num::==}(null) ?{core::num*} #t8.{self::Test2::prop} = self::getInt() : #t9;
-    core::num* v5 = let final self::Test2* #t10 = t in let final core::num* #t11 = #t10.{self::Test2::prop} in #t11.{core::num::==}(null) ?{core::num*} #t10.{self::Test2::prop} = self::getNum() : #t11;
-    core::num* v6 = let final self::Test2* #t12 = t in let final core::num* #t13 = #t12.{self::Test2::prop} in #t13.{core::num::==}(null) ?{core::num*} #t12.{self::Test2::prop} = self::getDouble() : #t13;
-    core::num* v7 = let final self::Test2* #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}.{core::num::+}(self::getInt());
-    core::num* v8 = let final self::Test2* #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}.{core::num::+}(self::getNum());
-    core::num* v9 = let final self::Test2* #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}.{core::num::+}(self::getDouble());
-    core::num* v10 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}.{core::num::+}(1);
-    core::num* v11 = let final self::Test2* #t18 = t in let final core::num* #t19 = #t18.{self::Test2::prop} in let final core::num* #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1) in #t19;
+    core::num* v4 = let final self::Test2* #t8 = t in let final core::num* #t9 = #t8.{self::Test2::prop}{core::num*} in #t9 == null ?{core::num*} #t8.{self::Test2::prop} = self::getInt() : #t9;
+    core::num* v5 = let final self::Test2* #t10 = t in let final core::num* #t11 = #t10.{self::Test2::prop}{core::num*} in #t11 == null ?{core::num*} #t10.{self::Test2::prop} = self::getNum() : #t11;
+    core::num* v6 = let final self::Test2* #t12 = t in let final core::num* #t13 = #t12.{self::Test2::prop}{core::num*} in #t13 == null ?{core::num*} #t12.{self::Test2::prop} = self::getDouble() : #t13;
+    core::num* v7 = let final self::Test2* #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = let final self::Test2* #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = let final self::Test2* #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final self::Test2* #t18 = t in let final core::num* #t19 = #t18.{self::Test2::prop}{core::num*} in let final core::num* #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1){(core::num*) →* core::num*} in #t19;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -61,12 +61,12 @@
     ;
   static method test3(self::Test3* t) → void {
     core::double* v3 = t.{self::Test3::prop} = self::getDouble();
-    core::double* v6 = let final self::Test3* #t21 = t in let final core::double* #t22 = #t21.{self::Test3::prop} in #t22.{core::num::==}(null) ?{core::double*} #t21.{self::Test3::prop} = self::getDouble() : #t22;
-    core::double* v7 = let final self::Test3* #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}.{core::double::+}(self::getInt());
-    core::double* v8 = let final self::Test3* #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}.{core::double::+}(self::getNum());
-    core::double* v9 = let final self::Test3* #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}.{core::double::+}(self::getDouble());
-    core::double* v10 = let final self::Test3* #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}.{core::double::+}(1);
-    core::double* v11 = let final self::Test3* #t27 = t in let final core::double* #t28 = #t27.{self::Test3::prop} in let final core::double* #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1) in #t28;
+    core::double* v6 = let final self::Test3* #t21 = t in let final core::double* #t22 = #t21.{self::Test3::prop}{core::double*} in #t22 == null ?{core::double*} #t21.{self::Test3::prop} = self::getDouble() : #t22;
+    core::double* v7 = let final self::Test3* #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = let final self::Test3* #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = let final self::Test3* #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = let final self::Test3* #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final self::Test3* #t27 = t in let final core::double* #t28 = #t27.{self::Test3::prop}{core::double*} in let final core::double* #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1){(core::num*) →* core::double*} in #t28;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.weak.expect
index cd7e710..090413f 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.weak.expect
@@ -41,34 +41,34 @@
   return null;
 static method test_topLevelVariable() → void {
   self::topLevelVariable = self::f<self::B*>();
-  self::topLevelVariable.{self::A::==}(null) ?{self::B*} self::topLevelVariable = self::f<self::B*>() : null;
-  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>());
-  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>());
-  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1);
-  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1);
+  self::topLevelVariable == null ?{self::B*} self::topLevelVariable = self::f<self::B*>() : null;
+  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
   self::B* v1 = self::topLevelVariable = self::f<self::B*>();
-  self::B* v2 = let final self::B* #t1 = self::topLevelVariable in #t1.{self::A::==}(null) ?{self::B*} self::topLevelVariable = self::f<self::B*>() : #t1;
-  self::A* v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B* v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>());
-  self::C* v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>());
-  self::B* v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1);
-  self::B* v7 = let final self::B* #t2 = self::topLevelVariable in let final self::B* #t3 = self::topLevelVariable = #t2.{self::B::-}(1) in #t2;
+  self::B* v2 = let final self::B* #t1 = self::topLevelVariable in #t1 == null ?{self::B*} self::topLevelVariable = self::f<self::B*>() : #t1;
+  self::A* v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t2 = self::topLevelVariable in let final self::B* #t3 = self::topLevelVariable = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
 }
 static method test_staticVariable() → void {
   self::B::staticVariable = self::f<self::B*>();
-  self::B::staticVariable.{self::A::==}(null) ?{self::B*} self::B::staticVariable = self::f<self::B*>() : null;
-  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>());
-  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>());
-  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1);
-  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1);
+  self::B::staticVariable == null ?{self::B*} self::B::staticVariable = self::f<self::B*>() : null;
+  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
   self::B* v1 = self::B::staticVariable = self::f<self::B*>();
-  self::B* v2 = let final self::B* #t4 = self::B::staticVariable in #t4.{self::A::==}(null) ?{self::B*} self::B::staticVariable = self::f<self::B*>() : #t4;
-  self::A* v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B* v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>());
-  self::C* v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>());
-  self::B* v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1);
-  self::B* v7 = let final self::B* #t5 = self::B::staticVariable in let final self::B* #t6 = self::B::staticVariable = #t5.{self::B::-}(1) in #t5;
+  self::B* v2 = let final self::B* #t4 = self::B::staticVariable in #t4 == null ?{self::B*} self::B::staticVariable = self::f<self::B*>() : #t4;
+  self::A* v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t5 = self::B::staticVariable in let final self::B* #t6 = self::B::staticVariable = #t5.{self::B::-}(1){(core::int*) →* self::B*} in #t5;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.weak.transformed.expect
index cd7e710..090413f 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.weak.transformed.expect
@@ -41,34 +41,34 @@
   return null;
 static method test_topLevelVariable() → void {
   self::topLevelVariable = self::f<self::B*>();
-  self::topLevelVariable.{self::A::==}(null) ?{self::B*} self::topLevelVariable = self::f<self::B*>() : null;
-  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>());
-  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>());
-  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1);
-  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1);
+  self::topLevelVariable == null ?{self::B*} self::topLevelVariable = self::f<self::B*>() : null;
+  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
   self::B* v1 = self::topLevelVariable = self::f<self::B*>();
-  self::B* v2 = let final self::B* #t1 = self::topLevelVariable in #t1.{self::A::==}(null) ?{self::B*} self::topLevelVariable = self::f<self::B*>() : #t1;
-  self::A* v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B* v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>());
-  self::C* v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>());
-  self::B* v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1);
-  self::B* v7 = let final self::B* #t2 = self::topLevelVariable in let final self::B* #t3 = self::topLevelVariable = #t2.{self::B::-}(1) in #t2;
+  self::B* v2 = let final self::B* #t1 = self::topLevelVariable in #t1 == null ?{self::B*} self::topLevelVariable = self::f<self::B*>() : #t1;
+  self::A* v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t2 = self::topLevelVariable in let final self::B* #t3 = self::topLevelVariable = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
 }
 static method test_staticVariable() → void {
   self::B::staticVariable = self::f<self::B*>();
-  self::B::staticVariable.{self::A::==}(null) ?{self::B*} self::B::staticVariable = self::f<self::B*>() : null;
-  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>());
-  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>());
-  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1);
-  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1);
+  self::B::staticVariable == null ?{self::B*} self::B::staticVariable = self::f<self::B*>() : null;
+  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
   self::B* v1 = self::B::staticVariable = self::f<self::B*>();
-  self::B* v2 = let final self::B* #t4 = self::B::staticVariable in #t4.{self::A::==}(null) ?{self::B*} self::B::staticVariable = self::f<self::B*>() : #t4;
-  self::A* v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B* v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>());
-  self::C* v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>());
-  self::B* v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1);
-  self::B* v7 = let final self::B* #t5 = self::B::staticVariable in let final self::B* #t6 = self::B::staticVariable = #t5.{self::B::-}(1) in #t5;
+  self::B* v2 = let final self::B* #t4 = self::B::staticVariable in #t4 == null ?{self::B*} self::B::staticVariable = self::f<self::B*>() : #t4;
+  self::A* v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t5 = self::B::staticVariable in let final self::B* #t6 = self::B::staticVariable = #t5.{self::B::-}(1){(core::int*) →* self::B*} in #t5;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.expect
index 109c102..4130e63 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.expect
@@ -13,31 +13,31 @@
   return 0.0;
 static method test1() → void {
   core::int* v1 = self::topLevelInt = self::getInt();
-  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1.{core::num::==}(null) ?{core::int*} self::topLevelInt = self::getInt() : #t1;
-  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt());
-  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1);
-  core::int* v11 = let final core::int* #t2 = self::topLevelInt in let final core::int* #t3 = self::topLevelInt = #t2.{core::num::+}(1) in #t2;
+  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1 == null ?{core::int*} self::topLevelInt = self::getInt() : #t1;
+  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num*) →* core::int*};
+  core::int* v11 = let final core::int* #t2 = self::topLevelInt in let final core::int* #t3 = self::topLevelInt = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
 }
 static method test2() → void {
   core::int* v1 = self::topLevelNum = self::getInt();
   core::num* v2 = self::topLevelNum = self::getNum();
   core::double* v3 = self::topLevelNum = self::getDouble();
-  core::num* v4 = let final core::num* #t4 = self::topLevelNum in #t4.{core::num::==}(null) ?{core::num*} self::topLevelNum = self::getInt() : #t4;
-  core::num* v5 = let final core::num* #t5 = self::topLevelNum in #t5.{core::num::==}(null) ?{core::num*} self::topLevelNum = self::getNum() : #t5;
-  core::num* v6 = let final core::num* #t6 = self::topLevelNum in #t6.{core::num::==}(null) ?{core::num*} self::topLevelNum = self::getDouble() : #t6;
-  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt());
-  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum());
-  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble());
-  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1);
-  core::num* v11 = let final core::num* #t7 = self::topLevelNum in let final core::num* #t8 = self::topLevelNum = #t7.{core::num::+}(1) in #t7;
+  core::num* v4 = let final core::num* #t4 = self::topLevelNum in #t4 == null ?{core::num*} self::topLevelNum = self::getInt() : #t4;
+  core::num* v5 = let final core::num* #t5 = self::topLevelNum in #t5 == null ?{core::num*} self::topLevelNum = self::getNum() : #t5;
+  core::num* v6 = let final core::num* #t6 = self::topLevelNum in #t6 == null ?{core::num*} self::topLevelNum = self::getDouble() : #t6;
+  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num*) →* core::num*};
+  core::num* v11 = let final core::num* #t7 = self::topLevelNum in let final core::num* #t8 = self::topLevelNum = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
 }
 static method test3() → void {
   core::double* v3 = self::topLevelDouble = self::getDouble();
-  core::double* v6 = let final core::double* #t9 = self::topLevelDouble in #t9.{core::num::==}(null) ?{core::double*} self::topLevelDouble = self::getDouble() : #t9;
-  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt());
-  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum());
-  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble());
-  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1);
-  core::double* v11 = let final core::double* #t10 = self::topLevelDouble in let final core::double* #t11 = self::topLevelDouble = #t10.{core::double::+}(1) in #t10;
+  core::double* v6 = let final core::double* #t9 = self::topLevelDouble in #t9 == null ?{core::double*} self::topLevelDouble = self::getDouble() : #t9;
+  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num*) →* core::double*};
+  core::double* v11 = let final core::double* #t10 = self::topLevelDouble in let final core::double* #t11 = self::topLevelDouble = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.transformed.expect
index 109c102..4130e63 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.transformed.expect
@@ -13,31 +13,31 @@
   return 0.0;
 static method test1() → void {
   core::int* v1 = self::topLevelInt = self::getInt();
-  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1.{core::num::==}(null) ?{core::int*} self::topLevelInt = self::getInt() : #t1;
-  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt());
-  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1);
-  core::int* v11 = let final core::int* #t2 = self::topLevelInt in let final core::int* #t3 = self::topLevelInt = #t2.{core::num::+}(1) in #t2;
+  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1 == null ?{core::int*} self::topLevelInt = self::getInt() : #t1;
+  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num*) →* core::int*};
+  core::int* v11 = let final core::int* #t2 = self::topLevelInt in let final core::int* #t3 = self::topLevelInt = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
 }
 static method test2() → void {
   core::int* v1 = self::topLevelNum = self::getInt();
   core::num* v2 = self::topLevelNum = self::getNum();
   core::double* v3 = self::topLevelNum = self::getDouble();
-  core::num* v4 = let final core::num* #t4 = self::topLevelNum in #t4.{core::num::==}(null) ?{core::num*} self::topLevelNum = self::getInt() : #t4;
-  core::num* v5 = let final core::num* #t5 = self::topLevelNum in #t5.{core::num::==}(null) ?{core::num*} self::topLevelNum = self::getNum() : #t5;
-  core::num* v6 = let final core::num* #t6 = self::topLevelNum in #t6.{core::num::==}(null) ?{core::num*} self::topLevelNum = self::getDouble() : #t6;
-  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt());
-  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum());
-  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble());
-  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1);
-  core::num* v11 = let final core::num* #t7 = self::topLevelNum in let final core::num* #t8 = self::topLevelNum = #t7.{core::num::+}(1) in #t7;
+  core::num* v4 = let final core::num* #t4 = self::topLevelNum in #t4 == null ?{core::num*} self::topLevelNum = self::getInt() : #t4;
+  core::num* v5 = let final core::num* #t5 = self::topLevelNum in #t5 == null ?{core::num*} self::topLevelNum = self::getNum() : #t5;
+  core::num* v6 = let final core::num* #t6 = self::topLevelNum in #t6 == null ?{core::num*} self::topLevelNum = self::getDouble() : #t6;
+  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num*) →* core::num*};
+  core::num* v11 = let final core::num* #t7 = self::topLevelNum in let final core::num* #t8 = self::topLevelNum = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
 }
 static method test3() → void {
   core::double* v3 = self::topLevelDouble = self::getDouble();
-  core::double* v6 = let final core::double* #t9 = self::topLevelDouble in #t9.{core::num::==}(null) ?{core::double*} self::topLevelDouble = self::getDouble() : #t9;
-  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt());
-  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum());
-  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble());
-  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1);
-  core::double* v11 = let final core::double* #t10 = self::topLevelDouble in let final core::double* #t11 = self::topLevelDouble = #t10.{core::double::+}(1) in #t10;
+  core::double* v6 = let final core::double* #t9 = self::topLevelDouble in #t9 == null ?{core::double*} self::topLevelDouble = self::getDouble() : #t9;
+  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num*) →* core::double*};
+  core::double* v11 = let final core::double* #t10 = self::topLevelDouble in let final core::double* #t11 = self::topLevelDouble = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.expect
index 3797db6..2fd7b9e 100644
--- a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.expect
@@ -21,8 +21,8 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_add = new self::A::•().{self::A::+}("foo");
-static field core::double* v_minus = new self::A::•().{self::A::-}("bar");
+static field core::int* v_add = new self::A::•().{self::A::+}("foo"){(dynamic) →* core::int*};
+static field core::double* v_minus = new self::A::•().{self::A::-}("bar"){(dynamic) →* core::double*};
 static method main() → dynamic {
   self::v_add;
   self::v_minus;
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.transformed.expect
index 3797db6..2fd7b9e 100644
--- a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.transformed.expect
@@ -21,8 +21,8 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* v_add = new self::A::•().{self::A::+}("foo");
-static field core::double* v_minus = new self::A::•().{self::A::-}("bar");
+static field core::int* v_add = new self::A::•().{self::A::+}("foo"){(dynamic) →* core::int*};
+static field core::double* v_minus = new self::A::•().{self::A::-}("bar"){(dynamic) →* core::double*};
 static method main() → dynamic {
   self::v_add;
   self::v_minus;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.expect b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.expect
index ce38bb7..38be484 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.0.{core::num::==}(2.0);
-static field core::bool* a_notEqual = !1.0.{core::num::==}(2.0);
-static field core::double* a_add = 1.0.{core::double::+}(2.0);
-static field core::double* a_subtract = 1.0.{core::double::-}(2.0);
-static field core::double* a_multiply = 1.0.{core::double::*}(2.0);
-static field core::double* a_divide = 1.0.{core::double::/}(2.0);
-static field core::int* a_floorDivide = 1.0.{core::double::~/}(2.0);
-static field core::bool* a_greater = 1.0.{core::num::>}(2.0);
-static field core::bool* a_less = 1.0.{core::num::<}(2.0);
-static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2.0);
-static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2.0);
-static field core::double* a_modulo = 1.0.{core::double::%}(2.0);
+static field core::bool* a_equal = 1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2.0;
+static field core::bool* a_notEqual = !(1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2.0);
+static field core::double* a_add = 1.0.{core::double::+}(2.0){(core::num*) →* core::double*};
+static field core::double* a_subtract = 1.0.{core::double::-}(2.0){(core::num*) →* core::double*};
+static field core::double* a_multiply = 1.0.{core::double::*}(2.0){(core::num*) →* core::double*};
+static field core::double* a_divide = 1.0.{core::double::/}(2.0){(core::num*) →* core::double*};
+static field core::int* a_floorDivide = 1.0.{core::double::~/}(2.0){(core::num*) →* core::int*};
+static field core::bool* a_greater = 1.0.{core::num::>}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_less = 1.0.{core::num::<}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2.0){(core::num*) →* core::bool*};
+static field core::double* a_modulo = 1.0.{core::double::%}(2.0){(core::num*) →* core::double*};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.transformed.expect
index 944c9ba..b96f167 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.transformed.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.0.{core::num::==}(2.0);
-static field core::bool* a_notEqual = !1.0.{core::num::==}(2.0);
-static field core::double* a_add = 1.0.{core::double::+}(2.0);
-static field core::double* a_subtract = 1.0.{core::double::-}(2.0);
-static field core::double* a_multiply = 1.0.{core::double::*}(2.0);
-static field core::double* a_divide = 1.0.{core::double::/}(2.0);
-static field core::int* a_floorDivide = 1.0.{core::double::~/}(2.0);
-static field core::bool* a_greater = 1.0.{core::num::>}(2.0);
-static field core::bool* a_less = 1.0.{core::num::<}(2.0);
-static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2.0);
-static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2.0);
-static field core::double* a_modulo = 1.0.{core::double::%}(2.0);
+static field core::bool* a_equal = 1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2.0;
+static field core::bool* a_notEqual = !(1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2.0);
+static field core::double* a_add = 1.0.{core::double::+}(2.0){(core::num*) →* core::double*};
+static field core::double* a_subtract = 1.0.{core::double::-}(2.0){(core::num*) →* core::double*};
+static field core::double* a_multiply = 1.0.{core::double::*}(2.0){(core::num*) →* core::double*};
+static field core::double* a_divide = 1.0.{core::double::/}(2.0){(core::num*) →* core::double*};
+static field core::int* a_floorDivide = 1.0.{core::double::~/}(2.0){(core::num*) →* core::int*};
+static field core::bool* a_greater = 1.0.{core::num::>}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_less = 1.0.{core::num::<}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2.0){(core::num*) →* core::bool*};
+static field core::double* a_modulo = 1.0.{core::double::%}(2.0){(core::num*) →* core::double*};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
@@ -31,16 +31,16 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:8:38 -> BoolConstant(false)
+Evaluated: EqualsCall @ org-dartlang-testcase:///infer_binary_double_double.dart:8:38 -> BoolConstant(false)
 Evaluated: Not @ org-dartlang-testcase:///infer_binary_double_double.dart:9:41 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:10:38 -> DoubleConstant(3.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:11:43 -> DoubleConstant(-1.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:12:43 -> DoubleConstant(2.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:13:42 -> DoubleConstant(0.5)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:14:48 -> IntConstant(0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:15:39 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:16:36 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:17:45 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:18:42 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:19:41 -> DoubleConstant(1.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:10:38 -> DoubleConstant(3.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:11:43 -> DoubleConstant(-1.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:12:43 -> DoubleConstant(2.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:13:42 -> DoubleConstant(0.5)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:14:48 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:15:39 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:16:36 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:17:45 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:18:42 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_double.dart:19:41 -> DoubleConstant(1.0)
 Extra constant evaluation: evaluated: 24, effectively constant: 12
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.expect b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.expect
index 4fb5e69..1f62c1e 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.0.{core::num::==}(2);
-static field core::bool* a_notEqual = !1.0.{core::num::==}(2);
-static field core::double* a_add = 1.0.{core::double::+}(2);
-static field core::double* a_subtract = 1.0.{core::double::-}(2);
-static field core::double* a_multiply = 1.0.{core::double::*}(2);
-static field core::double* a_divide = 1.0.{core::double::/}(2);
-static field core::int* a_floorDivide = 1.0.{core::double::~/}(2);
-static field core::bool* a_greater = 1.0.{core::num::>}(2);
-static field core::bool* a_less = 1.0.{core::num::<}(2);
-static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2);
-static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2);
-static field core::double* a_modulo = 1.0.{core::double::%}(2);
+static field core::bool* a_equal = 1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2;
+static field core::bool* a_notEqual = !(1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2);
+static field core::double* a_add = 1.0.{core::double::+}(2){(core::num*) →* core::double*};
+static field core::double* a_subtract = 1.0.{core::double::-}(2){(core::num*) →* core::double*};
+static field core::double* a_multiply = 1.0.{core::double::*}(2){(core::num*) →* core::double*};
+static field core::double* a_divide = 1.0.{core::double::/}(2){(core::num*) →* core::double*};
+static field core::int* a_floorDivide = 1.0.{core::double::~/}(2){(core::num*) →* core::int*};
+static field core::bool* a_greater = 1.0.{core::num::>}(2){(core::num*) →* core::bool*};
+static field core::bool* a_less = 1.0.{core::num::<}(2){(core::num*) →* core::bool*};
+static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2){(core::num*) →* core::bool*};
+static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2){(core::num*) →* core::bool*};
+static field core::double* a_modulo = 1.0.{core::double::%}(2){(core::num*) →* core::double*};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.transformed.expect
index c3d3a34..046802e 100644
--- a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.transformed.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.0.{core::num::==}(2);
-static field core::bool* a_notEqual = !1.0.{core::num::==}(2);
-static field core::double* a_add = 1.0.{core::double::+}(2);
-static field core::double* a_subtract = 1.0.{core::double::-}(2);
-static field core::double* a_multiply = 1.0.{core::double::*}(2);
-static field core::double* a_divide = 1.0.{core::double::/}(2);
-static field core::int* a_floorDivide = 1.0.{core::double::~/}(2);
-static field core::bool* a_greater = 1.0.{core::num::>}(2);
-static field core::bool* a_less = 1.0.{core::num::<}(2);
-static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2);
-static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2);
-static field core::double* a_modulo = 1.0.{core::double::%}(2);
+static field core::bool* a_equal = 1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2;
+static field core::bool* a_notEqual = !(1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2);
+static field core::double* a_add = 1.0.{core::double::+}(2){(core::num*) →* core::double*};
+static field core::double* a_subtract = 1.0.{core::double::-}(2){(core::num*) →* core::double*};
+static field core::double* a_multiply = 1.0.{core::double::*}(2){(core::num*) →* core::double*};
+static field core::double* a_divide = 1.0.{core::double::/}(2){(core::num*) →* core::double*};
+static field core::int* a_floorDivide = 1.0.{core::double::~/}(2){(core::num*) →* core::int*};
+static field core::bool* a_greater = 1.0.{core::num::>}(2){(core::num*) →* core::bool*};
+static field core::bool* a_less = 1.0.{core::num::<}(2){(core::num*) →* core::bool*};
+static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2){(core::num*) →* core::bool*};
+static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2){(core::num*) →* core::bool*};
+static field core::double* a_modulo = 1.0.{core::double::%}(2){(core::num*) →* core::double*};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
@@ -31,16 +31,16 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:8:38 -> BoolConstant(false)
+Evaluated: EqualsCall @ org-dartlang-testcase:///infer_binary_double_int.dart:8:38 -> BoolConstant(false)
 Evaluated: Not @ org-dartlang-testcase:///infer_binary_double_int.dart:9:41 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:10:38 -> DoubleConstant(3.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:11:43 -> DoubleConstant(-1.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:12:43 -> DoubleConstant(2.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:13:42 -> DoubleConstant(0.5)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:14:48 -> IntConstant(0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:15:39 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:16:36 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:17:45 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:18:42 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:19:41 -> DoubleConstant(1.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:10:38 -> DoubleConstant(3.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:11:43 -> DoubleConstant(-1.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:12:43 -> DoubleConstant(2.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:13:42 -> DoubleConstant(0.5)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:14:48 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:15:39 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:16:36 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:17:45 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:18:42 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_double_int.dart:19:41 -> DoubleConstant(1.0)
 Extra constant evaluation: evaluated: 24, effectively constant: 12
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.expect b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.expect
index 29ba83c..1e26a3e 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.{core::num::==}(2.0);
-static field core::bool* a_notEqual = !1.{core::num::==}(2.0);
-static field core::double* a_add = 1.{core::num::+}(2.0);
-static field core::double* a_subtract = 1.{core::num::-}(2.0);
-static field core::double* a_multiply = 1.{core::num::*}(2.0);
-static field core::double* a_divide = 1.{core::num::/}(2.0);
-static field core::int* a_floorDivide = 1.{core::num::~/}(2.0);
-static field core::bool* a_greater = 1.{core::num::>}(2.0);
-static field core::bool* a_less = 1.{core::num::<}(2.0);
-static field core::bool* a_greaterEqual = 1.{core::num::>=}(2.0);
-static field core::bool* a_lessEqual = 1.{core::num::<=}(2.0);
-static field core::double* a_modulo = 1.{core::num::%}(2.0);
+static field core::bool* a_equal = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2.0;
+static field core::bool* a_notEqual = !(1 =={core::num::==}{(core::Object*) →* core::bool*} 2.0);
+static field core::double* a_add = 1.{core::num::+}(2.0){(core::num*) →* core::double*};
+static field core::double* a_subtract = 1.{core::num::-}(2.0){(core::num*) →* core::double*};
+static field core::double* a_multiply = 1.{core::num::*}(2.0){(core::num*) →* core::double*};
+static field core::double* a_divide = 1.{core::num::/}(2.0){(core::num*) →* core::double*};
+static field core::int* a_floorDivide = 1.{core::num::~/}(2.0){(core::num*) →* core::int*};
+static field core::bool* a_greater = 1.{core::num::>}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_less = 1.{core::num::<}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_greaterEqual = 1.{core::num::>=}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_lessEqual = 1.{core::num::<=}(2.0){(core::num*) →* core::bool*};
+static field core::double* a_modulo = 1.{core::num::%}(2.0){(core::num*) →* core::double*};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.transformed.expect
index c9a0c95..85e2e66 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.transformed.expect
@@ -2,18 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.{core::num::==}(2.0);
-static field core::bool* a_notEqual = !1.{core::num::==}(2.0);
-static field core::double* a_add = 1.{core::num::+}(2.0);
-static field core::double* a_subtract = 1.{core::num::-}(2.0);
-static field core::double* a_multiply = 1.{core::num::*}(2.0);
-static field core::double* a_divide = 1.{core::num::/}(2.0);
-static field core::int* a_floorDivide = 1.{core::num::~/}(2.0);
-static field core::bool* a_greater = 1.{core::num::>}(2.0);
-static field core::bool* a_less = 1.{core::num::<}(2.0);
-static field core::bool* a_greaterEqual = 1.{core::num::>=}(2.0);
-static field core::bool* a_lessEqual = 1.{core::num::<=}(2.0);
-static field core::double* a_modulo = 1.{core::num::%}(2.0);
+static field core::bool* a_equal = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2.0;
+static field core::bool* a_notEqual = !(1 =={core::num::==}{(core::Object*) →* core::bool*} 2.0);
+static field core::double* a_add = 1.{core::num::+}(2.0){(core::num*) →* core::double*};
+static field core::double* a_subtract = 1.{core::num::-}(2.0){(core::num*) →* core::double*};
+static field core::double* a_multiply = 1.{core::num::*}(2.0){(core::num*) →* core::double*};
+static field core::double* a_divide = 1.{core::num::/}(2.0){(core::num*) →* core::double*};
+static field core::int* a_floorDivide = 1.{core::num::~/}(2.0){(core::num*) →* core::int*};
+static field core::bool* a_greater = 1.{core::num::>}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_less = 1.{core::num::<}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_greaterEqual = 1.{core::num::>=}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_lessEqual = 1.{core::num::<=}(2.0){(core::num*) →* core::bool*};
+static field core::double* a_modulo = 1.{core::num::%}(2.0){(core::num*) →* core::double*};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
@@ -31,16 +31,16 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:8:36 -> BoolConstant(false)
+Evaluated: EqualsCall @ org-dartlang-testcase:///infer_binary_int_double.dart:8:36 -> BoolConstant(false)
 Evaluated: Not @ org-dartlang-testcase:///infer_binary_int_double.dart:9:39 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:10:33 -> DoubleConstant(3.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:11:38 -> DoubleConstant(-1.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:12:38 -> DoubleConstant(2.0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:13:37 -> DoubleConstant(0.5)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:14:43 -> IntConstant(0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:15:37 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:16:34 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:17:43 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:18:40 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:19:36 -> DoubleConstant(1.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:10:33 -> DoubleConstant(3.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:11:38 -> DoubleConstant(-1.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:12:38 -> DoubleConstant(2.0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:13:37 -> DoubleConstant(0.5)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:14:43 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:15:37 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:16:34 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:17:43 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:18:40 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_double.dart:19:36 -> DoubleConstant(1.0)
 Extra constant evaluation: evaluated: 24, effectively constant: 12
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.expect b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.expect
index bee4a3d..883662f 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.expect
@@ -2,23 +2,23 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.{core::num::==}(2);
-static field core::bool* a_notEqual = !1.{core::num::==}(2);
-static field core::int* a_bitXor = 1.{core::int::^}(2);
-static field core::int* a_bitAnd = 1.{core::int::&}(2);
-static field core::int* a_bitOr = 1.{core::int::|}(2);
-static field core::int* a_bitShiftRight = 1.{core::int::>>}(2);
-static field core::int* a_bitShiftLeft = 1.{core::int::<<}(2);
-static field core::int* a_add = 1.{core::num::+}(2);
-static field core::int* a_subtract = 1.{core::num::-}(2);
-static field core::int* a_multiply = 1.{core::num::*}(2);
-static field core::double* a_divide = 1.{core::num::/}(2);
-static field core::int* a_floorDivide = 1.{core::num::~/}(2);
-static field core::bool* a_greater = 1.{core::num::>}(2);
-static field core::bool* a_less = 1.{core::num::<}(2);
-static field core::bool* a_greaterEqual = 1.{core::num::>=}(2);
-static field core::bool* a_lessEqual = 1.{core::num::<=}(2);
-static field core::int* a_modulo = 1.{core::num::%}(2);
+static field core::bool* a_equal = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2;
+static field core::bool* a_notEqual = !(1 =={core::num::==}{(core::Object*) →* core::bool*} 2);
+static field core::int* a_bitXor = 1.{core::int::^}(2){(core::int*) →* core::int*};
+static field core::int* a_bitAnd = 1.{core::int::&}(2){(core::int*) →* core::int*};
+static field core::int* a_bitOr = 1.{core::int::|}(2){(core::int*) →* core::int*};
+static field core::int* a_bitShiftRight = 1.{core::int::>>}(2){(core::int*) →* core::int*};
+static field core::int* a_bitShiftLeft = 1.{core::int::<<}(2){(core::int*) →* core::int*};
+static field core::int* a_add = 1.{core::num::+}(2){(core::num*) →* core::int*};
+static field core::int* a_subtract = 1.{core::num::-}(2){(core::num*) →* core::int*};
+static field core::int* a_multiply = 1.{core::num::*}(2){(core::num*) →* core::int*};
+static field core::double* a_divide = 1.{core::num::/}(2){(core::num*) →* core::double*};
+static field core::int* a_floorDivide = 1.{core::num::~/}(2){(core::num*) →* core::int*};
+static field core::bool* a_greater = 1.{core::num::>}(2){(core::num*) →* core::bool*};
+static field core::bool* a_less = 1.{core::num::<}(2){(core::num*) →* core::bool*};
+static field core::bool* a_greaterEqual = 1.{core::num::>=}(2){(core::num*) →* core::bool*};
+static field core::bool* a_lessEqual = 1.{core::num::<=}(2){(core::num*) →* core::bool*};
+static field core::int* a_modulo = 1.{core::num::%}(2){(core::num*) →* core::int*};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.transformed.expect
index e0f1ccf..650dde3 100644
--- a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.transformed.expect
@@ -2,23 +2,23 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::bool* a_equal = 1.{core::num::==}(2);
-static field core::bool* a_notEqual = !1.{core::num::==}(2);
-static field core::int* a_bitXor = 1.{core::int::^}(2);
-static field core::int* a_bitAnd = 1.{core::int::&}(2);
-static field core::int* a_bitOr = 1.{core::int::|}(2);
-static field core::int* a_bitShiftRight = 1.{core::int::>>}(2);
-static field core::int* a_bitShiftLeft = 1.{core::int::<<}(2);
-static field core::int* a_add = 1.{core::num::+}(2);
-static field core::int* a_subtract = 1.{core::num::-}(2);
-static field core::int* a_multiply = 1.{core::num::*}(2);
-static field core::double* a_divide = 1.{core::num::/}(2);
-static field core::int* a_floorDivide = 1.{core::num::~/}(2);
-static field core::bool* a_greater = 1.{core::num::>}(2);
-static field core::bool* a_less = 1.{core::num::<}(2);
-static field core::bool* a_greaterEqual = 1.{core::num::>=}(2);
-static field core::bool* a_lessEqual = 1.{core::num::<=}(2);
-static field core::int* a_modulo = 1.{core::num::%}(2);
+static field core::bool* a_equal = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2;
+static field core::bool* a_notEqual = !(1 =={core::num::==}{(core::Object*) →* core::bool*} 2);
+static field core::int* a_bitXor = 1.{core::int::^}(2){(core::int*) →* core::int*};
+static field core::int* a_bitAnd = 1.{core::int::&}(2){(core::int*) →* core::int*};
+static field core::int* a_bitOr = 1.{core::int::|}(2){(core::int*) →* core::int*};
+static field core::int* a_bitShiftRight = 1.{core::int::>>}(2){(core::int*) →* core::int*};
+static field core::int* a_bitShiftLeft = 1.{core::int::<<}(2){(core::int*) →* core::int*};
+static field core::int* a_add = 1.{core::num::+}(2){(core::num*) →* core::int*};
+static field core::int* a_subtract = 1.{core::num::-}(2){(core::num*) →* core::int*};
+static field core::int* a_multiply = 1.{core::num::*}(2){(core::num*) →* core::int*};
+static field core::double* a_divide = 1.{core::num::/}(2){(core::num*) →* core::double*};
+static field core::int* a_floorDivide = 1.{core::num::~/}(2){(core::num*) →* core::int*};
+static field core::bool* a_greater = 1.{core::num::>}(2){(core::num*) →* core::bool*};
+static field core::bool* a_less = 1.{core::num::<}(2){(core::num*) →* core::bool*};
+static field core::bool* a_greaterEqual = 1.{core::num::>=}(2){(core::num*) →* core::bool*};
+static field core::bool* a_lessEqual = 1.{core::num::<=}(2){(core::num*) →* core::bool*};
+static field core::int* a_modulo = 1.{core::num::%}(2){(core::num*) →* core::int*};
 static method main() → dynamic {
   self::a_equal;
   self::a_notEqual;
@@ -41,21 +41,21 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:8:36 -> BoolConstant(false)
+Evaluated: EqualsCall @ org-dartlang-testcase:///infer_binary_int_int.dart:8:36 -> BoolConstant(false)
 Evaluated: Not @ org-dartlang-testcase:///infer_binary_int_int.dart:9:39 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:10:36 -> IntConstant(3)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:11:36 -> IntConstant(0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:12:35 -> IntConstant(3)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:13:44 -> IntConstant(0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:14:43 -> IntConstant(4)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:15:33 -> IntConstant(3)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:16:38 -> IntConstant(-1)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:17:38 -> IntConstant(2)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:18:37 -> DoubleConstant(0.5)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:19:43 -> IntConstant(0)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:20:37 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:21:34 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:22:43 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:23:40 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:24:36 -> IntConstant(1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:10:36 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:11:36 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:12:35 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:13:44 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:14:43 -> IntConstant(4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:15:33 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:16:38 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:17:38 -> IntConstant(2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:18:37 -> DoubleConstant(0.5)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:19:43 -> IntConstant(0)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:20:37 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:21:34 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:22:43 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:23:40 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_binary_int_int.dart:24:36 -> IntConstant(1)
 Extra constant evaluation: evaluated: 34, effectively constant: 17
diff --git a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.expect b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.expect
index d539e95..b2128b8 100644
--- a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::num* a = 1.{core::num::==}(2) ?{core::num*} 1 : 2.0;
-static field core::num* b = 1.{core::num::==}(2) ?{core::num*} 1.0 : 2;
+static field core::num* a = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::num*} 1 : 2.0;
+static field core::num* b = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::num*} 1.0 : 2;
 static method main() → dynamic {
   self::a;
   self::b;
diff --git a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.transformed.expect
index c348897..cf7cb3e 100644
--- a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::num* a = 1.{core::num::==}(2) ?{core::num*} 1 : 2.0;
-static field core::num* b = 1.{core::num::==}(2) ?{core::num*} 1.0 : 2;
+static field core::num* a = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::num*} 1 : 2.0;
+static field core::num* b = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::num*} 1.0 : 2;
 static method main() → dynamic {
   self::a;
   self::b;
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.expect
index 252bf92..c0c88a8 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.expect
@@ -57,19 +57,19 @@
 static method foo() → dynamic {
   core::String* s;
   core::int* i;
-  s = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  s = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
   s = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.y*/ y;
-                                                            ^" in new self::B::•().{self::B::y} as{TypeError} core::String*;
-  s = new self::B::•().{self::B::z};
+                                                            ^" in new self::B::•().{self::B::y}{core::int*} as{TypeError} core::String*;
+  s = new self::B::•().{self::B::z}{core::String*};
   s = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.w*/ w;
-                                                            ^" in new self::B::•().{self::B::w} as{TypeError} core::String*;
-  i = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
-  i = new self::B::•().{self::B::y};
+                                                            ^" in new self::B::•().{self::B::w}{core::int*} as{TypeError} core::String*;
+  i = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  i = new self::B::•().{self::B::y}{core::int*};
   i = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.z*/ z;
-                                                            ^" in new self::B::•().{self::B::z} as{TypeError} core::int*;
-  i = new self::B::•().{self::B::w};
+                                                            ^" in new self::B::•().{self::B::z}{core::String*} as{TypeError} core::int*;
+  i = new self::B::•().{self::B::w}{core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.transformed.expect
index 252bf92..c0c88a8 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.transformed.expect
@@ -57,19 +57,19 @@
 static method foo() → dynamic {
   core::String* s;
   core::int* i;
-  s = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  s = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
   s = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.y*/ y;
-                                                            ^" in new self::B::•().{self::B::y} as{TypeError} core::String*;
-  s = new self::B::•().{self::B::z};
+                                                            ^" in new self::B::•().{self::B::y}{core::int*} as{TypeError} core::String*;
+  s = new self::B::•().{self::B::z}{core::String*};
   s = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.w*/ w;
-                                                            ^" in new self::B::•().{self::B::w} as{TypeError} core::String*;
-  i = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
-  i = new self::B::•().{self::B::y};
+                                                            ^" in new self::B::•().{self::B::w}{core::int*} as{TypeError} core::String*;
+  i = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  i = new self::B::•().{self::B::y}{core::int*};
   i = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.z*/ z;
-                                                            ^" in new self::B::•().{self::B::z} as{TypeError} core::int*;
-  i = new self::B::•().{self::B::w};
+                                                            ^" in new self::B::•().{self::B::z}{core::String*} as{TypeError} core::int*;
+  i = new self::B::•().{self::B::w}{core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.expect
index fef4a0f..1e12aec 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.expect
@@ -112,9 +112,9 @@
 static field self::A* e = let final self::A* #t1 = new self::A::•() in block {
   #t1.{self::A::x} = 3;
 } =>#t1;
-static field core::int* f = 2.{core::num::+}(3);
-static field core::int* g = 3.{core::int::unary-}();
-static field self::B* h = new self::A::•().{self::A::+}(3);
+static field core::int* f = 2.{core::num::+}(3){(core::num*) →* core::int*};
+static field core::int* g = 3.{core::int::unary-}(){() →* core::int*};
+static field self::B* h = new self::A::•().{self::A::+}(3){(dynamic) →* self::B*};
 static field dynamic i = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The operator 'unary-' isn't defined for the class 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.transformed.expect
index 57cf06b..0cc2a2f 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.transformed.expect
@@ -112,9 +112,9 @@
 static field self::A* e = let final self::A* #t1 = new self::A::•() in block {
   #t1.{self::A::x} = 3;
 } =>#t1;
-static field core::int* f = 2.{core::num::+}(3);
-static field core::int* g = 3.{core::int::unary-}();
-static field self::B* h = new self::A::•().{self::A::+}(3);
+static field core::int* f = 2.{core::num::+}(3){(core::num*) →* core::int*};
+static field core::int* g = 3.{core::int::unary-}(){() →* core::int*};
+static field self::B* h = new self::A::•().{self::A::+}(3){(dynamic) →* self::B*};
 static field dynamic i = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The operator 'unary-' isn't defined for the class 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
 Try correcting the operator to an existing operator, or defining a 'unary-' operator.
@@ -191,6 +191,6 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_from_complex_expressions_if_outer_most_value_is_precise.dart:27:25 -> IntConstant(5)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_from_complex_expressions_if_outer_most_value_is_precise.dart:30:32 -> IntConstant(-3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_from_complex_expressions_if_outer_most_value_is_precise.dart:27:25 -> IntConstant(5)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_from_complex_expressions_if_outer_most_value_is_precise.dart:30:32 -> IntConstant(-3)
 Extra constant evaluation: evaluated: 74, effectively constant: 2
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.expect
index 71aa0dc..8b4fa52 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.expect
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
+  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.transformed.expect
index 71aa0dc..8b4fa52 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
+  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.expect
index 009838f..d5127a5 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.expect
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
+  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.transformed.expect
index 009838f..d5127a5 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
+  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.expect
index 7d80c98..6d31625 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, b: "bbb", c: 2.0);
+  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, b: "bbb", c: 2.0){(core::int*, {b: core::String*, c: core::double*}) →* core::double*};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.transformed.expect
index 7d80c98..6d31625 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, b: "bbb", c: 2.0);
+  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, b: "bbb", c: 2.0){(core::int*, {b: core::String*, c: core::double*}) →* core::double*};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.expect
index db66ee8..5c86982 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, 2.0);
+  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, 2.0){(core::int*, [core::double*]) →* core::double*};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.transformed.expect
index db66ee8..5c86982 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, 2.0);
+  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, 2.0){(core::int*, [core::double*]) →* core::double*};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.expect
index 3f647fc..7af5aa7 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, "bbb", 2.0);
+  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, "bbb", 2.0){(core::int*, [core::String*, core::double*]) →* core::double*};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.transformed.expect
index 3f647fc..7af5aa7 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, "bbb", 2.0);
+  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, "bbb", 2.0){(core::int*, [core::String*, core::double*]) →* core::double*};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.expect
index 83c7b4f..4435be3 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.expect
@@ -20,5 +20,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::int* y = new self::C::•().{self::C::m}<core::int*>(42);
+  core::int* y = new self::C::•().{self::C::m}<core::int*>(42){(core::int*) →* core::int*};
 }
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.transformed.expect
index 83c7b4f..4435be3 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.transformed.expect
@@ -20,5 +20,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::int* y = new self::C::•().{self::C::m}<core::int*>(42);
+  core::int* y = new self::C::•().{self::C::m}<core::int*>(42){(core::int*) →* core::int*};
 }
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.expect
index 1f0c1f2..eb05a20 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.expect
@@ -23,9 +23,9 @@
   function f6() → core::num*
     return 42;
   function f7() → dynamic
-    return f7.call();
+    return f7(){() →* dynamic};
   function f8() → asy::Stream<core::int*>*
-    return f5.call();
+    return f5(){() →* asy::Stream<core::int*>*};
   () →* core::int* v0 = f0;
   () →* asy::Future<core::int*>* v1 = f1;
   () →* core::int* v2 = f2;
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
index eeeccd2..618d97a 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
@@ -116,9 +116,9 @@
   function f6() → core::num*
     return 42;
   function f7() → dynamic
-    return f7.call();
+    return f7(){() →* dynamic};
   function f8() → asy::Stream<core::int*>*
-    return f5.call();
+    return f5(){() →* asy::Stream<core::int*>*};
   () →* core::int* v0 = f0;
   () →* asy::Future<core::int*>* v1 = f1;
   () →* core::int* v2 = f2;
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.expect
index d6e4379..abae228 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.expect
@@ -28,6 +28,6 @@
 static method f<T extends core::Object* = dynamic>() → self::f::T*
   return null;
 static method g(self::B* b) → dynamic {
-  b.{self::B::x}(self::f<() →* dynamic>());
+  b.{self::B::x}(self::f<() →* dynamic>()){(() →* dynamic) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.transformed.expect
index d6e4379..abae228 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.transformed.expect
@@ -28,6 +28,6 @@
 static method f<T extends core::Object* = dynamic>() → self::f::T*
   return null;
 static method g(self::B* b) → dynamic {
-  b.{self::B::x}(self::f<() →* dynamic>());
+  b.{self::B::x}(self::f<() →* dynamic>()){(() →* dynamic) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.expect b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.expect
index 4d5f369..ec7b742 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 static field core::bool* a_not = !true;
-static field core::int* a_complement = 1.{core::int::~}();
-static field core::int* a_negate = 1.{core::int::unary-}();
+static field core::int* a_complement = 1.{core::int::~}(){() →* core::int*};
+static field core::int* a_negate = 1.{core::int::unary-}(){() →* core::int*};
 static method main() → dynamic {
   self::a_not;
   self::a_complement;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.transformed.expect
index d0e0ac7..23ef7a8 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.transformed.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 static field core::bool* a_not = !true;
-static field core::int* a_complement = 1.{core::int::~}();
-static field core::int* a_negate = 1.{core::int::unary-}();
+static field core::int* a_complement = 1.{core::int::~}(){() →* core::int*};
+static field core::int* a_negate = 1.{core::int::unary-}(){() →* core::int*};
 static method main() → dynamic {
   self::a_not;
   self::a_complement;
@@ -14,6 +14,6 @@
 
 Extra constant evaluation status:
 Evaluated: Not @ org-dartlang-testcase:///infer_prefix_expression.dart:8:13 -> BoolConstant(false)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_prefix_expression.dart:9:38 -> IntConstant(-2)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///infer_prefix_expression.dart:10:39 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_prefix_expression.dart:9:38 -> IntConstant(-2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///infer_prefix_expression.dart:10:39 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 6, effectively constant: 3
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.expect b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.expect
index 0e5d070..2c6f832 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.expect
@@ -22,8 +22,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::A* a = new self::A::•();
-static field core::int* v_complement = self::a.{self::A::~}();
-static field core::double* v_negate = self::a.{self::A::unary-}();
+static field core::int* v_complement = self::a.{self::A::~}(){() →* core::int*};
+static field core::double* v_negate = self::a.{self::A::unary-}(){() →* core::double*};
 static method main() → dynamic {
   self::a;
   self::v_complement;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.transformed.expect
index 0e5d070..2c6f832 100644
--- a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.transformed.expect
@@ -22,8 +22,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::A* a = new self::A::•();
-static field core::int* v_complement = self::a.{self::A::~}();
-static field core::double* v_negate = self::a.{self::A::unary-}();
+static field core::int* v_complement = self::a.{self::A::~}(){() →* core::int*};
+static field core::double* v_negate = self::a.{self::A::unary-}(){() →* core::double*};
 static method main() → dynamic {
   self::a;
   self::v_complement;
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.expect b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.expect
index b45d3019..1e36c8b 100644
--- a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.expect
@@ -3,10 +3,10 @@
 
 static method test(() →* dynamic f, () →* dynamic g) → dynamic {
   try {
-    f.call();
+    f(){() →* dynamic};
   }
   on dynamic catch(final dynamic _) {
-    g.call();
+    g(){() →* dynamic};
     rethrow;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.transformed.expect
index b45d3019..1e36c8b 100644
--- a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.transformed.expect
@@ -3,10 +3,10 @@
 
 static method test(() →* dynamic f, () →* dynamic g) → dynamic {
   try {
-    f.call();
+    f(){() →* dynamic};
   }
   on dynamic catch(final dynamic _) {
-    g.call();
+    g(){() →* dynamic};
     rethrow;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.expect b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.expect
index e547269..cdbf9e5 100644
--- a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.expect
@@ -5,8 +5,8 @@
 static method strings() → core::List<core::String*>* {
   core::Iterable<core::String*>* stuff = <dynamic>[].{core::Iterable::expand}<core::String*>((dynamic i) → core::List<core::String*>* {
     return <core::String*>[];
-  });
-  return stuff.{core::Iterable::toList}();
+  }){((dynamic) →* core::Iterable<core::String*>*) →* core::Iterable<core::String*>*};
+  return stuff.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
 }
 static method main() → dynamic {
   self::strings();
diff --git a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.transformed.expect
index e0d92ec..02da645 100644
--- a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.transformed.expect
@@ -5,8 +5,8 @@
 static method strings() → core::List<core::String*>* {
   core::Iterable<core::String*>* stuff = core::_GrowableList::•<dynamic>(0).{core::Iterable::expand}<core::String*>((dynamic i) → core::List<core::String*>* {
     return core::_GrowableList::•<core::String*>(0);
-  });
-  return stuff.{core::Iterable::toList}();
+  }){((dynamic) →* core::Iterable<core::String*>*) →* core::Iterable<core::String*>*};
+  return stuff.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
 }
 static method main() → dynamic {
   self::strings();
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.expect
index e76572a..7306671 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.expect
@@ -35,7 +35,7 @@
 static method foo() → dynamic {
   core::String* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.transformed.expect
index e76572a..7306671 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 static method foo() → dynamic {
   core::String* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.expect
index d06646f..357a311 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.expect
@@ -45,7 +45,7 @@
 static method foo() → dynamic {
   core::String* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.transformed.expect
index d06646f..357a311 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
 static method foo() → dynamic {
   core::String* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.expect
index ab91a2b..8674afe 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.expect
@@ -25,17 +25,17 @@
     : super core::Object::•()
     ;
   method test1() → dynamic {
-    core::int* a = this.{self::A::x};
+    core::int* a = this.{self::A::x}{core::int*};
     a = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
     a = 3;
-    core::int* b = this.{self::A::y};
+    core::int* b = this.{self::A::y}{core::int*};
     b = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
     b = 4;
-    core::int* c = this.{self::A::z};
+    core::int* c = this.{self::A::z}{core::int*};
     c = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.transformed.expect
index ab91a2b..8674afe 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.transformed.expect
@@ -25,17 +25,17 @@
     : super core::Object::•()
     ;
   method test1() → dynamic {
-    core::int* a = this.{self::A::x};
+    core::int* a = this.{self::A::x}{core::int*};
     a = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
     a = 3;
-    core::int* b = this.{self::A::y};
+    core::int* b = this.{self::A::y}{core::int*};
     b = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
     b = 4;
-    core::int* c = this.{self::A::z};
+    core::int* c = this.{self::A::z}{core::int*};
     c = let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in "hi" as{TypeError} core::int*;
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.expect
index 7f0fd1d..247bcf0 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.expect
@@ -37,10 +37,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::int* y = new self::C::•().{self::C::x};
+  core::int* y = new self::C::•().{self::C::x}{core::int*};
   core::String* z = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
-                                                                   ^" in new self::C::•().{self::C::x} as{TypeError} core::String*;
+                                                                   ^" in new self::C::•().{self::C::x}{core::int*} as{TypeError} core::String*;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.transformed.expect
index 7f0fd1d..247bcf0 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.transformed.expect
@@ -37,10 +37,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::int* y = new self::C::•().{self::C::x};
+  core::int* y = new self::C::•().{self::C::x}{core::int*};
   core::String* z = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
-                                                                   ^" in new self::C::•().{self::C::x} as{TypeError} core::String*;
+                                                                   ^" in new self::C::•().{self::C::x}{core::int*} as{TypeError} core::String*;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.expect
index c34888f..ebbcf90 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.expect
@@ -50,10 +50,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::int* y = new test::C::•().{test::C::x};
+  core::int* y = new test::C::•().{test::C::x}{core::int*};
   core::String* z = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
-                                                                   ^" in new test::C::•().{test::C::x} as{TypeError} core::String*;
+                                                                   ^" in new test::C::•().{test::C::x}{core::int*} as{TypeError} core::String*;
 }
 static method main() → dynamic {
   test::foo();
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.transformed.expect
index c34888f..ebbcf90 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.transformed.expect
@@ -50,10 +50,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::int* y = new test::C::•().{test::C::x};
+  core::int* y = new test::C::•().{test::C::x}{core::int*};
   core::String* z = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
-                                                                   ^" in new test::C::•().{test::C::x} as{TypeError} core::String*;
+                                                                   ^" in new test::C::•().{test::C::x}{core::int*} as{TypeError} core::String*;
 }
 static method main() → dynamic {
   test::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.expect
index 2395853..0dfdff3 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.expect
@@ -54,7 +54,7 @@
 static method foo() → dynamic {
   core::String* y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.transformed.expect
index 2395853..0dfdff3 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.transformed.expect
@@ -54,7 +54,7 @@
 static method foo() → dynamic {
   core::String* y = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
-                                                                   ^" in new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x};
+                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect
index b8c9b32..4c24549 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect
@@ -31,13 +31,13 @@
     : super self::A::•()
     ;
   get x() → self::B::E*
-    return this.{self::B::y};
+    return this.{self::B::y}{self::B::E*};
 }
 static method foo() → dynamic {
   core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B.x*/ x;
-                                                                        ^" in new self::B::•<core::String*>().{self::B::x} as{TypeError} core::int*;
-  core::String* z = new self::B::•<core::String*>().{self::B::x};
+                                                                        ^" in new self::B::•<core::String*>().{self::B::x}{core::String*} as{TypeError} core::int*;
+  core::String* z = new self::B::•<core::String*>().{self::B::x}{core::String*};
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect
index b8c9b32..4c24549 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect
@@ -31,13 +31,13 @@
     : super self::A::•()
     ;
   get x() → self::B::E*
-    return this.{self::B::y};
+    return this.{self::B::y}{self::B::E*};
 }
 static method foo() → dynamic {
   core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B.x*/ x;
-                                                                        ^" in new self::B::•<core::String*>().{self::B::x} as{TypeError} core::int*;
-  core::String* z = new self::B::•<core::String*>().{self::B::x};
+                                                                        ^" in new self::B::•<core::String*>().{self::B::x}{core::String*} as{TypeError} core::int*;
+  core::String* z = new self::B::•<core::String*>().{self::B::x}{core::String*};
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.expect
index 191aea3..f76b260 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.expect
@@ -68,7 +68,7 @@
 static method foo() → dynamic {
   core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=B.m*/ m(null, null);
-                        ^" in new self::B::•<dynamic>().{self::B::m}(null, null) as{TypeError} core::int*;
-  core::String* z = new self::B::•<dynamic>().{self::B::m}(null, null);
+                        ^" in new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*} as{TypeError} core::int*;
+  core::String* z = new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.transformed.expect
index 191aea3..f76b260 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.transformed.expect
@@ -68,7 +68,7 @@
 static method foo() → dynamic {
   core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=B.m*/ m(null, null);
-                        ^" in new self::B::•<dynamic>().{self::B::m}(null, null) as{TypeError} core::int*;
-  core::String* z = new self::B::•<dynamic>().{self::B::m}(null, null);
+                        ^" in new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*} as{TypeError} core::int*;
+  core::String* z = new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.expect
index 4bbdc0c..b156e85 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.expect
@@ -55,8 +55,8 @@
 static method foo() → dynamic {
   core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
-                            ^" in new self::B::•<core::String*>().{self::B::m}(null, null).{self::A::value} as{TypeError} core::int*;
-  core::String* z = new self::B::•<core::String*>().{self::B::m}(null, null).{self::A::value};
+                            ^" in new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*} as{TypeError} core::int*;
+  core::String* z = new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.transformed.expect
index 4bbdc0c..b156e85 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.transformed.expect
@@ -55,8 +55,8 @@
 static method foo() → dynamic {
   core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
-                            ^" in new self::B::•<core::String*>().{self::B::m}(null, null).{self::A::value} as{TypeError} core::int*;
-  core::String* z = new self::B::•<core::String*>().{self::B::m}(null, null).{self::A::value};
+                            ^" in new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*} as{TypeError} core::int*;
+  core::String* z = new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.expect
index a65779d..5764bd1 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.expect
@@ -80,7 +80,7 @@
 static method foo() → dynamic {
   core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
-                            ^" in new test::B::•<core::String*>().{test::B::m}(null, null).{test::A::value} as{TypeError} core::int*;
-  core::String* z = new test::B::•<core::String*>().{test::B::m}(null, null).{test::A::value};
+                            ^" in new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*} as{TypeError} core::int*;
+  core::String* z = new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.transformed.expect
index a65779d..5764bd1 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.transformed.expect
@@ -80,7 +80,7 @@
 static method foo() → dynamic {
   core::int* y = let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       . /*@target=A.value*/ value;
-                            ^" in new test::B::•<core::String*>().{test::B::m}(null, null).{test::A::value} as{TypeError} core::int*;
-  core::String* z = new test::B::•<core::String*>().{test::B::m}(null, null).{test::A::value};
+                            ^" in new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*} as{TypeError} core::int*;
+  core::String* z = new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.expect
index 5d3812b..bd1fcf0 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.expect
@@ -47,8 +47,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
+  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect
index 0b511ab..086fb1f690 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect
@@ -135,7 +135,7 @@
                                                                      ^" in map as{TypeError} core::Iterable<dynamic>*) {
     core::String* y = x as{TypeError,ForDynamic} core::String*;
   }
-  for (core::String* x in map.{core::Map::keys}) {
+  for (core::String* x in map.{core::Map::keys}{core::Iterable<core::String*>*}) {
     core::String* y = x;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect
index 37f2947..06bfe90 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect
@@ -190,7 +190,7 @@
     }
   }
   {
-    core::Iterator<core::String*>* :sync-for-iterator = map.{core::Map::keys}.{core::Iterable::iterator};
+    core::Iterator<core::String*>* :sync-for-iterator = map.{core::Map::keys}{core::Iterable<core::String*>*}.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       core::String* x = :sync-for-iterator.{core::Iterator::current};
       {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.expect
index 2dd29d2..22c972f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 static method test() → dynamic {
-  for (core::int* i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
-    core::int* j = i.{core::num::+}(1);
+  for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    core::int* j = i.{core::num::+}(1){(core::num*) →* core::int*};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.transformed.expect
index 2dd29d2..22c972f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.transformed.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 static method test() → dynamic {
-  for (core::int* i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
-    core::int* j = i.{core::num::+}(1);
+  for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    core::int* j = i.{core::num::+}(1){(core::num*) →* core::int*};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.expect
index 60680eb..e5b98d2 100644
--- a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.expect
@@ -22,7 +22,7 @@
 }
 static field self::A* v = let final self::A* #t1 = new self::A::•() in block {
   #t1.{self::A::a} = 1;
-  #t1.{self::A::b}.{core::List::add}(2);
-  #t1.{self::A::m}();
+  #t1.{self::A::b}{core::List<core::int*>*}.{core::List::add}(2){(core::int*) →* void};
+  #t1.{self::A::m}(){() →* void};
 } =>#t1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.transformed.expect
index 60680eb..e5b98d2 100644
--- a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
 }
 static field self::A* v = let final self::A* #t1 = new self::A::•() in block {
   #t1.{self::A::a} = 1;
-  #t1.{self::A::b}.{core::List::add}(2);
-  #t1.{self::A::m}();
+  #t1.{self::A::b}{core::List<core::int*>*}.{core::List::add}(2){(core::int*) →* void};
+  #t1.{self::A::m}(){() →* void};
 } =>#t1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.expect
index 7aed2ea..83b4e3b 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c = new self::C::•();
-static field core::bool* x = self::c.{self::C::*}(self::c);
+static field core::bool* x = self::c.{self::C::*}(self::c){(self::C*) →* core::bool*};
 static method main() → dynamic {
   self::c;
   self::x;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.transformed.expect
index 7aed2ea..83b4e3b 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c = new self::C::•();
-static field core::bool* x = self::c.{self::C::*}(self::c);
+static field core::bool* x = self::c.{self::C::*}(self::c){(self::C*) →* core::bool*};
 static method main() → dynamic {
   self::c;
   self::x;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.expect
index d635197..6764bc5 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.expect
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c;
-static field core::bool* x = self::c.{self::I::*}(self::c);
+static field core::bool* x = self::c.{self::I::*}(self::c){(self::C*) →* core::bool*};
 static method main() → dynamic {
   self::c;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.transformed.expect
index d635197..6764bc5 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c;
-static field core::bool* x = self::c.{self::I::*}(self::c);
+static field core::bool* x = self::c.{self::I::*}(self::c){(self::C*) →* core::bool*};
 static method main() → dynamic {
   self::c;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.expect
index 35a9cbd..250adf8 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.expect
@@ -21,5 +21,5 @@
 }
 static method main() → dynamic {
   self::C* c = new self::C::•();
-  core::bool* x = c.{self::C::[]}(0);
+  core::bool* x = c.{self::C::[]}(0){(core::int*) →* core::bool*};
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.transformed.expect
index 35a9cbd..250adf8 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.transformed.expect
@@ -21,5 +21,5 @@
 }
 static method main() → dynamic {
   self::C* c = new self::C::•();
-  core::bool* x = c.{self::C::[]}(0);
+  core::bool* x = c.{self::C::[]}(0){(core::int*) →* core::bool*};
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.expect
index 7718f6d..007c0cd 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.expect
@@ -36,6 +36,6 @@
 }
 static method f() → dynamic {
   self::C* c;
-  core::bool* x = c.{self::I::[]}(0);
+  core::bool* x = c.{self::I::[]}(0){(core::int*) →* core::bool*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.transformed.expect
index 7718f6d..007c0cd 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.transformed.expect
@@ -36,6 +36,6 @@
 }
 static method f() → dynamic {
   self::C* c;
-  core::bool* x = c.{self::I::[]}(0);
+  core::bool* x = c.{self::I::[]}(0){(core::int*) →* core::bool*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.expect
index 3eb9975..d0c4a3c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c = new self::C::•();
-static field core::bool* x = self::c.{self::C::unary-}();
+static field core::bool* x = self::c.{self::C::unary-}(){() →* core::bool*};
 static method main() → dynamic {
   self::c;
   self::x;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.transformed.expect
index 3eb9975..d0c4a3c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c = new self::C::•();
-static field core::bool* x = self::c.{self::C::unary-}();
+static field core::bool* x = self::c.{self::C::unary-}(){() →* core::bool*};
 static method main() → dynamic {
   self::c;
   self::x;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.expect
index 1ff6822..443ba4b 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.expect
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c;
-static field core::bool* x = self::c.{self::I::unary-}();
+static field core::bool* x = self::c.{self::I::unary-}(){() →* core::bool*};
 static method main() → dynamic {
   self::c;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.transformed.expect
index 1ff6822..443ba4b 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c;
-static field core::bool* x = self::c.{self::I::unary-}();
+static field core::bool* x = self::c.{self::I::unary-}(){() →* core::bool*};
 static method main() → dynamic {
   self::c;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.expect
index eb6d5a1..909f982 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.expect
@@ -19,7 +19,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field () →* core::bool* x = self::f().{self::C::g};
+static field () →* core::bool* x = self::f().{self::C::g}{() →* core::bool*};
 static method f() → self::C*
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.transformed.expect
index eb6d5a1..909f982 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field () →* core::bool* x = self::f().{self::C::g};
+static field () →* core::bool* x = self::f().{self::C::g}{() →* core::bool*};
 static method f() → self::C*
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.expect
index c382762..a162c11 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.expect
@@ -34,7 +34,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field () →* core::bool* x = self::f().{self::I::g};
+static field () →* core::bool* x = self::f().{self::I::g}{() →* core::bool*};
 static method f() → self::C*
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.transformed.expect
index c382762..a162c11 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field () →* core::bool* x = self::f().{self::I::g};
+static field () →* core::bool* x = self::f().{self::I::g}{() →* core::bool*};
 static method f() → self::C*
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.expect
index e853c1f..429fa8a 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.expect
@@ -19,7 +19,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::bool* x = self::f().{self::C::g}();
+static field core::bool* x = self::f().{self::C::g}(){() →* core::bool*};
 static method f() → self::C*
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.transformed.expect
index e853c1f..429fa8a 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::bool* x = self::f().{self::C::g}();
+static field core::bool* x = self::f().{self::C::g}(){() →* core::bool*};
 static method f() → self::C*
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.expect
index 13f3418..c694d88 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.expect
@@ -34,7 +34,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::bool* x = self::f().{self::I::g}();
+static field core::bool* x = self::f().{self::I::g}(){() →* core::bool*};
 static method f() → self::C*
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.transformed.expect
index 13f3418..c694d88 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::bool* x = self::f().{self::I::g}();
+static field core::bool* x = self::f().{self::I::g}(){() →* core::bool*};
 static method f() → self::C*
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
index 7fcd694..b8edb82 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
@@ -11,7 +11,7 @@
     : self::E::index = index, self::E::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::E::_name};
+    return this.{self::E::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.outline.expect
index a5b5992..e92663e 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.outline.expect
@@ -11,7 +11,7 @@
     : self::E::index = index, self::E::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::E::_name};
+    return this.{self::E::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
index 7fcd694..b8edb82 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
     : self::E::index = index, self::E::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::E::_name};
+    return this.{self::E::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
index 2c64c5a..5bb945f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
@@ -11,7 +11,7 @@
     : self::E::index = index, self::E::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::E::_name};
+    return this.{self::E::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.outline.expect
index 8aa2841..4584120 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.outline.expect
@@ -11,7 +11,7 @@
     : self::E::index = index, self::E::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::E::_name};
+    return this.{self::E::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
index 2c64c5a..5bb945f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
     : self::E::index = index, self::E::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::E::_name};
+    return this.{self::E::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.expect
index 02d037c..7b33a23 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.expect
@@ -51,5 +51,5 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* y = new self::C::•().{self::C::x};
+static field core::int* y = new self::C::•().{self::C::x}{core::int*};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.transformed.expect
index 02d037c..7b33a23 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.transformed.expect
@@ -51,5 +51,5 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* y = new self::C::•().{self::C::x};
+static field core::int* y = new self::C::•().{self::C::x}{core::int*};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
index d6804b7..41e2e41 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
@@ -37,7 +37,7 @@
     return x;
   (core::int*) →* core::int* func;
   func = #C1<core::int*>;
-  func = new self::C::•().{self::C::f}<core::int*>;
+  func = new self::C::•().{self::C::f}{<T extends core::Object* = dynamic>(T*) →* T*}<core::int*>;
   func = #C2<core::int*>;
   func = h<core::int*>;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
index 392e7e7..8efaf12 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
@@ -37,7 +37,7 @@
     return x;
   (core::int*) →* core::int* func;
   func = #C1<core::int*>;
-  func = new self::C::•().{self::C::f}<core::int*>;
+  func = new self::C::•().{self::C::f}{<T extends core::Object* = dynamic>(T*) →* T*}<core::int*>;
   func = #C2<core::int*>;
   func = h<core::int*>;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.expect
index eb193d3..b339db5d 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.expect
@@ -20,6 +20,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::String*>* c) → void {
-  (core::int*) →* (core::String*) →* void tearoff = c.{self::C::f} as{TypeError,CovarianceCheck} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void<core::int*>;
+  (core::int*) →* (core::String*) →* void tearoff = c.{self::C::f}{<U extends core::Object* = dynamic>(U*) →* (core::String*) →* void} as{TypeError,CovarianceCheck} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void<core::int*>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.transformed.expect
index eb193d3..b339db5d 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.transformed.expect
@@ -20,6 +20,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::String*>* c) → void {
-  (core::int*) →* (core::String*) →* void tearoff = c.{self::C::f} as{TypeError,CovarianceCheck} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void<core::int*>;
+  (core::int*) →* (core::String*) →* void tearoff = c.{self::C::f}{<U extends core::Object* = dynamic>(U*) →* (core::String*) →* void} as{TypeError,CovarianceCheck} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void<core::int*>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.expect
index f378eb9..9cfc708 100644
--- a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.expect
@@ -6,7 +6,7 @@
   return #C1;
 static method foo() → void {
   core::List<dynamic>* myList = self::getListOfString();
-  myList.{core::Iterable::map}<core::int*>((dynamic type) → core::int* => 42);
+  myList.{core::Iterable::map}<core::int*>((dynamic type) → core::int* => 42){((dynamic) →* core::int*) →* core::Iterable<core::int*>*};
 }
 static method bar() → void {
   dynamic list;
@@ -16,7 +16,7 @@
   on dynamic catch(final dynamic _) {
     return;
   }
-  list.map((dynamic value) → core::String* => "${value}");
+  list{dynamic}.map((dynamic value) → core::String* => "${value}");
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.transformed.expect
index f770ccb..438dd97 100644
--- a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   return #C1;
 static method foo() → void {
   core::List<dynamic>* myList = self::getListOfString();
-  myList.{core::Iterable::map}<core::int*>((dynamic type) → core::int* => 42);
+  myList.{core::Iterable::map}<core::int*>((dynamic type) → core::int* => 42){((dynamic) →* core::int*) →* core::Iterable<core::int*>*};
 }
 static method bar() → void {
   dynamic list;
@@ -16,7 +16,7 @@
   on dynamic catch(final dynamic _) {
     return;
   }
-  list.map((dynamic value) → core::String* => "${value}");
+  list{dynamic}.map((dynamic value) → core::String* => "${value}");
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.expect b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.expect
index 45d1725..bfc338c 100644
--- a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.expect
@@ -4,6 +4,6 @@
 
 static method f() → dynamic {
   core::List<core::int*>* o;
-  o.{core::Iterable::forEach}((core::int* i) → core::int* => i.{core::num::+}(1));
+  o.{core::Iterable::forEach}((core::int* i) → core::int* => i.{core::num::+}(1){(core::num*) →* core::int*}){((core::int*) →* void) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.transformed.expect
index 45d1725..bfc338c 100644
--- a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.transformed.expect
@@ -4,6 +4,6 @@
 
 static method f() → dynamic {
   core::List<core::int*>* o;
-  o.{core::Iterable::forEach}((core::int* i) → core::int* => i.{core::num::+}(1));
+  o.{core::Iterable::forEach}((core::int* i) → core::int* => i.{core::num::+}(1){(core::num*) →* core::int*}){((core::int*) →* void) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.weak.expect b/pkg/front_end/testcases/inference/list_literals.dart.weak.expect
index 84e85fd..fb63017 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.weak.expect
@@ -21,19 +21,19 @@
   core::List<core::int*>* x = <core::int*>[1, 2, 3];
   x.{core::List::add}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:70: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                     ^" in "hi" as{TypeError} core::int*);
+                                                                     ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
   x.{core::List::add}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:70: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                     ^" in 4.0 as{TypeError} core::int*);
-  x.{core::List::add}(4);
+                                                                     ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
+  x.{core::List::add}(4){(core::int*) →* void};
   core::List<core::num*>* y = x;
 }
 static method test2() → dynamic {
   core::List<core::num*>* x = <core::num*>[1, 2.0, 3];
   x.{core::List::add}(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:70: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                     ^" in "hi" as{TypeError} core::num*);
-  x.{core::List::add}(4.0);
+                                                                     ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
+  x.{core::List::add}(4.0){(core::num*) →* void};
   core::List<core::int*>* y = x as{TypeError} core::List<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/list_literals.dart.weak.transformed.expect
index 2706692..1f10df9 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.weak.transformed.expect
@@ -21,19 +21,19 @@
   core::List<core::int*>* x = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
   x.{core::List::add}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:70: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                     ^" in "hi" as{TypeError} core::int*);
+                                                                     ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
   x.{core::List::add}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:70: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                     ^" in 4.0 as{TypeError} core::int*);
-  x.{core::List::add}(4);
+                                                                     ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
+  x.{core::List::add}(4){(core::int*) →* void};
   core::List<core::num*>* y = x;
 }
 static method test2() → dynamic {
   core::List<core::num*>* x = core::_GrowableList::_literal3<core::num*>(1, 2.0, 3);
   x.{core::List::add}(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:70: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                     ^" in "hi" as{TypeError} core::num*);
-  x.{core::List::add}(4.0);
+                                                                     ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
+  x.{core::List::add}(4.0){(core::num*) →* void};
   core::List<core::int*>* y = x as{TypeError} core::List<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.expect b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.expect
index 56e22ce..6efc2e7 100644
--- a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.expect
@@ -4,6 +4,6 @@
 
 static method test1() → dynamic {
   core::List<Null>* x = <Null>[null];
-  x.{core::List::add}(42 as{TypeError} Null);
+  x.{core::List::add}(42 as{TypeError} Null){(Null) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.transformed.expect
index e5fb9e6..53cdae6 100644
--- a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.transformed.expect
@@ -4,6 +4,6 @@
 
 static method test1() → dynamic {
   core::List<Null>* x = core::_GrowableList::_literal1<Null>(null);
-  x.{core::List::add}(42 as{TypeError} Null);
+  x.{core::List::add}(42 as{TypeError} Null){(Null) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.expect
index 6211ad5..ae6d28e 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.expect
@@ -22,18 +22,18 @@
 static method test1() → dynamic {
   self::x1.{core::List::add}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:71: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in "hi" as{TypeError} core::int*);
+                                                                      ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
   self::x1.{core::List::add}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:71: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                      ^" in 4.0 as{TypeError} core::int*);
-  self::x1.{core::List::add}(4);
+                                                                      ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
+  self::x1.{core::List::add}(4){(core::int*) →* void};
   core::List<core::num*>* y = self::x1;
 }
 static method test2() → dynamic {
   self::x2.{core::List::add}(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:71: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in "hi" as{TypeError} core::num*);
-  self::x2.{core::List::add}(4.0);
+                                                                      ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
+  self::x2.{core::List::add}(4.0){(core::num*) →* void};
   core::List<core::int*>* y = self::x2 as{TypeError} core::List<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.transformed.expect
index 8680205..3155e77 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.transformed.expect
@@ -22,18 +22,18 @@
 static method test1() → dynamic {
   self::x1.{core::List::add}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:71: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in "hi" as{TypeError} core::int*);
+                                                                      ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
   self::x1.{core::List::add}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:71: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                      ^" in 4.0 as{TypeError} core::int*);
-  self::x1.{core::List::add}(4);
+                                                                      ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
+  self::x1.{core::List::add}(4){(core::int*) →* void};
   core::List<core::num*>* y = self::x1;
 }
 static method test2() → dynamic {
   self::x2.{core::List::add}(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:71: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
   x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in "hi" as{TypeError} core::num*);
-  self::x2.{core::List::add}(4.0);
+                                                                      ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
+  self::x2.{core::List::add}(4.0){(core::num*) →* void};
   core::List<core::int*>* y = self::x2 as{TypeError} core::List<core::int*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.weak.expect b/pkg/front_end/testcases/inference/map_literals.dart.weak.expect
index 37b94b0..298f552 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.weak.expect
@@ -28,31 +28,31 @@
 
 static method test1() → dynamic {
   core::Map<core::int*, core::String*>* x = <core::int*, core::String*>{1: "x", 2: "y"};
-  x.{core::Map::[]=}(3, "z");
+  x.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
   x.{core::Map::[]=}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in "hi" as{TypeError} core::int*, "w");
+                                             ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
   x.{core::Map::[]=}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                             ^" in 4.0 as{TypeError} core::int*, "u");
+                                             ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
   x.{core::Map::[]=}(3, let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                           ^" in 42 as{TypeError} core::String*);
+                                                           ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   core::Map<core::num*, core::String*>* y = x;
 }
 static method test2() → dynamic {
   core::Map<core::num*, core::Pattern*>* x = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
-  x.{core::Map::[]=}(3, "z");
+  x.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
   x.{core::Map::[]=}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in "hi" as{TypeError} core::num*, "w");
-  x.{core::Map::[]=}(4.0, "u");
+                                             ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
+  x.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
   x.{core::Map::[]=}(3, let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                           ^" in 42 as{TypeError} core::Pattern*);
+                                                           ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
   core::Pattern* p = null;
-  x.{core::Map::[]=}(2, p);
+  x.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
   core::Map<core::int*, core::String*>* y = x as{TypeError} core::Map<core::int*, core::String*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect
index 37b94b0..298f552 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect
@@ -28,31 +28,31 @@
 
 static method test1() → dynamic {
   core::Map<core::int*, core::String*>* x = <core::int*, core::String*>{1: "x", 2: "y"};
-  x.{core::Map::[]=}(3, "z");
+  x.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
   x.{core::Map::[]=}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in "hi" as{TypeError} core::int*, "w");
+                                             ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
   x.{core::Map::[]=}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                             ^" in 4.0 as{TypeError} core::int*, "u");
+                                             ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
   x.{core::Map::[]=}(3, let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                           ^" in 42 as{TypeError} core::String*);
+                                                           ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   core::Map<core::num*, core::String*>* y = x;
 }
 static method test2() → dynamic {
   core::Map<core::num*, core::Pattern*>* x = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
-  x.{core::Map::[]=}(3, "z");
+  x.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
   x.{core::Map::[]=}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in "hi" as{TypeError} core::num*, "w");
-  x.{core::Map::[]=}(4.0, "u");
+                                             ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
+  x.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
   x.{core::Map::[]=}(3, let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                           ^" in 42 as{TypeError} core::Pattern*);
+                                                           ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
   core::Pattern* p = null;
-  x.{core::Map::[]=}(2, p);
+  x.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
   core::Map<core::int*, core::String*>* y = x as{TypeError} core::Map<core::int*, core::String*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.expect b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.expect
index a14b93f..b636b6c 100644
--- a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.expect
@@ -4,6 +4,6 @@
 
 static method test1() → dynamic {
   core::Map<Null, Null>* x = <Null, Null>{null: null};
-  x.{core::Map::[]=}(3 as{TypeError} Null, "z" as{TypeError} Null);
+  x.{core::Map::[]=}(3 as{TypeError} Null, "z" as{TypeError} Null){(Null, Null) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.transformed.expect
index a14b93f..b636b6c 100644
--- a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.transformed.expect
@@ -4,6 +4,6 @@
 
 static method test1() → dynamic {
   core::Map<Null, Null>* x = <Null, Null>{null: null};
-  x.{core::Map::[]=}(3 as{TypeError} Null, "z" as{TypeError} Null);
+  x.{core::Map::[]=}(3 as{TypeError} Null, "z" as{TypeError} Null){(Null, Null) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect
index 8c2724b..09b5da1 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect
@@ -29,30 +29,30 @@
 static field core::Map<core::int*, core::String*>* x1 = <core::int*, core::String*>{1: "x", 2: "y"};
 static field core::Map<core::num*, core::Pattern*>* x2 = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
-  self::x1.{core::Map::[]=}(3, "z");
+  self::x1.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
   self::x1.{core::Map::[]=}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:11:66: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                 ^" in "hi" as{TypeError} core::int*, "w");
+                                                                 ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
   self::x1.{core::Map::[]=}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:12:66: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                                                 ^" in 4.0 as{TypeError} core::int*, "u");
+                                                                 ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
   self::x1.{core::Map::[]=}(3, let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:13:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x1 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in 42 as{TypeError} core::String*);
+                                                            ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   core::Map<core::num*, core::String*>* y = self::x1;
 }
 static method test2() → dynamic {
-  self::x2.{core::Map::[]=}(3, "z");
+  self::x2.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
   self::x2.{core::Map::[]=}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:20:66: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
   x2 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                 ^" in "hi" as{TypeError} core::num*, "w");
-  self::x2.{core::Map::[]=}(4.0, "u");
+                                                                 ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
+  self::x2.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
   self::x2.{core::Map::[]=}(3, let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:22:61: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in 42 as{TypeError} core::Pattern*);
+                                                            ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
   core::Pattern* p = null;
-  self::x2.{core::Map::[]=}(2, p);
+  self::x2.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
   core::Map<core::int*, core::String*>* y = self::x2 as{TypeError} core::Map<core::int*, core::String*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect
index 8c2724b..09b5da1 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect
@@ -29,30 +29,30 @@
 static field core::Map<core::int*, core::String*>* x1 = <core::int*, core::String*>{1: "x", 2: "y"};
 static field core::Map<core::num*, core::Pattern*>* x2 = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
-  self::x1.{core::Map::[]=}(3, "z");
+  self::x1.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
   self::x1.{core::Map::[]=}(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:11:66: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                 ^" in "hi" as{TypeError} core::int*, "w");
+                                                                 ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
   self::x1.{core::Map::[]=}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:12:66: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                                                 ^" in 4.0 as{TypeError} core::int*, "u");
+                                                                 ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
   self::x1.{core::Map::[]=}(3, let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:13:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   x1 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in 42 as{TypeError} core::String*);
+                                                            ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   core::Map<core::num*, core::String*>* y = self::x1;
 }
 static method test2() → dynamic {
-  self::x2.{core::Map::[]=}(3, "z");
+  self::x2.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
   self::x2.{core::Map::[]=}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:20:66: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
   x2 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                 ^" in "hi" as{TypeError} core::num*, "w");
-  self::x2.{core::Map::[]=}(4.0, "u");
+                                                                 ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
+  self::x2.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
   self::x2.{core::Map::[]=}(3, let final Never* #t5 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:22:61: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
  - 'Pattern' is from 'dart:core'.
   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in 42 as{TypeError} core::Pattern*);
+                                                            ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
   core::Pattern* p = null;
-  self::x2.{core::Map::[]=}(2, p);
+  self::x2.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
   core::Map<core::int*, core::String*>* y = self::x2 as{TypeError} core::Map<core::int*, core::String*>*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.expect
index 1f1ce8e..05bd044 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.expect
@@ -34,5 +34,5 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* f = new self::C::•().{self::C::f}<core::int*>();
+static field self::D<core::int*>* f = new self::C::•().{self::C::f}<core::int*>(){() →* self::D<core::int*>*};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.transformed.expect
index 1f1ce8e..05bd044 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.transformed.expect
@@ -34,5 +34,5 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::D<core::int*>* f = new self::C::•().{self::C::f}<core::int*>();
+static field self::D<core::int*>* f = new self::C::•().{self::C::f}<core::int*>(){() →* self::D<core::int*>*};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.expect
index fb30810..28c5383 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.expect
@@ -35,5 +35,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c;
-static field self::D<core::int*>* f = self::c.{self::C::f}<core::int*>();
+static field self::D<core::int*>* f = self::c.{self::C::f}<core::int*>(){() →* self::D<core::int*>*};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.transformed.expect
index fb30810..28c5383 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.transformed.expect
@@ -35,5 +35,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c;
-static field self::D<core::int*>* f = self::c.{self::C::f}<core::int*>();
+static field self::D<core::int*>* f = self::c.{self::C::f}<core::int*>(){() →* self::D<core::int*>*};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.expect b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.expect
index 4a4c52a..cbf7329 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g(self::C* c) → dynamic {
-  core::int* x = let final self::C* #t1 = c in #t1.{self::C::==}(null) ?{core::int*} null : #t1.{self::C::f}();
-  let final self::C* #t2 = c in #t2.{self::C::==}(null) ?{core::int*} null : #t2.{self::C::f}();
+  core::int* x = let final self::C* #t1 = c in #t1 == null ?{core::int*} null : #t1.{self::C::f}(){() →* core::int*};
+  let final self::C* #t2 = c in #t2 == null ?{core::int*} null : #t2.{self::C::f}(){() →* core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.transformed.expect
index 4a4c52a..cbf7329 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g(self::C* c) → dynamic {
-  core::int* x = let final self::C* #t1 = c in #t1.{self::C::==}(null) ?{core::int*} null : #t1.{self::C::f}();
-  let final self::C* #t2 = c in #t2.{self::C::==}(null) ?{core::int*} null : #t2.{self::C::f}();
+  core::int* x = let final self::C* #t1 = c in #t1 == null ?{core::int*} null : #t1.{self::C::f}(){() →* core::int*};
+  let final self::C* #t2 = c in #t2 == null ?{core::int*} null : #t2.{self::C::f}(){() →* core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.expect b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.expect
index 7156c66..b8c3acb 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.expect
@@ -19,7 +19,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method f(self::C* c) → void {
-  core::int* x = let final self::C* #t1 = c in #t1.{self::C::==}(null) ?{core::int*} null : #t1.{self::C::x};
-  let final self::C* #t2 = c in #t2.{self::C::==}(null) ?{core::int*} null : #t2.{self::C::x};
+  core::int* x = let final self::C* #t1 = c in #t1 == null ?{core::int*} null : #t1.{self::C::x}{core::int*};
+  let final self::C* #t2 = c in #t2 == null ?{core::int*} null : #t2.{self::C::x}{core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.transformed.expect
index 7156c66..b8c3acb 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method f(self::C* c) → void {
-  core::int* x = let final self::C* #t1 = c in #t1.{self::C::==}(null) ?{core::int*} null : #t1.{self::C::x};
-  let final self::C* #t2 = c in #t2.{self::C::==}(null) ?{core::int*} null : #t2.{self::C::x};
+  core::int* x = let final self::C* #t1 = c in #t1 == null ?{core::int*} null : #t1.{self::C::x}{core::int*};
+  let final self::C* #t2 = c in #t2 == null ?{core::int*} null : #t2.{self::C::x}{core::int*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.expect b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.expect
index ec63329..15f12a3 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.expect
@@ -4,6 +4,6 @@
 
 static method main() → dynamic {
   core::List<core::int*>* x;
-  core::List<core::int*>* y = let final core::List<core::int*>* #t1 = x in #t1.{core::List::==}(null) ?{core::List<core::int*>*} <core::int*>[] : #t1;
+  core::List<core::int*>* y = let final core::List<core::int*>* #t1 = x in #t1 == null ?{core::List<core::int*>*} <core::int*>[] : #t1;
   core::List<core::int*>* z = y;
 }
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.transformed.expect
index 7c4682e..7a25cb4 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.transformed.expect
@@ -4,6 +4,6 @@
 
 static method main() → dynamic {
   core::List<core::int*>* x;
-  core::List<core::int*>* y = let final core::List<core::int*>* #t1 = x in #t1.{core::List::==}(null) ?{core::List<core::int*>*} core::_GrowableList::•<core::int*>(0) : #t1;
+  core::List<core::int*>* y = let final core::List<core::int*>* #t1 = x in #t1 == null ?{core::List<core::int*>*} core::_GrowableList::•<core::int*>(0) : #t1;
   core::List<core::int*>* z = y;
 }
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.expect b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.expect
index c4ca3fe..33d1268 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.expect
@@ -4,5 +4,5 @@
 
 static method main() → dynamic {
   core::List<core::int*>* x;
-  core::List<core::num*>* y = let final core::List<core::int*>* #t1 = x in #t1.{core::List::==}(null) ?{core::List<core::num*>*} <core::num*>[] : #t1;
+  core::List<core::num*>* y = let final core::List<core::int*>* #t1 = x in #t1 == null ?{core::List<core::num*>*} <core::num*>[] : #t1;
 }
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.transformed.expect
index 02d005c..c2e2653 100644
--- a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.transformed.expect
@@ -4,5 +4,5 @@
 
 static method main() → dynamic {
   core::List<core::int*>* x;
-  core::List<core::num*>* y = let final core::List<core::int*>* #t1 = x in #t1.{core::List::==}(null) ?{core::List<core::num*>*} core::_GrowableList::•<core::num*>(0) : #t1;
+  core::List<core::num*>* y = let final core::List<core::int*>* #t1 = x in #t1 == null ?{core::List<core::num*>*} core::_GrowableList::•<core::num*>(0) : #t1;
 }
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.expect
index e3fae9a..4344e6b 100644
--- a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.expect
@@ -6,13 +6,13 @@
 static method foo((core::Object*) →* core::int* f) → void {}
 static method test() → dynamic {
   (core::Object*) →* Null f = (core::Object* x) → Null => null;
-  core::String* y = f.call(42);
+  core::String* y = f(42){(core::Object*) →* Null};
   f = (core::Object* x) → Null => "hello" as{TypeError} Null;
   dynamic g = null;
   g = "hello";
-  g.foo();
+  g{dynamic}.foo();
   self::h = "hello";
-  self::h.foo();
+  self::h{dynamic}.foo();
   self::foo((core::Object* x) → Null => null);
   self::foo((core::Object* x) → Null => throw "not implemented");
 }
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.transformed.expect
index e3fae9a..4344e6b 100644
--- a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.transformed.expect
@@ -6,13 +6,13 @@
 static method foo((core::Object*) →* core::int* f) → void {}
 static method test() → dynamic {
   (core::Object*) →* Null f = (core::Object* x) → Null => null;
-  core::String* y = f.call(42);
+  core::String* y = f(42){(core::Object*) →* Null};
   f = (core::Object* x) → Null => "hello" as{TypeError} Null;
   dynamic g = null;
   g = "hello";
-  g.foo();
+  g{dynamic}.foo();
   self::h = "hello";
-  self::h.foo();
+  self::h{dynamic}.foo();
   self::foo((core::Object* x) → Null => null);
   self::foo((core::Object* x) → Null => throw "not implemented");
 }
diff --git a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.expect b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.expect
index 6a9ab0d..09b660d 100644
--- a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.expect
@@ -6,40 +6,40 @@
   core::num* n = 1;
   core::int* i = 1;
   core::double* d = 1.0;
-  core::double* ddPlus = d.{core::double::+}(d);
-  core::double* ddMinus = d.{core::double::-}(d);
-  core::double* ddTimes = d.{core::double::*}(d);
-  core::double* ddMod = d.{core::double::%}(d);
-  core::double* diPlus = d.{core::double::+}(i);
-  core::double* diMinus = d.{core::double::-}(i);
-  core::double* diTimes = d.{core::double::*}(i);
-  core::double* diMod = d.{core::double::%}(i);
-  core::double* dnPlus = d.{core::double::+}(n);
-  core::double* dnMinus = d.{core::double::-}(n);
-  core::double* dnTimes = d.{core::double::*}(n);
-  core::double* dnMod = d.{core::double::%}(n);
-  core::double* idPlus = i.{core::num::+}(d);
-  core::double* idMinus = i.{core::num::-}(d);
-  core::double* idTimes = i.{core::num::*}(d);
-  core::double* idMod = i.{core::num::%}(d);
-  core::int* iiPlus = i.{core::num::+}(i);
-  core::int* iiMinus = i.{core::num::-}(i);
-  core::int* iiTimes = i.{core::num::*}(i);
-  core::int* iiMod = i.{core::num::%}(i);
-  core::num* inPlus = i.{core::num::+}(n);
-  core::num* inMinus = i.{core::num::-}(n);
-  core::num* inTimes = i.{core::num::*}(n);
-  core::num* inMod = i.{core::num::%}(n);
-  core::num* ndPlus = n.{core::num::+}(d);
-  core::num* ndMinus = n.{core::num::-}(d);
-  core::num* ndTimes = n.{core::num::*}(d);
-  core::num* ndMod = n.{core::num::%}(d);
-  core::num* niPlus = n.{core::num::+}(i);
-  core::num* niMinus = n.{core::num::-}(i);
-  core::num* niTimes = n.{core::num::*}(i);
-  core::num* niMod = n.{core::num::%}(i);
-  core::num* nnPlus = n.{core::num::+}(n);
-  core::num* nnMinus = n.{core::num::-}(n);
-  core::num* nnTimes = n.{core::num::*}(n);
-  core::num* nnMod = n.{core::num::%}(n);
+  core::double* ddPlus = d.{core::double::+}(d){(core::num*) →* core::double*};
+  core::double* ddMinus = d.{core::double::-}(d){(core::num*) →* core::double*};
+  core::double* ddTimes = d.{core::double::*}(d){(core::num*) →* core::double*};
+  core::double* ddMod = d.{core::double::%}(d){(core::num*) →* core::double*};
+  core::double* diPlus = d.{core::double::+}(i){(core::num*) →* core::double*};
+  core::double* diMinus = d.{core::double::-}(i){(core::num*) →* core::double*};
+  core::double* diTimes = d.{core::double::*}(i){(core::num*) →* core::double*};
+  core::double* diMod = d.{core::double::%}(i){(core::num*) →* core::double*};
+  core::double* dnPlus = d.{core::double::+}(n){(core::num*) →* core::double*};
+  core::double* dnMinus = d.{core::double::-}(n){(core::num*) →* core::double*};
+  core::double* dnTimes = d.{core::double::*}(n){(core::num*) →* core::double*};
+  core::double* dnMod = d.{core::double::%}(n){(core::num*) →* core::double*};
+  core::double* idPlus = i.{core::num::+}(d){(core::num*) →* core::double*};
+  core::double* idMinus = i.{core::num::-}(d){(core::num*) →* core::double*};
+  core::double* idTimes = i.{core::num::*}(d){(core::num*) →* core::double*};
+  core::double* idMod = i.{core::num::%}(d){(core::num*) →* core::double*};
+  core::int* iiPlus = i.{core::num::+}(i){(core::num*) →* core::int*};
+  core::int* iiMinus = i.{core::num::-}(i){(core::num*) →* core::int*};
+  core::int* iiTimes = i.{core::num::*}(i){(core::num*) →* core::int*};
+  core::int* iiMod = i.{core::num::%}(i){(core::num*) →* core::int*};
+  core::num* inPlus = i.{core::num::+}(n){(core::num*) →* core::num*};
+  core::num* inMinus = i.{core::num::-}(n){(core::num*) →* core::num*};
+  core::num* inTimes = i.{core::num::*}(n){(core::num*) →* core::num*};
+  core::num* inMod = i.{core::num::%}(n){(core::num*) →* core::num*};
+  core::num* ndPlus = n.{core::num::+}(d){(core::num*) →* core::num*};
+  core::num* ndMinus = n.{core::num::-}(d){(core::num*) →* core::num*};
+  core::num* ndTimes = n.{core::num::*}(d){(core::num*) →* core::num*};
+  core::num* ndMod = n.{core::num::%}(d){(core::num*) →* core::num*};
+  core::num* niPlus = n.{core::num::+}(i){(core::num*) →* core::num*};
+  core::num* niMinus = n.{core::num::-}(i){(core::num*) →* core::num*};
+  core::num* niTimes = n.{core::num::*}(i){(core::num*) →* core::num*};
+  core::num* niMod = n.{core::num::%}(i){(core::num*) →* core::num*};
+  core::num* nnPlus = n.{core::num::+}(n){(core::num*) →* core::num*};
+  core::num* nnMinus = n.{core::num::-}(n){(core::num*) →* core::num*};
+  core::num* nnTimes = n.{core::num::*}(n){(core::num*) →* core::num*};
+  core::num* nnMod = n.{core::num::%}(n){(core::num*) →* core::num*};
 }
diff --git a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.transformed.expect
index 6a9ab0d..09b660d 100644
--- a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.transformed.expect
@@ -6,40 +6,40 @@
   core::num* n = 1;
   core::int* i = 1;
   core::double* d = 1.0;
-  core::double* ddPlus = d.{core::double::+}(d);
-  core::double* ddMinus = d.{core::double::-}(d);
-  core::double* ddTimes = d.{core::double::*}(d);
-  core::double* ddMod = d.{core::double::%}(d);
-  core::double* diPlus = d.{core::double::+}(i);
-  core::double* diMinus = d.{core::double::-}(i);
-  core::double* diTimes = d.{core::double::*}(i);
-  core::double* diMod = d.{core::double::%}(i);
-  core::double* dnPlus = d.{core::double::+}(n);
-  core::double* dnMinus = d.{core::double::-}(n);
-  core::double* dnTimes = d.{core::double::*}(n);
-  core::double* dnMod = d.{core::double::%}(n);
-  core::double* idPlus = i.{core::num::+}(d);
-  core::double* idMinus = i.{core::num::-}(d);
-  core::double* idTimes = i.{core::num::*}(d);
-  core::double* idMod = i.{core::num::%}(d);
-  core::int* iiPlus = i.{core::num::+}(i);
-  core::int* iiMinus = i.{core::num::-}(i);
-  core::int* iiTimes = i.{core::num::*}(i);
-  core::int* iiMod = i.{core::num::%}(i);
-  core::num* inPlus = i.{core::num::+}(n);
-  core::num* inMinus = i.{core::num::-}(n);
-  core::num* inTimes = i.{core::num::*}(n);
-  core::num* inMod = i.{core::num::%}(n);
-  core::num* ndPlus = n.{core::num::+}(d);
-  core::num* ndMinus = n.{core::num::-}(d);
-  core::num* ndTimes = n.{core::num::*}(d);
-  core::num* ndMod = n.{core::num::%}(d);
-  core::num* niPlus = n.{core::num::+}(i);
-  core::num* niMinus = n.{core::num::-}(i);
-  core::num* niTimes = n.{core::num::*}(i);
-  core::num* niMod = n.{core::num::%}(i);
-  core::num* nnPlus = n.{core::num::+}(n);
-  core::num* nnMinus = n.{core::num::-}(n);
-  core::num* nnTimes = n.{core::num::*}(n);
-  core::num* nnMod = n.{core::num::%}(n);
+  core::double* ddPlus = d.{core::double::+}(d){(core::num*) →* core::double*};
+  core::double* ddMinus = d.{core::double::-}(d){(core::num*) →* core::double*};
+  core::double* ddTimes = d.{core::double::*}(d){(core::num*) →* core::double*};
+  core::double* ddMod = d.{core::double::%}(d){(core::num*) →* core::double*};
+  core::double* diPlus = d.{core::double::+}(i){(core::num*) →* core::double*};
+  core::double* diMinus = d.{core::double::-}(i){(core::num*) →* core::double*};
+  core::double* diTimes = d.{core::double::*}(i){(core::num*) →* core::double*};
+  core::double* diMod = d.{core::double::%}(i){(core::num*) →* core::double*};
+  core::double* dnPlus = d.{core::double::+}(n){(core::num*) →* core::double*};
+  core::double* dnMinus = d.{core::double::-}(n){(core::num*) →* core::double*};
+  core::double* dnTimes = d.{core::double::*}(n){(core::num*) →* core::double*};
+  core::double* dnMod = d.{core::double::%}(n){(core::num*) →* core::double*};
+  core::double* idPlus = i.{core::num::+}(d){(core::num*) →* core::double*};
+  core::double* idMinus = i.{core::num::-}(d){(core::num*) →* core::double*};
+  core::double* idTimes = i.{core::num::*}(d){(core::num*) →* core::double*};
+  core::double* idMod = i.{core::num::%}(d){(core::num*) →* core::double*};
+  core::int* iiPlus = i.{core::num::+}(i){(core::num*) →* core::int*};
+  core::int* iiMinus = i.{core::num::-}(i){(core::num*) →* core::int*};
+  core::int* iiTimes = i.{core::num::*}(i){(core::num*) →* core::int*};
+  core::int* iiMod = i.{core::num::%}(i){(core::num*) →* core::int*};
+  core::num* inPlus = i.{core::num::+}(n){(core::num*) →* core::num*};
+  core::num* inMinus = i.{core::num::-}(n){(core::num*) →* core::num*};
+  core::num* inTimes = i.{core::num::*}(n){(core::num*) →* core::num*};
+  core::num* inMod = i.{core::num::%}(n){(core::num*) →* core::num*};
+  core::num* ndPlus = n.{core::num::+}(d){(core::num*) →* core::num*};
+  core::num* ndMinus = n.{core::num::-}(d){(core::num*) →* core::num*};
+  core::num* ndTimes = n.{core::num::*}(d){(core::num*) →* core::num*};
+  core::num* ndMod = n.{core::num::%}(d){(core::num*) →* core::num*};
+  core::num* niPlus = n.{core::num::+}(i){(core::num*) →* core::num*};
+  core::num* niMinus = n.{core::num::-}(i){(core::num*) →* core::num*};
+  core::num* niTimes = n.{core::num::*}(i){(core::num*) →* core::num*};
+  core::num* niMod = n.{core::num::%}(i){(core::num*) →* core::num*};
+  core::num* nnPlus = n.{core::num::+}(n){(core::num*) →* core::num*};
+  core::num* nnMinus = n.{core::num::-}(n){(core::num*) →* core::num*};
+  core::num* nnTimes = n.{core::num::*}(n){(core::num*) →* core::num*};
+  core::num* nnMod = n.{core::num::%}(n){(core::num*) →* core::num*};
 }
diff --git a/pkg/front_end/testcases/inference/override_equals.dart b/pkg/front_end/testcases/inference/override_equals.dart
index d2ed4ba..527dbf9 100644
--- a/pkg/front_end/testcases/inference/override_equals.dart
+++ b/pkg/front_end/testcases/inference/override_equals.dart
@@ -26,11 +26,11 @@
 test() {
   NullEquality n = new NullEquality();
   var /*@ type=bool* */ equals_self = n /*@target=NullEquality.==*/ == n;
-  var /*@ type=bool* */ equals_null = n /*@target=NullEquality.==*/ == null;
-  var /*@ type=bool* */ null_equals = null /*@target=Object.==*/ == n;
+  var /*@ type=bool* */ equals_null = n  == null;
+  var /*@ type=bool* */ null_equals = null  == n;
   var /*@ type=bool* */ not_equals_self = n /*@target=NullEquality.==*/ != n;
-  var /*@ type=bool* */ not_equals_null = n /*@target=NullEquality.==*/ != null;
-  var /*@ type=bool* */ null_not_equals = null /*@target=Object.==*/ != n;
+  var /*@ type=bool* */ not_equals_null = n  != null;
+  var /*@ type=bool* */ null_not_equals = null  != n;
 }
 
 main() {
diff --git a/pkg/front_end/testcases/inference/override_equals.dart.weak.expect b/pkg/front_end/testcases/inference/override_equals.dart.weak.expect
index 6f3dcc4..736b7cd 100644
--- a/pkg/front_end/testcases/inference/override_equals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/override_equals.dart.weak.expect
@@ -32,16 +32,16 @@
 }
 static method test() → dynamic {
   self::NullEquality* n = new self::NullEquality::•();
-  core::bool* equals_self = n.{self::NullEquality::==}(n);
-  core::bool* equals_null = n.{self::NullEquality::==}(null);
-  core::bool* null_equals = null.{core::Object::==}(n);
-  core::bool* not_equals_self = !n.{self::NullEquality::==}(n);
-  core::bool* not_equals_null = !n.{self::NullEquality::==}(null);
-  core::bool* null_not_equals = !null.{core::Object::==}(n);
+  core::bool* equals_self = n =={self::NullEquality::==}{(core::Object*) →* Null} n;
+  core::bool* equals_null = n == null;
+  core::bool* null_equals = n == null;
+  core::bool* not_equals_self = !(n =={self::NullEquality::==}{(core::Object*) →* Null} n);
+  core::bool* not_equals_null = !(n == null);
+  core::bool* null_not_equals = !(n == null);
 }
 static method main() → dynamic {
   self::test();
-  new self::SubNullEquality::•().{self::SubNullEquality::test}();
+  new self::SubNullEquality::•().{self::SubNullEquality::test}(){() →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/override_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/override_equals.dart.weak.transformed.expect
index 6f3dcc4..736b7cd 100644
--- a/pkg/front_end/testcases/inference/override_equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/override_equals.dart.weak.transformed.expect
@@ -32,16 +32,16 @@
 }
 static method test() → dynamic {
   self::NullEquality* n = new self::NullEquality::•();
-  core::bool* equals_self = n.{self::NullEquality::==}(n);
-  core::bool* equals_null = n.{self::NullEquality::==}(null);
-  core::bool* null_equals = null.{core::Object::==}(n);
-  core::bool* not_equals_self = !n.{self::NullEquality::==}(n);
-  core::bool* not_equals_null = !n.{self::NullEquality::==}(null);
-  core::bool* null_not_equals = !null.{core::Object::==}(n);
+  core::bool* equals_self = n =={self::NullEquality::==}{(core::Object*) →* Null} n;
+  core::bool* equals_null = n == null;
+  core::bool* null_equals = n == null;
+  core::bool* not_equals_self = !(n =={self::NullEquality::==}{(core::Object*) →* Null} n);
+  core::bool* not_equals_null = !(n == null);
+  core::bool* null_not_equals = !(n == null);
 }
 static method main() → dynamic {
   self::test();
-  new self::SubNullEquality::•().{self::SubNullEquality::test}();
+  new self::SubNullEquality::•().{self::SubNullEquality::test}(){() →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.weak.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.weak.expect
index 2559222..cdec2e88 100644
--- a/pkg/front_end/testcases/inference/promote_bounds.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.weak.expect
@@ -26,10 +26,10 @@
 }
 static method f<T extends self::B*>(self::f::T* a) → void {
   if(a is core::String*) {
-    a.{self::B::foo}();
+    a.{self::B::foo}(){() →* void};
   }
   if(a is self::C*) {
-    a{self::f::T* & self::C* /* '*' & '*' = '*' */}.{self::C::bar}();
+    a{self::f::T* & self::C* /* '*' & '*' = '*' */}.{self::C::bar}(){() →* void};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.weak.transformed.expect
index 2559222..cdec2e88 100644
--- a/pkg/front_end/testcases/inference/promote_bounds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.weak.transformed.expect
@@ -26,10 +26,10 @@
 }
 static method f<T extends self::B*>(self::f::T* a) → void {
   if(a is core::String*) {
-    a.{self::B::foo}();
+    a.{self::B::foo}(){() →* void};
   }
   if(a is self::C*) {
-    a{self::f::T* & self::C* /* '*' & '*' = '*' */}.{self::C::bar}();
+    a{self::f::T* & self::C* /* '*' & '*' = '*' */}.{self::C::bar}(){() →* void};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.expect
index 55a2a96..3e27040 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.expect
@@ -21,6 +21,6 @@
 static method main() → dynamic {
   self::A* a = new self::A::•();
   self::A* b = a;
-  core::print(a.{self::A::x});
-  core::print(a.{self::A::x}.{core::num::+}(2));
+  core::print(a.{self::A::x}{core::int*});
+  core::print(a.{self::A::x}{core::int*}.{core::num::+}(2){(core::num*) →* core::int*});
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.transformed.expect
index 55a2a96..3e27040 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.transformed.expect
@@ -21,6 +21,6 @@
 static method main() → dynamic {
   self::A* a = new self::A::•();
   self::A* b = a;
-  core::print(a.{self::A::x});
-  core::print(a.{self::A::x}.{core::num::+}(2));
+  core::print(a.{self::A::x}{core::int*});
+  core::print(a.{self::A::x}{core::int*}.{core::num::+}(2){(core::num*) →* core::int*});
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.expect
index 521cbc3..06148db 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.expect
@@ -21,6 +21,6 @@
 static method main() → dynamic {
   dynamic a = new self::A::•();
   self::A* b = a as{TypeError,ForDynamic} self::A*;
-  core::print(a.x);
-  core::print(a.x.+(2));
+  core::print(a{dynamic}.x);
+  core::print(a{dynamic}.x{dynamic}.+(2));
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.transformed.expect
index 521cbc3..06148db 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.transformed.expect
@@ -21,6 +21,6 @@
 static method main() → dynamic {
   dynamic a = new self::A::•();
   self::A* b = a as{TypeError,ForDynamic} self::A*;
-  core::print(a.x);
-  core::print(a.x.+(2));
+  core::print(a{dynamic}.x);
+  core::print(a{dynamic}.x{dynamic}.+(2));
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.expect
index 10b1dde..91157a6 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.expect
@@ -68,7 +68,7 @@
 }
 static method main() → void {
   self::D* d1 = new self::D::•();
-  core::print(d1.{self::D::c}.{self::C::b}.{self::B::a}.{self::A::x});
+  core::print(d1.{self::D::c}{self::C*}.{self::C::b}{self::B*}.{self::B::a}{self::A*}.{self::A::x}{core::int*});
   self::D* d2 = new self::D::•();
-  core::print(d2.{self::D::c}.{self::C::b}.{self::B::a}.{self::A::x});
+  core::print(d2.{self::D::c}{self::C*}.{self::C::b}{self::B*}.{self::B::a}{self::A*}.{self::A::x}{core::int*});
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.transformed.expect
index 10b1dde..91157a6 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.transformed.expect
@@ -68,7 +68,7 @@
 }
 static method main() → void {
   self::D* d1 = new self::D::•();
-  core::print(d1.{self::D::c}.{self::C::b}.{self::B::a}.{self::A::x});
+  core::print(d1.{self::D::c}{self::C*}.{self::C::b}{self::B*}.{self::B::a}{self::A*}.{self::A::x}{core::int*});
   self::D* d2 = new self::D::•();
-  core::print(d2.{self::D::c}.{self::C::b}.{self::B::a}.{self::A::x});
+  core::print(d2.{self::D::c}{self::C*}.{self::C::b}{self::B*}.{self::B::a}{self::A*}.{self::A::x}{core::int*});
 }
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.expect
index 85b4185..4c93980 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.expect
@@ -23,6 +23,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c = new self::C::•();
-static field () →* core::int* function_ref = self::c.{self::C::function};
-static field core::List<() →* core::int*>* function_ref_list = <() →* core::int*>[self::c.{self::C::function}];
+static field () →* core::int* function_ref = self::c.{self::C::function}{() →* core::int*};
+static field core::List<() →* core::int*>* function_ref_list = <() →* core::int*>[self::c.{self::C::function}{() →* core::int*}];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.transformed.expect
index 32c55ca..eab5b2e 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.transformed.expect
@@ -23,6 +23,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c = new self::C::•();
-static field () →* core::int* function_ref = self::c.{self::C::function};
-static field core::List<() →* core::int*>* function_ref_list = core::_GrowableList::_literal1<() →* core::int*>(self::c.{self::C::function});
+static field () →* core::int* function_ref = self::c.{self::C::function}{() →* core::int*};
+static field core::List<() →* core::int*>* function_ref_list = core::_GrowableList::_literal1<() →* core::int*>(self::c.{self::C::function}{() →* core::int*});
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.expect
index c6c59b5..c4b9a8c 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.expect
@@ -8,10 +8,10 @@
     : super core::Object::•()
     ;
   method op(core::double* b) → void {
-    core::double* r1 = this.{self::C::a}.{core::num::+}(b) as{TypeError} core::double*;
-    core::double* r2 = this.{self::C::a}.{core::num::-}(b) as{TypeError} core::double*;
-    core::double* r3 = this.{self::C::a}.{core::num::*}(b) as{TypeError} core::double*;
-    core::double* r4 = this.{self::C::a}.{core::num::/}(b);
+    core::double* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
+    core::double* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
+    core::double* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
+    core::double* r4 = this.{self::C::a}{self::C::T*}.{core::num::/}(b){(core::num*) →* core::double*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.transformed.expect
index 6560a3f..c4b9a8c 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.transformed.expect
@@ -8,10 +8,10 @@
     : super core::Object::•()
     ;
   method op(core::double* b) → void {
-    core::double* r1 = this.{self::C::a}.{core::num::+}(b);
-    core::double* r2 = this.{self::C::a}.{core::num::-}(b);
-    core::double* r3 = this.{self::C::a}.{core::num::*}(b);
-    core::double* r4 = this.{self::C::a}.{core::num::/}(b);
+    core::double* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
+    core::double* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
+    core::double* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
+    core::double* r4 = this.{self::C::a}{self::C::T*}.{core::num::/}(b){(core::num*) →* core::double*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.expect
index 729edd2..23ed30d 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.expect
@@ -8,14 +8,14 @@
     : super core::Object::•()
     ;
   method op(core::int* b) → void {
-    self::C::T* r1 = this.{self::C::a}.{core::num::+}(b) as{TypeError} self::C::T*;
-    self::C::T* r2 = this.{self::C::a}.{core::num::-}(b) as{TypeError} self::C::T*;
-    self::C::T* r3 = this.{self::C::a}.{core::num::*}(b) as{TypeError} self::C::T*;
+    self::C::T* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    self::C::T* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    self::C::T* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
   }
   method opEq(core::int* b) → void {
-    this.{self::C::a} = this.{self::C::a}.{core::num::+}(b) as{TypeError} self::C::T*;
-    this.{self::C::a} = this.{self::C::a}.{core::num::-}(b) as{TypeError} self::C::T*;
-    this.{self::C::a} = this.{self::C::a}.{core::num::*}(b) as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.transformed.expect
index 729edd2..23ed30d 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.transformed.expect
@@ -8,14 +8,14 @@
     : super core::Object::•()
     ;
   method op(core::int* b) → void {
-    self::C::T* r1 = this.{self::C::a}.{core::num::+}(b) as{TypeError} self::C::T*;
-    self::C::T* r2 = this.{self::C::a}.{core::num::-}(b) as{TypeError} self::C::T*;
-    self::C::T* r3 = this.{self::C::a}.{core::num::*}(b) as{TypeError} self::C::T*;
+    self::C::T* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    self::C::T* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    self::C::T* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
   }
   method opEq(core::int* b) → void {
-    this.{self::C::a} = this.{self::C::a}.{core::num::+}(b) as{TypeError} self::C::T*;
-    this.{self::C::a} = this.{self::C::a}.{core::num::-}(b) as{TypeError} self::C::T*;
-    this.{self::C::a} = this.{self::C::a}.{core::num::*}(b) as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.expect
index fb481ea..591ea9e 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.expect
@@ -8,14 +8,14 @@
     : super core::Object::•()
     ;
   method op(generic-covariant-impl self::C::T* b) → void {
-    self::C::T* r1 = this.{self::C::a}.{core::num::+}(b) as{TypeError} self::C::T*;
-    self::C::T* r2 = this.{self::C::a}.{core::num::-}(b) as{TypeError} self::C::T*;
-    self::C::T* r3 = this.{self::C::a}.{core::num::*}(b) as{TypeError} self::C::T*;
+    self::C::T* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    self::C::T* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    self::C::T* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
   }
   method opEq(generic-covariant-impl self::C::T* b) → void {
-    this.{self::C::a} = this.{self::C::a}.{core::num::+}(b) as{TypeError} self::C::T*;
-    this.{self::C::a} = this.{self::C::a}.{core::num::-}(b) as{TypeError} self::C::T*;
-    this.{self::C::a} = this.{self::C::a}.{core::num::*}(b) as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.transformed.expect
index fb481ea..591ea9e 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.transformed.expect
@@ -8,14 +8,14 @@
     : super core::Object::•()
     ;
   method op(generic-covariant-impl self::C::T* b) → void {
-    self::C::T* r1 = this.{self::C::a}.{core::num::+}(b) as{TypeError} self::C::T*;
-    self::C::T* r2 = this.{self::C::a}.{core::num::-}(b) as{TypeError} self::C::T*;
-    self::C::T* r3 = this.{self::C::a}.{core::num::*}(b) as{TypeError} self::C::T*;
+    self::C::T* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    self::C::T* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    self::C::T* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
   }
   method opEq(generic-covariant-impl self::C::T* b) → void {
-    this.{self::C::a} = this.{self::C::a}.{core::num::+}(b) as{TypeError} self::C::T*;
-    this.{self::C::a} = this.{self::C::a}.{core::num::-}(b) as{TypeError} self::C::T*;
-    this.{self::C::a} = this.{self::C::a}.{core::num::*}(b) as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.outline.expect
index 37761d3..b473f71 100644
--- a/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.outline.expect
@@ -24,5 +24,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///static_method_tear_off.dart:8:13 -> TearOffConstant(C.f)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///static_method_tear_off.dart:8:13 -> TearOffConstant(C.f)
 Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.expect
index b887901..23c68ac 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.expect
@@ -23,7 +23,7 @@
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::f}.call();
+    core::int* y = super.{self::C::f}(){() →* core::int*};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.transformed.expect
index b887901..23c68ac 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::f}.call();
+    core::int* y = super.{self::C::f}(){() →* core::int*};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.expect
index 3448c3a..f32675f 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.expect
@@ -40,7 +40,7 @@
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::f}.{self::CallableClass::call}();
+    core::int* y = super.{self::C::f}.{self::CallableClass::call}(){() →* core::int*};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.transformed.expect
index 3448c3a..f32675f 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.transformed.expect
@@ -40,7 +40,7 @@
     : super self::C::•()
     ;
   method g() → void {
-    core::int* y = super.{self::C::f}.{self::CallableClass::call}();
+    core::int* y = super.{self::C::f}.{self::CallableClass::call}(){() →* core::int*};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/switch_continue.dart.weak.expect b/pkg/front_end/testcases/inference/switch_continue.dart.weak.expect
index 17603ab..64406d0 100644
--- a/pkg/front_end/testcases/inference/switch_continue.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/switch_continue.dart.weak.expect
@@ -8,13 +8,13 @@
     #L2:
     case #C1:
       {
-        f.call();
+        f(){() →* void};
         continue #L3;
       }
     #L3:
     case #C2:
       {
-        f.call();
+        f(){() →* void};
         break #L1;
       }
   }
diff --git a/pkg/front_end/testcases/inference/switch_continue.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/switch_continue.dart.weak.transformed.expect
index 17603ab..64406d0 100644
--- a/pkg/front_end/testcases/inference/switch_continue.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/switch_continue.dart.weak.transformed.expect
@@ -8,13 +8,13 @@
     #L2:
     case #C1:
       {
-        f.call();
+        f(){() →* void};
         continue #L3;
       }
     #L3:
     case #C2:
       {
-        f.call();
+        f(){() →* void};
         break #L1;
       }
   }
diff --git a/pkg/front_end/testcases/inference/try_catch.dart.weak.expect b/pkg/front_end/testcases/inference/try_catch.dart.weak.expect
index 6035841..086e91e 100644
--- a/pkg/front_end/testcases/inference/try_catch.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/try_catch.dart.weak.expect
@@ -50,7 +50,7 @@
 static method test(() →* void f) → void {
   try {
     core::int* x = 0;
-    f.call();
+    f(){() →* void};
   }
   on self::C* catch(no-exception-var) {
     core::int* x = 0;
diff --git a/pkg/front_end/testcases/inference/try_catch.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/try_catch.dart.weak.transformed.expect
index 6035841..086e91e 100644
--- a/pkg/front_end/testcases/inference/try_catch.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/try_catch.dart.weak.transformed.expect
@@ -50,7 +50,7 @@
 static method test(() →* void f) → void {
   try {
     core::int* x = 0;
-    f.call();
+    f(){() →* void};
   }
   on self::C* catch(no-exception-var) {
     core::int* x = 0;
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.expect b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.expect
index e2c12ae..62db44d 100644
--- a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.expect
@@ -51,7 +51,7 @@
   try
     try {
       core::int* x = 0;
-      f.call();
+      f(){() →* void};
     }
     on self::C* catch(no-exception-var) {
       core::int* x = 0;
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.transformed.expect
index e2c12ae..62db44d 100644
--- a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.transformed.expect
@@ -51,7 +51,7 @@
   try
     try {
       core::int* x = 0;
-      f.call();
+      f(){() →* void};
     }
     on self::C* catch(no-exception-var) {
       core::int* x = 0;
diff --git a/pkg/front_end/testcases/inference/try_catch_promotion.dart.weak.expect b/pkg/front_end/testcases/inference/try_catch_promotion.dart.weak.expect
index adbb087..0f37b73 100644
--- a/pkg/front_end/testcases/inference/try_catch_promotion.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/try_catch_promotion.dart.weak.expect
@@ -39,7 +39,7 @@
 }
 static method test(() →* void f) → void {
   try {
-    f.call();
+    f(){() →* void};
   }
   on self::C* catch(final self::C* x, final core::StackTrace* y) {
     self::C* x1 = x;
diff --git a/pkg/front_end/testcases/inference/try_catch_promotion.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/try_catch_promotion.dart.weak.transformed.expect
index adbb087..0f37b73 100644
--- a/pkg/front_end/testcases/inference/try_catch_promotion.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/try_catch_promotion.dart.weak.transformed.expect
@@ -39,7 +39,7 @@
 }
 static method test(() →* void f) → void {
   try {
-    f.call();
+    f(){() →* void};
   }
   on self::C* catch(final self::C* x, final core::StackTrace* y) {
     self::C* x1 = x;
diff --git a/pkg/front_end/testcases/inference/try_finally.dart.weak.expect b/pkg/front_end/testcases/inference/try_finally.dart.weak.expect
index bb417be..f52f88a 100644
--- a/pkg/front_end/testcases/inference/try_finally.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/try_finally.dart.weak.expect
@@ -5,7 +5,7 @@
 static method test(() →* void f) → void {
   try {
     core::int* x = 0;
-    f.call();
+    f(){() →* void};
   }
   finally {
     core::int* x = 0;
diff --git a/pkg/front_end/testcases/inference/try_finally.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/try_finally.dart.weak.transformed.expect
index bb417be..f52f88a 100644
--- a/pkg/front_end/testcases/inference/try_finally.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/try_finally.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 static method test(() →* void f) → void {
   try {
     core::int* x = 0;
-    f.call();
+    f(){() →* void};
   }
   finally {
     core::int* x = 0;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.expect
index 4fbbdae..4c0ed46 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = ((dynamic x) → core::double* => 1.0).call(() → core::int* {
+  core::double* v = ((dynamic x) → core::double* => 1.0)(() → core::int* {
     return 1;
-  });
+  }){(dynamic) →* core::double*};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.transformed.expect
index 4fbbdae..4c0ed46 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = ((dynamic x) → core::double* => 1.0).call(() → core::int* {
+  core::double* v = ((dynamic x) → core::double* => 1.0)(() → core::int* {
     return 1;
-  });
+  }){(dynamic) →* core::double*};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.expect
index 89d0bd3..2ac59fb 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.expect
@@ -6,7 +6,7 @@
   return 1;
 });
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g.call()];
+  return <self::f::T*>[g(){() →* self::f::T*}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.transformed.expect
index 951265d..c0f9a58 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   return 1;
 });
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g.call());
+  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect
index 2e3ca1e6..ab6bbb7 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect
@@ -25,11 +25,11 @@
  - 'List' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '<' operator.
 var v = (f<dynamic>)(/*@returnType=int**/() {
-          ^".>(invalid-expression "pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:20: Error: This couldn't be parsed.
+          ^"{dynamic}.>(invalid-expression "pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:20: Error: This couldn't be parsed.
 var v = (f<dynamic>)(/*@returnType=int**/() {
-                   ^").call(() → core::int* {
+                   ^"){dynamic}.call(() → core::int* {
   return 1;
 });
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g.call()];
+  return <self::f::T*>[g(){() →* self::f::T*}];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect
index c8e4727..96fca33 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect
@@ -25,11 +25,11 @@
  - 'List' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '<' operator.
 var v = (f<dynamic>)(/*@returnType=int**/() {
-          ^".>(invalid-expression "pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:20: Error: This couldn't be parsed.
+          ^"{dynamic}.>(invalid-expression "pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:20: Error: This couldn't be parsed.
 var v = (f<dynamic>)(/*@returnType=int**/() {
-                   ^").call(() → core::int* {
+                   ^"){dynamic}.call(() → core::int* {
   return 1;
 });
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g.call());
+  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect
index 322ca8f..ca3de8b 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::List<dynamic>* v = (#C1).call<dynamic>(() → core::int* {
+static field core::List<dynamic>* v = (#C1)<dynamic>(() → core::int* {
   return 1;
-});
+}){(() →* dynamic) →* core::List<dynamic>*};
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g.call()];
+  return <self::f::T*>[g(){() →* self::f::T*}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect
index fd6b5b4..1124860 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::List<dynamic>* v = (#C1).call<dynamic>(() → core::int* {
+static field core::List<dynamic>* v = (#C1)<dynamic>(() → core::int* {
   return 1;
-});
+}){(() →* dynamic) →* core::List<dynamic>*};
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g.call());
+  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.expect
index b005e12..06e337e 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.expect
@@ -6,7 +6,7 @@
   return 1;
 });
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g.call()];
+  return <self::f::T*>[g(){() →* self::f::T*}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.transformed.expect
index bff0cad..e7d7199 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   return 1;
 });
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g.call());
+  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect
index 938f89a..d66c0af 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect
@@ -25,11 +25,11 @@
  - 'List' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '<' operator.
 var v = (f<int>)(/*@returnType=int**/() {
-          ^".>(invalid-expression "pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:16: Error: This couldn't be parsed.
+          ^"{dynamic}.>(invalid-expression "pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:16: Error: This couldn't be parsed.
 var v = (f<int>)(/*@returnType=int**/() {
-               ^").call(() → core::int* {
+               ^"){dynamic}.call(() → core::int* {
   return 1;
 });
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g.call()];
+  return <self::f::T*>[g(){() →* self::f::T*}];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect
index c983f6b..6c6b1ff 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect
@@ -25,11 +25,11 @@
  - 'List' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '<' operator.
 var v = (f<int>)(/*@returnType=int**/() {
-          ^".>(invalid-expression "pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:16: Error: This couldn't be parsed.
+          ^"{dynamic}.>(invalid-expression "pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:16: Error: This couldn't be parsed.
 var v = (f<int>)(/*@returnType=int**/() {
-               ^").call(() → core::int* {
+               ^"){dynamic}.call(() → core::int* {
   return 1;
 });
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g.call());
+  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect
index 129610f..169486b 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = (#C1).call<core::int*>(() → core::int* {
+static field core::List<core::int*>* v = (#C1)<core::int*>(() → core::int* {
   return 1;
-});
+}){(() →* core::int*) →* core::List<core::int*>*};
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g.call()];
+  return <self::f::T*>[g(){() →* self::f::T*}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect
index cf09c4f..633c890 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = (#C1).call<core::int*>(() → core::int* {
+static field core::List<core::int*>* v = (#C1)<core::int*>(() → core::int* {
   return 1;
-});
+}){(() →* core::int*) →* core::List<core::int*>*};
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g.call());
+  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.expect
index 4700f6a..720cf75 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.expect
@@ -8,4 +8,4 @@
   });
 }
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g.call()];
+  return <self::f::T*>[g(){() →* self::f::T*}];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.transformed.expect
index 6a725de..a4b1aff 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.transformed.expect
@@ -8,4 +8,4 @@
   });
 }
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g.call());
+  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.expect
index 00386c6..bce5804 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* v = (#C1).call<core::int*>(() → core::int* {
+  core::List<core::int*>* v = (#C1)<core::int*>(() → core::int* {
     return 1;
-  });
+  }){(() →* core::int*) →* core::List<core::int*>*};
 }
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g.call()];
+  return <self::f::T*>[g(){() →* self::f::T*}];
 
 constants  {
   #C1 = tearoff self::f
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.transformed.expect
index 9c69fce..cb153d8 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.transformed.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* v = (#C1).call<core::int*>(() → core::int* {
+  core::List<core::int*>* v = (#C1)<core::int*>(() → core::int* {
     return 1;
-  });
+  }){(() →* core::int*) →* core::List<core::int*>*};
 }
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g.call());
+  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
 
 constants  {
   #C1 = tearoff self::f
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.expect
index 76e37fd..742f60c 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.expect
@@ -3,9 +3,9 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = (#C1).call(() → core::int* {
+  core::double* v = (#C1)(() → core::int* {
     return 1;
-  });
+  }){(dynamic) →* core::double*};
 }
 static method f(dynamic x) → core::double*
   return 1.0;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.transformed.expect
index 76e37fd..742f60c 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.transformed.expect
@@ -3,9 +3,9 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::double* v = (#C1).call(() → core::int* {
+  core::double* v = (#C1)(() → core::int* {
     return 1;
-  });
+  }){(dynamic) →* core::double*};
 }
 static method f(dynamic x) → core::double*
   return 1.0;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.expect
index 102bdb33..7011442a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return <self::C::f::T*>[g.call()];
+    return <self::C::f::T*>[g(){() →* self::C::f::T*}];
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,5 +22,5 @@
 static method main() → dynamic {
   core::List<dynamic>* v = new self::C::•().{self::C::f}<dynamic>(() → core::int* {
     return 1;
-  });
+  }){(() →* dynamic) →* core::List<dynamic>*};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.transformed.expect
index f2717b8..bdd5b5b 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return core::_GrowableList::_literal1<self::C::f::T*>(g.call());
+    return core::_GrowableList::_literal1<self::C::f::T*>(g(){() →* self::C::f::T*});
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,5 +22,5 @@
 static method main() → dynamic {
   core::List<dynamic>* v = new self::C::•().{self::C::f}<dynamic>(() → core::int* {
     return 1;
-  });
+  }){(() →* dynamic) →* core::List<dynamic>*};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.expect
index 9921b26..3df5bcf 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return <self::C::f::T*>[g.call()];
+    return <self::C::f::T*>[g(){() →* self::C::f::T*}];
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,5 +22,5 @@
 static method main() → dynamic {
   core::List<core::int*>* v = new self::C::•().{self::C::f}<core::int*>(() → core::int* {
     return 1;
-  });
+  }){(() →* core::int*) →* core::List<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.transformed.expect
index c33bf91..b967386 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return core::_GrowableList::_literal1<self::C::f::T*>(g.call());
+    return core::_GrowableList::_literal1<self::C::f::T*>(g(){() →* self::C::f::T*});
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,5 +22,5 @@
 static method main() → dynamic {
   core::List<core::int*>* v = new self::C::•().{self::C::f}<core::int*>(() → core::int* {
     return 1;
-  });
+  }){(() →* core::int*) →* core::List<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.expect
index 9921b26..3df5bcf 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return <self::C::f::T*>[g.call()];
+    return <self::C::f::T*>[g(){() →* self::C::f::T*}];
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,5 +22,5 @@
 static method main() → dynamic {
   core::List<core::int*>* v = new self::C::•().{self::C::f}<core::int*>(() → core::int* {
     return 1;
-  });
+  }){(() →* core::int*) →* core::List<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.transformed.expect
index c33bf91..b967386 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
-    return core::_GrowableList::_literal1<self::C::f::T*>(g.call());
+    return core::_GrowableList::_literal1<self::C::f::T*>(g(){() →* self::C::f::T*});
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,5 +22,5 @@
 static method main() → dynamic {
   core::List<core::int*>* v = new self::C::•().{self::C::f}<core::int*>(() → core::int* {
     return 1;
-  });
+  }){(() →* core::int*) →* core::List<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.expect
index bc8459a..f00aa66 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.expect
@@ -21,7 +21,7 @@
 }
 static field core::double* v = new self::C::•().{self::C::f}(() → core::int* {
   return 1;
-});
+}){(dynamic) →* core::double*};
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.transformed.expect
index bc8459a..f00aa66 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
 }
 static field core::double* v = new self::C::•().{self::C::f}(() → core::int* {
   return 1;
-});
+}){(dynamic) →* core::double*};
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.expect
index 9277df0..f86a055 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.expect
@@ -5,7 +5,7 @@
 static field dynamic x = self::run<dynamic>(#C1);
 static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T* {
   core::print("running");
-  self::run::T* t = f.call();
+  self::run::T* t = f(){() →* self::run::T*};
   core::print("done running");
   return t;
 }
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.transformed.expect
index 9277df0..f86a055 100644
--- a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 static field dynamic x = self::run<dynamic>(#C1);
 static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T* {
   core::print("running");
-  self::run::T* t = f.call();
+  self::run::T* t = f(){() →* self::run::T*};
   core::print("done running");
   return t;
 }
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.expect
index 6a3df44..a062019 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.expect
@@ -30,8 +30,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::A* a = new self::A::•();
-static field invalid-type b = () → () →* invalid-type => self::a.{self::A::f}<() →* invalid-type>(self::c);
-static field () →* invalid-type c = () → invalid-type => self::a.{self::A::f}<invalid-type>(self::b);
-static field () →* () →* core::int* d = () → () →* core::int* => self::a.{self::A::f}<() →* core::int*>(self::e);
-static field () →* core::int* e = () → core::int* => self::a.{self::A::g}(self::d);
+static field invalid-type b = () → () →* invalid-type => self::a.{self::A::f}<() →* invalid-type>(self::c){(() →* invalid-type) →* () →* invalid-type};
+static field () →* invalid-type c = () → invalid-type => self::a.{self::A::f}<invalid-type>(self::b){(invalid-type) →* invalid-type};
+static field () →* () →* core::int* d = () → () →* core::int* => self::a.{self::A::f}<() →* core::int*>(self::e){(() →* core::int*) →* () →* core::int*};
+static field () →* core::int* e = () → core::int* => self::a.{self::A::g}(self::d){(dynamic) →* core::int*};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.transformed.expect
index 6a3df44..a062019 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.transformed.expect
@@ -30,8 +30,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::A* a = new self::A::•();
-static field invalid-type b = () → () →* invalid-type => self::a.{self::A::f}<() →* invalid-type>(self::c);
-static field () →* invalid-type c = () → invalid-type => self::a.{self::A::f}<invalid-type>(self::b);
-static field () →* () →* core::int* d = () → () →* core::int* => self::a.{self::A::f}<() →* core::int*>(self::e);
-static field () →* core::int* e = () → core::int* => self::a.{self::A::g}(self::d);
+static field invalid-type b = () → () →* invalid-type => self::a.{self::A::f}<() →* invalid-type>(self::c){(() →* invalid-type) →* () →* invalid-type};
+static field () →* invalid-type c = () → invalid-type => self::a.{self::A::f}<invalid-type>(self::b){(invalid-type) →* invalid-type};
+static field () →* () →* core::int* d = () → () →* core::int* => self::a.{self::A::f}<() →* core::int*>(self::e){(() →* core::int*) →* () →* core::int*};
+static field () →* core::int* e = () → core::int* => self::a.{self::A::g}(self::d){(dynamic) →* core::int*};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.expect
index 70eab38..3ae5f85 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.expect
@@ -13,10 +13,10 @@
 static field core::int* intValue = 0;
 static field core::num* numValue = 0;
 static field core::double* doubleValue = 0.0;
-static field invalid-type a = () → core::num* => self::intValue.{core::num::+}(self::b as{TypeError,ForDynamic} core::num*);
-static field dynamic b = self::a.call();
-static field () →* core::num* c = () → core::num* => self::numValue.{core::num::+}(self::d);
-static field core::num* d = self::c.call();
-static field () →* core::double* e = () → core::double* => self::doubleValue.{core::double::+}(self::f);
-static field core::double* f = self::e.call();
+static field invalid-type a = () → core::num* => self::intValue.{core::num::+}(self::b as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+static field dynamic b = self::a{dynamic}.call();
+static field () →* core::num* c = () → core::num* => self::numValue.{core::num::+}(self::d){(core::num*) →* core::num*};
+static field core::num* d = self::c(){() →* core::num*};
+static field () →* core::double* e = () → core::double* => self::doubleValue.{core::double::+}(self::f){(core::num*) →* core::double*};
+static field core::double* f = self::e(){() →* core::double*};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.transformed.expect
index 70eab38..3ae5f85 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.transformed.expect
@@ -13,10 +13,10 @@
 static field core::int* intValue = 0;
 static field core::num* numValue = 0;
 static field core::double* doubleValue = 0.0;
-static field invalid-type a = () → core::num* => self::intValue.{core::num::+}(self::b as{TypeError,ForDynamic} core::num*);
-static field dynamic b = self::a.call();
-static field () →* core::num* c = () → core::num* => self::numValue.{core::num::+}(self::d);
-static field core::num* d = self::c.call();
-static field () →* core::double* e = () → core::double* => self::doubleValue.{core::double::+}(self::f);
-static field core::double* f = self::e.call();
+static field invalid-type a = () → core::num* => self::intValue.{core::num::+}(self::b as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+static field dynamic b = self::a{dynamic}.call();
+static field () →* core::num* c = () → core::num* => self::numValue.{core::num::+}(self::d){(core::num*) →* core::num*};
+static field core::num* d = self::c(){() →* core::num*};
+static field () →* core::double* e = () → core::double* => self::doubleValue.{core::double::+}(self::f){(core::num*) →* core::double*};
+static field core::double* f = self::e(){() →* core::double*};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.expect
index eac251e..b83a5f8 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.expect
@@ -11,8 +11,8 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field invalid-type x = () → invalid-type => new self::B::•().{self::B::x};
-  field () →* invalid-type y = () → invalid-type => new self::B::•().{self::B::x};
+  field invalid-type x = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
+  field () →* invalid-type y = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.transformed.expect
index eac251e..b83a5f8 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.transformed.expect
@@ -11,8 +11,8 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field invalid-type x = () → invalid-type => new self::B::•().{self::B::x};
-  field () →* invalid-type y = () → invalid-type => new self::B::•().{self::B::x};
+  field invalid-type x = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
+  field () →* invalid-type y = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.expect
index 9bd9561..cf8fb9e 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.expect
@@ -111,15 +111,15 @@
 static method f<T extends core::Object* = dynamic>() → self::f::T*
   return null;
 static method test1(self::G* g) → void {
-  let final self::G* #t1 = g in let final core::int* #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2).{self::A::*}(self::f<self::D*>()));
-  self::C* x = let final self::G* #t3 = g in let final core::int* #t4 = 0 in let final self::C* #t5 = #t3.{self::G::[]}(#t4).{self::A::*}(self::f<self::D*>()) in let final void #t6 = #t3.{self::G::[]=}(#t4, #t5) in #t5;
+  let final self::G* #t1 = g in let final core::int* #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2){(core::int*) →* self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*}){(core::int*, self::B*) →* void};
+  self::C* x = let final self::G* #t3 = g in let final core::int* #t4 = 0 in let final self::C* #t5 = #t3.{self::G::[]}(#t4){(core::int*) →* self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*} in let final void #t6 = #t3.{self::G::[]=}(#t4, #t5){(core::int*, self::B*) →* void} in #t5;
 }
 static method test2(self::G* g) → void {
-  let final self::G* #t7 = g in let final core::int* #t8 = 0 in let final self::C* #t9 = #t7.{self::G::[]}(#t8).{self::A::+}(1) in let final void #t10 = #t7.{self::G::[]=}(#t8, #t9) in #t9;
-  self::C* x = let final self::G* #t11 = g in let final core::int* #t12 = 0 in let final self::C* #t13 = #t11.{self::G::[]}(#t12).{self::A::+}(1) in let final void #t14 = #t11.{self::G::[]=}(#t12, #t13) in #t13;
+  let final self::G* #t7 = g in let final core::int* #t8 = 0 in let final self::C* #t9 = #t7.{self::G::[]}(#t8){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*} in let final void #t10 = #t7.{self::G::[]=}(#t8, #t9){(core::int*, self::B*) →* void} in #t9;
+  self::C* x = let final self::G* #t11 = g in let final core::int* #t12 = 0 in let final self::C* #t13 = #t11.{self::G::[]}(#t12){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*} in let final void #t14 = #t11.{self::G::[]=}(#t12, #t13){(core::int*, self::B*) →* void} in #t13;
 }
 static method test3(self::G* g) → void {
-  let final self::G* #t15 = g in let final core::int* #t16 = 0 in #t15.{self::G::[]=}(#t16, #t15.{self::G::[]}(#t16).{self::A::+}(1));
-  self::A* x = let final self::G* #t17 = g in let final core::int* #t18 = 0 in let final self::A* #t19 = #t17.{self::G::[]}(#t18) in let final void #t20 = #t17.{self::G::[]=}(#t18, #t19.{self::A::+}(1)) in #t19;
+  let final self::G* #t15 = g in let final core::int* #t16 = 0 in #t15.{self::G::[]=}(#t16, #t15.{self::G::[]}(#t16){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*}){(core::int*, self::B*) →* void};
+  self::A* x = let final self::G* #t17 = g in let final core::int* #t18 = 0 in let final self::A* #t19 = #t17.{self::G::[]}(#t18){(core::int*) →* self::A*} in let final void #t20 = #t17.{self::G::[]=}(#t18, #t19.{self::A::+}(1){(core::int*) →* self::C*}){(core::int*, self::B*) →* void} in #t19;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.transformed.expect
index 2c14e98..a14cd5c 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.transformed.expect
@@ -111,16 +111,16 @@
 static method f<T extends core::Object* = dynamic>() → self::f::T*
   return null;
 static method test1(self::G* g) → void {
-  let final self::G* #t1 = g in let final core::int* #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2).{self::A::*}(self::f<self::D*>()));
-  self::C* x = let final self::G* #t3 = g in let final core::int* #t4 = 0 in let final self::C* #t5 = #t3.{self::G::[]}(#t4).{self::A::*}(self::f<self::D*>()) in let final void #t6 = #t3.{self::G::[]=}(#t4, #t5) in #t5;
+  let final self::G* #t1 = g in let final core::int* #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2){(core::int*) →* self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*}){(core::int*, self::B*) →* void};
+  self::C* x = let final self::G* #t3 = g in let final core::int* #t4 = 0 in let final self::C* #t5 = #t3.{self::G::[]}(#t4){(core::int*) →* self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*} in let final void #t6 = #t3.{self::G::[]=}(#t4, #t5){(core::int*, self::B*) →* void} in #t5;
 }
 static method test2(self::G* g) → void {
-  let final self::G* #t7 = g in let final core::int* #t8 = 0 in let final self::C* #t9 = #t7.{self::G::[]}(#t8).{self::A::+}(1) in let final void #t10 = #t7.{self::G::[]=}(#t8, #t9) in #t9;
-  self::C* x = let final self::G* #t11 = g in let final core::int* #t12 = 0 in let final self::C* #t13 = #t11.{self::G::[]}(#t12).{self::A::+}(1) in let final void #t14 = #t11.{self::G::[]=}(#t12, #t13) in #t13;
+  let final self::G* #t7 = g in let final core::int* #t8 = 0 in let final self::C* #t9 = #t7.{self::G::[]}(#t8){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*} in let final void #t10 = #t7.{self::G::[]=}(#t8, #t9){(core::int*, self::B*) →* void} in #t9;
+  self::C* x = let final self::G* #t11 = g in let final core::int* #t12 = 0 in let final self::C* #t13 = #t11.{self::G::[]}(#t12){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*} in let final void #t14 = #t11.{self::G::[]=}(#t12, #t13){(core::int*, self::B*) →* void} in #t13;
 }
 static method test3(self::G* g) → void {
-  let final self::G* #t15 = g in let final core::int* #t16 = 0 in #t15.{self::G::[]=}(#t16, #t15.{self::G::[]}(#t16).{self::A::+}(1));
-  self::A* x = let final self::G* #t17 = g in let final core::int* #t18 = 0 in let final self::A* #t19 = #t17.{self::G::[]}(#t18) in let final void #t20 = #t17.{self::G::[]=}(#t18, #t19.{self::A::+}(1)) in #t19;
+  let final self::G* #t15 = g in let final core::int* #t16 = 0 in #t15.{self::G::[]=}(#t16, #t15.{self::G::[]}(#t16){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*}){(core::int*, self::B*) →* void};
+  self::A* x = let final self::G* #t17 = g in let final core::int* #t18 = 0 in let final self::A* #t19 = #t17.{self::G::[]}(#t18){(core::int*) →* self::A*} in let final void #t20 = #t17.{self::G::[]=}(#t18, #t19.{self::A::+}(1){(core::int*) →* self::C*}){(core::int*, self::B*) →* void} in #t19;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.expect
index a36e492..43a39ef 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.expect
@@ -42,19 +42,19 @@
     ;
   method test() → void {
     this.{self::Test::member} = self::f<self::B*>();
-    this.{self::Test::member}.{self::A::==}(null) ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::-}(1);
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::-}(1);
+    this.{self::Test::member}{self::B*} == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = this.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = this.{self::Test::member} in #t1.{self::A::==}(null) ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}.{self::B::-}(1);
-    self::B* v7 = let final self::B* #t2 = this.{self::Test::member} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1) in #t2;
+    self::B* v2 = let final self::B* #t1 = this.{self::Test::member}{self::B*} in #t1 == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
+    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::B* #t2 = this.{self::Test::member}{self::B*} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.transformed.expect
index a36e492..43a39ef 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.transformed.expect
@@ -42,19 +42,19 @@
     ;
   method test() → void {
     this.{self::Test::member} = self::f<self::B*>();
-    this.{self::Test::member}.{self::A::==}(null) ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::-}(1);
-    this.{self::Test::member} = this.{self::Test::member}.{self::B::-}(1);
+    this.{self::Test::member}{self::B*} == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = this.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = this.{self::Test::member} in #t1.{self::A::==}(null) ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}.{self::B::-}(1);
-    self::B* v7 = let final self::B* #t2 = this.{self::Test::member} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1) in #t2;
+    self::B* v2 = let final self::B* #t1 = this.{self::Test::member}{self::B*} in #t1 == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
+    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::B* #t2 = this.{self::Test::member}{self::B*} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.weak.expect
index 7358171..c9e63c0 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.weak.expect
@@ -10,12 +10,12 @@
   method test() → void {
     core::int* v1 = this.{self::Test1::t} = self::getInt();
     core::num* v2 = this.{self::Test1::t} = self::getNum() as{TypeError} core::int*;
-    core::int* v4 = let final core::int* #t1 = this.{self::Test1::t} in #t1.{core::num::==}(null) ?{core::int*} this.{self::Test1::t} = self::getInt() : #t1;
-    core::num* v5 = let final core::int* #t2 = this.{self::Test1::t} in #t2.{core::num::==}(null) ?{core::num*} this.{self::Test1::t} = self::getNum() as{TypeError} core::int* : #t2;
-    core::int* v7 = this.{self::Test1::t} = this.{self::Test1::t}.{core::num::+}(self::getInt());
-    core::num* v8 = this.{self::Test1::t} = this.{self::Test1::t}.{core::num::+}(self::getNum()) as{TypeError} core::int*;
-    core::int* v10 = this.{self::Test1::t} = this.{self::Test1::t}.{core::num::+}(1);
-    core::int* v11 = let final core::int* #t3 = this.{self::Test1::t} in let final core::int* #t4 = this.{self::Test1::t} = #t3.{core::num::+}(1) in #t3;
+    core::int* v4 = let final core::int* #t1 = this.{self::Test1::t}{core::int*} in #t1 == null ?{core::int*} this.{self::Test1::t} = self::getInt() : #t1;
+    core::num* v5 = let final core::int* #t2 = this.{self::Test1::t}{core::int*} in #t2 == null ?{core::num*} this.{self::Test1::t} = self::getNum() as{TypeError} core::int* : #t2;
+    core::int* v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::num* v8 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+    core::int* v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final core::int* #t3 = this.{self::Test1::t}{core::int*} in let final core::int* #t4 = this.{self::Test1::t} = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -37,14 +37,14 @@
     core::int* v1 = this.{self::Test2::t} = self::getInt();
     core::num* v2 = this.{self::Test2::t} = self::getNum();
     core::double* v3 = this.{self::Test2::t} = self::getDouble();
-    core::num* v4 = let final core::num* #t5 = this.{self::Test2::t} in #t5.{core::num::==}(null) ?{core::num*} this.{self::Test2::t} = self::getInt() : #t5;
-    core::num* v5 = let final core::num* #t6 = this.{self::Test2::t} in #t6.{core::num::==}(null) ?{core::num*} this.{self::Test2::t} = self::getNum() : #t6;
-    core::num* v6 = let final core::num* #t7 = this.{self::Test2::t} in #t7.{core::num::==}(null) ?{core::num*} this.{self::Test2::t} = self::getDouble() : #t7;
-    core::num* v7 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(self::getInt());
-    core::num* v8 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(self::getNum());
-    core::num* v9 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(self::getDouble());
-    core::num* v10 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(1);
-    core::num* v11 = let final core::num* #t8 = this.{self::Test2::t} in let final core::num* #t9 = this.{self::Test2::t} = #t8.{core::num::+}(1) in #t8;
+    core::num* v4 = let final core::num* #t5 = this.{self::Test2::t}{core::num*} in #t5 == null ?{core::num*} this.{self::Test2::t} = self::getInt() : #t5;
+    core::num* v5 = let final core::num* #t6 = this.{self::Test2::t}{core::num*} in #t6 == null ?{core::num*} this.{self::Test2::t} = self::getNum() : #t6;
+    core::num* v6 = let final core::num* #t7 = this.{self::Test2::t}{core::num*} in #t7 == null ?{core::num*} this.{self::Test2::t} = self::getDouble() : #t7;
+    core::num* v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final core::num* #t8 = this.{self::Test2::t}{core::num*} in let final core::num* #t9 = this.{self::Test2::t} = #t8.{core::num::+}(1){(core::num*) →* core::num*} in #t8;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -65,13 +65,13 @@
   method test3() → void {
     core::num* v2 = this.{self::Test3::t} = self::getNum() as{TypeError} core::double*;
     core::double* v3 = this.{self::Test3::t} = self::getDouble();
-    core::num* v5 = let final core::double* #t10 = this.{self::Test3::t} in #t10.{core::num::==}(null) ?{core::num*} this.{self::Test3::t} = self::getNum() as{TypeError} core::double* : #t10;
-    core::double* v6 = let final core::double* #t11 = this.{self::Test3::t} in #t11.{core::num::==}(null) ?{core::double*} this.{self::Test3::t} = self::getDouble() : #t11;
-    core::double* v7 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(self::getInt());
-    core::double* v8 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(self::getNum());
-    core::double* v9 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(self::getDouble());
-    core::double* v10 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(1);
-    core::double* v11 = let final core::double* #t12 = this.{self::Test3::t} in let final core::double* #t13 = this.{self::Test3::t} = #t12.{core::double::+}(1) in #t12;
+    core::num* v5 = let final core::double* #t10 = this.{self::Test3::t}{core::double*} in #t10 == null ?{core::num*} this.{self::Test3::t} = self::getNum() as{TypeError} core::double* : #t10;
+    core::double* v6 = let final core::double* #t11 = this.{self::Test3::t}{core::double*} in #t11 == null ?{core::double*} this.{self::Test3::t} = self::getDouble() : #t11;
+    core::double* v7 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final core::double* #t12 = this.{self::Test3::t}{core::double*} in let final core::double* #t13 = this.{self::Test3::t} = #t12.{core::double::+}(1){(core::num*) →* core::double*} in #t12;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.weak.transformed.expect
index 7358171..c9e63c0 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.weak.transformed.expect
@@ -10,12 +10,12 @@
   method test() → void {
     core::int* v1 = this.{self::Test1::t} = self::getInt();
     core::num* v2 = this.{self::Test1::t} = self::getNum() as{TypeError} core::int*;
-    core::int* v4 = let final core::int* #t1 = this.{self::Test1::t} in #t1.{core::num::==}(null) ?{core::int*} this.{self::Test1::t} = self::getInt() : #t1;
-    core::num* v5 = let final core::int* #t2 = this.{self::Test1::t} in #t2.{core::num::==}(null) ?{core::num*} this.{self::Test1::t} = self::getNum() as{TypeError} core::int* : #t2;
-    core::int* v7 = this.{self::Test1::t} = this.{self::Test1::t}.{core::num::+}(self::getInt());
-    core::num* v8 = this.{self::Test1::t} = this.{self::Test1::t}.{core::num::+}(self::getNum()) as{TypeError} core::int*;
-    core::int* v10 = this.{self::Test1::t} = this.{self::Test1::t}.{core::num::+}(1);
-    core::int* v11 = let final core::int* #t3 = this.{self::Test1::t} in let final core::int* #t4 = this.{self::Test1::t} = #t3.{core::num::+}(1) in #t3;
+    core::int* v4 = let final core::int* #t1 = this.{self::Test1::t}{core::int*} in #t1 == null ?{core::int*} this.{self::Test1::t} = self::getInt() : #t1;
+    core::num* v5 = let final core::int* #t2 = this.{self::Test1::t}{core::int*} in #t2 == null ?{core::num*} this.{self::Test1::t} = self::getNum() as{TypeError} core::int* : #t2;
+    core::int* v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::num* v8 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+    core::int* v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final core::int* #t3 = this.{self::Test1::t}{core::int*} in let final core::int* #t4 = this.{self::Test1::t} = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -37,14 +37,14 @@
     core::int* v1 = this.{self::Test2::t} = self::getInt();
     core::num* v2 = this.{self::Test2::t} = self::getNum();
     core::double* v3 = this.{self::Test2::t} = self::getDouble();
-    core::num* v4 = let final core::num* #t5 = this.{self::Test2::t} in #t5.{core::num::==}(null) ?{core::num*} this.{self::Test2::t} = self::getInt() : #t5;
-    core::num* v5 = let final core::num* #t6 = this.{self::Test2::t} in #t6.{core::num::==}(null) ?{core::num*} this.{self::Test2::t} = self::getNum() : #t6;
-    core::num* v6 = let final core::num* #t7 = this.{self::Test2::t} in #t7.{core::num::==}(null) ?{core::num*} this.{self::Test2::t} = self::getDouble() : #t7;
-    core::num* v7 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(self::getInt());
-    core::num* v8 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(self::getNum());
-    core::num* v9 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(self::getDouble());
-    core::num* v10 = this.{self::Test2::t} = this.{self::Test2::t}.{core::num::+}(1);
-    core::num* v11 = let final core::num* #t8 = this.{self::Test2::t} in let final core::num* #t9 = this.{self::Test2::t} = #t8.{core::num::+}(1) in #t8;
+    core::num* v4 = let final core::num* #t5 = this.{self::Test2::t}{core::num*} in #t5 == null ?{core::num*} this.{self::Test2::t} = self::getInt() : #t5;
+    core::num* v5 = let final core::num* #t6 = this.{self::Test2::t}{core::num*} in #t6 == null ?{core::num*} this.{self::Test2::t} = self::getNum() : #t6;
+    core::num* v6 = let final core::num* #t7 = this.{self::Test2::t}{core::num*} in #t7 == null ?{core::num*} this.{self::Test2::t} = self::getDouble() : #t7;
+    core::num* v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final core::num* #t8 = this.{self::Test2::t}{core::num*} in let final core::num* #t9 = this.{self::Test2::t} = #t8.{core::num::+}(1){(core::num*) →* core::num*} in #t8;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -65,13 +65,13 @@
   method test3() → void {
     core::num* v2 = this.{self::Test3::t} = self::getNum() as{TypeError} core::double*;
     core::double* v3 = this.{self::Test3::t} = self::getDouble();
-    core::num* v5 = let final core::double* #t10 = this.{self::Test3::t} in #t10.{core::num::==}(null) ?{core::num*} this.{self::Test3::t} = self::getNum() as{TypeError} core::double* : #t10;
-    core::double* v6 = let final core::double* #t11 = this.{self::Test3::t} in #t11.{core::num::==}(null) ?{core::double*} this.{self::Test3::t} = self::getDouble() : #t11;
-    core::double* v7 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(self::getInt());
-    core::double* v8 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(self::getNum());
-    core::double* v9 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(self::getDouble());
-    core::double* v10 = this.{self::Test3::t} = this.{self::Test3::t}.{core::double::+}(1);
-    core::double* v11 = let final core::double* #t12 = this.{self::Test3::t} in let final core::double* #t13 = this.{self::Test3::t} = #t12.{core::double::+}(1) in #t12;
+    core::num* v5 = let final core::double* #t10 = this.{self::Test3::t}{core::double*} in #t10 == null ?{core::num*} this.{self::Test3::t} = self::getNum() as{TypeError} core::double* : #t10;
+    core::double* v6 = let final core::double* #t11 = this.{self::Test3::t}{core::double*} in #t11 == null ?{core::double*} this.{self::Test3::t} = self::getDouble() : #t11;
+    core::double* v7 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final core::double* #t12 = this.{self::Test3::t}{core::double*} in let final core::double* #t13 = this.{self::Test3::t} = #t12.{core::double::+}(1){(core::num*) →* core::double*} in #t12;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.expect
index 7d38c0b..f6ef830 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.expect
@@ -3,5 +3,5 @@
 import "dart:core" as core;
 
 static field core::List<core::double*>* a = <core::double*>[];
-static field core::double* b = let final core::List<core::double*>* #t1 = self::a in let final core::int* #t2 = 0 in let final core::double* #t3 = 1.0 in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
+static field core::double* b = let final core::List<core::double*>* #t1 = self::a in let final core::int* #t2 = 0 in let final core::double* #t3 = 1.0 in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, core::double*) →* void} in #t3;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.transformed.expect
index c46cd53..d457863 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static field core::List<core::double*>* a = core::_GrowableList::•<core::double*>(0);
-static field core::double* b = let final core::List<core::double*>* #t1 = self::a in let final core::int* #t2 = 0 in let final core::double* #t3 = 1.0 in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
+static field core::double* b = let final core::List<core::double*>* #t1 = self::a in let final core::int* #t2 = 0 in let final core::double* #t3 = 1.0 in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, core::double*) →* void} in #t3;
 static method main() → dynamic {}
 
 
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.expect
index 406e14d..8b4ab90 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.expect
@@ -59,22 +59,22 @@
   operator []=(self::Index* i, self::B* v) → void {}
   method test() → void {
     self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>());
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2).{self::A::==}(null) ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()) : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*);
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6).{self::B::*}(self::f<self::B*>()));
-    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8).{self::B::&}(self::f<self::A*>()));
-    t.{self::Test::[]}(self::f<self::Index*>());
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10).{self::B::-}(1) in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11) in #t11;
-    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14).{self::B::-}(1));
-    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17) in #t17;
-    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20) in #t21.{self::A::==}(null) ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22) in #t22 : #t21;
-    self::A* v3 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::A* #t26 = #t24.{self::Test::[]}(#t25).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26) in #t26;
-    self::B* v4 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29).{self::B::*}(self::f<self::B*>()) in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30) in #t30;
-    self::C* v5 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::C* #t34 = #t32.{self::Test::[]}(#t33).{self::B::&}(self::f<self::A*>()) in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34) in #t34;
-    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>());
-    self::B* v7 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37).{self::B::-}(1) in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38) in #t38;
-    self::B* v8 = let final self::Test* #t40 = t in let final self::Index* #t41 = self::f<self::Index*>() in let final self::B* #t42 = #t40.{self::Test::[]}(#t41) in let final void #t43 = #t40.{self::Test::[]=}(#t41, #t42.{self::B::-}(1)) in #t42;
+    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
+    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
+    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
+    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
+    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
+    t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
+    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index*, self::B*) →* void} in #t11;
+    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
+    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
+    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20){(self::Index*) →* self::B*} in #t21 == null ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22){(self::Index*, self::B*) →* void} in #t22 : #t21;
+    self::A* v3 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::A* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
+    self::B* v4 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index*, self::B*) →* void} in #t30;
+    self::C* v5 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::C* #t34 = #t32.{self::Test::[]}(#t33){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index*, self::B*) →* void} in #t34;
+    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
+    self::B* v7 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38){(self::Index*, self::B*) →* void} in #t38;
+    self::B* v8 = let final self::Test* #t40 = t in let final self::Index* #t41 = self::f<self::Index*>() in let final self::B* #t42 = #t40.{self::Test::[]}(#t41){(self::Index*) →* self::B*} in let final void #t43 = #t40.{self::Test::[]=}(#t41, #t42.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t42;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.transformed.expect
index 406e14d..8b4ab90 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.transformed.expect
@@ -59,22 +59,22 @@
   operator []=(self::Index* i, self::B* v) → void {}
   method test() → void {
     self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>());
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2).{self::A::==}(null) ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()) : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*);
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6).{self::B::*}(self::f<self::B*>()));
-    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8).{self::B::&}(self::f<self::A*>()));
-    t.{self::Test::[]}(self::f<self::Index*>());
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10).{self::B::-}(1) in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11) in #t11;
-    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14).{self::B::-}(1));
-    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17) in #t17;
-    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20) in #t21.{self::A::==}(null) ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22) in #t22 : #t21;
-    self::A* v3 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::A* #t26 = #t24.{self::Test::[]}(#t25).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26) in #t26;
-    self::B* v4 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29).{self::B::*}(self::f<self::B*>()) in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30) in #t30;
-    self::C* v5 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::C* #t34 = #t32.{self::Test::[]}(#t33).{self::B::&}(self::f<self::A*>()) in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34) in #t34;
-    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>());
-    self::B* v7 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37).{self::B::-}(1) in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38) in #t38;
-    self::B* v8 = let final self::Test* #t40 = t in let final self::Index* #t41 = self::f<self::Index*>() in let final self::B* #t42 = #t40.{self::Test::[]}(#t41) in let final void #t43 = #t40.{self::Test::[]=}(#t41, #t42.{self::B::-}(1)) in #t42;
+    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
+    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
+    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
+    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
+    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
+    t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
+    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index*, self::B*) →* void} in #t11;
+    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
+    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
+    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20){(self::Index*) →* self::B*} in #t21 == null ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22){(self::Index*, self::B*) →* void} in #t22 : #t21;
+    self::A* v3 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::A* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
+    self::B* v4 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index*, self::B*) →* void} in #t30;
+    self::C* v5 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::C* #t34 = #t32.{self::Test::[]}(#t33){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index*, self::B*) →* void} in #t34;
+    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
+    self::B* v7 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38){(self::Index*, self::B*) →* void} in #t38;
+    self::B* v8 = let final self::Test* #t40 = t in let final self::Index* #t41 = self::f<self::Index*>() in let final self::B* #t42 = #t40.{self::Test::[]}(#t41){(self::Index*) →* self::B*} in let final void #t43 = #t40.{self::Test::[]=}(#t41, #t42.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t42;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.expect
index 1f1375b..685af9c 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.expect
@@ -74,16 +74,16 @@
   operator []=(self::Index* i, self::A* v) → void {}
   method test() → void {
     self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::A*>());
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2).{self::A::==}(null) ?{self::A*} #t1.{self::Test::[]=}(#t2, self::f<self::A*>()) : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4).{self::B::+}(self::f<self::E*>()));
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in let final self::D* #t7 = #t5.{self::Test::[]}(#t6).{self::B::-}(1) in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7) in #t7;
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in #t9.{self::Test::[]=}(#t10, #t9.{self::Test::[]}(#t10).{self::B::-}(1));
-    self::A* v1 = let final self::Test* #t11 = t in let final self::Index* #t12 = self::f<self::Index*>() in let final self::A* #t13 = self::f<self::A*>() in let final void #t14 = #t11.{self::Test::[]=}(#t12, #t13) in #t13;
-    self::A* v2 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = #t15.{self::Test::[]}(#t16) in #t17.{self::A::==}(null) ?{self::A*} let final self::A* #t18 = self::f<self::A*>() in let final void #t19 = #t15.{self::Test::[]=}(#t16, #t18) in #t18 : #t17;
-    self::D* v3 = let final self::Test* #t20 = t in let final self::Index* #t21 = self::f<self::Index*>() in let final self::D* #t22 = #t20.{self::Test::[]}(#t21).{self::B::+}(self::f<self::E*>()) in let final void #t23 = #t20.{self::Test::[]=}(#t21, #t22) in #t22;
-    self::D* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::D* #t26 = #t24.{self::Test::[]}(#t25).{self::B::-}(1) in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26) in #t26;
-    self::B* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29) in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30.{self::B::-}(1)) in #t30;
+    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::A*>()){(self::Index*, self::A*) →* void};
+    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::A*} #t1.{self::Test::[]=}(#t2, self::f<self::A*>()){(self::Index*, self::A*) →* void} : null;
+    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::E*>()){(self::E*) →* self::D*}){(self::Index*, self::A*) →* void};
+    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in let final self::D* #t7 = #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*} in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7){(self::Index*, self::A*) →* void} in #t7;
+    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in #t9.{self::Test::[]=}(#t10, #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*}){(self::Index*, self::A*) →* void};
+    self::A* v1 = let final self::Test* #t11 = t in let final self::Index* #t12 = self::f<self::Index*>() in let final self::A* #t13 = self::f<self::A*>() in let final void #t14 = #t11.{self::Test::[]=}(#t12, #t13){(self::Index*, self::A*) →* void} in #t13;
+    self::A* v2 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = #t15.{self::Test::[]}(#t16){(self::Index*) →* self::B*} in #t17 == null ?{self::A*} let final self::A* #t18 = self::f<self::A*>() in let final void #t19 = #t15.{self::Test::[]=}(#t16, #t18){(self::Index*, self::A*) →* void} in #t18 : #t17;
+    self::D* v3 = let final self::Test* #t20 = t in let final self::Index* #t21 = self::f<self::Index*>() in let final self::D* #t22 = #t20.{self::Test::[]}(#t21){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::E*>()){(self::E*) →* self::D*} in let final void #t23 = #t20.{self::Test::[]=}(#t21, #t22){(self::Index*, self::A*) →* void} in #t22;
+    self::D* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::D* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::A*) →* void} in #t26;
+    self::B* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30.{self::B::-}(1){(core::int*) →* self::D*}){(self::Index*, self::A*) →* void} in #t30;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.transformed.expect
index 1f1375b..685af9c 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.transformed.expect
@@ -74,16 +74,16 @@
   operator []=(self::Index* i, self::A* v) → void {}
   method test() → void {
     self::Test* t = self::f<self::Test*>();
-    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::A*>());
-    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2).{self::A::==}(null) ?{self::A*} #t1.{self::Test::[]=}(#t2, self::f<self::A*>()) : null;
-    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4).{self::B::+}(self::f<self::E*>()));
-    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in let final self::D* #t7 = #t5.{self::Test::[]}(#t6).{self::B::-}(1) in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7) in #t7;
-    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in #t9.{self::Test::[]=}(#t10, #t9.{self::Test::[]}(#t10).{self::B::-}(1));
-    self::A* v1 = let final self::Test* #t11 = t in let final self::Index* #t12 = self::f<self::Index*>() in let final self::A* #t13 = self::f<self::A*>() in let final void #t14 = #t11.{self::Test::[]=}(#t12, #t13) in #t13;
-    self::A* v2 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = #t15.{self::Test::[]}(#t16) in #t17.{self::A::==}(null) ?{self::A*} let final self::A* #t18 = self::f<self::A*>() in let final void #t19 = #t15.{self::Test::[]=}(#t16, #t18) in #t18 : #t17;
-    self::D* v3 = let final self::Test* #t20 = t in let final self::Index* #t21 = self::f<self::Index*>() in let final self::D* #t22 = #t20.{self::Test::[]}(#t21).{self::B::+}(self::f<self::E*>()) in let final void #t23 = #t20.{self::Test::[]=}(#t21, #t22) in #t22;
-    self::D* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::D* #t26 = #t24.{self::Test::[]}(#t25).{self::B::-}(1) in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26) in #t26;
-    self::B* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29) in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30.{self::B::-}(1)) in #t30;
+    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::A*>()){(self::Index*, self::A*) →* void};
+    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::A*} #t1.{self::Test::[]=}(#t2, self::f<self::A*>()){(self::Index*, self::A*) →* void} : null;
+    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::E*>()){(self::E*) →* self::D*}){(self::Index*, self::A*) →* void};
+    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in let final self::D* #t7 = #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*} in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7){(self::Index*, self::A*) →* void} in #t7;
+    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in #t9.{self::Test::[]=}(#t10, #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*}){(self::Index*, self::A*) →* void};
+    self::A* v1 = let final self::Test* #t11 = t in let final self::Index* #t12 = self::f<self::Index*>() in let final self::A* #t13 = self::f<self::A*>() in let final void #t14 = #t11.{self::Test::[]=}(#t12, #t13){(self::Index*, self::A*) →* void} in #t13;
+    self::A* v2 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = #t15.{self::Test::[]}(#t16){(self::Index*) →* self::B*} in #t17 == null ?{self::A*} let final self::A* #t18 = self::f<self::A*>() in let final void #t19 = #t15.{self::Test::[]=}(#t16, #t18){(self::Index*, self::A*) →* void} in #t18 : #t17;
+    self::D* v3 = let final self::Test* #t20 = t in let final self::Index* #t21 = self::f<self::Index*>() in let final self::D* #t22 = #t20.{self::Test::[]}(#t21){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::E*>()){(self::E*) →* self::D*} in let final void #t23 = #t20.{self::Test::[]=}(#t21, #t22){(self::Index*, self::A*) →* void} in #t22;
+    self::D* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::D* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::A*) →* void} in #t26;
+    self::B* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30.{self::B::-}(1){(core::int*) →* self::D*}){(self::Index*, self::A*) →* void} in #t30;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.weak.expect
index 96b0328..3a7a814 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.weak.expect
@@ -74,19 +74,19 @@
     ;
   method test() → void {
     super.{self::Base::[]=}(self::f<self::Index*>(), self::f<self::B*>());
-    let final self::Index* #t1 = self::f<self::Index*>() in super.{self::Base::[]}(#t1).{self::A::==}(null) ?{self::B*} super.{self::Base::[]=}(#t1, self::f<self::B*>()) : null;
-    let final self::Index* #t2 = self::f<self::Index*>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*);
-    let final self::Index* #t3 = self::f<self::Index*>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::*}(self::f<self::B*>()));
-    let final self::Index* #t4 = self::f<self::Index*>() in super.{self::Base::[]=}(#t4, super.{self::Base::[]}(#t4).{self::B::&}(self::f<self::A*>()));
-    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = super.{self::Base::[]}(#t5).{self::B::-}(1) in let final void #t7 = super.{self::Base::[]=}(#t5, #t6) in #t6;
-    let final self::Index* #t8 = self::f<self::Index*>() in super.{self::Base::[]=}(#t8, super.{self::Base::[]}(#t8).{self::B::-}(1));
+    let final self::Index* #t1 = self::f<self::Index*>() in super.{self::Base::[]}(#t1) == null ?{self::B*} super.{self::Base::[]=}(#t1, self::f<self::B*>()) : null;
+    let final self::Index* #t2 = self::f<self::Index*>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*);
+    let final self::Index* #t3 = self::f<self::Index*>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*});
+    let final self::Index* #t4 = self::f<self::Index*>() in super.{self::Base::[]=}(#t4, super.{self::Base::[]}(#t4).{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*});
+    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = super.{self::Base::[]}(#t5).{self::B::-}(1){(core::int*) →* self::B*} in let final void #t7 = super.{self::Base::[]=}(#t5, #t6) in #t6;
+    let final self::Index* #t8 = self::f<self::Index*>() in super.{self::Base::[]=}(#t8, super.{self::Base::[]}(#t8).{self::B::-}(1){(core::int*) →* self::B*});
     self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = super.{self::Base::[]=}(#t9, #t10) in #t10;
-    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = super.{self::Base::[]}(#t12) in #t13.{self::A::==}(null) ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = super.{self::Base::[]=}(#t12, #t14) in #t14 : #t13;
-    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = super.{self::Base::[]}(#t16).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t18 = super.{self::Base::[]=}(#t16, #t17) in #t17;
-    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = super.{self::Base::[]}(#t19).{self::B::*}(self::f<self::B*>()) in let final void #t21 = super.{self::Base::[]=}(#t19, #t20) in #t20;
-    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = super.{self::Base::[]}(#t22).{self::B::&}(self::f<self::A*>()) in let final void #t24 = super.{self::Base::[]=}(#t22, #t23) in #t23;
-    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = super.{self::Base::[]}(#t25).{self::B::-}(1) in let final void #t27 = super.{self::Base::[]=}(#t25, #t26) in #t26;
-    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = super.{self::Base::[]}(#t28) in let final void #t30 = super.{self::Base::[]=}(#t28, #t29.{self::B::-}(1)) in #t29;
+    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = super.{self::Base::[]}(#t12) in #t13 == null ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = super.{self::Base::[]=}(#t12, #t14) in #t14 : #t13;
+    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = super.{self::Base::[]}(#t16).{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t18 = super.{self::Base::[]=}(#t16, #t17) in #t17;
+    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = super.{self::Base::[]}(#t19).{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t21 = super.{self::Base::[]=}(#t19, #t20) in #t20;
+    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = super.{self::Base::[]}(#t22).{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t24 = super.{self::Base::[]=}(#t22, #t23) in #t23;
+    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = super.{self::Base::[]}(#t25).{self::B::-}(1){(core::int*) →* self::B*} in let final void #t27 = super.{self::Base::[]=}(#t25, #t26) in #t26;
+    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = super.{self::Base::[]}(#t28) in let final void #t30 = super.{self::Base::[]=}(#t28, #t29.{self::B::-}(1){(core::int*) →* self::B*}) in #t29;
   }
 }
 static method f<T extends core::Object* = dynamic>() → self::f::T*
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.weak.transformed.expect
index 96b0328..3a7a814 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.weak.transformed.expect
@@ -74,19 +74,19 @@
     ;
   method test() → void {
     super.{self::Base::[]=}(self::f<self::Index*>(), self::f<self::B*>());
-    let final self::Index* #t1 = self::f<self::Index*>() in super.{self::Base::[]}(#t1).{self::A::==}(null) ?{self::B*} super.{self::Base::[]=}(#t1, self::f<self::B*>()) : null;
-    let final self::Index* #t2 = self::f<self::Index*>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*);
-    let final self::Index* #t3 = self::f<self::Index*>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::*}(self::f<self::B*>()));
-    let final self::Index* #t4 = self::f<self::Index*>() in super.{self::Base::[]=}(#t4, super.{self::Base::[]}(#t4).{self::B::&}(self::f<self::A*>()));
-    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = super.{self::Base::[]}(#t5).{self::B::-}(1) in let final void #t7 = super.{self::Base::[]=}(#t5, #t6) in #t6;
-    let final self::Index* #t8 = self::f<self::Index*>() in super.{self::Base::[]=}(#t8, super.{self::Base::[]}(#t8).{self::B::-}(1));
+    let final self::Index* #t1 = self::f<self::Index*>() in super.{self::Base::[]}(#t1) == null ?{self::B*} super.{self::Base::[]=}(#t1, self::f<self::B*>()) : null;
+    let final self::Index* #t2 = self::f<self::Index*>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*);
+    let final self::Index* #t3 = self::f<self::Index*>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*});
+    let final self::Index* #t4 = self::f<self::Index*>() in super.{self::Base::[]=}(#t4, super.{self::Base::[]}(#t4).{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*});
+    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = super.{self::Base::[]}(#t5).{self::B::-}(1){(core::int*) →* self::B*} in let final void #t7 = super.{self::Base::[]=}(#t5, #t6) in #t6;
+    let final self::Index* #t8 = self::f<self::Index*>() in super.{self::Base::[]=}(#t8, super.{self::Base::[]}(#t8).{self::B::-}(1){(core::int*) →* self::B*});
     self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = super.{self::Base::[]=}(#t9, #t10) in #t10;
-    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = super.{self::Base::[]}(#t12) in #t13.{self::A::==}(null) ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = super.{self::Base::[]=}(#t12, #t14) in #t14 : #t13;
-    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = super.{self::Base::[]}(#t16).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t18 = super.{self::Base::[]=}(#t16, #t17) in #t17;
-    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = super.{self::Base::[]}(#t19).{self::B::*}(self::f<self::B*>()) in let final void #t21 = super.{self::Base::[]=}(#t19, #t20) in #t20;
-    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = super.{self::Base::[]}(#t22).{self::B::&}(self::f<self::A*>()) in let final void #t24 = super.{self::Base::[]=}(#t22, #t23) in #t23;
-    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = super.{self::Base::[]}(#t25).{self::B::-}(1) in let final void #t27 = super.{self::Base::[]=}(#t25, #t26) in #t26;
-    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = super.{self::Base::[]}(#t28) in let final void #t30 = super.{self::Base::[]=}(#t28, #t29.{self::B::-}(1)) in #t29;
+    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = super.{self::Base::[]}(#t12) in #t13 == null ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = super.{self::Base::[]=}(#t12, #t14) in #t14 : #t13;
+    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = super.{self::Base::[]}(#t16).{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t18 = super.{self::Base::[]=}(#t16, #t17) in #t17;
+    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = super.{self::Base::[]}(#t19).{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t21 = super.{self::Base::[]=}(#t19, #t20) in #t20;
+    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = super.{self::Base::[]}(#t22).{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t24 = super.{self::Base::[]=}(#t22, #t23) in #t23;
+    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = super.{self::Base::[]}(#t25).{self::B::-}(1){(core::int*) →* self::B*} in let final void #t27 = super.{self::Base::[]=}(#t25, #t26) in #t26;
+    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = super.{self::Base::[]}(#t28) in let final void #t30 = super.{self::Base::[]=}(#t28, #t29.{self::B::-}(1){(core::int*) →* self::B*}) in #t29;
   }
 }
 static method f<T extends core::Object* = dynamic>() → self::f::T*
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect
index 5831c53..7305204 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect
@@ -38,9 +38,9 @@
     : super core::Object::•()
     ;
   operator [](core::String* s) → self::Base::T*
-    return this.{self::Base::getValue}(s);
+    return this.{self::Base::getValue}(s){(core::String*) →* self::Base::T*};
   operator []=(core::String* s, generic-covariant-impl self::Base::U* v) → void
-    return this.{self::Base::setValue}(s, v);
+    return this.{self::Base::setValue}(s, v){(core::String*, self::Base::U*) →* void};
   abstract method getValue(core::String* s) → self::Base::T*;
   abstract method setValue(core::String* s, generic-covariant-impl self::Base::U* v) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -61,12 +61,12 @@
   method test() → void {
     core::int* v1 = let final core::String* #t1 = "x" in let final core::int* #t2 = self::getInt() in let final void #t3 = super.{self::Base::[]=}(#t1, #t2) in #t2;
     core::num* v2 = let final core::String* #t4 = "x" in let final core::num* #t5 = self::getNum() as{TypeError} core::int* in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
-    core::int* v4 = let final core::String* #t7 = "x" in let final core::int* #t8 = super.{self::Base::[]}(#t7) in #t8.{core::num::==}(null) ?{core::int*} let final core::int* #t9 = self::getInt() in let final void #t10 = super.{self::Base::[]=}(#t7, #t9) in #t9 : #t8;
-    core::num* v5 = let final core::String* #t11 = "x" in let final core::int* #t12 = super.{self::Base::[]}(#t11) in #t12.{core::num::==}(null) ?{core::num*} let final core::num* #t13 = self::getNum() as{TypeError} core::int* in let final void #t14 = super.{self::Base::[]=}(#t11, #t13) in #t13 : #t12;
-    core::int* v7 = let final core::String* #t15 = "x" in let final core::int* #t16 = super.{self::Base::[]}(#t15).{core::num::+}(self::getInt()) in let final void #t17 = super.{self::Base::[]=}(#t15, #t16) in #t16;
-    core::num* v8 = let final core::String* #t18 = "x" in let final core::num* #t19 = super.{self::Base::[]}(#t18).{core::num::+}(self::getNum()) as{TypeError} core::int* in let final void #t20 = super.{self::Base::[]=}(#t18, #t19) in #t19;
-    core::int* v10 = let final core::String* #t21 = "x" in let final core::int* #t22 = super.{self::Base::[]}(#t21).{core::num::+}(1) in let final void #t23 = super.{self::Base::[]=}(#t21, #t22) in #t22;
-    core::int* v11 = let final core::String* #t24 = "x" in let final core::int* #t25 = super.{self::Base::[]}(#t24) in let final void #t26 = super.{self::Base::[]=}(#t24, #t25.{core::num::+}(1)) in #t25;
+    core::int* v4 = let final core::String* #t7 = "x" in let final core::int* #t8 = super.{self::Base::[]}(#t7) in #t8 == null ?{core::int*} let final core::int* #t9 = self::getInt() in let final void #t10 = super.{self::Base::[]=}(#t7, #t9) in #t9 : #t8;
+    core::num* v5 = let final core::String* #t11 = "x" in let final core::int* #t12 = super.{self::Base::[]}(#t11) in #t12 == null ?{core::num*} let final core::num* #t13 = self::getNum() as{TypeError} core::int* in let final void #t14 = super.{self::Base::[]=}(#t11, #t13) in #t13 : #t12;
+    core::int* v7 = let final core::String* #t15 = "x" in let final core::int* #t16 = super.{self::Base::[]}(#t15).{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t17 = super.{self::Base::[]=}(#t15, #t16) in #t16;
+    core::num* v8 = let final core::String* #t18 = "x" in let final core::num* #t19 = super.{self::Base::[]}(#t18).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t20 = super.{self::Base::[]=}(#t18, #t19) in #t19;
+    core::int* v10 = let final core::String* #t21 = "x" in let final core::int* #t22 = super.{self::Base::[]}(#t21).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t23 = super.{self::Base::[]=}(#t21, #t22) in #t22;
+    core::int* v11 = let final core::String* #t24 = "x" in let final core::int* #t25 = super.{self::Base::[]}(#t24) in let final void #t26 = super.{self::Base::[]=}(#t24, #t25.{core::num::+}(1){(core::num*) →* core::int*}) in #t25;
   }
 }
 abstract class Test2 extends self::Base<core::int*, core::num*> {
@@ -77,14 +77,14 @@
     core::int* v1 = let final core::String* #t27 = "x" in let final core::int* #t28 = self::getInt() in let final void #t29 = super.{self::Base::[]=}(#t27, #t28) in #t28;
     core::num* v2 = let final core::String* #t30 = "x" in let final core::num* #t31 = self::getNum() in let final void #t32 = super.{self::Base::[]=}(#t30, #t31) in #t31;
     core::double* v3 = let final core::String* #t33 = "x" in let final core::double* #t34 = self::getDouble() in let final void #t35 = super.{self::Base::[]=}(#t33, #t34) in #t34;
-    core::int* v4 = let final core::String* #t36 = "x" in let final core::int* #t37 = super.{self::Base::[]}(#t36) in #t37.{core::num::==}(null) ?{core::int*} let final core::int* #t38 = self::getInt() in let final void #t39 = super.{self::Base::[]=}(#t36, #t38) in #t38 : #t37;
-    core::num* v5 = let final core::String* #t40 = "x" in let final core::int* #t41 = super.{self::Base::[]}(#t40) in #t41.{core::num::==}(null) ?{core::num*} let final core::num* #t42 = self::getNum() in let final void #t43 = super.{self::Base::[]=}(#t40, #t42) in #t42 : #t41;
-    core::num* v6 = let final core::String* #t44 = "x" in let final core::int* #t45 = super.{self::Base::[]}(#t44) in #t45.{core::num::==}(null) ?{core::num*} let final core::double* #t46 = self::getDouble() in let final void #t47 = super.{self::Base::[]=}(#t44, #t46) in #t46 : #t45;
-    core::int* v7 = let final core::String* #t48 = "x" in let final core::int* #t49 = super.{self::Base::[]}(#t48).{core::num::+}(self::getInt()) in let final void #t50 = super.{self::Base::[]=}(#t48, #t49) in #t49;
-    core::num* v8 = let final core::String* #t51 = "x" in let final core::num* #t52 = super.{self::Base::[]}(#t51).{core::num::+}(self::getNum()) in let final void #t53 = super.{self::Base::[]=}(#t51, #t52) in #t52;
-    core::double* v9 = let final core::String* #t54 = "x" in let final core::double* #t55 = super.{self::Base::[]}(#t54).{core::num::+}(self::getDouble()) in let final void #t56 = super.{self::Base::[]=}(#t54, #t55) in #t55;
-    core::int* v10 = let final core::String* #t57 = "x" in let final core::int* #t58 = super.{self::Base::[]}(#t57).{core::num::+}(1) in let final void #t59 = super.{self::Base::[]=}(#t57, #t58) in #t58;
-    core::int* v11 = let final core::String* #t60 = "x" in let final core::int* #t61 = super.{self::Base::[]}(#t60) in let final void #t62 = super.{self::Base::[]=}(#t60, #t61.{core::num::+}(1)) in #t61;
+    core::int* v4 = let final core::String* #t36 = "x" in let final core::int* #t37 = super.{self::Base::[]}(#t36) in #t37 == null ?{core::int*} let final core::int* #t38 = self::getInt() in let final void #t39 = super.{self::Base::[]=}(#t36, #t38) in #t38 : #t37;
+    core::num* v5 = let final core::String* #t40 = "x" in let final core::int* #t41 = super.{self::Base::[]}(#t40) in #t41 == null ?{core::num*} let final core::num* #t42 = self::getNum() in let final void #t43 = super.{self::Base::[]=}(#t40, #t42) in #t42 : #t41;
+    core::num* v6 = let final core::String* #t44 = "x" in let final core::int* #t45 = super.{self::Base::[]}(#t44) in #t45 == null ?{core::num*} let final core::double* #t46 = self::getDouble() in let final void #t47 = super.{self::Base::[]=}(#t44, #t46) in #t46 : #t45;
+    core::int* v7 = let final core::String* #t48 = "x" in let final core::int* #t49 = super.{self::Base::[]}(#t48).{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t50 = super.{self::Base::[]=}(#t48, #t49) in #t49;
+    core::num* v8 = let final core::String* #t51 = "x" in let final core::num* #t52 = super.{self::Base::[]}(#t51).{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t53 = super.{self::Base::[]=}(#t51, #t52) in #t52;
+    core::double* v9 = let final core::String* #t54 = "x" in let final core::double* #t55 = super.{self::Base::[]}(#t54).{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t56 = super.{self::Base::[]=}(#t54, #t55) in #t55;
+    core::int* v10 = let final core::String* #t57 = "x" in let final core::int* #t58 = super.{self::Base::[]}(#t57).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t59 = super.{self::Base::[]=}(#t57, #t58) in #t58;
+    core::int* v11 = let final core::String* #t60 = "x" in let final core::int* #t61 = super.{self::Base::[]}(#t60) in let final void #t62 = super.{self::Base::[]=}(#t60, #t61.{core::num::+}(1){(core::num*) →* core::int*}) in #t61;
   }
 }
 abstract class Test3 extends self::Base<core::int*, core::double*> {
@@ -94,19 +94,19 @@
   method test() → void {
     core::num* v2 = let final core::String* #t63 = "x" in let final core::num* #t64 = self::getNum() as{TypeError} core::double* in let final void #t65 = super.{self::Base::[]=}(#t63, #t64) in #t64;
     core::double* v3 = let final core::String* #t66 = "x" in let final core::double* #t67 = self::getDouble() in let final void #t68 = super.{self::Base::[]=}(#t66, #t67) in #t67;
-    core::num* v5 = let final core::String* #t69 = "x" in let final core::int* #t70 = super.{self::Base::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num*} let final core::num* #t71 = self::getNum() as{TypeError} core::double* in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
-    core::num* v6 = let final core::String* #t73 = "x" in let final core::int* #t74 = super.{self::Base::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num*} let final core::double* #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
+    core::num* v5 = let final core::String* #t69 = "x" in let final core::int* #t70 = super.{self::Base::[]}(#t69) in #t70 == null ?{core::num*} let final core::num* #t71 = self::getNum() as{TypeError} core::double* in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
+    core::num* v6 = let final core::String* #t73 = "x" in let final core::int* #t74 = super.{self::Base::[]}(#t73) in #t74 == null ?{core::num*} let final core::double* #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
     core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = let final Never* #t79 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:106:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
             /*@target=num.+*/ += getInt();
-                              ^" in super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()) as{TypeError} core::double* in let final void #t80 = super.{self::Base::[]=}(#t77, #t78) in #t78;
-    core::num* v8 = let final core::String* #t81 = "x" in let final core::num* #t82 = super.{self::Base::[]}(#t81).{core::num::+}(self::getNum()) as{TypeError} core::double* in let final void #t83 = super.{self::Base::[]=}(#t81, #t82) in #t82;
-    core::double* v9 = let final core::String* #t84 = "x" in let final core::double* #t85 = super.{self::Base::[]}(#t84).{core::num::+}(self::getDouble()) in let final void #t86 = super.{self::Base::[]=}(#t84, #t85) in #t85;
+                              ^" in super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t80 = super.{self::Base::[]=}(#t77, #t78) in #t78;
+    core::num* v8 = let final core::String* #t81 = "x" in let final core::num* #t82 = super.{self::Base::[]}(#t81).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t83 = super.{self::Base::[]=}(#t81, #t82) in #t82;
+    core::double* v9 = let final core::String* #t84 = "x" in let final core::double* #t85 = super.{self::Base::[]}(#t84).{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t86 = super.{self::Base::[]=}(#t84, #t85) in #t85;
     core::int* v10 = let final core::String* #t87 = "x" in let final core::int* #t88 = let final Never* #t89 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:116:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
     var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
-                                                 ^" in super.{self::Base::[]}(#t87).{core::num::+}(1) as{TypeError} core::double* in let final void #t90 = super.{self::Base::[]=}(#t87, #t88) in #t88;
+                                                 ^" in super.{self::Base::[]}(#t87).{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t90 = super.{self::Base::[]=}(#t87, #t88) in #t88;
     core::int* v11 = let final core::String* #t91 = "x" in let final core::int* #t92 = super.{self::Base::[]}(#t91) in let final void #t93 = super.{self::Base::[]=}(#t91, let final Never* #t94 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:120:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
         ['x'] /*@target=num.+*/ ++;
-                                ^" in #t92.{core::num::+}(1) as{TypeError} core::double*) in #t92;
+                                ^" in #t92.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*) in #t92;
   }
 }
 abstract class Test4 extends self::Base<core::num*, core::int*> {
@@ -116,12 +116,12 @@
   method test() → void {
     core::int* v1 = let final core::String* #t95 = "x" in let final core::int* #t96 = self::getInt() in let final void #t97 = super.{self::Base::[]=}(#t95, #t96) in #t96;
     core::num* v2 = let final core::String* #t98 = "x" in let final core::num* #t99 = self::getNum() as{TypeError} core::int* in let final void #t100 = super.{self::Base::[]=}(#t98, #t99) in #t99;
-    core::num* v4 = let final core::String* #t101 = "x" in let final core::num* #t102 = super.{self::Base::[]}(#t101) in #t102.{core::num::==}(null) ?{core::num*} let final core::int* #t103 = self::getInt() in let final void #t104 = super.{self::Base::[]=}(#t101, #t103) in #t103 : #t102;
-    core::num* v5 = let final core::String* #t105 = "x" in let final core::num* #t106 = super.{self::Base::[]}(#t105) in #t106.{core::num::==}(null) ?{core::num*} let final core::num* #t107 = self::getNum() as{TypeError} core::int* in let final void #t108 = super.{self::Base::[]=}(#t105, #t107) in #t107 : #t106;
-    core::num* v7 = let final core::String* #t109 = "x" in let final core::num* #t110 = super.{self::Base::[]}(#t109).{core::num::+}(self::getInt()) as{TypeError} core::int* in let final void #t111 = super.{self::Base::[]=}(#t109, #t110) in #t110;
-    core::num* v8 = let final core::String* #t112 = "x" in let final core::num* #t113 = super.{self::Base::[]}(#t112).{core::num::+}(self::getNum()) as{TypeError} core::int* in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
-    core::num* v10 = let final core::String* #t115 = "x" in let final core::num* #t116 = super.{self::Base::[]}(#t115).{core::num::+}(1) as{TypeError} core::int* in let final void #t117 = super.{self::Base::[]=}(#t115, #t116) in #t116;
-    core::num* v11 = let final core::String* #t118 = "x" in let final core::num* #t119 = super.{self::Base::[]}(#t118) in let final void #t120 = super.{self::Base::[]=}(#t118, #t119.{core::num::+}(1) as{TypeError} core::int*) in #t119;
+    core::num* v4 = let final core::String* #t101 = "x" in let final core::num* #t102 = super.{self::Base::[]}(#t101) in #t102 == null ?{core::num*} let final core::int* #t103 = self::getInt() in let final void #t104 = super.{self::Base::[]=}(#t101, #t103) in #t103 : #t102;
+    core::num* v5 = let final core::String* #t105 = "x" in let final core::num* #t106 = super.{self::Base::[]}(#t105) in #t106 == null ?{core::num*} let final core::num* #t107 = self::getNum() as{TypeError} core::int* in let final void #t108 = super.{self::Base::[]=}(#t105, #t107) in #t107 : #t106;
+    core::num* v7 = let final core::String* #t109 = "x" in let final core::num* #t110 = super.{self::Base::[]}(#t109).{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t111 = super.{self::Base::[]=}(#t109, #t110) in #t110;
+    core::num* v8 = let final core::String* #t112 = "x" in let final core::num* #t113 = super.{self::Base::[]}(#t112).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
+    core::num* v10 = let final core::String* #t115 = "x" in let final core::num* #t116 = super.{self::Base::[]}(#t115).{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t117 = super.{self::Base::[]=}(#t115, #t116) in #t116;
+    core::num* v11 = let final core::String* #t118 = "x" in let final core::num* #t119 = super.{self::Base::[]}(#t118) in let final void #t120 = super.{self::Base::[]=}(#t118, #t119.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int*) in #t119;
   }
 }
 abstract class Test5 extends self::Base<core::num*, core::num*> {
@@ -132,14 +132,14 @@
     core::int* v1 = let final core::String* #t121 = "x" in let final core::int* #t122 = self::getInt() in let final void #t123 = super.{self::Base::[]=}(#t121, #t122) in #t122;
     core::num* v2 = let final core::String* #t124 = "x" in let final core::num* #t125 = self::getNum() in let final void #t126 = super.{self::Base::[]=}(#t124, #t125) in #t125;
     core::double* v3 = let final core::String* #t127 = "x" in let final core::double* #t128 = self::getDouble() in let final void #t129 = super.{self::Base::[]=}(#t127, #t128) in #t128;
-    core::num* v4 = let final core::String* #t130 = "x" in let final core::num* #t131 = super.{self::Base::[]}(#t130) in #t131.{core::num::==}(null) ?{core::num*} let final core::int* #t132 = self::getInt() in let final void #t133 = super.{self::Base::[]=}(#t130, #t132) in #t132 : #t131;
-    core::num* v5 = let final core::String* #t134 = "x" in let final core::num* #t135 = super.{self::Base::[]}(#t134) in #t135.{core::num::==}(null) ?{core::num*} let final core::num* #t136 = self::getNum() in let final void #t137 = super.{self::Base::[]=}(#t134, #t136) in #t136 : #t135;
-    core::num* v6 = let final core::String* #t138 = "x" in let final core::num* #t139 = super.{self::Base::[]}(#t138) in #t139.{core::num::==}(null) ?{core::num*} let final core::double* #t140 = self::getDouble() in let final void #t141 = super.{self::Base::[]=}(#t138, #t140) in #t140 : #t139;
-    core::num* v7 = let final core::String* #t142 = "x" in let final core::num* #t143 = super.{self::Base::[]}(#t142).{core::num::+}(self::getInt()) in let final void #t144 = super.{self::Base::[]=}(#t142, #t143) in #t143;
-    core::num* v8 = let final core::String* #t145 = "x" in let final core::num* #t146 = super.{self::Base::[]}(#t145).{core::num::+}(self::getNum()) in let final void #t147 = super.{self::Base::[]=}(#t145, #t146) in #t146;
-    core::num* v9 = let final core::String* #t148 = "x" in let final core::num* #t149 = super.{self::Base::[]}(#t148).{core::num::+}(self::getDouble()) in let final void #t150 = super.{self::Base::[]=}(#t148, #t149) in #t149;
-    core::num* v10 = let final core::String* #t151 = "x" in let final core::num* #t152 = super.{self::Base::[]}(#t151).{core::num::+}(1) in let final void #t153 = super.{self::Base::[]=}(#t151, #t152) in #t152;
-    core::num* v11 = let final core::String* #t154 = "x" in let final core::num* #t155 = super.{self::Base::[]}(#t154) in let final void #t156 = super.{self::Base::[]=}(#t154, #t155.{core::num::+}(1)) in #t155;
+    core::num* v4 = let final core::String* #t130 = "x" in let final core::num* #t131 = super.{self::Base::[]}(#t130) in #t131 == null ?{core::num*} let final core::int* #t132 = self::getInt() in let final void #t133 = super.{self::Base::[]=}(#t130, #t132) in #t132 : #t131;
+    core::num* v5 = let final core::String* #t134 = "x" in let final core::num* #t135 = super.{self::Base::[]}(#t134) in #t135 == null ?{core::num*} let final core::num* #t136 = self::getNum() in let final void #t137 = super.{self::Base::[]=}(#t134, #t136) in #t136 : #t135;
+    core::num* v6 = let final core::String* #t138 = "x" in let final core::num* #t139 = super.{self::Base::[]}(#t138) in #t139 == null ?{core::num*} let final core::double* #t140 = self::getDouble() in let final void #t141 = super.{self::Base::[]=}(#t138, #t140) in #t140 : #t139;
+    core::num* v7 = let final core::String* #t142 = "x" in let final core::num* #t143 = super.{self::Base::[]}(#t142).{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t144 = super.{self::Base::[]=}(#t142, #t143) in #t143;
+    core::num* v8 = let final core::String* #t145 = "x" in let final core::num* #t146 = super.{self::Base::[]}(#t145).{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t147 = super.{self::Base::[]=}(#t145, #t146) in #t146;
+    core::num* v9 = let final core::String* #t148 = "x" in let final core::num* #t149 = super.{self::Base::[]}(#t148).{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t150 = super.{self::Base::[]=}(#t148, #t149) in #t149;
+    core::num* v10 = let final core::String* #t151 = "x" in let final core::num* #t152 = super.{self::Base::[]}(#t151).{core::num::+}(1){(core::num*) →* core::num*} in let final void #t153 = super.{self::Base::[]=}(#t151, #t152) in #t152;
+    core::num* v11 = let final core::String* #t154 = "x" in let final core::num* #t155 = super.{self::Base::[]}(#t154) in let final void #t156 = super.{self::Base::[]=}(#t154, #t155.{core::num::+}(1){(core::num*) →* core::num*}) in #t155;
   }
 }
 abstract class Test6 extends self::Base<core::num*, core::double*> {
@@ -149,13 +149,13 @@
   method test() → void {
     core::num* v2 = let final core::String* #t157 = "x" in let final core::num* #t158 = self::getNum() as{TypeError} core::double* in let final void #t159 = super.{self::Base::[]=}(#t157, #t158) in #t158;
     core::double* v3 = let final core::String* #t160 = "x" in let final core::double* #t161 = self::getDouble() in let final void #t162 = super.{self::Base::[]=}(#t160, #t161) in #t161;
-    core::num* v5 = let final core::String* #t163 = "x" in let final core::num* #t164 = super.{self::Base::[]}(#t163) in #t164.{core::num::==}(null) ?{core::num*} let final core::num* #t165 = self::getNum() as{TypeError} core::double* in let final void #t166 = super.{self::Base::[]=}(#t163, #t165) in #t165 : #t164;
-    core::num* v6 = let final core::String* #t167 = "x" in let final core::num* #t168 = super.{self::Base::[]}(#t167) in #t168.{core::num::==}(null) ?{core::num*} let final core::double* #t169 = self::getDouble() in let final void #t170 = super.{self::Base::[]=}(#t167, #t169) in #t169 : #t168;
-    core::num* v7 = let final core::String* #t171 = "x" in let final core::num* #t172 = super.{self::Base::[]}(#t171).{core::num::+}(self::getInt()) as{TypeError} core::double* in let final void #t173 = super.{self::Base::[]=}(#t171, #t172) in #t172;
-    core::num* v8 = let final core::String* #t174 = "x" in let final core::num* #t175 = super.{self::Base::[]}(#t174).{core::num::+}(self::getNum()) as{TypeError} core::double* in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
-    core::num* v9 = let final core::String* #t177 = "x" in let final core::num* #t178 = super.{self::Base::[]}(#t177).{core::num::+}(self::getDouble()) as{TypeError} core::double* in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
-    core::num* v10 = let final core::String* #t180 = "x" in let final core::num* #t181 = super.{self::Base::[]}(#t180).{core::num::+}(1) as{TypeError} core::double* in let final void #t182 = super.{self::Base::[]=}(#t180, #t181) in #t181;
-    core::num* v11 = let final core::String* #t183 = "x" in let final core::num* #t184 = super.{self::Base::[]}(#t183) in let final void #t185 = super.{self::Base::[]=}(#t183, #t184.{core::num::+}(1) as{TypeError} core::double*) in #t184;
+    core::num* v5 = let final core::String* #t163 = "x" in let final core::num* #t164 = super.{self::Base::[]}(#t163) in #t164 == null ?{core::num*} let final core::num* #t165 = self::getNum() as{TypeError} core::double* in let final void #t166 = super.{self::Base::[]=}(#t163, #t165) in #t165 : #t164;
+    core::num* v6 = let final core::String* #t167 = "x" in let final core::num* #t168 = super.{self::Base::[]}(#t167) in #t168 == null ?{core::num*} let final core::double* #t169 = self::getDouble() in let final void #t170 = super.{self::Base::[]=}(#t167, #t169) in #t169 : #t168;
+    core::num* v7 = let final core::String* #t171 = "x" in let final core::num* #t172 = super.{self::Base::[]}(#t171).{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t173 = super.{self::Base::[]=}(#t171, #t172) in #t172;
+    core::num* v8 = let final core::String* #t174 = "x" in let final core::num* #t175 = super.{self::Base::[]}(#t174).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
+    core::num* v9 = let final core::String* #t177 = "x" in let final core::num* #t178 = super.{self::Base::[]}(#t177).{core::num::+}(self::getDouble()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
+    core::num* v10 = let final core::String* #t180 = "x" in let final core::num* #t181 = super.{self::Base::[]}(#t180).{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t182 = super.{self::Base::[]=}(#t180, #t181) in #t181;
+    core::num* v11 = let final core::String* #t183 = "x" in let final core::num* #t184 = super.{self::Base::[]}(#t183) in let final void #t185 = super.{self::Base::[]=}(#t183, #t184.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double*) in #t184;
   }
 }
 abstract class Test7 extends self::Base<core::double*, core::int*> {
@@ -165,20 +165,20 @@
   method test() → void {
     core::int* v1 = let final core::String* #t186 = "x" in let final core::int* #t187 = self::getInt() in let final void #t188 = super.{self::Base::[]=}(#t186, #t187) in #t187;
     core::num* v2 = let final core::String* #t189 = "x" in let final core::num* #t190 = self::getNum() as{TypeError} core::int* in let final void #t191 = super.{self::Base::[]=}(#t189, #t190) in #t190;
-    core::num* v4 = let final core::String* #t192 = "x" in let final core::double* #t193 = super.{self::Base::[]}(#t192) in #t193.{core::num::==}(null) ?{core::num*} let final core::int* #t194 = self::getInt() in let final void #t195 = super.{self::Base::[]=}(#t192, #t194) in #t194 : #t193;
-    core::num* v5 = let final core::String* #t196 = "x" in let final core::double* #t197 = super.{self::Base::[]}(#t196) in #t197.{core::num::==}(null) ?{core::num*} let final core::num* #t198 = self::getNum() as{TypeError} core::int* in let final void #t199 = super.{self::Base::[]=}(#t196, #t198) in #t198 : #t197;
+    core::num* v4 = let final core::String* #t192 = "x" in let final core::double* #t193 = super.{self::Base::[]}(#t192) in #t193 == null ?{core::num*} let final core::int* #t194 = self::getInt() in let final void #t195 = super.{self::Base::[]=}(#t192, #t194) in #t194 : #t193;
+    core::num* v5 = let final core::String* #t196 = "x" in let final core::double* #t197 = super.{self::Base::[]}(#t196) in #t197 == null ?{core::num*} let final core::num* #t198 = self::getNum() as{TypeError} core::int* in let final void #t199 = super.{self::Base::[]=}(#t196, #t198) in #t198 : #t197;
     core::double* v7 = let final core::String* #t200 = "x" in let final core::double* #t201 = let final Never* #t202 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:244:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
             /*@target=double.+*/ += getInt();
-                                 ^" in super.{self::Base::[]}(#t200).{core::double::+}(self::getInt()) as{TypeError} core::int* in let final void #t203 = super.{self::Base::[]=}(#t200, #t201) in #t201;
+                                 ^" in super.{self::Base::[]}(#t200).{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t203 = super.{self::Base::[]=}(#t200, #t201) in #t201;
     core::double* v8 = let final core::String* #t204 = "x" in let final core::double* #t205 = let final Never* #t206 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:248:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
             /*@target=double.+*/ += getNum();
-                                 ^" in super.{self::Base::[]}(#t204).{core::double::+}(self::getNum()) as{TypeError} core::int* in let final void #t207 = super.{self::Base::[]=}(#t204, #t205) in #t205;
+                                 ^" in super.{self::Base::[]}(#t204).{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t207 = super.{self::Base::[]=}(#t204, #t205) in #t205;
     core::double* v10 = let final core::String* #t208 = "x" in let final core::double* #t209 = let final Never* #t210 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
     var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
-                                                       ^" in super.{self::Base::[]}(#t208).{core::double::+}(1) as{TypeError} core::int* in let final void #t211 = super.{self::Base::[]=}(#t208, #t209) in #t209;
+                                                       ^" in super.{self::Base::[]}(#t208).{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t211 = super.{self::Base::[]=}(#t208, #t209) in #t209;
     core::double* v11 = let final core::String* #t212 = "x" in let final core::double* #t213 = super.{self::Base::[]}(#t212) in let final void #t214 = super.{self::Base::[]=}(#t212, let final Never* #t215 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:254:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         ['x'] /*@target=double.+*/ ++;
-                                   ^" in #t213.{core::double::+}(1) as{TypeError} core::int*) in #t213;
+                                   ^" in #t213.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*) in #t213;
   }
 }
 abstract class Test8 extends self::Base<core::double*, core::num*> {
@@ -189,14 +189,14 @@
     core::int* v1 = let final core::String* #t216 = "x" in let final core::int* #t217 = self::getInt() in let final void #t218 = super.{self::Base::[]=}(#t216, #t217) in #t217;
     core::num* v2 = let final core::String* #t219 = "x" in let final core::num* #t220 = self::getNum() in let final void #t221 = super.{self::Base::[]=}(#t219, #t220) in #t220;
     core::double* v3 = let final core::String* #t222 = "x" in let final core::double* #t223 = self::getDouble() in let final void #t224 = super.{self::Base::[]=}(#t222, #t223) in #t223;
-    core::num* v4 = let final core::String* #t225 = "x" in let final core::double* #t226 = super.{self::Base::[]}(#t225) in #t226.{core::num::==}(null) ?{core::num*} let final core::int* #t227 = self::getInt() in let final void #t228 = super.{self::Base::[]=}(#t225, #t227) in #t227 : #t226;
-    core::num* v5 = let final core::String* #t229 = "x" in let final core::double* #t230 = super.{self::Base::[]}(#t229) in #t230.{core::num::==}(null) ?{core::num*} let final core::num* #t231 = self::getNum() in let final void #t232 = super.{self::Base::[]=}(#t229, #t231) in #t231 : #t230;
-    core::double* v6 = let final core::String* #t233 = "x" in let final core::double* #t234 = super.{self::Base::[]}(#t233) in #t234.{core::num::==}(null) ?{core::double*} let final core::double* #t235 = self::getDouble() in let final void #t236 = super.{self::Base::[]=}(#t233, #t235) in #t235 : #t234;
-    core::double* v7 = let final core::String* #t237 = "x" in let final core::double* #t238 = super.{self::Base::[]}(#t237).{core::double::+}(self::getInt()) in let final void #t239 = super.{self::Base::[]=}(#t237, #t238) in #t238;
-    core::double* v8 = let final core::String* #t240 = "x" in let final core::double* #t241 = super.{self::Base::[]}(#t240).{core::double::+}(self::getNum()) in let final void #t242 = super.{self::Base::[]=}(#t240, #t241) in #t241;
-    core::double* v9 = let final core::String* #t243 = "x" in let final core::double* #t244 = super.{self::Base::[]}(#t243).{core::double::+}(self::getDouble()) in let final void #t245 = super.{self::Base::[]=}(#t243, #t244) in #t244;
-    core::double* v10 = let final core::String* #t246 = "x" in let final core::double* #t247 = super.{self::Base::[]}(#t246).{core::double::+}(1) in let final void #t248 = super.{self::Base::[]=}(#t246, #t247) in #t247;
-    core::double* v11 = let final core::String* #t249 = "x" in let final core::double* #t250 = super.{self::Base::[]}(#t249) in let final void #t251 = super.{self::Base::[]=}(#t249, #t250.{core::double::+}(1)) in #t250;
+    core::num* v4 = let final core::String* #t225 = "x" in let final core::double* #t226 = super.{self::Base::[]}(#t225) in #t226 == null ?{core::num*} let final core::int* #t227 = self::getInt() in let final void #t228 = super.{self::Base::[]=}(#t225, #t227) in #t227 : #t226;
+    core::num* v5 = let final core::String* #t229 = "x" in let final core::double* #t230 = super.{self::Base::[]}(#t229) in #t230 == null ?{core::num*} let final core::num* #t231 = self::getNum() in let final void #t232 = super.{self::Base::[]=}(#t229, #t231) in #t231 : #t230;
+    core::double* v6 = let final core::String* #t233 = "x" in let final core::double* #t234 = super.{self::Base::[]}(#t233) in #t234 == null ?{core::double*} let final core::double* #t235 = self::getDouble() in let final void #t236 = super.{self::Base::[]=}(#t233, #t235) in #t235 : #t234;
+    core::double* v7 = let final core::String* #t237 = "x" in let final core::double* #t238 = super.{self::Base::[]}(#t237).{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t239 = super.{self::Base::[]=}(#t237, #t238) in #t238;
+    core::double* v8 = let final core::String* #t240 = "x" in let final core::double* #t241 = super.{self::Base::[]}(#t240).{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t242 = super.{self::Base::[]=}(#t240, #t241) in #t241;
+    core::double* v9 = let final core::String* #t243 = "x" in let final core::double* #t244 = super.{self::Base::[]}(#t243).{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t245 = super.{self::Base::[]=}(#t243, #t244) in #t244;
+    core::double* v10 = let final core::String* #t246 = "x" in let final core::double* #t247 = super.{self::Base::[]}(#t246).{core::double::+}(1){(core::num*) →* core::double*} in let final void #t248 = super.{self::Base::[]=}(#t246, #t247) in #t247;
+    core::double* v11 = let final core::String* #t249 = "x" in let final core::double* #t250 = super.{self::Base::[]}(#t249) in let final void #t251 = super.{self::Base::[]=}(#t249, #t250.{core::double::+}(1){(core::num*) →* core::double*}) in #t250;
   }
 }
 abstract class Test9 extends self::Base<core::double*, core::double*> {
@@ -206,13 +206,13 @@
   method test() → void {
     core::num* v2 = let final core::String* #t252 = "x" in let final core::num* #t253 = self::getNum() as{TypeError} core::double* in let final void #t254 = super.{self::Base::[]=}(#t252, #t253) in #t253;
     core::double* v3 = let final core::String* #t255 = "x" in let final core::double* #t256 = self::getDouble() in let final void #t257 = super.{self::Base::[]=}(#t255, #t256) in #t256;
-    core::num* v5 = let final core::String* #t258 = "x" in let final core::double* #t259 = super.{self::Base::[]}(#t258) in #t259.{core::num::==}(null) ?{core::num*} let final core::num* #t260 = self::getNum() as{TypeError} core::double* in let final void #t261 = super.{self::Base::[]=}(#t258, #t260) in #t260 : #t259;
-    core::double* v6 = let final core::String* #t262 = "x" in let final core::double* #t263 = super.{self::Base::[]}(#t262) in #t263.{core::num::==}(null) ?{core::double*} let final core::double* #t264 = self::getDouble() in let final void #t265 = super.{self::Base::[]=}(#t262, #t264) in #t264 : #t263;
-    core::double* v7 = let final core::String* #t266 = "x" in let final core::double* #t267 = super.{self::Base::[]}(#t266).{core::double::+}(self::getInt()) in let final void #t268 = super.{self::Base::[]=}(#t266, #t267) in #t267;
-    core::double* v8 = let final core::String* #t269 = "x" in let final core::double* #t270 = super.{self::Base::[]}(#t269).{core::double::+}(self::getNum()) in let final void #t271 = super.{self::Base::[]=}(#t269, #t270) in #t270;
-    core::double* v9 = let final core::String* #t272 = "x" in let final core::double* #t273 = super.{self::Base::[]}(#t272).{core::double::+}(self::getDouble()) in let final void #t274 = super.{self::Base::[]=}(#t272, #t273) in #t273;
-    core::double* v10 = let final core::String* #t275 = "x" in let final core::double* #t276 = super.{self::Base::[]}(#t275).{core::double::+}(1) in let final void #t277 = super.{self::Base::[]=}(#t275, #t276) in #t276;
-    core::double* v11 = let final core::String* #t278 = "x" in let final core::double* #t279 = super.{self::Base::[]}(#t278) in let final void #t280 = super.{self::Base::[]=}(#t278, #t279.{core::double::+}(1)) in #t279;
+    core::num* v5 = let final core::String* #t258 = "x" in let final core::double* #t259 = super.{self::Base::[]}(#t258) in #t259 == null ?{core::num*} let final core::num* #t260 = self::getNum() as{TypeError} core::double* in let final void #t261 = super.{self::Base::[]=}(#t258, #t260) in #t260 : #t259;
+    core::double* v6 = let final core::String* #t262 = "x" in let final core::double* #t263 = super.{self::Base::[]}(#t262) in #t263 == null ?{core::double*} let final core::double* #t264 = self::getDouble() in let final void #t265 = super.{self::Base::[]=}(#t262, #t264) in #t264 : #t263;
+    core::double* v7 = let final core::String* #t266 = "x" in let final core::double* #t267 = super.{self::Base::[]}(#t266).{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t268 = super.{self::Base::[]=}(#t266, #t267) in #t267;
+    core::double* v8 = let final core::String* #t269 = "x" in let final core::double* #t270 = super.{self::Base::[]}(#t269).{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t271 = super.{self::Base::[]=}(#t269, #t270) in #t270;
+    core::double* v9 = let final core::String* #t272 = "x" in let final core::double* #t273 = super.{self::Base::[]}(#t272).{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t274 = super.{self::Base::[]=}(#t272, #t273) in #t273;
+    core::double* v10 = let final core::String* #t275 = "x" in let final core::double* #t276 = super.{self::Base::[]}(#t275).{core::double::+}(1){(core::num*) →* core::double*} in let final void #t277 = super.{self::Base::[]=}(#t275, #t276) in #t276;
+    core::double* v11 = let final core::String* #t278 = "x" in let final core::double* #t279 = super.{self::Base::[]}(#t278) in let final void #t280 = super.{self::Base::[]=}(#t278, #t279.{core::double::+}(1){(core::num*) →* core::double*}) in #t279;
   }
 }
 static method getInt() → core::int*
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.weak.expect
index 0776313..0202be1 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.weak.expect
@@ -58,20 +58,20 @@
     return null;
   operator []=(self::Index* i, self::B* v) → void {}
   method test() → void {
-    this.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>());
-    let final self::Index* #t1 = self::f<self::Index*>() in this.{self::Test::[]}(#t1).{self::A::==}(null) ?{self::B*} this.{self::Test::[]=}(#t1, self::f<self::B*>()) : null;
-    let final self::Index* #t2 = self::f<self::Index*>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*);
-    let final self::Index* #t3 = self::f<self::Index*>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3).{self::B::*}(self::f<self::B*>()));
-    let final self::Index* #t4 = self::f<self::Index*>() in this.{self::Test::[]=}(#t4, this.{self::Test::[]}(#t4).{self::B::&}(self::f<self::A*>()));
-    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = this.{self::Test::[]}(#t5).{self::B::-}(1) in let final void #t7 = this.{self::Test::[]=}(#t5, #t6) in #t6;
-    let final self::Index* #t8 = self::f<self::Index*>() in this.{self::Test::[]=}(#t8, this.{self::Test::[]}(#t8).{self::B::-}(1));
-    self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = this.{self::Test::[]=}(#t9, #t10) in #t10;
-    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = this.{self::Test::[]}(#t12) in #t13.{self::A::==}(null) ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = this.{self::Test::[]=}(#t12, #t14) in #t14 : #t13;
-    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = this.{self::Test::[]}(#t16).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t18 = this.{self::Test::[]=}(#t16, #t17) in #t17;
-    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = this.{self::Test::[]}(#t19).{self::B::*}(self::f<self::B*>()) in let final void #t21 = this.{self::Test::[]=}(#t19, #t20) in #t20;
-    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = this.{self::Test::[]}(#t22).{self::B::&}(self::f<self::A*>()) in let final void #t24 = this.{self::Test::[]=}(#t22, #t23) in #t23;
-    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = this.{self::Test::[]}(#t25).{self::B::-}(1) in let final void #t27 = this.{self::Test::[]=}(#t25, #t26) in #t26;
-    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = this.{self::Test::[]}(#t28) in let final void #t30 = this.{self::Test::[]=}(#t28, #t29.{self::B::-}(1)) in #t29;
+    this.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
+    let final self::Index* #t1 = self::f<self::Index*>() in this.{self::Test::[]}(#t1){(self::Index*) →* self::B*} == null ?{self::B*} this.{self::Test::[]=}(#t1, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
+    let final self::Index* #t2 = self::f<self::Index*>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
+    let final self::Index* #t3 = self::f<self::Index*>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
+    let final self::Index* #t4 = self::f<self::Index*>() in this.{self::Test::[]=}(#t4, this.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
+    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = this.{self::Test::[]}(#t5){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t7 = this.{self::Test::[]=}(#t5, #t6){(self::Index*, self::B*) →* void} in #t6;
+    let final self::Index* #t8 = self::f<self::Index*>() in this.{self::Test::[]=}(#t8, this.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
+    self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = this.{self::Test::[]=}(#t9, #t10){(self::Index*, self::B*) →* void} in #t10;
+    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = this.{self::Test::[]}(#t12){(self::Index*) →* self::B*} in #t13 == null ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = this.{self::Test::[]=}(#t12, #t14){(self::Index*, self::B*) →* void} in #t14 : #t13;
+    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = this.{self::Test::[]}(#t16){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t18 = this.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
+    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = this.{self::Test::[]}(#t19){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t21 = this.{self::Test::[]=}(#t19, #t20){(self::Index*, self::B*) →* void} in #t20;
+    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = this.{self::Test::[]}(#t22){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t24 = this.{self::Test::[]=}(#t22, #t23){(self::Index*, self::B*) →* void} in #t23;
+    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = this.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t27 = this.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
+    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = this.{self::Test::[]}(#t28){(self::Index*) →* self::B*} in let final void #t30 = this.{self::Test::[]=}(#t28, #t29.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t29;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.weak.transformed.expect
index 0776313..0202be1 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.weak.transformed.expect
@@ -58,20 +58,20 @@
     return null;
   operator []=(self::Index* i, self::B* v) → void {}
   method test() → void {
-    this.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>());
-    let final self::Index* #t1 = self::f<self::Index*>() in this.{self::Test::[]}(#t1).{self::A::==}(null) ?{self::B*} this.{self::Test::[]=}(#t1, self::f<self::B*>()) : null;
-    let final self::Index* #t2 = self::f<self::Index*>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*);
-    let final self::Index* #t3 = self::f<self::Index*>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3).{self::B::*}(self::f<self::B*>()));
-    let final self::Index* #t4 = self::f<self::Index*>() in this.{self::Test::[]=}(#t4, this.{self::Test::[]}(#t4).{self::B::&}(self::f<self::A*>()));
-    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = this.{self::Test::[]}(#t5).{self::B::-}(1) in let final void #t7 = this.{self::Test::[]=}(#t5, #t6) in #t6;
-    let final self::Index* #t8 = self::f<self::Index*>() in this.{self::Test::[]=}(#t8, this.{self::Test::[]}(#t8).{self::B::-}(1));
-    self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = this.{self::Test::[]=}(#t9, #t10) in #t10;
-    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = this.{self::Test::[]}(#t12) in #t13.{self::A::==}(null) ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = this.{self::Test::[]=}(#t12, #t14) in #t14 : #t13;
-    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = this.{self::Test::[]}(#t16).{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t18 = this.{self::Test::[]=}(#t16, #t17) in #t17;
-    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = this.{self::Test::[]}(#t19).{self::B::*}(self::f<self::B*>()) in let final void #t21 = this.{self::Test::[]=}(#t19, #t20) in #t20;
-    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = this.{self::Test::[]}(#t22).{self::B::&}(self::f<self::A*>()) in let final void #t24 = this.{self::Test::[]=}(#t22, #t23) in #t23;
-    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = this.{self::Test::[]}(#t25).{self::B::-}(1) in let final void #t27 = this.{self::Test::[]=}(#t25, #t26) in #t26;
-    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = this.{self::Test::[]}(#t28) in let final void #t30 = this.{self::Test::[]=}(#t28, #t29.{self::B::-}(1)) in #t29;
+    this.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
+    let final self::Index* #t1 = self::f<self::Index*>() in this.{self::Test::[]}(#t1){(self::Index*) →* self::B*} == null ?{self::B*} this.{self::Test::[]=}(#t1, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
+    let final self::Index* #t2 = self::f<self::Index*>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
+    let final self::Index* #t3 = self::f<self::Index*>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
+    let final self::Index* #t4 = self::f<self::Index*>() in this.{self::Test::[]=}(#t4, this.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
+    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = this.{self::Test::[]}(#t5){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t7 = this.{self::Test::[]=}(#t5, #t6){(self::Index*, self::B*) →* void} in #t6;
+    let final self::Index* #t8 = self::f<self::Index*>() in this.{self::Test::[]=}(#t8, this.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
+    self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = this.{self::Test::[]=}(#t9, #t10){(self::Index*, self::B*) →* void} in #t10;
+    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = this.{self::Test::[]}(#t12){(self::Index*) →* self::B*} in #t13 == null ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = this.{self::Test::[]=}(#t12, #t14){(self::Index*, self::B*) →* void} in #t14 : #t13;
+    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = this.{self::Test::[]}(#t16){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t18 = this.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
+    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = this.{self::Test::[]}(#t19){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t21 = this.{self::Test::[]=}(#t19, #t20){(self::Index*, self::B*) →* void} in #t20;
+    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = this.{self::Test::[]}(#t22){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t24 = this.{self::Test::[]=}(#t22, #t23){(self::Index*, self::B*) →* void} in #t23;
+    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = this.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t27 = this.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
+    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = this.{self::Test::[]}(#t28){(self::Index*) →* self::B*} in let final void #t30 = this.{self::Test::[]=}(#t28, #t29.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t29;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.expect
index f3c3437..7648761 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.expect
@@ -40,14 +40,14 @@
   abstract operator [](core::String* s) → core::int*;
   abstract operator []=(core::String* s, core::int* v) → void;
   method test() → void {
-    core::int* v1 = let final core::String* #t1 = "x" in let final core::int* #t2 = self::getInt() in let final void #t3 = this.{self::Test1::[]=}(#t1, #t2) in #t2;
-    core::num* v2 = let final core::String* #t4 = "x" in let final core::num* #t5 = self::getNum() as{TypeError} core::int* in let final void #t6 = this.{self::Test1::[]=}(#t4, #t5) in #t5;
-    core::int* v4 = let final core::String* #t7 = "x" in let final core::int* #t8 = this.{self::Test1::[]}(#t7) in #t8.{core::num::==}(null) ?{core::int*} let final core::int* #t9 = self::getInt() in let final void #t10 = this.{self::Test1::[]=}(#t7, #t9) in #t9 : #t8;
-    core::num* v5 = let final core::String* #t11 = "x" in let final core::int* #t12 = this.{self::Test1::[]}(#t11) in #t12.{core::num::==}(null) ?{core::num*} let final core::num* #t13 = self::getNum() as{TypeError} core::int* in let final void #t14 = this.{self::Test1::[]=}(#t11, #t13) in #t13 : #t12;
-    core::int* v7 = let final core::String* #t15 = "x" in let final core::int* #t16 = this.{self::Test1::[]}(#t15).{core::num::+}(self::getInt()) in let final void #t17 = this.{self::Test1::[]=}(#t15, #t16) in #t16;
-    core::num* v8 = let final core::String* #t18 = "x" in let final core::num* #t19 = this.{self::Test1::[]}(#t18).{core::num::+}(self::getNum()) as{TypeError} core::int* in let final void #t20 = this.{self::Test1::[]=}(#t18, #t19) in #t19;
-    core::int* v10 = let final core::String* #t21 = "x" in let final core::int* #t22 = this.{self::Test1::[]}(#t21).{core::num::+}(1) in let final void #t23 = this.{self::Test1::[]=}(#t21, #t22) in #t22;
-    core::int* v11 = let final core::String* #t24 = "x" in let final core::int* #t25 = this.{self::Test1::[]}(#t24) in let final void #t26 = this.{self::Test1::[]=}(#t24, #t25.{core::num::+}(1)) in #t25;
+    core::int* v1 = let final core::String* #t1 = "x" in let final core::int* #t2 = self::getInt() in let final void #t3 = this.{self::Test1::[]=}(#t1, #t2){(core::String*, core::int*) →* void} in #t2;
+    core::num* v2 = let final core::String* #t4 = "x" in let final core::num* #t5 = self::getNum() as{TypeError} core::int* in let final void #t6 = this.{self::Test1::[]=}(#t4, #t5){(core::String*, core::int*) →* void} in #t5;
+    core::int* v4 = let final core::String* #t7 = "x" in let final core::int* #t8 = this.{self::Test1::[]}(#t7){(core::String*) →* core::int*} in #t8 == null ?{core::int*} let final core::int* #t9 = self::getInt() in let final void #t10 = this.{self::Test1::[]=}(#t7, #t9){(core::String*, core::int*) →* void} in #t9 : #t8;
+    core::num* v5 = let final core::String* #t11 = "x" in let final core::int* #t12 = this.{self::Test1::[]}(#t11){(core::String*) →* core::int*} in #t12 == null ?{core::num*} let final core::num* #t13 = self::getNum() as{TypeError} core::int* in let final void #t14 = this.{self::Test1::[]=}(#t11, #t13){(core::String*, core::int*) →* void} in #t13 : #t12;
+    core::int* v7 = let final core::String* #t15 = "x" in let final core::int* #t16 = this.{self::Test1::[]}(#t15){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t17 = this.{self::Test1::[]=}(#t15, #t16){(core::String*, core::int*) →* void} in #t16;
+    core::num* v8 = let final core::String* #t18 = "x" in let final core::num* #t19 = this.{self::Test1::[]}(#t18){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t20 = this.{self::Test1::[]=}(#t18, #t19){(core::String*, core::int*) →* void} in #t19;
+    core::int* v10 = let final core::String* #t21 = "x" in let final core::int* #t22 = this.{self::Test1::[]}(#t21){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t23 = this.{self::Test1::[]=}(#t21, #t22){(core::String*, core::int*) →* void} in #t22;
+    core::int* v11 = let final core::String* #t24 = "x" in let final core::int* #t25 = this.{self::Test1::[]}(#t24){(core::String*) →* core::int*} in let final void #t26 = this.{self::Test1::[]=}(#t24, #t25.{core::num::+}(1){(core::num*) →* core::int*}){(core::String*, core::int*) →* void} in #t25;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -67,17 +67,17 @@
   abstract operator [](core::String* s) → core::int*;
   abstract operator []=(core::String* s, core::num* v) → void;
   method test() → void {
-    core::int* v1 = let final core::String* #t27 = "x" in let final core::int* #t28 = self::getInt() in let final void #t29 = this.{self::Test2::[]=}(#t27, #t28) in #t28;
-    core::num* v2 = let final core::String* #t30 = "x" in let final core::num* #t31 = self::getNum() in let final void #t32 = this.{self::Test2::[]=}(#t30, #t31) in #t31;
-    core::double* v3 = let final core::String* #t33 = "x" in let final core::double* #t34 = self::getDouble() in let final void #t35 = this.{self::Test2::[]=}(#t33, #t34) in #t34;
-    core::int* v4 = let final core::String* #t36 = "x" in let final core::int* #t37 = this.{self::Test2::[]}(#t36) in #t37.{core::num::==}(null) ?{core::int*} let final core::int* #t38 = self::getInt() in let final void #t39 = this.{self::Test2::[]=}(#t36, #t38) in #t38 : #t37;
-    core::num* v5 = let final core::String* #t40 = "x" in let final core::int* #t41 = this.{self::Test2::[]}(#t40) in #t41.{core::num::==}(null) ?{core::num*} let final core::num* #t42 = self::getNum() in let final void #t43 = this.{self::Test2::[]=}(#t40, #t42) in #t42 : #t41;
-    core::num* v6 = let final core::String* #t44 = "x" in let final core::int* #t45 = this.{self::Test2::[]}(#t44) in #t45.{core::num::==}(null) ?{core::num*} let final core::double* #t46 = self::getDouble() in let final void #t47 = this.{self::Test2::[]=}(#t44, #t46) in #t46 : #t45;
-    core::int* v7 = let final core::String* #t48 = "x" in let final core::int* #t49 = this.{self::Test2::[]}(#t48).{core::num::+}(self::getInt()) in let final void #t50 = this.{self::Test2::[]=}(#t48, #t49) in #t49;
-    core::num* v8 = let final core::String* #t51 = "x" in let final core::num* #t52 = this.{self::Test2::[]}(#t51).{core::num::+}(self::getNum()) in let final void #t53 = this.{self::Test2::[]=}(#t51, #t52) in #t52;
-    core::double* v9 = let final core::String* #t54 = "x" in let final core::double* #t55 = this.{self::Test2::[]}(#t54).{core::num::+}(self::getDouble()) in let final void #t56 = this.{self::Test2::[]=}(#t54, #t55) in #t55;
-    core::int* v10 = let final core::String* #t57 = "x" in let final core::int* #t58 = this.{self::Test2::[]}(#t57).{core::num::+}(1) in let final void #t59 = this.{self::Test2::[]=}(#t57, #t58) in #t58;
-    core::int* v11 = let final core::String* #t60 = "x" in let final core::int* #t61 = this.{self::Test2::[]}(#t60) in let final void #t62 = this.{self::Test2::[]=}(#t60, #t61.{core::num::+}(1)) in #t61;
+    core::int* v1 = let final core::String* #t27 = "x" in let final core::int* #t28 = self::getInt() in let final void #t29 = this.{self::Test2::[]=}(#t27, #t28){(core::String*, core::num*) →* void} in #t28;
+    core::num* v2 = let final core::String* #t30 = "x" in let final core::num* #t31 = self::getNum() in let final void #t32 = this.{self::Test2::[]=}(#t30, #t31){(core::String*, core::num*) →* void} in #t31;
+    core::double* v3 = let final core::String* #t33 = "x" in let final core::double* #t34 = self::getDouble() in let final void #t35 = this.{self::Test2::[]=}(#t33, #t34){(core::String*, core::num*) →* void} in #t34;
+    core::int* v4 = let final core::String* #t36 = "x" in let final core::int* #t37 = this.{self::Test2::[]}(#t36){(core::String*) →* core::int*} in #t37 == null ?{core::int*} let final core::int* #t38 = self::getInt() in let final void #t39 = this.{self::Test2::[]=}(#t36, #t38){(core::String*, core::num*) →* void} in #t38 : #t37;
+    core::num* v5 = let final core::String* #t40 = "x" in let final core::int* #t41 = this.{self::Test2::[]}(#t40){(core::String*) →* core::int*} in #t41 == null ?{core::num*} let final core::num* #t42 = self::getNum() in let final void #t43 = this.{self::Test2::[]=}(#t40, #t42){(core::String*, core::num*) →* void} in #t42 : #t41;
+    core::num* v6 = let final core::String* #t44 = "x" in let final core::int* #t45 = this.{self::Test2::[]}(#t44){(core::String*) →* core::int*} in #t45 == null ?{core::num*} let final core::double* #t46 = self::getDouble() in let final void #t47 = this.{self::Test2::[]=}(#t44, #t46){(core::String*, core::num*) →* void} in #t46 : #t45;
+    core::int* v7 = let final core::String* #t48 = "x" in let final core::int* #t49 = this.{self::Test2::[]}(#t48){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t50 = this.{self::Test2::[]=}(#t48, #t49){(core::String*, core::num*) →* void} in #t49;
+    core::num* v8 = let final core::String* #t51 = "x" in let final core::num* #t52 = this.{self::Test2::[]}(#t51){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t53 = this.{self::Test2::[]=}(#t51, #t52){(core::String*, core::num*) →* void} in #t52;
+    core::double* v9 = let final core::String* #t54 = "x" in let final core::double* #t55 = this.{self::Test2::[]}(#t54){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t56 = this.{self::Test2::[]=}(#t54, #t55){(core::String*, core::num*) →* void} in #t55;
+    core::int* v10 = let final core::String* #t57 = "x" in let final core::int* #t58 = this.{self::Test2::[]}(#t57){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t59 = this.{self::Test2::[]=}(#t57, #t58){(core::String*, core::num*) →* void} in #t58;
+    core::int* v11 = let final core::String* #t60 = "x" in let final core::int* #t61 = this.{self::Test2::[]}(#t60){(core::String*) →* core::int*} in let final void #t62 = this.{self::Test2::[]=}(#t60, #t61.{core::num::+}(1){(core::num*) →* core::int*}){(core::String*, core::num*) →* void} in #t61;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -97,21 +97,21 @@
   abstract operator [](core::String* s) → core::int*;
   abstract operator []=(core::String* s, core::double* v) → void;
   method test() → void {
-    core::num* v2 = let final core::String* #t63 = "x" in let final core::num* #t64 = self::getNum() as{TypeError} core::double* in let final void #t65 = this.{self::Test3::[]=}(#t63, #t64) in #t64;
-    core::double* v3 = let final core::String* #t66 = "x" in let final core::double* #t67 = self::getDouble() in let final void #t68 = this.{self::Test3::[]=}(#t66, #t67) in #t67;
-    core::num* v5 = let final core::String* #t69 = "x" in let final core::int* #t70 = this.{self::Test3::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num*} let final core::num* #t71 = self::getNum() as{TypeError} core::double* in let final void #t72 = this.{self::Test3::[]=}(#t69, #t71) in #t71 : #t70;
-    core::num* v6 = let final core::String* #t73 = "x" in let final core::int* #t74 = this.{self::Test3::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num*} let final core::double* #t75 = self::getDouble() in let final void #t76 = this.{self::Test3::[]=}(#t73, #t75) in #t75 : #t74;
+    core::num* v2 = let final core::String* #t63 = "x" in let final core::num* #t64 = self::getNum() as{TypeError} core::double* in let final void #t65 = this.{self::Test3::[]=}(#t63, #t64){(core::String*, core::double*) →* void} in #t64;
+    core::double* v3 = let final core::String* #t66 = "x" in let final core::double* #t67 = self::getDouble() in let final void #t68 = this.{self::Test3::[]=}(#t66, #t67){(core::String*, core::double*) →* void} in #t67;
+    core::num* v5 = let final core::String* #t69 = "x" in let final core::int* #t70 = this.{self::Test3::[]}(#t69){(core::String*) →* core::int*} in #t70 == null ?{core::num*} let final core::num* #t71 = self::getNum() as{TypeError} core::double* in let final void #t72 = this.{self::Test3::[]=}(#t69, #t71){(core::String*, core::double*) →* void} in #t71 : #t70;
+    core::num* v6 = let final core::String* #t73 = "x" in let final core::int* #t74 = this.{self::Test3::[]}(#t73){(core::String*) →* core::int*} in #t74 == null ?{core::num*} let final core::double* #t75 = self::getDouble() in let final void #t76 = this.{self::Test3::[]=}(#t73, #t75){(core::String*, core::double*) →* void} in #t75 : #t74;
     core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = let final Never* #t79 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:109:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
         /*@target=num.+*/ += getInt();
-                          ^" in this.{self::Test3::[]}(#t77).{core::num::+}(self::getInt()) as{TypeError} core::double* in let final void #t80 = this.{self::Test3::[]=}(#t77, #t78) in #t78;
-    core::num* v8 = let final core::String* #t81 = "x" in let final core::num* #t82 = this.{self::Test3::[]}(#t81).{core::num::+}(self::getNum()) as{TypeError} core::double* in let final void #t83 = this.{self::Test3::[]=}(#t81, #t82) in #t82;
-    core::double* v9 = let final core::String* #t84 = "x" in let final core::double* #t85 = this.{self::Test3::[]}(#t84).{core::num::+}(self::getDouble()) in let final void #t86 = this.{self::Test3::[]=}(#t84, #t85) in #t85;
+                          ^" in this.{self::Test3::[]}(#t77){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t80 = this.{self::Test3::[]=}(#t77, #t78){(core::String*, core::double*) →* void} in #t78;
+    core::num* v8 = let final core::String* #t81 = "x" in let final core::num* #t82 = this.{self::Test3::[]}(#t81){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t83 = this.{self::Test3::[]=}(#t81, #t82){(core::String*, core::double*) →* void} in #t82;
+    core::double* v9 = let final core::String* #t84 = "x" in let final core::double* #t85 = this.{self::Test3::[]}(#t84){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t86 = this.{self::Test3::[]=}(#t84, #t85){(core::String*, core::double*) →* void} in #t85;
     core::int* v10 = let final core::String* #t87 = "x" in let final core::int* #t88 = let final Never* #t89 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:119:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
     var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
-                                                 ^" in this.{self::Test3::[]}(#t87).{core::num::+}(1) as{TypeError} core::double* in let final void #t90 = this.{self::Test3::[]=}(#t87, #t88) in #t88;
-    core::int* v11 = let final core::String* #t91 = "x" in let final core::int* #t92 = this.{self::Test3::[]}(#t91) in let final void #t93 = this.{self::Test3::[]=}(#t91, let final Never* #t94 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:124:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+                                                 ^" in this.{self::Test3::[]}(#t87){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t90 = this.{self::Test3::[]=}(#t87, #t88){(core::String*, core::double*) →* void} in #t88;
+    core::int* v11 = let final core::String* #t91 = "x" in let final core::int* #t92 = this.{self::Test3::[]}(#t91){(core::String*) →* core::int*} in let final void #t93 = this.{self::Test3::[]=}(#t91, let final Never* #t94 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:124:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
         /*@target=num.+*/ ++;
-                          ^" in #t92.{core::num::+}(1) as{TypeError} core::double*) in #t92;
+                          ^" in #t92.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t92;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -131,14 +131,14 @@
   abstract operator [](core::String* s) → core::num*;
   abstract operator []=(core::String* s, core::int* v) → void;
   method test() → void {
-    core::int* v1 = let final core::String* #t95 = "x" in let final core::int* #t96 = self::getInt() in let final void #t97 = this.{self::Test4::[]=}(#t95, #t96) in #t96;
-    core::num* v2 = let final core::String* #t98 = "x" in let final core::num* #t99 = self::getNum() as{TypeError} core::int* in let final void #t100 = this.{self::Test4::[]=}(#t98, #t99) in #t99;
-    core::num* v4 = let final core::String* #t101 = "x" in let final core::num* #t102 = this.{self::Test4::[]}(#t101) in #t102.{core::num::==}(null) ?{core::num*} let final core::int* #t103 = self::getInt() in let final void #t104 = this.{self::Test4::[]=}(#t101, #t103) in #t103 : #t102;
-    core::num* v5 = let final core::String* #t105 = "x" in let final core::num* #t106 = this.{self::Test4::[]}(#t105) in #t106.{core::num::==}(null) ?{core::num*} let final core::num* #t107 = self::getNum() as{TypeError} core::int* in let final void #t108 = this.{self::Test4::[]=}(#t105, #t107) in #t107 : #t106;
-    core::num* v7 = let final core::String* #t109 = "x" in let final core::num* #t110 = this.{self::Test4::[]}(#t109).{core::num::+}(self::getInt()) as{TypeError} core::int* in let final void #t111 = this.{self::Test4::[]=}(#t109, #t110) in #t110;
-    core::num* v8 = let final core::String* #t112 = "x" in let final core::num* #t113 = this.{self::Test4::[]}(#t112).{core::num::+}(self::getNum()) as{TypeError} core::int* in let final void #t114 = this.{self::Test4::[]=}(#t112, #t113) in #t113;
-    core::num* v10 = let final core::String* #t115 = "x" in let final core::num* #t116 = this.{self::Test4::[]}(#t115).{core::num::+}(1) as{TypeError} core::int* in let final void #t117 = this.{self::Test4::[]=}(#t115, #t116) in #t116;
-    core::num* v11 = let final core::String* #t118 = "x" in let final core::num* #t119 = this.{self::Test4::[]}(#t118) in let final void #t120 = this.{self::Test4::[]=}(#t118, #t119.{core::num::+}(1) as{TypeError} core::int*) in #t119;
+    core::int* v1 = let final core::String* #t95 = "x" in let final core::int* #t96 = self::getInt() in let final void #t97 = this.{self::Test4::[]=}(#t95, #t96){(core::String*, core::int*) →* void} in #t96;
+    core::num* v2 = let final core::String* #t98 = "x" in let final core::num* #t99 = self::getNum() as{TypeError} core::int* in let final void #t100 = this.{self::Test4::[]=}(#t98, #t99){(core::String*, core::int*) →* void} in #t99;
+    core::num* v4 = let final core::String* #t101 = "x" in let final core::num* #t102 = this.{self::Test4::[]}(#t101){(core::String*) →* core::num*} in #t102 == null ?{core::num*} let final core::int* #t103 = self::getInt() in let final void #t104 = this.{self::Test4::[]=}(#t101, #t103){(core::String*, core::int*) →* void} in #t103 : #t102;
+    core::num* v5 = let final core::String* #t105 = "x" in let final core::num* #t106 = this.{self::Test4::[]}(#t105){(core::String*) →* core::num*} in #t106 == null ?{core::num*} let final core::num* #t107 = self::getNum() as{TypeError} core::int* in let final void #t108 = this.{self::Test4::[]=}(#t105, #t107){(core::String*, core::int*) →* void} in #t107 : #t106;
+    core::num* v7 = let final core::String* #t109 = "x" in let final core::num* #t110 = this.{self::Test4::[]}(#t109){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t111 = this.{self::Test4::[]=}(#t109, #t110){(core::String*, core::int*) →* void} in #t110;
+    core::num* v8 = let final core::String* #t112 = "x" in let final core::num* #t113 = this.{self::Test4::[]}(#t112){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t114 = this.{self::Test4::[]=}(#t112, #t113){(core::String*, core::int*) →* void} in #t113;
+    core::num* v10 = let final core::String* #t115 = "x" in let final core::num* #t116 = this.{self::Test4::[]}(#t115){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t117 = this.{self::Test4::[]=}(#t115, #t116){(core::String*, core::int*) →* void} in #t116;
+    core::num* v11 = let final core::String* #t118 = "x" in let final core::num* #t119 = this.{self::Test4::[]}(#t118){(core::String*) →* core::num*} in let final void #t120 = this.{self::Test4::[]=}(#t118, #t119.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t119;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -158,17 +158,17 @@
   abstract operator [](core::String* s) → core::num*;
   abstract operator []=(core::String* s, core::num* v) → void;
   method test() → void {
-    core::int* v1 = let final core::String* #t121 = "x" in let final core::int* #t122 = self::getInt() in let final void #t123 = this.{self::Test5::[]=}(#t121, #t122) in #t122;
-    core::num* v2 = let final core::String* #t124 = "x" in let final core::num* #t125 = self::getNum() in let final void #t126 = this.{self::Test5::[]=}(#t124, #t125) in #t125;
-    core::double* v3 = let final core::String* #t127 = "x" in let final core::double* #t128 = self::getDouble() in let final void #t129 = this.{self::Test5::[]=}(#t127, #t128) in #t128;
-    core::num* v4 = let final core::String* #t130 = "x" in let final core::num* #t131 = this.{self::Test5::[]}(#t130) in #t131.{core::num::==}(null) ?{core::num*} let final core::int* #t132 = self::getInt() in let final void #t133 = this.{self::Test5::[]=}(#t130, #t132) in #t132 : #t131;
-    core::num* v5 = let final core::String* #t134 = "x" in let final core::num* #t135 = this.{self::Test5::[]}(#t134) in #t135.{core::num::==}(null) ?{core::num*} let final core::num* #t136 = self::getNum() in let final void #t137 = this.{self::Test5::[]=}(#t134, #t136) in #t136 : #t135;
-    core::num* v6 = let final core::String* #t138 = "x" in let final core::num* #t139 = this.{self::Test5::[]}(#t138) in #t139.{core::num::==}(null) ?{core::num*} let final core::double* #t140 = self::getDouble() in let final void #t141 = this.{self::Test5::[]=}(#t138, #t140) in #t140 : #t139;
-    core::num* v7 = let final core::String* #t142 = "x" in let final core::num* #t143 = this.{self::Test5::[]}(#t142).{core::num::+}(self::getInt()) in let final void #t144 = this.{self::Test5::[]=}(#t142, #t143) in #t143;
-    core::num* v8 = let final core::String* #t145 = "x" in let final core::num* #t146 = this.{self::Test5::[]}(#t145).{core::num::+}(self::getNum()) in let final void #t147 = this.{self::Test5::[]=}(#t145, #t146) in #t146;
-    core::num* v9 = let final core::String* #t148 = "x" in let final core::num* #t149 = this.{self::Test5::[]}(#t148).{core::num::+}(self::getDouble()) in let final void #t150 = this.{self::Test5::[]=}(#t148, #t149) in #t149;
-    core::num* v10 = let final core::String* #t151 = "x" in let final core::num* #t152 = this.{self::Test5::[]}(#t151).{core::num::+}(1) in let final void #t153 = this.{self::Test5::[]=}(#t151, #t152) in #t152;
-    core::num* v11 = let final core::String* #t154 = "x" in let final core::num* #t155 = this.{self::Test5::[]}(#t154) in let final void #t156 = this.{self::Test5::[]=}(#t154, #t155.{core::num::+}(1)) in #t155;
+    core::int* v1 = let final core::String* #t121 = "x" in let final core::int* #t122 = self::getInt() in let final void #t123 = this.{self::Test5::[]=}(#t121, #t122){(core::String*, core::num*) →* void} in #t122;
+    core::num* v2 = let final core::String* #t124 = "x" in let final core::num* #t125 = self::getNum() in let final void #t126 = this.{self::Test5::[]=}(#t124, #t125){(core::String*, core::num*) →* void} in #t125;
+    core::double* v3 = let final core::String* #t127 = "x" in let final core::double* #t128 = self::getDouble() in let final void #t129 = this.{self::Test5::[]=}(#t127, #t128){(core::String*, core::num*) →* void} in #t128;
+    core::num* v4 = let final core::String* #t130 = "x" in let final core::num* #t131 = this.{self::Test5::[]}(#t130){(core::String*) →* core::num*} in #t131 == null ?{core::num*} let final core::int* #t132 = self::getInt() in let final void #t133 = this.{self::Test5::[]=}(#t130, #t132){(core::String*, core::num*) →* void} in #t132 : #t131;
+    core::num* v5 = let final core::String* #t134 = "x" in let final core::num* #t135 = this.{self::Test5::[]}(#t134){(core::String*) →* core::num*} in #t135 == null ?{core::num*} let final core::num* #t136 = self::getNum() in let final void #t137 = this.{self::Test5::[]=}(#t134, #t136){(core::String*, core::num*) →* void} in #t136 : #t135;
+    core::num* v6 = let final core::String* #t138 = "x" in let final core::num* #t139 = this.{self::Test5::[]}(#t138){(core::String*) →* core::num*} in #t139 == null ?{core::num*} let final core::double* #t140 = self::getDouble() in let final void #t141 = this.{self::Test5::[]=}(#t138, #t140){(core::String*, core::num*) →* void} in #t140 : #t139;
+    core::num* v7 = let final core::String* #t142 = "x" in let final core::num* #t143 = this.{self::Test5::[]}(#t142){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t144 = this.{self::Test5::[]=}(#t142, #t143){(core::String*, core::num*) →* void} in #t143;
+    core::num* v8 = let final core::String* #t145 = "x" in let final core::num* #t146 = this.{self::Test5::[]}(#t145){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t147 = this.{self::Test5::[]=}(#t145, #t146){(core::String*, core::num*) →* void} in #t146;
+    core::num* v9 = let final core::String* #t148 = "x" in let final core::num* #t149 = this.{self::Test5::[]}(#t148){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t150 = this.{self::Test5::[]=}(#t148, #t149){(core::String*, core::num*) →* void} in #t149;
+    core::num* v10 = let final core::String* #t151 = "x" in let final core::num* #t152 = this.{self::Test5::[]}(#t151){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t153 = this.{self::Test5::[]=}(#t151, #t152){(core::String*, core::num*) →* void} in #t152;
+    core::num* v11 = let final core::String* #t154 = "x" in let final core::num* #t155 = this.{self::Test5::[]}(#t154){(core::String*) →* core::num*} in let final void #t156 = this.{self::Test5::[]=}(#t154, #t155.{core::num::+}(1){(core::num*) →* core::num*}){(core::String*, core::num*) →* void} in #t155;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -188,15 +188,15 @@
   abstract operator [](core::String* s) → core::num*;
   abstract operator []=(core::String* s, core::double* v) → void;
   method test() → void {
-    core::num* v2 = let final core::String* #t157 = "x" in let final core::num* #t158 = self::getNum() as{TypeError} core::double* in let final void #t159 = this.{self::Test6::[]=}(#t157, #t158) in #t158;
-    core::double* v3 = let final core::String* #t160 = "x" in let final core::double* #t161 = self::getDouble() in let final void #t162 = this.{self::Test6::[]=}(#t160, #t161) in #t161;
-    core::num* v5 = let final core::String* #t163 = "x" in let final core::num* #t164 = this.{self::Test6::[]}(#t163) in #t164.{core::num::==}(null) ?{core::num*} let final core::num* #t165 = self::getNum() as{TypeError} core::double* in let final void #t166 = this.{self::Test6::[]=}(#t163, #t165) in #t165 : #t164;
-    core::num* v6 = let final core::String* #t167 = "x" in let final core::num* #t168 = this.{self::Test6::[]}(#t167) in #t168.{core::num::==}(null) ?{core::num*} let final core::double* #t169 = self::getDouble() in let final void #t170 = this.{self::Test6::[]=}(#t167, #t169) in #t169 : #t168;
-    core::num* v7 = let final core::String* #t171 = "x" in let final core::num* #t172 = this.{self::Test6::[]}(#t171).{core::num::+}(self::getInt()) as{TypeError} core::double* in let final void #t173 = this.{self::Test6::[]=}(#t171, #t172) in #t172;
-    core::num* v8 = let final core::String* #t174 = "x" in let final core::num* #t175 = this.{self::Test6::[]}(#t174).{core::num::+}(self::getNum()) as{TypeError} core::double* in let final void #t176 = this.{self::Test6::[]=}(#t174, #t175) in #t175;
-    core::num* v9 = let final core::String* #t177 = "x" in let final core::num* #t178 = this.{self::Test6::[]}(#t177).{core::num::+}(self::getDouble()) as{TypeError} core::double* in let final void #t179 = this.{self::Test6::[]=}(#t177, #t178) in #t178;
-    core::num* v10 = let final core::String* #t180 = "x" in let final core::num* #t181 = this.{self::Test6::[]}(#t180).{core::num::+}(1) as{TypeError} core::double* in let final void #t182 = this.{self::Test6::[]=}(#t180, #t181) in #t181;
-    core::num* v11 = let final core::String* #t183 = "x" in let final core::num* #t184 = this.{self::Test6::[]}(#t183) in let final void #t185 = this.{self::Test6::[]=}(#t183, #t184.{core::num::+}(1) as{TypeError} core::double*) in #t184;
+    core::num* v2 = let final core::String* #t157 = "x" in let final core::num* #t158 = self::getNum() as{TypeError} core::double* in let final void #t159 = this.{self::Test6::[]=}(#t157, #t158){(core::String*, core::double*) →* void} in #t158;
+    core::double* v3 = let final core::String* #t160 = "x" in let final core::double* #t161 = self::getDouble() in let final void #t162 = this.{self::Test6::[]=}(#t160, #t161){(core::String*, core::double*) →* void} in #t161;
+    core::num* v5 = let final core::String* #t163 = "x" in let final core::num* #t164 = this.{self::Test6::[]}(#t163){(core::String*) →* core::num*} in #t164 == null ?{core::num*} let final core::num* #t165 = self::getNum() as{TypeError} core::double* in let final void #t166 = this.{self::Test6::[]=}(#t163, #t165){(core::String*, core::double*) →* void} in #t165 : #t164;
+    core::num* v6 = let final core::String* #t167 = "x" in let final core::num* #t168 = this.{self::Test6::[]}(#t167){(core::String*) →* core::num*} in #t168 == null ?{core::num*} let final core::double* #t169 = self::getDouble() in let final void #t170 = this.{self::Test6::[]=}(#t167, #t169){(core::String*, core::double*) →* void} in #t169 : #t168;
+    core::num* v7 = let final core::String* #t171 = "x" in let final core::num* #t172 = this.{self::Test6::[]}(#t171){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t173 = this.{self::Test6::[]=}(#t171, #t172){(core::String*, core::double*) →* void} in #t172;
+    core::num* v8 = let final core::String* #t174 = "x" in let final core::num* #t175 = this.{self::Test6::[]}(#t174){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t176 = this.{self::Test6::[]=}(#t174, #t175){(core::String*, core::double*) →* void} in #t175;
+    core::num* v9 = let final core::String* #t177 = "x" in let final core::num* #t178 = this.{self::Test6::[]}(#t177){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t179 = this.{self::Test6::[]=}(#t177, #t178){(core::String*, core::double*) →* void} in #t178;
+    core::num* v10 = let final core::String* #t180 = "x" in let final core::num* #t181 = this.{self::Test6::[]}(#t180){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t182 = this.{self::Test6::[]=}(#t180, #t181){(core::String*, core::double*) →* void} in #t181;
+    core::num* v11 = let final core::String* #t183 = "x" in let final core::num* #t184 = this.{self::Test6::[]}(#t183){(core::String*) →* core::num*} in let final void #t185 = this.{self::Test6::[]=}(#t183, #t184.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t184;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -216,22 +216,22 @@
   abstract operator [](core::String* s) → core::double*;
   abstract operator []=(core::String* s, core::int* v) → void;
   method test() → void {
-    core::int* v1 = let final core::String* #t186 = "x" in let final core::int* #t187 = self::getInt() in let final void #t188 = this.{self::Test7::[]=}(#t186, #t187) in #t187;
-    core::num* v2 = let final core::String* #t189 = "x" in let final core::num* #t190 = self::getNum() as{TypeError} core::int* in let final void #t191 = this.{self::Test7::[]=}(#t189, #t190) in #t190;
-    core::num* v4 = let final core::String* #t192 = "x" in let final core::double* #t193 = this.{self::Test7::[]}(#t192) in #t193.{core::num::==}(null) ?{core::num*} let final core::int* #t194 = self::getInt() in let final void #t195 = this.{self::Test7::[]=}(#t192, #t194) in #t194 : #t193;
-    core::num* v5 = let final core::String* #t196 = "x" in let final core::double* #t197 = this.{self::Test7::[]}(#t196) in #t197.{core::num::==}(null) ?{core::num*} let final core::num* #t198 = self::getNum() as{TypeError} core::int* in let final void #t199 = this.{self::Test7::[]=}(#t196, #t198) in #t198 : #t197;
+    core::int* v1 = let final core::String* #t186 = "x" in let final core::int* #t187 = self::getInt() in let final void #t188 = this.{self::Test7::[]=}(#t186, #t187){(core::String*, core::int*) →* void} in #t187;
+    core::num* v2 = let final core::String* #t189 = "x" in let final core::num* #t190 = self::getNum() as{TypeError} core::int* in let final void #t191 = this.{self::Test7::[]=}(#t189, #t190){(core::String*, core::int*) →* void} in #t190;
+    core::num* v4 = let final core::String* #t192 = "x" in let final core::double* #t193 = this.{self::Test7::[]}(#t192){(core::String*) →* core::double*} in #t193 == null ?{core::num*} let final core::int* #t194 = self::getInt() in let final void #t195 = this.{self::Test7::[]=}(#t192, #t194){(core::String*, core::int*) →* void} in #t194 : #t193;
+    core::num* v5 = let final core::String* #t196 = "x" in let final core::double* #t197 = this.{self::Test7::[]}(#t196){(core::String*) →* core::double*} in #t197 == null ?{core::num*} let final core::num* #t198 = self::getNum() as{TypeError} core::int* in let final void #t199 = this.{self::Test7::[]=}(#t196, #t198){(core::String*, core::int*) →* void} in #t198 : #t197;
     core::double* v7 = let final core::String* #t200 = "x" in let final core::double* #t201 = let final Never* #t202 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:264:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         /*@target=double.+*/ += getInt();
-                             ^" in this.{self::Test7::[]}(#t200).{core::double::+}(self::getInt()) as{TypeError} core::int* in let final void #t203 = this.{self::Test7::[]=}(#t200, #t201) in #t201;
+                             ^" in this.{self::Test7::[]}(#t200){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t203 = this.{self::Test7::[]=}(#t200, #t201){(core::String*, core::int*) →* void} in #t201;
     core::double* v8 = let final core::String* #t204 = "x" in let final core::double* #t205 = let final Never* #t206 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:268:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         /*@target=double.+*/ += getNum();
-                             ^" in this.{self::Test7::[]}(#t204).{core::double::+}(self::getNum()) as{TypeError} core::int* in let final void #t207 = this.{self::Test7::[]=}(#t204, #t205) in #t205;
+                             ^" in this.{self::Test7::[]}(#t204){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t207 = this.{self::Test7::[]=}(#t204, #t205){(core::String*, core::int*) →* void} in #t205;
     core::double* v10 = let final core::String* #t208 = "x" in let final core::double* #t209 = let final Never* #t210 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
     var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
-                                                       ^" in this.{self::Test7::[]}(#t208).{core::double::+}(1) as{TypeError} core::int* in let final void #t211 = this.{self::Test7::[]=}(#t208, #t209) in #t209;
-    core::double* v11 = let final core::String* #t212 = "x" in let final core::double* #t213 = this.{self::Test7::[]}(#t212) in let final void #t214 = this.{self::Test7::[]=}(#t212, let final Never* #t215 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:275:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+                                                       ^" in this.{self::Test7::[]}(#t208){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t211 = this.{self::Test7::[]=}(#t208, #t209){(core::String*, core::int*) →* void} in #t209;
+    core::double* v11 = let final core::String* #t212 = "x" in let final core::double* #t213 = this.{self::Test7::[]}(#t212){(core::String*) →* core::double*} in let final void #t214 = this.{self::Test7::[]=}(#t212, let final Never* #t215 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:275:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
         /*@target=double.+*/ ++;
-                             ^" in #t213.{core::double::+}(1) as{TypeError} core::int*) in #t213;
+                             ^" in #t213.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t213;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -251,17 +251,17 @@
   abstract operator [](core::String* s) → core::double*;
   abstract operator []=(core::String* s, core::num* v) → void;
   method test() → void {
-    core::int* v1 = let final core::String* #t216 = "x" in let final core::int* #t217 = self::getInt() in let final void #t218 = this.{self::Test8::[]=}(#t216, #t217) in #t217;
-    core::num* v2 = let final core::String* #t219 = "x" in let final core::num* #t220 = self::getNum() in let final void #t221 = this.{self::Test8::[]=}(#t219, #t220) in #t220;
-    core::double* v3 = let final core::String* #t222 = "x" in let final core::double* #t223 = self::getDouble() in let final void #t224 = this.{self::Test8::[]=}(#t222, #t223) in #t223;
-    core::num* v4 = let final core::String* #t225 = "x" in let final core::double* #t226 = this.{self::Test8::[]}(#t225) in #t226.{core::num::==}(null) ?{core::num*} let final core::int* #t227 = self::getInt() in let final void #t228 = this.{self::Test8::[]=}(#t225, #t227) in #t227 : #t226;
-    core::num* v5 = let final core::String* #t229 = "x" in let final core::double* #t230 = this.{self::Test8::[]}(#t229) in #t230.{core::num::==}(null) ?{core::num*} let final core::num* #t231 = self::getNum() in let final void #t232 = this.{self::Test8::[]=}(#t229, #t231) in #t231 : #t230;
-    core::double* v6 = let final core::String* #t233 = "x" in let final core::double* #t234 = this.{self::Test8::[]}(#t233) in #t234.{core::num::==}(null) ?{core::double*} let final core::double* #t235 = self::getDouble() in let final void #t236 = this.{self::Test8::[]=}(#t233, #t235) in #t235 : #t234;
-    core::double* v7 = let final core::String* #t237 = "x" in let final core::double* #t238 = this.{self::Test8::[]}(#t237).{core::double::+}(self::getInt()) in let final void #t239 = this.{self::Test8::[]=}(#t237, #t238) in #t238;
-    core::double* v8 = let final core::String* #t240 = "x" in let final core::double* #t241 = this.{self::Test8::[]}(#t240).{core::double::+}(self::getNum()) in let final void #t242 = this.{self::Test8::[]=}(#t240, #t241) in #t241;
-    core::double* v9 = let final core::String* #t243 = "x" in let final core::double* #t244 = this.{self::Test8::[]}(#t243).{core::double::+}(self::getDouble()) in let final void #t245 = this.{self::Test8::[]=}(#t243, #t244) in #t244;
-    core::double* v10 = let final core::String* #t246 = "x" in let final core::double* #t247 = this.{self::Test8::[]}(#t246).{core::double::+}(1) in let final void #t248 = this.{self::Test8::[]=}(#t246, #t247) in #t247;
-    core::double* v11 = let final core::String* #t249 = "x" in let final core::double* #t250 = this.{self::Test8::[]}(#t249) in let final void #t251 = this.{self::Test8::[]=}(#t249, #t250.{core::double::+}(1)) in #t250;
+    core::int* v1 = let final core::String* #t216 = "x" in let final core::int* #t217 = self::getInt() in let final void #t218 = this.{self::Test8::[]=}(#t216, #t217){(core::String*, core::num*) →* void} in #t217;
+    core::num* v2 = let final core::String* #t219 = "x" in let final core::num* #t220 = self::getNum() in let final void #t221 = this.{self::Test8::[]=}(#t219, #t220){(core::String*, core::num*) →* void} in #t220;
+    core::double* v3 = let final core::String* #t222 = "x" in let final core::double* #t223 = self::getDouble() in let final void #t224 = this.{self::Test8::[]=}(#t222, #t223){(core::String*, core::num*) →* void} in #t223;
+    core::num* v4 = let final core::String* #t225 = "x" in let final core::double* #t226 = this.{self::Test8::[]}(#t225){(core::String*) →* core::double*} in #t226 == null ?{core::num*} let final core::int* #t227 = self::getInt() in let final void #t228 = this.{self::Test8::[]=}(#t225, #t227){(core::String*, core::num*) →* void} in #t227 : #t226;
+    core::num* v5 = let final core::String* #t229 = "x" in let final core::double* #t230 = this.{self::Test8::[]}(#t229){(core::String*) →* core::double*} in #t230 == null ?{core::num*} let final core::num* #t231 = self::getNum() in let final void #t232 = this.{self::Test8::[]=}(#t229, #t231){(core::String*, core::num*) →* void} in #t231 : #t230;
+    core::double* v6 = let final core::String* #t233 = "x" in let final core::double* #t234 = this.{self::Test8::[]}(#t233){(core::String*) →* core::double*} in #t234 == null ?{core::double*} let final core::double* #t235 = self::getDouble() in let final void #t236 = this.{self::Test8::[]=}(#t233, #t235){(core::String*, core::num*) →* void} in #t235 : #t234;
+    core::double* v7 = let final core::String* #t237 = "x" in let final core::double* #t238 = this.{self::Test8::[]}(#t237){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t239 = this.{self::Test8::[]=}(#t237, #t238){(core::String*, core::num*) →* void} in #t238;
+    core::double* v8 = let final core::String* #t240 = "x" in let final core::double* #t241 = this.{self::Test8::[]}(#t240){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t242 = this.{self::Test8::[]=}(#t240, #t241){(core::String*, core::num*) →* void} in #t241;
+    core::double* v9 = let final core::String* #t243 = "x" in let final core::double* #t244 = this.{self::Test8::[]}(#t243){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t245 = this.{self::Test8::[]=}(#t243, #t244){(core::String*, core::num*) →* void} in #t244;
+    core::double* v10 = let final core::String* #t246 = "x" in let final core::double* #t247 = this.{self::Test8::[]}(#t246){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t248 = this.{self::Test8::[]=}(#t246, #t247){(core::String*, core::num*) →* void} in #t247;
+    core::double* v11 = let final core::String* #t249 = "x" in let final core::double* #t250 = this.{self::Test8::[]}(#t249){(core::String*) →* core::double*} in let final void #t251 = this.{self::Test8::[]=}(#t249, #t250.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::num*) →* void} in #t250;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -281,15 +281,15 @@
   abstract operator [](core::String* s) → core::double*;
   abstract operator []=(core::String* s, core::double* v) → void;
   method test() → void {
-    core::num* v2 = let final core::String* #t252 = "x" in let final core::num* #t253 = self::getNum() as{TypeError} core::double* in let final void #t254 = this.{self::Test9::[]=}(#t252, #t253) in #t253;
-    core::double* v3 = let final core::String* #t255 = "x" in let final core::double* #t256 = self::getDouble() in let final void #t257 = this.{self::Test9::[]=}(#t255, #t256) in #t256;
-    core::num* v5 = let final core::String* #t258 = "x" in let final core::double* #t259 = this.{self::Test9::[]}(#t258) in #t259.{core::num::==}(null) ?{core::num*} let final core::num* #t260 = self::getNum() as{TypeError} core::double* in let final void #t261 = this.{self::Test9::[]=}(#t258, #t260) in #t260 : #t259;
-    core::double* v6 = let final core::String* #t262 = "x" in let final core::double* #t263 = this.{self::Test9::[]}(#t262) in #t263.{core::num::==}(null) ?{core::double*} let final core::double* #t264 = self::getDouble() in let final void #t265 = this.{self::Test9::[]=}(#t262, #t264) in #t264 : #t263;
-    core::double* v7 = let final core::String* #t266 = "x" in let final core::double* #t267 = this.{self::Test9::[]}(#t266).{core::double::+}(self::getInt()) in let final void #t268 = this.{self::Test9::[]=}(#t266, #t267) in #t267;
-    core::double* v8 = let final core::String* #t269 = "x" in let final core::double* #t270 = this.{self::Test9::[]}(#t269).{core::double::+}(self::getNum()) in let final void #t271 = this.{self::Test9::[]=}(#t269, #t270) in #t270;
-    core::double* v9 = let final core::String* #t272 = "x" in let final core::double* #t273 = this.{self::Test9::[]}(#t272).{core::double::+}(self::getDouble()) in let final void #t274 = this.{self::Test9::[]=}(#t272, #t273) in #t273;
-    core::double* v10 = let final core::String* #t275 = "x" in let final core::double* #t276 = this.{self::Test9::[]}(#t275).{core::double::+}(1) in let final void #t277 = this.{self::Test9::[]=}(#t275, #t276) in #t276;
-    core::double* v11 = let final core::String* #t278 = "x" in let final core::double* #t279 = this.{self::Test9::[]}(#t278) in let final void #t280 = this.{self::Test9::[]=}(#t278, #t279.{core::double::+}(1)) in #t279;
+    core::num* v2 = let final core::String* #t252 = "x" in let final core::num* #t253 = self::getNum() as{TypeError} core::double* in let final void #t254 = this.{self::Test9::[]=}(#t252, #t253){(core::String*, core::double*) →* void} in #t253;
+    core::double* v3 = let final core::String* #t255 = "x" in let final core::double* #t256 = self::getDouble() in let final void #t257 = this.{self::Test9::[]=}(#t255, #t256){(core::String*, core::double*) →* void} in #t256;
+    core::num* v5 = let final core::String* #t258 = "x" in let final core::double* #t259 = this.{self::Test9::[]}(#t258){(core::String*) →* core::double*} in #t259 == null ?{core::num*} let final core::num* #t260 = self::getNum() as{TypeError} core::double* in let final void #t261 = this.{self::Test9::[]=}(#t258, #t260){(core::String*, core::double*) →* void} in #t260 : #t259;
+    core::double* v6 = let final core::String* #t262 = "x" in let final core::double* #t263 = this.{self::Test9::[]}(#t262){(core::String*) →* core::double*} in #t263 == null ?{core::double*} let final core::double* #t264 = self::getDouble() in let final void #t265 = this.{self::Test9::[]=}(#t262, #t264){(core::String*, core::double*) →* void} in #t264 : #t263;
+    core::double* v7 = let final core::String* #t266 = "x" in let final core::double* #t267 = this.{self::Test9::[]}(#t266){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t268 = this.{self::Test9::[]=}(#t266, #t267){(core::String*, core::double*) →* void} in #t267;
+    core::double* v8 = let final core::String* #t269 = "x" in let final core::double* #t270 = this.{self::Test9::[]}(#t269){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t271 = this.{self::Test9::[]=}(#t269, #t270){(core::String*, core::double*) →* void} in #t270;
+    core::double* v9 = let final core::String* #t272 = "x" in let final core::double* #t273 = this.{self::Test9::[]}(#t272){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t274 = this.{self::Test9::[]=}(#t272, #t273){(core::String*, core::double*) →* void} in #t273;
+    core::double* v10 = let final core::String* #t275 = "x" in let final core::double* #t276 = this.{self::Test9::[]}(#t275){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t277 = this.{self::Test9::[]=}(#t275, #t276){(core::String*, core::double*) →* void} in #t276;
+    core::double* v11 = let final core::String* #t278 = "x" in let final core::double* #t279 = this.{self::Test9::[]}(#t278){(core::String*) →* core::double*} in let final void #t280 = this.{self::Test9::[]=}(#t278, #t279.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::double*) →* void} in #t279;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect
index 1b6692bb..fcc9cd1 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect
@@ -57,119 +57,119 @@
 static method getDouble() → core::double*
   return 0.0;
 static method test1(self::Test<core::int*, core::int*>* t) → void {
-  core::int* v1 = let final self::Test<core::int*, core::int*>* #t1 = t in let final core::String* #t2 = "x" in let final core::int* #t3 = self::getInt() in let final void #t4 = #t1.{self::Test::[]=}(#t2, #t3) in #t3;
-  core::num* v2 = let final self::Test<core::int*, core::int*>* #t5 = t in let final core::String* #t6 = "x" in let final core::num* #t7 = self::getNum() as{TypeError} core::int* in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7) in #t7;
-  core::int* v4 = let final self::Test<core::int*, core::int*>* #t9 = t in let final core::String* #t10 = "x" in let final core::int* #t11 = #t9.{self::Test::[]}(#t10) in #t11.{core::num::==}(null) ?{core::int*} let final core::int* #t12 = self::getInt() in let final void #t13 = #t9.{self::Test::[]=}(#t10, #t12) in #t12 : #t11;
-  core::num* v5 = let final self::Test<core::int*, core::int*>* #t14 = t in let final core::String* #t15 = "x" in let final core::int* #t16 = #t14.{self::Test::[]}(#t15) in #t16.{core::num::==}(null) ?{core::num*} let final core::num* #t17 = self::getNum() as{TypeError} core::int* in let final void #t18 = #t14.{self::Test::[]=}(#t15, #t17) in #t17 : #t16;
-  core::int* v7 = let final self::Test<core::int*, core::int*>* #t19 = t in let final core::String* #t20 = "x" in let final core::int* #t21 = #t19.{self::Test::[]}(#t20).{core::num::+}(self::getInt()) in let final void #t22 = #t19.{self::Test::[]=}(#t20, #t21) in #t21;
-  core::num* v8 = let final self::Test<core::int*, core::int*>* #t23 = t in let final core::String* #t24 = "x" in let final core::num* #t25 = #t23.{self::Test::[]}(#t24).{core::num::+}(self::getNum()) as{TypeError} core::int* in let final void #t26 = #t23.{self::Test::[]=}(#t24, #t25) in #t25;
-  core::int* v10 = let final self::Test<core::int*, core::int*>* #t27 = t in let final core::String* #t28 = "x" in let final core::int* #t29 = #t27.{self::Test::[]}(#t28).{core::num::+}(1) in let final void #t30 = #t27.{self::Test::[]=}(#t28, #t29) in #t29;
-  core::int* v11 = let final self::Test<core::int*, core::int*>* #t31 = t in let final core::String* #t32 = "x" in let final core::int* #t33 = #t31.{self::Test::[]}(#t32) in let final void #t34 = #t31.{self::Test::[]=}(#t32, #t33.{core::num::+}(1)) in #t33;
+  core::int* v1 = let final self::Test<core::int*, core::int*>* #t1 = t in let final core::String* #t2 = "x" in let final core::int* #t3 = self::getInt() in let final void #t4 = #t1.{self::Test::[]=}(#t2, #t3){(core::String*, core::int*) →* void} in #t3;
+  core::num* v2 = let final self::Test<core::int*, core::int*>* #t5 = t in let final core::String* #t6 = "x" in let final core::num* #t7 = self::getNum() as{TypeError} core::int* in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7){(core::String*, core::int*) →* void} in #t7;
+  core::int* v4 = let final self::Test<core::int*, core::int*>* #t9 = t in let final core::String* #t10 = "x" in let final core::int* #t11 = #t9.{self::Test::[]}(#t10){(core::String*) →* core::int*} in #t11 == null ?{core::int*} let final core::int* #t12 = self::getInt() in let final void #t13 = #t9.{self::Test::[]=}(#t10, #t12){(core::String*, core::int*) →* void} in #t12 : #t11;
+  core::num* v5 = let final self::Test<core::int*, core::int*>* #t14 = t in let final core::String* #t15 = "x" in let final core::int* #t16 = #t14.{self::Test::[]}(#t15){(core::String*) →* core::int*} in #t16 == null ?{core::num*} let final core::num* #t17 = self::getNum() as{TypeError} core::int* in let final void #t18 = #t14.{self::Test::[]=}(#t15, #t17){(core::String*, core::int*) →* void} in #t17 : #t16;
+  core::int* v7 = let final self::Test<core::int*, core::int*>* #t19 = t in let final core::String* #t20 = "x" in let final core::int* #t21 = #t19.{self::Test::[]}(#t20){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t22 = #t19.{self::Test::[]=}(#t20, #t21){(core::String*, core::int*) →* void} in #t21;
+  core::num* v8 = let final self::Test<core::int*, core::int*>* #t23 = t in let final core::String* #t24 = "x" in let final core::num* #t25 = #t23.{self::Test::[]}(#t24){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t26 = #t23.{self::Test::[]=}(#t24, #t25){(core::String*, core::int*) →* void} in #t25;
+  core::int* v10 = let final self::Test<core::int*, core::int*>* #t27 = t in let final core::String* #t28 = "x" in let final core::int* #t29 = #t27.{self::Test::[]}(#t28){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t30 = #t27.{self::Test::[]=}(#t28, #t29){(core::String*, core::int*) →* void} in #t29;
+  core::int* v11 = let final self::Test<core::int*, core::int*>* #t31 = t in let final core::String* #t32 = "x" in let final core::int* #t33 = #t31.{self::Test::[]}(#t32){(core::String*) →* core::int*} in let final void #t34 = #t31.{self::Test::[]=}(#t32, #t33.{core::num::+}(1){(core::num*) →* core::int*}){(core::String*, core::int*) →* void} in #t33;
 }
 static method test2(self::Test<core::int*, core::num*>* t) → void {
-  core::int* v1 = let final self::Test<core::int*, core::num*>* #t35 = t in let final core::String* #t36 = "x" in let final core::int* #t37 = self::getInt() in let final void #t38 = #t35.{self::Test::[]=}(#t36, #t37) in #t37;
-  core::num* v2 = let final self::Test<core::int*, core::num*>* #t39 = t in let final core::String* #t40 = "x" in let final core::num* #t41 = self::getNum() in let final void #t42 = #t39.{self::Test::[]=}(#t40, #t41) in #t41;
-  core::double* v3 = let final self::Test<core::int*, core::num*>* #t43 = t in let final core::String* #t44 = "x" in let final core::double* #t45 = self::getDouble() in let final void #t46 = #t43.{self::Test::[]=}(#t44, #t45) in #t45;
-  core::int* v4 = let final self::Test<core::int*, core::num*>* #t47 = t in let final core::String* #t48 = "x" in let final core::int* #t49 = #t47.{self::Test::[]}(#t48) in #t49.{core::num::==}(null) ?{core::int*} let final core::int* #t50 = self::getInt() in let final void #t51 = #t47.{self::Test::[]=}(#t48, #t50) in #t50 : #t49;
-  core::num* v5 = let final self::Test<core::int*, core::num*>* #t52 = t in let final core::String* #t53 = "x" in let final core::int* #t54 = #t52.{self::Test::[]}(#t53) in #t54.{core::num::==}(null) ?{core::num*} let final core::num* #t55 = self::getNum() in let final void #t56 = #t52.{self::Test::[]=}(#t53, #t55) in #t55 : #t54;
-  core::num* v6 = let final self::Test<core::int*, core::num*>* #t57 = t in let final core::String* #t58 = "x" in let final core::int* #t59 = #t57.{self::Test::[]}(#t58) in #t59.{core::num::==}(null) ?{core::num*} let final core::double* #t60 = self::getDouble() in let final void #t61 = #t57.{self::Test::[]=}(#t58, #t60) in #t60 : #t59;
-  core::int* v7 = let final self::Test<core::int*, core::num*>* #t62 = t in let final core::String* #t63 = "x" in let final core::int* #t64 = #t62.{self::Test::[]}(#t63).{core::num::+}(self::getInt()) in let final void #t65 = #t62.{self::Test::[]=}(#t63, #t64) in #t64;
-  core::num* v8 = let final self::Test<core::int*, core::num*>* #t66 = t in let final core::String* #t67 = "x" in let final core::num* #t68 = #t66.{self::Test::[]}(#t67).{core::num::+}(self::getNum()) in let final void #t69 = #t66.{self::Test::[]=}(#t67, #t68) in #t68;
-  core::double* v9 = let final self::Test<core::int*, core::num*>* #t70 = t in let final core::String* #t71 = "x" in let final core::double* #t72 = #t70.{self::Test::[]}(#t71).{core::num::+}(self::getDouble()) in let final void #t73 = #t70.{self::Test::[]=}(#t71, #t72) in #t72;
-  core::int* v10 = let final self::Test<core::int*, core::num*>* #t74 = t in let final core::String* #t75 = "x" in let final core::int* #t76 = #t74.{self::Test::[]}(#t75).{core::num::+}(1) in let final void #t77 = #t74.{self::Test::[]=}(#t75, #t76) in #t76;
-  core::int* v11 = let final self::Test<core::int*, core::num*>* #t78 = t in let final core::String* #t79 = "x" in let final core::int* #t80 = #t78.{self::Test::[]}(#t79) in let final void #t81 = #t78.{self::Test::[]=}(#t79, #t80.{core::num::+}(1)) in #t80;
+  core::int* v1 = let final self::Test<core::int*, core::num*>* #t35 = t in let final core::String* #t36 = "x" in let final core::int* #t37 = self::getInt() in let final void #t38 = #t35.{self::Test::[]=}(#t36, #t37){(core::String*, core::num*) →* void} in #t37;
+  core::num* v2 = let final self::Test<core::int*, core::num*>* #t39 = t in let final core::String* #t40 = "x" in let final core::num* #t41 = self::getNum() in let final void #t42 = #t39.{self::Test::[]=}(#t40, #t41){(core::String*, core::num*) →* void} in #t41;
+  core::double* v3 = let final self::Test<core::int*, core::num*>* #t43 = t in let final core::String* #t44 = "x" in let final core::double* #t45 = self::getDouble() in let final void #t46 = #t43.{self::Test::[]=}(#t44, #t45){(core::String*, core::num*) →* void} in #t45;
+  core::int* v4 = let final self::Test<core::int*, core::num*>* #t47 = t in let final core::String* #t48 = "x" in let final core::int* #t49 = #t47.{self::Test::[]}(#t48){(core::String*) →* core::int*} in #t49 == null ?{core::int*} let final core::int* #t50 = self::getInt() in let final void #t51 = #t47.{self::Test::[]=}(#t48, #t50){(core::String*, core::num*) →* void} in #t50 : #t49;
+  core::num* v5 = let final self::Test<core::int*, core::num*>* #t52 = t in let final core::String* #t53 = "x" in let final core::int* #t54 = #t52.{self::Test::[]}(#t53){(core::String*) →* core::int*} in #t54 == null ?{core::num*} let final core::num* #t55 = self::getNum() in let final void #t56 = #t52.{self::Test::[]=}(#t53, #t55){(core::String*, core::num*) →* void} in #t55 : #t54;
+  core::num* v6 = let final self::Test<core::int*, core::num*>* #t57 = t in let final core::String* #t58 = "x" in let final core::int* #t59 = #t57.{self::Test::[]}(#t58){(core::String*) →* core::int*} in #t59 == null ?{core::num*} let final core::double* #t60 = self::getDouble() in let final void #t61 = #t57.{self::Test::[]=}(#t58, #t60){(core::String*, core::num*) →* void} in #t60 : #t59;
+  core::int* v7 = let final self::Test<core::int*, core::num*>* #t62 = t in let final core::String* #t63 = "x" in let final core::int* #t64 = #t62.{self::Test::[]}(#t63){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t65 = #t62.{self::Test::[]=}(#t63, #t64){(core::String*, core::num*) →* void} in #t64;
+  core::num* v8 = let final self::Test<core::int*, core::num*>* #t66 = t in let final core::String* #t67 = "x" in let final core::num* #t68 = #t66.{self::Test::[]}(#t67){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t69 = #t66.{self::Test::[]=}(#t67, #t68){(core::String*, core::num*) →* void} in #t68;
+  core::double* v9 = let final self::Test<core::int*, core::num*>* #t70 = t in let final core::String* #t71 = "x" in let final core::double* #t72 = #t70.{self::Test::[]}(#t71){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t73 = #t70.{self::Test::[]=}(#t71, #t72){(core::String*, core::num*) →* void} in #t72;
+  core::int* v10 = let final self::Test<core::int*, core::num*>* #t74 = t in let final core::String* #t75 = "x" in let final core::int* #t76 = #t74.{self::Test::[]}(#t75){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t77 = #t74.{self::Test::[]=}(#t75, #t76){(core::String*, core::num*) →* void} in #t76;
+  core::int* v11 = let final self::Test<core::int*, core::num*>* #t78 = t in let final core::String* #t79 = "x" in let final core::int* #t80 = #t78.{self::Test::[]}(#t79){(core::String*) →* core::int*} in let final void #t81 = #t78.{self::Test::[]=}(#t79, #t80.{core::num::+}(1){(core::num*) →* core::int*}){(core::String*, core::num*) →* void} in #t80;
 }
 static method test3(self::Test<core::int*, core::double*>* t) → void {
-  core::num* v2 = let final self::Test<core::int*, core::double*>* #t82 = t in let final core::String* #t83 = "x" in let final core::num* #t84 = self::getNum() as{TypeError} core::double* in let final void #t85 = #t82.{self::Test::[]=}(#t83, #t84) in #t84;
-  core::double* v3 = let final self::Test<core::int*, core::double*>* #t86 = t in let final core::String* #t87 = "x" in let final core::double* #t88 = self::getDouble() in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88) in #t88;
-  core::num* v5 = let final self::Test<core::int*, core::double*>* #t90 = t in let final core::String* #t91 = "x" in let final core::int* #t92 = #t90.{self::Test::[]}(#t91) in #t92.{core::num::==}(null) ?{core::num*} let final core::num* #t93 = self::getNum() as{TypeError} core::double* in let final void #t94 = #t90.{self::Test::[]=}(#t91, #t93) in #t93 : #t92;
-  core::num* v6 = let final self::Test<core::int*, core::double*>* #t95 = t in let final core::String* #t96 = "x" in let final core::int* #t97 = #t95.{self::Test::[]}(#t96) in #t97.{core::num::==}(null) ?{core::num*} let final core::double* #t98 = self::getDouble() in let final void #t99 = #t95.{self::Test::[]=}(#t96, #t98) in #t98 : #t97;
+  core::num* v2 = let final self::Test<core::int*, core::double*>* #t82 = t in let final core::String* #t83 = "x" in let final core::num* #t84 = self::getNum() as{TypeError} core::double* in let final void #t85 = #t82.{self::Test::[]=}(#t83, #t84){(core::String*, core::double*) →* void} in #t84;
+  core::double* v3 = let final self::Test<core::int*, core::double*>* #t86 = t in let final core::String* #t87 = "x" in let final core::double* #t88 = self::getDouble() in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88){(core::String*, core::double*) →* void} in #t88;
+  core::num* v5 = let final self::Test<core::int*, core::double*>* #t90 = t in let final core::String* #t91 = "x" in let final core::int* #t92 = #t90.{self::Test::[]}(#t91){(core::String*) →* core::int*} in #t92 == null ?{core::num*} let final core::num* #t93 = self::getNum() as{TypeError} core::double* in let final void #t94 = #t90.{self::Test::[]=}(#t91, #t93){(core::String*, core::double*) →* void} in #t93 : #t92;
+  core::num* v6 = let final self::Test<core::int*, core::double*>* #t95 = t in let final core::String* #t96 = "x" in let final core::int* #t97 = #t95.{self::Test::[]}(#t96){(core::String*) →* core::int*} in #t97 == null ?{core::num*} let final core::double* #t98 = self::getDouble() in let final void #t99 = #t95.{self::Test::[]=}(#t96, #t98){(core::String*, core::double*) →* void} in #t98 : #t97;
   core::int* v7 = let final self::Test<core::int*, core::double*>* #t100 = t in let final core::String* #t101 = "x" in let final core::int* #t102 = let final Never* #t103 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:90:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
-                                                                         ^" in #t100.{self::Test::[]}(#t101).{core::num::+}(self::getInt()) as{TypeError} core::double* in let final void #t104 = #t100.{self::Test::[]=}(#t101, #t102) in #t102;
-  core::num* v8 = let final self::Test<core::int*, core::double*>* #t105 = t in let final core::String* #t106 = "x" in let final core::num* #t107 = #t105.{self::Test::[]}(#t106).{core::num::+}(self::getNum()) as{TypeError} core::double* in let final void #t108 = #t105.{self::Test::[]=}(#t106, #t107) in #t107;
-  core::double* v9 = let final self::Test<core::int*, core::double*>* #t109 = t in let final core::String* #t110 = "x" in let final core::double* #t111 = #t109.{self::Test::[]}(#t110).{core::num::+}(self::getDouble()) in let final void #t112 = #t109.{self::Test::[]=}(#t110, #t111) in #t111;
+                                                                         ^" in #t100.{self::Test::[]}(#t101){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t104 = #t100.{self::Test::[]=}(#t101, #t102){(core::String*, core::double*) →* void} in #t102;
+  core::num* v8 = let final self::Test<core::int*, core::double*>* #t105 = t in let final core::String* #t106 = "x" in let final core::num* #t107 = #t105.{self::Test::[]}(#t106){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t108 = #t105.{self::Test::[]=}(#t106, #t107){(core::String*, core::double*) →* void} in #t107;
+  core::double* v9 = let final self::Test<core::int*, core::double*>* #t109 = t in let final core::String* #t110 = "x" in let final core::double* #t111 = #t109.{self::Test::[]}(#t110){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t112 = #t109.{self::Test::[]=}(#t110, #t111){(core::String*, core::double*) →* void} in #t111;
   core::int* v10 = let final self::Test<core::int*, core::double*>* #t113 = t in let final core::String* #t114 = "x" in let final core::int* #t115 = let final Never* #t116 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:102:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
-                        ^" in #t113.{self::Test::[]}(#t114).{core::num::+}(1) as{TypeError} core::double* in let final void #t117 = #t113.{self::Test::[]=}(#t114, #t115) in #t115;
-  core::int* v11 = let final self::Test<core::int*, core::double*>* #t118 = t in let final core::String* #t119 = "x" in let final core::int* #t120 = #t118.{self::Test::[]}(#t119) in let final void #t121 = #t118.{self::Test::[]=}(#t119, let final Never* #t122 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:105:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+                        ^" in #t113.{self::Test::[]}(#t114){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t117 = #t113.{self::Test::[]=}(#t114, #t115){(core::String*, core::double*) →* void} in #t115;
+  core::int* v11 = let final self::Test<core::int*, core::double*>* #t118 = t in let final core::String* #t119 = "x" in let final core::int* #t120 = #t118.{self::Test::[]}(#t119){(core::String*) →* core::int*} in let final void #t121 = #t118.{self::Test::[]=}(#t119, let final Never* #t122 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:105:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
-                                                                         ^" in #t120.{core::num::+}(1) as{TypeError} core::double*) in #t120;
+                                                                         ^" in #t120.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t120;
 }
 static method test4(self::Test<core::num*, core::int*>* t) → void {
-  core::int* v1 = let final self::Test<core::num*, core::int*>* #t123 = t in let final core::String* #t124 = "x" in let final core::int* #t125 = self::getInt() in let final void #t126 = #t123.{self::Test::[]=}(#t124, #t125) in #t125;
-  core::num* v2 = let final self::Test<core::num*, core::int*>* #t127 = t in let final core::String* #t128 = "x" in let final core::num* #t129 = self::getNum() as{TypeError} core::int* in let final void #t130 = #t127.{self::Test::[]=}(#t128, #t129) in #t129;
-  core::num* v4 = let final self::Test<core::num*, core::int*>* #t131 = t in let final core::String* #t132 = "x" in let final core::num* #t133 = #t131.{self::Test::[]}(#t132) in #t133.{core::num::==}(null) ?{core::num*} let final core::int* #t134 = self::getInt() in let final void #t135 = #t131.{self::Test::[]=}(#t132, #t134) in #t134 : #t133;
-  core::num* v5 = let final self::Test<core::num*, core::int*>* #t136 = t in let final core::String* #t137 = "x" in let final core::num* #t138 = #t136.{self::Test::[]}(#t137) in #t138.{core::num::==}(null) ?{core::num*} let final core::num* #t139 = self::getNum() as{TypeError} core::int* in let final void #t140 = #t136.{self::Test::[]=}(#t137, #t139) in #t139 : #t138;
-  core::num* v7 = let final self::Test<core::num*, core::int*>* #t141 = t in let final core::String* #t142 = "x" in let final core::num* #t143 = #t141.{self::Test::[]}(#t142).{core::num::+}(self::getInt()) as{TypeError} core::int* in let final void #t144 = #t141.{self::Test::[]=}(#t142, #t143) in #t143;
-  core::num* v8 = let final self::Test<core::num*, core::int*>* #t145 = t in let final core::String* #t146 = "x" in let final core::num* #t147 = #t145.{self::Test::[]}(#t146).{core::num::+}(self::getNum()) as{TypeError} core::int* in let final void #t148 = #t145.{self::Test::[]=}(#t146, #t147) in #t147;
-  core::num* v10 = let final self::Test<core::num*, core::int*>* #t149 = t in let final core::String* #t150 = "x" in let final core::num* #t151 = #t149.{self::Test::[]}(#t150).{core::num::+}(1) as{TypeError} core::int* in let final void #t152 = #t149.{self::Test::[]=}(#t150, #t151) in #t151;
-  core::num* v11 = let final self::Test<core::num*, core::int*>* #t153 = t in let final core::String* #t154 = "x" in let final core::num* #t155 = #t153.{self::Test::[]}(#t154) in let final void #t156 = #t153.{self::Test::[]=}(#t154, #t155.{core::num::+}(1) as{TypeError} core::int*) in #t155;
+  core::int* v1 = let final self::Test<core::num*, core::int*>* #t123 = t in let final core::String* #t124 = "x" in let final core::int* #t125 = self::getInt() in let final void #t126 = #t123.{self::Test::[]=}(#t124, #t125){(core::String*, core::int*) →* void} in #t125;
+  core::num* v2 = let final self::Test<core::num*, core::int*>* #t127 = t in let final core::String* #t128 = "x" in let final core::num* #t129 = self::getNum() as{TypeError} core::int* in let final void #t130 = #t127.{self::Test::[]=}(#t128, #t129){(core::String*, core::int*) →* void} in #t129;
+  core::num* v4 = let final self::Test<core::num*, core::int*>* #t131 = t in let final core::String* #t132 = "x" in let final core::num* #t133 = #t131.{self::Test::[]}(#t132){(core::String*) →* core::num*} in #t133 == null ?{core::num*} let final core::int* #t134 = self::getInt() in let final void #t135 = #t131.{self::Test::[]=}(#t132, #t134){(core::String*, core::int*) →* void} in #t134 : #t133;
+  core::num* v5 = let final self::Test<core::num*, core::int*>* #t136 = t in let final core::String* #t137 = "x" in let final core::num* #t138 = #t136.{self::Test::[]}(#t137){(core::String*) →* core::num*} in #t138 == null ?{core::num*} let final core::num* #t139 = self::getNum() as{TypeError} core::int* in let final void #t140 = #t136.{self::Test::[]=}(#t137, #t139){(core::String*, core::int*) →* void} in #t139 : #t138;
+  core::num* v7 = let final self::Test<core::num*, core::int*>* #t141 = t in let final core::String* #t142 = "x" in let final core::num* #t143 = #t141.{self::Test::[]}(#t142){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t144 = #t141.{self::Test::[]=}(#t142, #t143){(core::String*, core::int*) →* void} in #t143;
+  core::num* v8 = let final self::Test<core::num*, core::int*>* #t145 = t in let final core::String* #t146 = "x" in let final core::num* #t147 = #t145.{self::Test::[]}(#t146){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t148 = #t145.{self::Test::[]=}(#t146, #t147){(core::String*, core::int*) →* void} in #t147;
+  core::num* v10 = let final self::Test<core::num*, core::int*>* #t149 = t in let final core::String* #t150 = "x" in let final core::num* #t151 = #t149.{self::Test::[]}(#t150){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t152 = #t149.{self::Test::[]=}(#t150, #t151){(core::String*, core::int*) →* void} in #t151;
+  core::num* v11 = let final self::Test<core::num*, core::int*>* #t153 = t in let final core::String* #t154 = "x" in let final core::num* #t155 = #t153.{self::Test::[]}(#t154){(core::String*) →* core::num*} in let final void #t156 = #t153.{self::Test::[]=}(#t154, #t155.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t155;
 }
 static method test5(self::Test<core::num*, core::num*>* t) → void {
-  core::int* v1 = let final self::Test<core::num*, core::num*>* #t157 = t in let final core::String* #t158 = "x" in let final core::int* #t159 = self::getInt() in let final void #t160 = #t157.{self::Test::[]=}(#t158, #t159) in #t159;
-  core::num* v2 = let final self::Test<core::num*, core::num*>* #t161 = t in let final core::String* #t162 = "x" in let final core::num* #t163 = self::getNum() in let final void #t164 = #t161.{self::Test::[]=}(#t162, #t163) in #t163;
-  core::double* v3 = let final self::Test<core::num*, core::num*>* #t165 = t in let final core::String* #t166 = "x" in let final core::double* #t167 = self::getDouble() in let final void #t168 = #t165.{self::Test::[]=}(#t166, #t167) in #t167;
-  core::num* v4 = let final self::Test<core::num*, core::num*>* #t169 = t in let final core::String* #t170 = "x" in let final core::num* #t171 = #t169.{self::Test::[]}(#t170) in #t171.{core::num::==}(null) ?{core::num*} let final core::int* #t172 = self::getInt() in let final void #t173 = #t169.{self::Test::[]=}(#t170, #t172) in #t172 : #t171;
-  core::num* v5 = let final self::Test<core::num*, core::num*>* #t174 = t in let final core::String* #t175 = "x" in let final core::num* #t176 = #t174.{self::Test::[]}(#t175) in #t176.{core::num::==}(null) ?{core::num*} let final core::num* #t177 = self::getNum() in let final void #t178 = #t174.{self::Test::[]=}(#t175, #t177) in #t177 : #t176;
-  core::num* v6 = let final self::Test<core::num*, core::num*>* #t179 = t in let final core::String* #t180 = "x" in let final core::num* #t181 = #t179.{self::Test::[]}(#t180) in #t181.{core::num::==}(null) ?{core::num*} let final core::double* #t182 = self::getDouble() in let final void #t183 = #t179.{self::Test::[]=}(#t180, #t182) in #t182 : #t181;
-  core::num* v7 = let final self::Test<core::num*, core::num*>* #t184 = t in let final core::String* #t185 = "x" in let final core::num* #t186 = #t184.{self::Test::[]}(#t185).{core::num::+}(self::getInt()) in let final void #t187 = #t184.{self::Test::[]=}(#t185, #t186) in #t186;
-  core::num* v8 = let final self::Test<core::num*, core::num*>* #t188 = t in let final core::String* #t189 = "x" in let final core::num* #t190 = #t188.{self::Test::[]}(#t189).{core::num::+}(self::getNum()) in let final void #t191 = #t188.{self::Test::[]=}(#t189, #t190) in #t190;
-  core::num* v9 = let final self::Test<core::num*, core::num*>* #t192 = t in let final core::String* #t193 = "x" in let final core::num* #t194 = #t192.{self::Test::[]}(#t193).{core::num::+}(self::getDouble()) in let final void #t195 = #t192.{self::Test::[]=}(#t193, #t194) in #t194;
-  core::num* v10 = let final self::Test<core::num*, core::num*>* #t196 = t in let final core::String* #t197 = "x" in let final core::num* #t198 = #t196.{self::Test::[]}(#t197).{core::num::+}(1) in let final void #t199 = #t196.{self::Test::[]=}(#t197, #t198) in #t198;
-  core::num* v11 = let final self::Test<core::num*, core::num*>* #t200 = t in let final core::String* #t201 = "x" in let final core::num* #t202 = #t200.{self::Test::[]}(#t201) in let final void #t203 = #t200.{self::Test::[]=}(#t201, #t202.{core::num::+}(1)) in #t202;
+  core::int* v1 = let final self::Test<core::num*, core::num*>* #t157 = t in let final core::String* #t158 = "x" in let final core::int* #t159 = self::getInt() in let final void #t160 = #t157.{self::Test::[]=}(#t158, #t159){(core::String*, core::num*) →* void} in #t159;
+  core::num* v2 = let final self::Test<core::num*, core::num*>* #t161 = t in let final core::String* #t162 = "x" in let final core::num* #t163 = self::getNum() in let final void #t164 = #t161.{self::Test::[]=}(#t162, #t163){(core::String*, core::num*) →* void} in #t163;
+  core::double* v3 = let final self::Test<core::num*, core::num*>* #t165 = t in let final core::String* #t166 = "x" in let final core::double* #t167 = self::getDouble() in let final void #t168 = #t165.{self::Test::[]=}(#t166, #t167){(core::String*, core::num*) →* void} in #t167;
+  core::num* v4 = let final self::Test<core::num*, core::num*>* #t169 = t in let final core::String* #t170 = "x" in let final core::num* #t171 = #t169.{self::Test::[]}(#t170){(core::String*) →* core::num*} in #t171 == null ?{core::num*} let final core::int* #t172 = self::getInt() in let final void #t173 = #t169.{self::Test::[]=}(#t170, #t172){(core::String*, core::num*) →* void} in #t172 : #t171;
+  core::num* v5 = let final self::Test<core::num*, core::num*>* #t174 = t in let final core::String* #t175 = "x" in let final core::num* #t176 = #t174.{self::Test::[]}(#t175){(core::String*) →* core::num*} in #t176 == null ?{core::num*} let final core::num* #t177 = self::getNum() in let final void #t178 = #t174.{self::Test::[]=}(#t175, #t177){(core::String*, core::num*) →* void} in #t177 : #t176;
+  core::num* v6 = let final self::Test<core::num*, core::num*>* #t179 = t in let final core::String* #t180 = "x" in let final core::num* #t181 = #t179.{self::Test::[]}(#t180){(core::String*) →* core::num*} in #t181 == null ?{core::num*} let final core::double* #t182 = self::getDouble() in let final void #t183 = #t179.{self::Test::[]=}(#t180, #t182){(core::String*, core::num*) →* void} in #t182 : #t181;
+  core::num* v7 = let final self::Test<core::num*, core::num*>* #t184 = t in let final core::String* #t185 = "x" in let final core::num* #t186 = #t184.{self::Test::[]}(#t185){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t187 = #t184.{self::Test::[]=}(#t185, #t186){(core::String*, core::num*) →* void} in #t186;
+  core::num* v8 = let final self::Test<core::num*, core::num*>* #t188 = t in let final core::String* #t189 = "x" in let final core::num* #t190 = #t188.{self::Test::[]}(#t189){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t191 = #t188.{self::Test::[]=}(#t189, #t190){(core::String*, core::num*) →* void} in #t190;
+  core::num* v9 = let final self::Test<core::num*, core::num*>* #t192 = t in let final core::String* #t193 = "x" in let final core::num* #t194 = #t192.{self::Test::[]}(#t193){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t195 = #t192.{self::Test::[]=}(#t193, #t194){(core::String*, core::num*) →* void} in #t194;
+  core::num* v10 = let final self::Test<core::num*, core::num*>* #t196 = t in let final core::String* #t197 = "x" in let final core::num* #t198 = #t196.{self::Test::[]}(#t197){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t199 = #t196.{self::Test::[]=}(#t197, #t198){(core::String*, core::num*) →* void} in #t198;
+  core::num* v11 = let final self::Test<core::num*, core::num*>* #t200 = t in let final core::String* #t201 = "x" in let final core::num* #t202 = #t200.{self::Test::[]}(#t201){(core::String*) →* core::num*} in let final void #t203 = #t200.{self::Test::[]=}(#t201, #t202.{core::num::+}(1){(core::num*) →* core::num*}){(core::String*, core::num*) →* void} in #t202;
 }
 static method test6(self::Test<core::num*, core::double*>* t) → void {
-  core::num* v2 = let final self::Test<core::num*, core::double*>* #t204 = t in let final core::String* #t205 = "x" in let final core::num* #t206 = self::getNum() as{TypeError} core::double* in let final void #t207 = #t204.{self::Test::[]=}(#t205, #t206) in #t206;
-  core::double* v3 = let final self::Test<core::num*, core::double*>* #t208 = t in let final core::String* #t209 = "x" in let final core::double* #t210 = self::getDouble() in let final void #t211 = #t208.{self::Test::[]=}(#t209, #t210) in #t210;
-  core::num* v5 = let final self::Test<core::num*, core::double*>* #t212 = t in let final core::String* #t213 = "x" in let final core::num* #t214 = #t212.{self::Test::[]}(#t213) in #t214.{core::num::==}(null) ?{core::num*} let final core::num* #t215 = self::getNum() as{TypeError} core::double* in let final void #t216 = #t212.{self::Test::[]=}(#t213, #t215) in #t215 : #t214;
-  core::num* v6 = let final self::Test<core::num*, core::double*>* #t217 = t in let final core::String* #t218 = "x" in let final core::num* #t219 = #t217.{self::Test::[]}(#t218) in #t219.{core::num::==}(null) ?{core::num*} let final core::double* #t220 = self::getDouble() in let final void #t221 = #t217.{self::Test::[]=}(#t218, #t220) in #t220 : #t219;
-  core::num* v7 = let final self::Test<core::num*, core::double*>* #t222 = t in let final core::String* #t223 = "x" in let final core::num* #t224 = #t222.{self::Test::[]}(#t223).{core::num::+}(self::getInt()) as{TypeError} core::double* in let final void #t225 = #t222.{self::Test::[]=}(#t223, #t224) in #t224;
-  core::num* v8 = let final self::Test<core::num*, core::double*>* #t226 = t in let final core::String* #t227 = "x" in let final core::num* #t228 = #t226.{self::Test::[]}(#t227).{core::num::+}(self::getNum()) as{TypeError} core::double* in let final void #t229 = #t226.{self::Test::[]=}(#t227, #t228) in #t228;
-  core::num* v9 = let final self::Test<core::num*, core::double*>* #t230 = t in let final core::String* #t231 = "x" in let final core::num* #t232 = #t230.{self::Test::[]}(#t231).{core::num::+}(self::getDouble()) as{TypeError} core::double* in let final void #t233 = #t230.{self::Test::[]=}(#t231, #t232) in #t232;
-  core::num* v10 = let final self::Test<core::num*, core::double*>* #t234 = t in let final core::String* #t235 = "x" in let final core::num* #t236 = #t234.{self::Test::[]}(#t235).{core::num::+}(1) as{TypeError} core::double* in let final void #t237 = #t234.{self::Test::[]=}(#t235, #t236) in #t236;
-  core::num* v11 = let final self::Test<core::num*, core::double*>* #t238 = t in let final core::String* #t239 = "x" in let final core::num* #t240 = #t238.{self::Test::[]}(#t239) in let final void #t241 = #t238.{self::Test::[]=}(#t239, #t240.{core::num::+}(1) as{TypeError} core::double*) in #t240;
+  core::num* v2 = let final self::Test<core::num*, core::double*>* #t204 = t in let final core::String* #t205 = "x" in let final core::num* #t206 = self::getNum() as{TypeError} core::double* in let final void #t207 = #t204.{self::Test::[]=}(#t205, #t206){(core::String*, core::double*) →* void} in #t206;
+  core::double* v3 = let final self::Test<core::num*, core::double*>* #t208 = t in let final core::String* #t209 = "x" in let final core::double* #t210 = self::getDouble() in let final void #t211 = #t208.{self::Test::[]=}(#t209, #t210){(core::String*, core::double*) →* void} in #t210;
+  core::num* v5 = let final self::Test<core::num*, core::double*>* #t212 = t in let final core::String* #t213 = "x" in let final core::num* #t214 = #t212.{self::Test::[]}(#t213){(core::String*) →* core::num*} in #t214 == null ?{core::num*} let final core::num* #t215 = self::getNum() as{TypeError} core::double* in let final void #t216 = #t212.{self::Test::[]=}(#t213, #t215){(core::String*, core::double*) →* void} in #t215 : #t214;
+  core::num* v6 = let final self::Test<core::num*, core::double*>* #t217 = t in let final core::String* #t218 = "x" in let final core::num* #t219 = #t217.{self::Test::[]}(#t218){(core::String*) →* core::num*} in #t219 == null ?{core::num*} let final core::double* #t220 = self::getDouble() in let final void #t221 = #t217.{self::Test::[]=}(#t218, #t220){(core::String*, core::double*) →* void} in #t220 : #t219;
+  core::num* v7 = let final self::Test<core::num*, core::double*>* #t222 = t in let final core::String* #t223 = "x" in let final core::num* #t224 = #t222.{self::Test::[]}(#t223){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t225 = #t222.{self::Test::[]=}(#t223, #t224){(core::String*, core::double*) →* void} in #t224;
+  core::num* v8 = let final self::Test<core::num*, core::double*>* #t226 = t in let final core::String* #t227 = "x" in let final core::num* #t228 = #t226.{self::Test::[]}(#t227){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t229 = #t226.{self::Test::[]=}(#t227, #t228){(core::String*, core::double*) →* void} in #t228;
+  core::num* v9 = let final self::Test<core::num*, core::double*>* #t230 = t in let final core::String* #t231 = "x" in let final core::num* #t232 = #t230.{self::Test::[]}(#t231){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t233 = #t230.{self::Test::[]=}(#t231, #t232){(core::String*, core::double*) →* void} in #t232;
+  core::num* v10 = let final self::Test<core::num*, core::double*>* #t234 = t in let final core::String* #t235 = "x" in let final core::num* #t236 = #t234.{self::Test::[]}(#t235){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t237 = #t234.{self::Test::[]=}(#t235, #t236){(core::String*, core::double*) →* void} in #t236;
+  core::num* v11 = let final self::Test<core::num*, core::double*>* #t238 = t in let final core::String* #t239 = "x" in let final core::num* #t240 = #t238.{self::Test::[]}(#t239){(core::String*) →* core::num*} in let final void #t241 = #t238.{self::Test::[]=}(#t239, #t240.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t240;
 }
 static method test7(self::Test<core::double*, core::int*>* t) → void {
-  core::int* v1 = let final self::Test<core::double*, core::int*>* #t242 = t in let final core::String* #t243 = "x" in let final core::int* #t244 = self::getInt() in let final void #t245 = #t242.{self::Test::[]=}(#t243, #t244) in #t244;
-  core::num* v2 = let final self::Test<core::double*, core::int*>* #t246 = t in let final core::String* #t247 = "x" in let final core::num* #t248 = self::getNum() as{TypeError} core::int* in let final void #t249 = #t246.{self::Test::[]=}(#t247, #t248) in #t248;
-  core::num* v4 = let final self::Test<core::double*, core::int*>* #t250 = t in let final core::String* #t251 = "x" in let final core::double* #t252 = #t250.{self::Test::[]}(#t251) in #t252.{core::num::==}(null) ?{core::num*} let final core::int* #t253 = self::getInt() in let final void #t254 = #t250.{self::Test::[]=}(#t251, #t253) in #t253 : #t252;
-  core::num* v5 = let final self::Test<core::double*, core::int*>* #t255 = t in let final core::String* #t256 = "x" in let final core::double* #t257 = #t255.{self::Test::[]}(#t256) in #t257.{core::num::==}(null) ?{core::num*} let final core::num* #t258 = self::getNum() as{TypeError} core::int* in let final void #t259 = #t255.{self::Test::[]=}(#t256, #t258) in #t258 : #t257;
+  core::int* v1 = let final self::Test<core::double*, core::int*>* #t242 = t in let final core::String* #t243 = "x" in let final core::int* #t244 = self::getInt() in let final void #t245 = #t242.{self::Test::[]=}(#t243, #t244){(core::String*, core::int*) →* void} in #t244;
+  core::num* v2 = let final self::Test<core::double*, core::int*>* #t246 = t in let final core::String* #t247 = "x" in let final core::num* #t248 = self::getNum() as{TypeError} core::int* in let final void #t249 = #t246.{self::Test::[]=}(#t247, #t248){(core::String*, core::int*) →* void} in #t248;
+  core::num* v4 = let final self::Test<core::double*, core::int*>* #t250 = t in let final core::String* #t251 = "x" in let final core::double* #t252 = #t250.{self::Test::[]}(#t251){(core::String*) →* core::double*} in #t252 == null ?{core::num*} let final core::int* #t253 = self::getInt() in let final void #t254 = #t250.{self::Test::[]=}(#t251, #t253){(core::String*, core::int*) →* void} in #t253 : #t252;
+  core::num* v5 = let final self::Test<core::double*, core::int*>* #t255 = t in let final core::String* #t256 = "x" in let final core::double* #t257 = #t255.{self::Test::[]}(#t256){(core::String*) →* core::double*} in #t257 == null ?{core::num*} let final core::num* #t258 = self::getNum() as{TypeError} core::int* in let final void #t259 = #t255.{self::Test::[]=}(#t256, #t258){(core::String*, core::int*) →* void} in #t258 : #t257;
   core::double* v7 = let final self::Test<core::double*, core::int*>* #t260 = t in let final core::String* #t261 = "x" in let final core::double* #t262 = let final Never* #t263 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:211:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
-                                                                            ^" in #t260.{self::Test::[]}(#t261).{core::double::+}(self::getInt()) as{TypeError} core::int* in let final void #t264 = #t260.{self::Test::[]=}(#t261, #t262) in #t262;
+                                                                            ^" in #t260.{self::Test::[]}(#t261){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t264 = #t260.{self::Test::[]=}(#t261, #t262){(core::String*, core::int*) →* void} in #t262;
   core::double* v8 = let final self::Test<core::double*, core::int*>* #t265 = t in let final core::String* #t266 = "x" in let final core::double* #t267 = let final Never* #t268 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:215:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
-                                                                            ^" in #t265.{self::Test::[]}(#t266).{core::double::+}(self::getNum()) as{TypeError} core::int* in let final void #t269 = #t265.{self::Test::[]=}(#t266, #t267) in #t267;
+                                                                            ^" in #t265.{self::Test::[]}(#t266){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t269 = #t265.{self::Test::[]=}(#t266, #t267){(core::String*, core::int*) →* void} in #t267;
   core::double* v10 = let final self::Test<core::double*, core::int*>* #t270 = t in let final core::String* #t271 = "x" in let final core::double* #t272 = let final Never* #t273 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:219:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       /*@target=double.+*/ ++t
-                           ^" in #t270.{self::Test::[]}(#t271).{core::double::+}(1) as{TypeError} core::int* in let final void #t274 = #t270.{self::Test::[]=}(#t271, #t272) in #t272;
-  core::double* v11 = let final self::Test<core::double*, core::int*>* #t275 = t in let final core::String* #t276 = "x" in let final core::double* #t277 = #t275.{self::Test::[]}(#t276) in let final void #t278 = #t275.{self::Test::[]=}(#t276, let final Never* #t279 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:223:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+                           ^" in #t270.{self::Test::[]}(#t271){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t274 = #t270.{self::Test::[]=}(#t271, #t272){(core::String*, core::int*) →* void} in #t272;
+  core::double* v11 = let final self::Test<core::double*, core::int*>* #t275 = t in let final core::String* #t276 = "x" in let final core::double* #t277 = #t275.{self::Test::[]}(#t276){(core::String*) →* core::double*} in let final void #t278 = #t275.{self::Test::[]=}(#t276, let final Never* #t279 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:223:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
-                                                                            ^" in #t277.{core::double::+}(1) as{TypeError} core::int*) in #t277;
+                                                                            ^" in #t277.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t277;
 }
 static method test8(self::Test<core::double*, core::num*>* t) → void {
-  core::int* v1 = let final self::Test<core::double*, core::num*>* #t280 = t in let final core::String* #t281 = "x" in let final core::int* #t282 = self::getInt() in let final void #t283 = #t280.{self::Test::[]=}(#t281, #t282) in #t282;
-  core::num* v2 = let final self::Test<core::double*, core::num*>* #t284 = t in let final core::String* #t285 = "x" in let final core::num* #t286 = self::getNum() in let final void #t287 = #t284.{self::Test::[]=}(#t285, #t286) in #t286;
-  core::double* v3 = let final self::Test<core::double*, core::num*>* #t288 = t in let final core::String* #t289 = "x" in let final core::double* #t290 = self::getDouble() in let final void #t291 = #t288.{self::Test::[]=}(#t289, #t290) in #t290;
-  core::num* v4 = let final self::Test<core::double*, core::num*>* #t292 = t in let final core::String* #t293 = "x" in let final core::double* #t294 = #t292.{self::Test::[]}(#t293) in #t294.{core::num::==}(null) ?{core::num*} let final core::int* #t295 = self::getInt() in let final void #t296 = #t292.{self::Test::[]=}(#t293, #t295) in #t295 : #t294;
-  core::num* v5 = let final self::Test<core::double*, core::num*>* #t297 = t in let final core::String* #t298 = "x" in let final core::double* #t299 = #t297.{self::Test::[]}(#t298) in #t299.{core::num::==}(null) ?{core::num*} let final core::num* #t300 = self::getNum() in let final void #t301 = #t297.{self::Test::[]=}(#t298, #t300) in #t300 : #t299;
-  core::double* v6 = let final self::Test<core::double*, core::num*>* #t302 = t in let final core::String* #t303 = "x" in let final core::double* #t304 = #t302.{self::Test::[]}(#t303) in #t304.{core::num::==}(null) ?{core::double*} let final core::double* #t305 = self::getDouble() in let final void #t306 = #t302.{self::Test::[]=}(#t303, #t305) in #t305 : #t304;
-  core::double* v7 = let final self::Test<core::double*, core::num*>* #t307 = t in let final core::String* #t308 = "x" in let final core::double* #t309 = #t307.{self::Test::[]}(#t308).{core::double::+}(self::getInt()) in let final void #t310 = #t307.{self::Test::[]=}(#t308, #t309) in #t309;
-  core::double* v8 = let final self::Test<core::double*, core::num*>* #t311 = t in let final core::String* #t312 = "x" in let final core::double* #t313 = #t311.{self::Test::[]}(#t312).{core::double::+}(self::getNum()) in let final void #t314 = #t311.{self::Test::[]=}(#t312, #t313) in #t313;
-  core::double* v9 = let final self::Test<core::double*, core::num*>* #t315 = t in let final core::String* #t316 = "x" in let final core::double* #t317 = #t315.{self::Test::[]}(#t316).{core::double::+}(self::getDouble()) in let final void #t318 = #t315.{self::Test::[]=}(#t316, #t317) in #t317;
-  core::double* v10 = let final self::Test<core::double*, core::num*>* #t319 = t in let final core::String* #t320 = "x" in let final core::double* #t321 = #t319.{self::Test::[]}(#t320).{core::double::+}(1) in let final void #t322 = #t319.{self::Test::[]=}(#t320, #t321) in #t321;
-  core::double* v11 = let final self::Test<core::double*, core::num*>* #t323 = t in let final core::String* #t324 = "x" in let final core::double* #t325 = #t323.{self::Test::[]}(#t324) in let final void #t326 = #t323.{self::Test::[]=}(#t324, #t325.{core::double::+}(1)) in #t325;
+  core::int* v1 = let final self::Test<core::double*, core::num*>* #t280 = t in let final core::String* #t281 = "x" in let final core::int* #t282 = self::getInt() in let final void #t283 = #t280.{self::Test::[]=}(#t281, #t282){(core::String*, core::num*) →* void} in #t282;
+  core::num* v2 = let final self::Test<core::double*, core::num*>* #t284 = t in let final core::String* #t285 = "x" in let final core::num* #t286 = self::getNum() in let final void #t287 = #t284.{self::Test::[]=}(#t285, #t286){(core::String*, core::num*) →* void} in #t286;
+  core::double* v3 = let final self::Test<core::double*, core::num*>* #t288 = t in let final core::String* #t289 = "x" in let final core::double* #t290 = self::getDouble() in let final void #t291 = #t288.{self::Test::[]=}(#t289, #t290){(core::String*, core::num*) →* void} in #t290;
+  core::num* v4 = let final self::Test<core::double*, core::num*>* #t292 = t in let final core::String* #t293 = "x" in let final core::double* #t294 = #t292.{self::Test::[]}(#t293){(core::String*) →* core::double*} in #t294 == null ?{core::num*} let final core::int* #t295 = self::getInt() in let final void #t296 = #t292.{self::Test::[]=}(#t293, #t295){(core::String*, core::num*) →* void} in #t295 : #t294;
+  core::num* v5 = let final self::Test<core::double*, core::num*>* #t297 = t in let final core::String* #t298 = "x" in let final core::double* #t299 = #t297.{self::Test::[]}(#t298){(core::String*) →* core::double*} in #t299 == null ?{core::num*} let final core::num* #t300 = self::getNum() in let final void #t301 = #t297.{self::Test::[]=}(#t298, #t300){(core::String*, core::num*) →* void} in #t300 : #t299;
+  core::double* v6 = let final self::Test<core::double*, core::num*>* #t302 = t in let final core::String* #t303 = "x" in let final core::double* #t304 = #t302.{self::Test::[]}(#t303){(core::String*) →* core::double*} in #t304 == null ?{core::double*} let final core::double* #t305 = self::getDouble() in let final void #t306 = #t302.{self::Test::[]=}(#t303, #t305){(core::String*, core::num*) →* void} in #t305 : #t304;
+  core::double* v7 = let final self::Test<core::double*, core::num*>* #t307 = t in let final core::String* #t308 = "x" in let final core::double* #t309 = #t307.{self::Test::[]}(#t308){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t310 = #t307.{self::Test::[]=}(#t308, #t309){(core::String*, core::num*) →* void} in #t309;
+  core::double* v8 = let final self::Test<core::double*, core::num*>* #t311 = t in let final core::String* #t312 = "x" in let final core::double* #t313 = #t311.{self::Test::[]}(#t312){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t314 = #t311.{self::Test::[]=}(#t312, #t313){(core::String*, core::num*) →* void} in #t313;
+  core::double* v9 = let final self::Test<core::double*, core::num*>* #t315 = t in let final core::String* #t316 = "x" in let final core::double* #t317 = #t315.{self::Test::[]}(#t316){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t318 = #t315.{self::Test::[]=}(#t316, #t317){(core::String*, core::num*) →* void} in #t317;
+  core::double* v10 = let final self::Test<core::double*, core::num*>* #t319 = t in let final core::String* #t320 = "x" in let final core::double* #t321 = #t319.{self::Test::[]}(#t320){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t322 = #t319.{self::Test::[]=}(#t320, #t321){(core::String*, core::num*) →* void} in #t321;
+  core::double* v11 = let final self::Test<core::double*, core::num*>* #t323 = t in let final core::String* #t324 = "x" in let final core::double* #t325 = #t323.{self::Test::[]}(#t324){(core::String*) →* core::double*} in let final void #t326 = #t323.{self::Test::[]=}(#t324, #t325.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::num*) →* void} in #t325;
 }
 static method test9(self::Test<core::double*, core::double*>* t) → void {
-  core::num* v2 = let final self::Test<core::double*, core::double*>* #t327 = t in let final core::String* #t328 = "x" in let final core::num* #t329 = self::getNum() as{TypeError} core::double* in let final void #t330 = #t327.{self::Test::[]=}(#t328, #t329) in #t329;
-  core::double* v3 = let final self::Test<core::double*, core::double*>* #t331 = t in let final core::String* #t332 = "x" in let final core::double* #t333 = self::getDouble() in let final void #t334 = #t331.{self::Test::[]=}(#t332, #t333) in #t333;
-  core::num* v5 = let final self::Test<core::double*, core::double*>* #t335 = t in let final core::String* #t336 = "x" in let final core::double* #t337 = #t335.{self::Test::[]}(#t336) in #t337.{core::num::==}(null) ?{core::num*} let final core::num* #t338 = self::getNum() as{TypeError} core::double* in let final void #t339 = #t335.{self::Test::[]=}(#t336, #t338) in #t338 : #t337;
-  core::double* v6 = let final self::Test<core::double*, core::double*>* #t340 = t in let final core::String* #t341 = "x" in let final core::double* #t342 = #t340.{self::Test::[]}(#t341) in #t342.{core::num::==}(null) ?{core::double*} let final core::double* #t343 = self::getDouble() in let final void #t344 = #t340.{self::Test::[]=}(#t341, #t343) in #t343 : #t342;
-  core::double* v7 = let final self::Test<core::double*, core::double*>* #t345 = t in let final core::String* #t346 = "x" in let final core::double* #t347 = #t345.{self::Test::[]}(#t346).{core::double::+}(self::getInt()) in let final void #t348 = #t345.{self::Test::[]=}(#t346, #t347) in #t347;
-  core::double* v8 = let final self::Test<core::double*, core::double*>* #t349 = t in let final core::String* #t350 = "x" in let final core::double* #t351 = #t349.{self::Test::[]}(#t350).{core::double::+}(self::getNum()) in let final void #t352 = #t349.{self::Test::[]=}(#t350, #t351) in #t351;
-  core::double* v9 = let final self::Test<core::double*, core::double*>* #t353 = t in let final core::String* #t354 = "x" in let final core::double* #t355 = #t353.{self::Test::[]}(#t354).{core::double::+}(self::getDouble()) in let final void #t356 = #t353.{self::Test::[]=}(#t354, #t355) in #t355;
-  core::double* v10 = let final self::Test<core::double*, core::double*>* #t357 = t in let final core::String* #t358 = "x" in let final core::double* #t359 = #t357.{self::Test::[]}(#t358).{core::double::+}(1) in let final void #t360 = #t357.{self::Test::[]=}(#t358, #t359) in #t359;
-  core::double* v11 = let final self::Test<core::double*, core::double*>* #t361 = t in let final core::String* #t362 = "x" in let final core::double* #t363 = #t361.{self::Test::[]}(#t362) in let final void #t364 = #t361.{self::Test::[]=}(#t362, #t363.{core::double::+}(1)) in #t363;
+  core::num* v2 = let final self::Test<core::double*, core::double*>* #t327 = t in let final core::String* #t328 = "x" in let final core::num* #t329 = self::getNum() as{TypeError} core::double* in let final void #t330 = #t327.{self::Test::[]=}(#t328, #t329){(core::String*, core::double*) →* void} in #t329;
+  core::double* v3 = let final self::Test<core::double*, core::double*>* #t331 = t in let final core::String* #t332 = "x" in let final core::double* #t333 = self::getDouble() in let final void #t334 = #t331.{self::Test::[]=}(#t332, #t333){(core::String*, core::double*) →* void} in #t333;
+  core::num* v5 = let final self::Test<core::double*, core::double*>* #t335 = t in let final core::String* #t336 = "x" in let final core::double* #t337 = #t335.{self::Test::[]}(#t336){(core::String*) →* core::double*} in #t337 == null ?{core::num*} let final core::num* #t338 = self::getNum() as{TypeError} core::double* in let final void #t339 = #t335.{self::Test::[]=}(#t336, #t338){(core::String*, core::double*) →* void} in #t338 : #t337;
+  core::double* v6 = let final self::Test<core::double*, core::double*>* #t340 = t in let final core::String* #t341 = "x" in let final core::double* #t342 = #t340.{self::Test::[]}(#t341){(core::String*) →* core::double*} in #t342 == null ?{core::double*} let final core::double* #t343 = self::getDouble() in let final void #t344 = #t340.{self::Test::[]=}(#t341, #t343){(core::String*, core::double*) →* void} in #t343 : #t342;
+  core::double* v7 = let final self::Test<core::double*, core::double*>* #t345 = t in let final core::String* #t346 = "x" in let final core::double* #t347 = #t345.{self::Test::[]}(#t346){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t348 = #t345.{self::Test::[]=}(#t346, #t347){(core::String*, core::double*) →* void} in #t347;
+  core::double* v8 = let final self::Test<core::double*, core::double*>* #t349 = t in let final core::String* #t350 = "x" in let final core::double* #t351 = #t349.{self::Test::[]}(#t350){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t352 = #t349.{self::Test::[]=}(#t350, #t351){(core::String*, core::double*) →* void} in #t351;
+  core::double* v9 = let final self::Test<core::double*, core::double*>* #t353 = t in let final core::String* #t354 = "x" in let final core::double* #t355 = #t353.{self::Test::[]}(#t354){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t356 = #t353.{self::Test::[]=}(#t354, #t355){(core::String*, core::double*) →* void} in #t355;
+  core::double* v10 = let final self::Test<core::double*, core::double*>* #t357 = t in let final core::String* #t358 = "x" in let final core::double* #t359 = #t357.{self::Test::[]}(#t358){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t360 = #t357.{self::Test::[]=}(#t358, #t359){(core::String*, core::double*) →* void} in #t359;
+  core::double* v11 = let final self::Test<core::double*, core::double*>* #t361 = t in let final core::String* #t362 = "x" in let final core::double* #t363 = #t361.{self::Test::[]}(#t362){(core::String*) →* core::double*} in let final void #t364 = #t361.{self::Test::[]=}(#t362, #t363.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::double*) →* void} in #t363;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.weak.expect
index cacec2e..5bdc052 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.weak.expect
@@ -40,18 +40,18 @@
 static method test() → void {
   self::B* local;
   local = self::f<self::B*>();
-  local.{self::A::==}(null) ?{self::B*} local = self::f<self::B*>() : null;
-  local = local.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  local = local.{self::B::*}(self::f<self::B*>());
-  local = local.{self::B::&}(self::f<self::A*>());
-  local = local.{self::B::-}(1);
-  local = local.{self::B::-}(1);
+  local == null ?{self::B*} local = self::f<self::B*>() : null;
+  local = local.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  local = local.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  local = local.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  local = local.{self::B::-}(1){(core::int*) →* self::B*};
   self::B* v1 = local = self::f<self::B*>();
-  self::B* v2 = let final self::B* #t1 = local in #t1.{self::A::==}(null) ?{self::B*} local = self::f<self::B*>() : #t1;
-  self::A* v3 = local = local.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B* v4 = local = local.{self::B::*}(self::f<self::B*>());
-  self::C* v5 = local = local.{self::B::&}(self::f<self::A*>());
-  self::B* v6 = local = local.{self::B::-}(1);
-  self::B* v7 = let final self::B* #t2 = local in let final self::B* #t3 = local = #t2.{self::B::-}(1) in #t2;
+  self::B* v2 = let final self::B* #t1 = local in #t1 == null ?{self::B*} local = self::f<self::B*>() : #t1;
+  self::A* v3 = local = local.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = local = local.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = local = local.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t2 = local in let final self::B* #t3 = local = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.weak.transformed.expect
index cacec2e..5bdc052 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.weak.transformed.expect
@@ -40,18 +40,18 @@
 static method test() → void {
   self::B* local;
   local = self::f<self::B*>();
-  local.{self::A::==}(null) ?{self::B*} local = self::f<self::B*>() : null;
-  local = local.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  local = local.{self::B::*}(self::f<self::B*>());
-  local = local.{self::B::&}(self::f<self::A*>());
-  local = local.{self::B::-}(1);
-  local = local.{self::B::-}(1);
+  local == null ?{self::B*} local = self::f<self::B*>() : null;
+  local = local.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  local = local.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  local = local.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  local = local.{self::B::-}(1){(core::int*) →* self::B*};
   self::B* v1 = local = self::f<self::B*>();
-  self::B* v2 = let final self::B* #t1 = local in #t1.{self::A::==}(null) ?{self::B*} local = self::f<self::B*>() : #t1;
-  self::A* v3 = local = local.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B* v4 = local = local.{self::B::*}(self::f<self::B*>());
-  self::C* v5 = local = local.{self::B::&}(self::f<self::A*>());
-  self::B* v6 = local = local.{self::B::-}(1);
-  self::B* v7 = let final self::B* #t2 = local in let final self::B* #t3 = local = #t2.{self::B::-}(1) in #t2;
+  self::B* v2 = let final self::B* #t1 = local in #t1 == null ?{self::B*} local = self::f<self::B*>() : #t1;
+  self::A* v3 = local = local.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = local = local.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = local = local.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t2 = local in let final self::B* #t3 = local = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.weak.expect
index a799b0f..9e55829 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.weak.expect
@@ -11,35 +11,35 @@
 static method test1(core::int* t) → void {
   core::int* v1 = t = self::getInt();
   core::num* v2 = t = self::getNum() as{TypeError} core::int*;
-  core::int* v4 = let final core::int* #t1 = t in #t1.{core::num::==}(null) ?{core::int*} t = self::getInt() : #t1;
-  core::num* v5 = let final core::int* #t2 = t in #t2.{core::num::==}(null) ?{core::num*} t = self::getNum() as{TypeError} core::int* : #t2;
-  core::int* v7 = t = t.{core::num::+}(self::getInt());
-  core::num* v8 = t = t.{core::num::+}(self::getNum()) as{TypeError} core::int*;
-  core::int* v10 = t = t.{core::num::+}(1);
-  core::int* v11 = let final core::int* #t3 = t in let final core::int* #t4 = t = #t3.{core::num::+}(1) in #t3;
+  core::int* v4 = let final core::int* #t1 = t in #t1 == null ?{core::int*} t = self::getInt() : #t1;
+  core::num* v5 = let final core::int* #t2 = t in #t2 == null ?{core::num*} t = self::getNum() as{TypeError} core::int* : #t2;
+  core::int* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+  core::num* v8 = t = t.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+  core::int* v10 = t = t.{core::num::+}(1){(core::num*) →* core::int*};
+  core::int* v11 = let final core::int* #t3 = t in let final core::int* #t4 = t = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3;
 }
 static method test2(core::num* t) → void {
   core::int* v1 = t = self::getInt();
   core::num* v2 = t = self::getNum();
   core::double* v3 = t = self::getDouble();
-  core::num* v4 = let final core::num* #t5 = t in #t5.{core::num::==}(null) ?{core::num*} t = self::getInt() : #t5;
-  core::num* v5 = let final core::num* #t6 = t in #t6.{core::num::==}(null) ?{core::num*} t = self::getNum() : #t6;
-  core::num* v6 = let final core::num* #t7 = t in #t7.{core::num::==}(null) ?{core::num*} t = self::getDouble() : #t7;
-  core::num* v7 = t = t.{core::num::+}(self::getInt());
-  core::num* v8 = t = t.{core::num::+}(self::getNum());
-  core::num* v9 = t = t.{core::num::+}(self::getDouble());
-  core::num* v10 = t = t.{core::num::+}(1);
-  core::num* v11 = let final core::num* #t8 = t in let final core::num* #t9 = t = #t8.{core::num::+}(1) in #t8;
+  core::num* v4 = let final core::num* #t5 = t in #t5 == null ?{core::num*} t = self::getInt() : #t5;
+  core::num* v5 = let final core::num* #t6 = t in #t6 == null ?{core::num*} t = self::getNum() : #t6;
+  core::num* v6 = let final core::num* #t7 = t in #t7 == null ?{core::num*} t = self::getDouble() : #t7;
+  core::num* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+  core::num* v8 = t = t.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+  core::num* v9 = t = t.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+  core::num* v10 = t = t.{core::num::+}(1){(core::num*) →* core::num*};
+  core::num* v11 = let final core::num* #t8 = t in let final core::num* #t9 = t = #t8.{core::num::+}(1){(core::num*) →* core::num*} in #t8;
 }
 static method test3(core::double* t) → void {
   core::num* v2 = t = self::getNum() as{TypeError} core::double*;
   core::double* v3 = t = self::getDouble();
-  core::num* v5 = let final core::double* #t10 = t in #t10.{core::num::==}(null) ?{core::num*} t = self::getNum() as{TypeError} core::double* : #t10;
-  core::double* v6 = let final core::double* #t11 = t in #t11.{core::num::==}(null) ?{core::double*} t = self::getDouble() : #t11;
-  core::double* v7 = t = t.{core::double::+}(self::getInt());
-  core::double* v8 = t = t.{core::double::+}(self::getNum());
-  core::double* v9 = t = t.{core::double::+}(self::getDouble());
-  core::double* v10 = t = t.{core::double::+}(1);
-  core::double* v11 = let final core::double* #t12 = t in let final core::double* #t13 = t = #t12.{core::double::+}(1) in #t12;
+  core::num* v5 = let final core::double* #t10 = t in #t10 == null ?{core::num*} t = self::getNum() as{TypeError} core::double* : #t10;
+  core::double* v6 = let final core::double* #t11 = t in #t11 == null ?{core::double*} t = self::getDouble() : #t11;
+  core::double* v7 = t = t.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+  core::double* v8 = t = t.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+  core::double* v9 = t = t.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+  core::double* v10 = t = t.{core::double::+}(1){(core::num*) →* core::double*};
+  core::double* v11 = let final core::double* #t12 = t in let final core::double* #t13 = t = #t12.{core::double::+}(1){(core::num*) →* core::double*} in #t12;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.weak.transformed.expect
index a799b0f..9e55829 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.weak.transformed.expect
@@ -11,35 +11,35 @@
 static method test1(core::int* t) → void {
   core::int* v1 = t = self::getInt();
   core::num* v2 = t = self::getNum() as{TypeError} core::int*;
-  core::int* v4 = let final core::int* #t1 = t in #t1.{core::num::==}(null) ?{core::int*} t = self::getInt() : #t1;
-  core::num* v5 = let final core::int* #t2 = t in #t2.{core::num::==}(null) ?{core::num*} t = self::getNum() as{TypeError} core::int* : #t2;
-  core::int* v7 = t = t.{core::num::+}(self::getInt());
-  core::num* v8 = t = t.{core::num::+}(self::getNum()) as{TypeError} core::int*;
-  core::int* v10 = t = t.{core::num::+}(1);
-  core::int* v11 = let final core::int* #t3 = t in let final core::int* #t4 = t = #t3.{core::num::+}(1) in #t3;
+  core::int* v4 = let final core::int* #t1 = t in #t1 == null ?{core::int*} t = self::getInt() : #t1;
+  core::num* v5 = let final core::int* #t2 = t in #t2 == null ?{core::num*} t = self::getNum() as{TypeError} core::int* : #t2;
+  core::int* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+  core::num* v8 = t = t.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+  core::int* v10 = t = t.{core::num::+}(1){(core::num*) →* core::int*};
+  core::int* v11 = let final core::int* #t3 = t in let final core::int* #t4 = t = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3;
 }
 static method test2(core::num* t) → void {
   core::int* v1 = t = self::getInt();
   core::num* v2 = t = self::getNum();
   core::double* v3 = t = self::getDouble();
-  core::num* v4 = let final core::num* #t5 = t in #t5.{core::num::==}(null) ?{core::num*} t = self::getInt() : #t5;
-  core::num* v5 = let final core::num* #t6 = t in #t6.{core::num::==}(null) ?{core::num*} t = self::getNum() : #t6;
-  core::num* v6 = let final core::num* #t7 = t in #t7.{core::num::==}(null) ?{core::num*} t = self::getDouble() : #t7;
-  core::num* v7 = t = t.{core::num::+}(self::getInt());
-  core::num* v8 = t = t.{core::num::+}(self::getNum());
-  core::num* v9 = t = t.{core::num::+}(self::getDouble());
-  core::num* v10 = t = t.{core::num::+}(1);
-  core::num* v11 = let final core::num* #t8 = t in let final core::num* #t9 = t = #t8.{core::num::+}(1) in #t8;
+  core::num* v4 = let final core::num* #t5 = t in #t5 == null ?{core::num*} t = self::getInt() : #t5;
+  core::num* v5 = let final core::num* #t6 = t in #t6 == null ?{core::num*} t = self::getNum() : #t6;
+  core::num* v6 = let final core::num* #t7 = t in #t7 == null ?{core::num*} t = self::getDouble() : #t7;
+  core::num* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+  core::num* v8 = t = t.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+  core::num* v9 = t = t.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+  core::num* v10 = t = t.{core::num::+}(1){(core::num*) →* core::num*};
+  core::num* v11 = let final core::num* #t8 = t in let final core::num* #t9 = t = #t8.{core::num::+}(1){(core::num*) →* core::num*} in #t8;
 }
 static method test3(core::double* t) → void {
   core::num* v2 = t = self::getNum() as{TypeError} core::double*;
   core::double* v3 = t = self::getDouble();
-  core::num* v5 = let final core::double* #t10 = t in #t10.{core::num::==}(null) ?{core::num*} t = self::getNum() as{TypeError} core::double* : #t10;
-  core::double* v6 = let final core::double* #t11 = t in #t11.{core::num::==}(null) ?{core::double*} t = self::getDouble() : #t11;
-  core::double* v7 = t = t.{core::double::+}(self::getInt());
-  core::double* v8 = t = t.{core::double::+}(self::getNum());
-  core::double* v9 = t = t.{core::double::+}(self::getDouble());
-  core::double* v10 = t = t.{core::double::+}(1);
-  core::double* v11 = let final core::double* #t12 = t in let final core::double* #t13 = t = #t12.{core::double::+}(1) in #t12;
+  core::num* v5 = let final core::double* #t10 = t in #t10 == null ?{core::num*} t = self::getNum() as{TypeError} core::double* : #t10;
+  core::double* v6 = let final core::double* #t11 = t in #t11 == null ?{core::double*} t = self::getDouble() : #t11;
+  core::double* v7 = t = t.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+  core::double* v8 = t = t.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+  core::double* v9 = t = t.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+  core::double* v10 = t = t.{core::double::+}(1){(core::num*) →* core::double*};
+  core::double* v11 = let final core::double* #t12 = t in let final core::double* #t13 = t = #t12.{core::double::+}(1){(core::num*) →* core::double*} in #t12;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.expect
index b865421..6ae0089 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.expect
@@ -19,11 +19,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field core::int* v_assign = new self::A::•().{self::A::f} = 1;
-static field core::int* v_plus = let final self::A* #t1 = new self::A::•() in #t1.{self::A::f} = #t1.{self::A::f}.{core::num::+}(1);
-static field core::int* v_minus = let final self::A* #t2 = new self::A::•() in #t2.{self::A::f} = #t2.{self::A::f}.{core::num::-}(1);
-static field core::int* v_multiply = let final self::A* #t3 = new self::A::•() in #t3.{self::A::f} = #t3.{self::A::f}.{core::num::*}(1);
-static field core::int* v_prefix_pp = let final self::A* #t4 = new self::A::•() in #t4.{self::A::f} = #t4.{self::A::f}.{core::num::+}(1);
-static field core::int* v_prefix_mm = let final self::A* #t5 = new self::A::•() in #t5.{self::A::f} = #t5.{self::A::f}.{core::num::-}(1);
-static field core::int* v_postfix_pp = let final self::A* #t6 = new self::A::•() in let final core::int* #t7 = #t6.{self::A::f} in let final core::int* #t8 = #t6.{self::A::f} = #t7.{core::num::+}(1) in #t7;
-static field core::int* v_postfix_mm = let final self::A* #t9 = new self::A::•() in let final core::int* #t10 = #t9.{self::A::f} in let final core::int* #t11 = #t9.{self::A::f} = #t10.{core::num::-}(1) in #t10;
+static field core::int* v_plus = let final self::A* #t1 = new self::A::•() in #t1.{self::A::f} = #t1.{self::A::f}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+static field core::int* v_minus = let final self::A* #t2 = new self::A::•() in #t2.{self::A::f} = #t2.{self::A::f}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
+static field core::int* v_multiply = let final self::A* #t3 = new self::A::•() in #t3.{self::A::f} = #t3.{self::A::f}{core::int*}.{core::num::*}(1){(core::num*) →* core::int*};
+static field core::int* v_prefix_pp = let final self::A* #t4 = new self::A::•() in #t4.{self::A::f} = #t4.{self::A::f}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+static field core::int* v_prefix_mm = let final self::A* #t5 = new self::A::•() in #t5.{self::A::f} = #t5.{self::A::f}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
+static field core::int* v_postfix_pp = let final self::A* #t6 = new self::A::•() in let final core::int* #t7 = #t6.{self::A::f}{core::int*} in let final core::int* #t8 = #t6.{self::A::f} = #t7.{core::num::+}(1){(core::num*) →* core::int*} in #t7;
+static field core::int* v_postfix_mm = let final self::A* #t9 = new self::A::•() in let final core::int* #t10 = #t9.{self::A::f}{core::int*} in let final core::int* #t11 = #t9.{self::A::f} = #t10.{core::num::-}(1){(core::num*) →* core::int*} in #t10;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.transformed.expect
index b865421..6ae0089 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.transformed.expect
@@ -19,11 +19,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field core::int* v_assign = new self::A::•().{self::A::f} = 1;
-static field core::int* v_plus = let final self::A* #t1 = new self::A::•() in #t1.{self::A::f} = #t1.{self::A::f}.{core::num::+}(1);
-static field core::int* v_minus = let final self::A* #t2 = new self::A::•() in #t2.{self::A::f} = #t2.{self::A::f}.{core::num::-}(1);
-static field core::int* v_multiply = let final self::A* #t3 = new self::A::•() in #t3.{self::A::f} = #t3.{self::A::f}.{core::num::*}(1);
-static field core::int* v_prefix_pp = let final self::A* #t4 = new self::A::•() in #t4.{self::A::f} = #t4.{self::A::f}.{core::num::+}(1);
-static field core::int* v_prefix_mm = let final self::A* #t5 = new self::A::•() in #t5.{self::A::f} = #t5.{self::A::f}.{core::num::-}(1);
-static field core::int* v_postfix_pp = let final self::A* #t6 = new self::A::•() in let final core::int* #t7 = #t6.{self::A::f} in let final core::int* #t8 = #t6.{self::A::f} = #t7.{core::num::+}(1) in #t7;
-static field core::int* v_postfix_mm = let final self::A* #t9 = new self::A::•() in let final core::int* #t10 = #t9.{self::A::f} in let final core::int* #t11 = #t9.{self::A::f} = #t10.{core::num::-}(1) in #t10;
+static field core::int* v_plus = let final self::A* #t1 = new self::A::•() in #t1.{self::A::f} = #t1.{self::A::f}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+static field core::int* v_minus = let final self::A* #t2 = new self::A::•() in #t2.{self::A::f} = #t2.{self::A::f}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
+static field core::int* v_multiply = let final self::A* #t3 = new self::A::•() in #t3.{self::A::f} = #t3.{self::A::f}{core::int*}.{core::num::*}(1){(core::num*) →* core::int*};
+static field core::int* v_prefix_pp = let final self::A* #t4 = new self::A::•() in #t4.{self::A::f} = #t4.{self::A::f}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+static field core::int* v_prefix_mm = let final self::A* #t5 = new self::A::•() in #t5.{self::A::f} = #t5.{self::A::f}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
+static field core::int* v_postfix_pp = let final self::A* #t6 = new self::A::•() in let final core::int* #t7 = #t6.{self::A::f}{core::int*} in let final core::int* #t8 = #t6.{self::A::f} = #t7.{core::num::+}(1){(core::num*) →* core::int*} in #t7;
+static field core::int* v_postfix_mm = let final self::A* #t9 = new self::A::•() in let final core::int* #t10 = #t9.{self::A::f}{core::int*} in let final core::int* #t11 = #t9.{self::A::f} = #t10.{core::num::-}(1){(core::num*) →* core::int*} in #t10;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.expect
index fbcfd30..2269e14 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.expect
@@ -63,17 +63,17 @@
 static field core::int* v_prefix_pp = let final self::B* #t1 = new self::B::•() in #t1.{self::B::a} = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
 var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
-                                   ^" in #t1.{self::B::a}.{self::A::+}(1) as{TypeError} self::A*;
+                                   ^" in #t1.{self::B::a}{self::A*}.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A*;
 static field core::double* v_prefix_mm = let final self::B* #t3 = new self::B::•() in #t3.{self::B::a} = let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
 var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
-                                   ^" in #t3.{self::B::a}.{self::A::-}(1) as{TypeError} self::A*;
-static field self::A* v_postfix_pp = let final self::B* #t5 = new self::B::•() in let final self::A* #t6 = #t5.{self::B::a} in let final core::int* #t7 = #t5.{self::B::a} = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+                                   ^" in #t3.{self::B::a}{self::A*}.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A*;
+static field self::A* v_postfix_pp = let final self::B* #t5 = new self::B::•() in let final self::A* #t6 = #t5.{self::B::a}{self::A*} in let final core::int* #t7 = #t5.{self::B::a} = let final Never* #t8 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
     /*@ type=int* */ a /*@target=A.+*/ ++);
-                                       ^" in #t6.{self::A::+}(1) as{TypeError} self::A* in #t6;
-static field self::A* v_postfix_mm = let final self::B* #t9 = new self::B::•() in let final self::A* #t10 = #t9.{self::B::a} in let final core::double* #t11 = #t9.{self::B::a} = let final Never* #t12 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+                                       ^" in #t6.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A* in #t6;
+static field self::A* v_postfix_mm = let final self::B* #t9 = new self::B::•() in let final self::A* #t10 = #t9.{self::B::a}{self::A*} in let final core::double* #t11 = #t9.{self::B::a} = let final Never* #t12 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
     /*@ type=double* */ a /*@target=A.-*/ --);
-                                          ^" in #t10.{self::A::-}(1) as{TypeError} self::A* in #t10;
+                                          ^" in #t10.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A* in #t10;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.weak.expect
index 63ae5bb..2e41284 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.weak.expect
@@ -42,19 +42,19 @@
     ;
   static method test(self::Test* t) → void {
     t.{self::Test::member} = self::f<self::B*>();
-    let final self::Test* #t1 = t in #t1.{self::Test::member}.{self::A::==}(null) ?{self::B*} #t1.{self::Test::member} = self::f<self::B*>() : null;
-    let final self::Test* #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    let final self::Test* #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    let final self::Test* #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    let final self::Test* #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}.{self::B::-}(1);
-    let final self::Test* #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}.{self::B::-}(1);
+    let final self::Test* #t1 = t in #t1.{self::Test::member}{self::B*} == null ?{self::B*} #t1.{self::Test::member} = self::f<self::B*>() : null;
+    let final self::Test* #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    let final self::Test* #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    let final self::Test* #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    let final self::Test* #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = t.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::Test* #t7 = t in let final self::B* #t8 = #t7.{self::Test::member} in #t8.{self::A::==}(null) ?{self::B*} #t7.{self::Test::member} = self::f<self::B*>() : #t8;
-    self::A* v3 = let final self::Test* #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    self::B* v4 = let final self::Test* #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    self::C* v5 = let final self::Test* #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    self::B* v6 = let final self::Test* #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}.{self::B::-}(1);
-    self::B* v7 = let final self::Test* #t13 = t in let final self::B* #t14 = #t13.{self::Test::member} in let final self::B* #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1) in #t14;
+    self::B* v2 = let final self::Test* #t7 = t in let final self::B* #t8 = #t7.{self::Test::member}{self::B*} in #t8 == null ?{self::B*} #t7.{self::Test::member} = self::f<self::B*>() : #t8;
+    self::A* v3 = let final self::Test* #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = let final self::Test* #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = let final self::Test* #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = let final self::Test* #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::Test* #t13 = t in let final self::B* #t14 = #t13.{self::Test::member}{self::B*} in let final self::B* #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1){(core::int*) →* self::B*} in #t14;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.weak.transformed.expect
index 63ae5bb..2e41284 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.weak.transformed.expect
@@ -42,19 +42,19 @@
     ;
   static method test(self::Test* t) → void {
     t.{self::Test::member} = self::f<self::B*>();
-    let final self::Test* #t1 = t in #t1.{self::Test::member}.{self::A::==}(null) ?{self::B*} #t1.{self::Test::member} = self::f<self::B*>() : null;
-    let final self::Test* #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    let final self::Test* #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    let final self::Test* #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    let final self::Test* #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}.{self::B::-}(1);
-    let final self::Test* #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}.{self::B::-}(1);
+    let final self::Test* #t1 = t in #t1.{self::Test::member}{self::B*} == null ?{self::B*} #t1.{self::Test::member} = self::f<self::B*>() : null;
+    let final self::Test* #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    let final self::Test* #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    let final self::Test* #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    let final self::Test* #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = t.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::Test* #t7 = t in let final self::B* #t8 = #t7.{self::Test::member} in #t8.{self::A::==}(null) ?{self::B*} #t7.{self::Test::member} = self::f<self::B*>() : #t8;
-    self::A* v3 = let final self::Test* #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    self::B* v4 = let final self::Test* #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    self::C* v5 = let final self::Test* #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    self::B* v6 = let final self::Test* #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}.{self::B::-}(1);
-    self::B* v7 = let final self::Test* #t13 = t in let final self::B* #t14 = #t13.{self::Test::member} in let final self::B* #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1) in #t14;
+    self::B* v2 = let final self::Test* #t7 = t in let final self::B* #t8 = #t7.{self::Test::member}{self::B*} in #t8 == null ?{self::B*} #t7.{self::Test::member} = self::f<self::B*>() : #t8;
+    self::A* v3 = let final self::Test* #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = let final self::Test* #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = let final self::Test* #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = let final self::Test* #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::Test* #t13 = t in let final self::B* #t14 = #t13.{self::Test::member}{self::B*} in let final self::B* #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1){(core::int*) →* self::B*} in #t14;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.weak.expect
index 189fd9a..681f9aa 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.weak.expect
@@ -41,20 +41,20 @@
     : super core::Object::•()
     ;
   static method test(self::Test* t) → void {
-    let final self::Test* #t1 = t in #t1.{self::Test::==}(null) ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
-    let final self::Test* #t2 = t in #t2.{self::Test::==}(null) ?{self::B*} null : #t2.{self::Test::member}.{self::A::==}(null) ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
-    let final self::Test* #t3 = t in #t3.{self::Test::==}(null) ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    let final self::Test* #t4 = t in #t4.{self::Test::==}(null) ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    let final self::Test* #t5 = t in #t5.{self::Test::==}(null) ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    let final self::Test* #t6 = t in #t6.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}.{self::B::-}(1) in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
-    let final self::Test* #t9 = t in #t9.{self::Test::==}(null) ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}.{self::B::-}(1);
-    self::B* v1 = let final self::Test* #t10 = t in #t10.{self::Test::==}(null) ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::Test* #t11 = t in #t11.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member} in #t12.{self::A::==}(null) ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
-    self::A* v3 = let final self::Test* #t13 = t in #t13.{self::Test::==}(null) ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
-    self::B* v4 = let final self::Test* #t16 = t in #t16.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}.{self::B::*}(self::f<self::B*>()) in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
-    self::C* v5 = let final self::Test* #t19 = t in #t19.{self::Test::==}(null) ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}.{self::B::&}(self::f<self::A*>()) in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
-    self::B* v6 = let final self::Test* #t22 = t in #t22.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}.{self::B::-}(1) in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
-    self::B* v7 = let final self::Test* #t25 = t in #t25.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t26 = #t25.{self::Test::member} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1) in #t26;
+    let final self::Test* #t1 = t in #t1 == null ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
+    let final self::Test* #t2 = t in #t2 == null ?{self::B*} null : #t2.{self::Test::member}{self::B*} == null ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
+    let final self::Test* #t3 = t in #t3 == null ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t4 = t in #t4 == null ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    let final self::Test* #t5 = t in #t5 == null ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    let final self::Test* #t6 = t in #t6 == null ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
+    let final self::Test* #t9 = t in #t9 == null ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v1 = let final self::Test* #t10 = t in #t10 == null ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
+    self::B* v2 = let final self::Test* #t11 = t in #t11 == null ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member}{self::B*} in #t12 == null ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
+    self::A* v3 = let final self::Test* #t13 = t in #t13 == null ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B* v4 = let final self::Test* #t16 = t in #t16 == null ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
+    self::C* v5 = let final self::Test* #t19 = t in #t19 == null ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
+    self::B* v6 = let final self::Test* #t22 = t in #t22 == null ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
+    self::B* v7 = let final self::Test* #t25 = t in #t25 == null ?{self::B*} null : let final self::B* #t26 = #t25.{self::Test::member}{self::B*} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1){(core::int*) →* self::B*} in #t26;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.weak.transformed.expect
index 189fd9a..681f9aa 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.weak.transformed.expect
@@ -41,20 +41,20 @@
     : super core::Object::•()
     ;
   static method test(self::Test* t) → void {
-    let final self::Test* #t1 = t in #t1.{self::Test::==}(null) ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
-    let final self::Test* #t2 = t in #t2.{self::Test::==}(null) ?{self::B*} null : #t2.{self::Test::member}.{self::A::==}(null) ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
-    let final self::Test* #t3 = t in #t3.{self::Test::==}(null) ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    let final self::Test* #t4 = t in #t4.{self::Test::==}(null) ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}.{self::B::*}(self::f<self::B*>());
-    let final self::Test* #t5 = t in #t5.{self::Test::==}(null) ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}.{self::B::&}(self::f<self::A*>());
-    let final self::Test* #t6 = t in #t6.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}.{self::B::-}(1) in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
-    let final self::Test* #t9 = t in #t9.{self::Test::==}(null) ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}.{self::B::-}(1);
-    self::B* v1 = let final self::Test* #t10 = t in #t10.{self::Test::==}(null) ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
-    self::B* v2 = let final self::Test* #t11 = t in #t11.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member} in #t12.{self::A::==}(null) ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
-    self::A* v3 = let final self::Test* #t13 = t in #t13.{self::Test::==}(null) ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
-    self::B* v4 = let final self::Test* #t16 = t in #t16.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}.{self::B::*}(self::f<self::B*>()) in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
-    self::C* v5 = let final self::Test* #t19 = t in #t19.{self::Test::==}(null) ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}.{self::B::&}(self::f<self::A*>()) in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
-    self::B* v6 = let final self::Test* #t22 = t in #t22.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}.{self::B::-}(1) in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
-    self::B* v7 = let final self::Test* #t25 = t in #t25.{self::Test::==}(null) ?{self::B*} null : let final self::B* #t26 = #t25.{self::Test::member} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1) in #t26;
+    let final self::Test* #t1 = t in #t1 == null ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
+    let final self::Test* #t2 = t in #t2 == null ?{self::B*} null : #t2.{self::Test::member}{self::B*} == null ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
+    let final self::Test* #t3 = t in #t3 == null ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t4 = t in #t4 == null ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    let final self::Test* #t5 = t in #t5 == null ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    let final self::Test* #t6 = t in #t6 == null ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
+    let final self::Test* #t9 = t in #t9 == null ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v1 = let final self::Test* #t10 = t in #t10 == null ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
+    self::B* v2 = let final self::Test* #t11 = t in #t11 == null ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member}{self::B*} in #t12 == null ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
+    self::A* v3 = let final self::Test* #t13 = t in #t13 == null ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B* v4 = let final self::Test* #t16 = t in #t16 == null ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
+    self::C* v5 = let final self::Test* #t19 = t in #t19 == null ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
+    self::B* v6 = let final self::Test* #t22 = t in #t22 == null ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
+    self::B* v7 = let final self::Test* #t25 = t in #t25 == null ?{self::B*} null : let final self::B* #t26 = #t25.{self::Test::member}{self::B*} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1){(core::int*) →* self::B*} in #t26;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.weak.expect
index 810f1d5..1e360b8 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.weak.expect
@@ -8,14 +8,14 @@
     : super core::Object::•()
     ;
   static method test(self::Test1* t) → void {
-    core::int* v1 = let final self::Test1* #t1 = t in #t1.{self::Test1::==}(null) ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
-    core::num* v2 = let final self::Test1* #t2 = t in #t2.{self::Test1::==}(null) ?{core::num*} null : #t2.{self::Test1::prop} = self::getNum() as{TypeError} core::int*;
-    core::int* v4 = let final self::Test1* #t3 = t in #t3.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t4 = #t3.{self::Test1::prop} in #t4.{core::num::==}(null) ?{core::int*} #t3.{self::Test1::prop} = self::getInt() : #t4;
-    core::num* v5 = let final self::Test1* #t5 = t in #t5.{self::Test1::==}(null) ?{core::num*} null : let final core::int* #t6 = #t5.{self::Test1::prop} in #t6.{core::num::==}(null) ?{core::num*} #t5.{self::Test1::prop} = self::getNum() as{TypeError} core::int* : #t6;
-    core::int* v7 = let final self::Test1* #t7 = t in #t7.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}.{core::num::+}(self::getInt()) in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
-    core::num* v8 = let final self::Test1* #t10 = t in #t10.{self::Test1::==}(null) ?{core::num*} null : let final core::num* #t11 = #t10.{self::Test1::prop}.{core::num::+}(self::getNum()) as{TypeError} core::int* in let final void #t12 = #t10.{self::Test1::prop} = #t11 in #t11;
-    core::int* v10 = let final self::Test1* #t13 = t in #t13.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t14 = #t13.{self::Test1::prop}.{core::num::+}(1) in let final void #t15 = #t13.{self::Test1::prop} = #t14 in #t14;
-    core::int* v11 = let final self::Test1* #t16 = t in #t16.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t17 = #t16.{self::Test1::prop} in let final void #t18 = #t16.{self::Test1::prop} = #t17.{core::num::+}(1) in #t17;
+    core::int* v1 = let final self::Test1* #t1 = t in #t1 == null ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
+    core::num* v2 = let final self::Test1* #t2 = t in #t2 == null ?{core::num*} null : #t2.{self::Test1::prop} = self::getNum() as{TypeError} core::int*;
+    core::int* v4 = let final self::Test1* #t3 = t in #t3 == null ?{core::int*} null : let final core::int* #t4 = #t3.{self::Test1::prop}{core::int*} in #t4 == null ?{core::int*} #t3.{self::Test1::prop} = self::getInt() : #t4;
+    core::num* v5 = let final self::Test1* #t5 = t in #t5 == null ?{core::num*} null : let final core::int* #t6 = #t5.{self::Test1::prop}{core::int*} in #t6 == null ?{core::num*} #t5.{self::Test1::prop} = self::getNum() as{TypeError} core::int* : #t6;
+    core::int* v7 = let final self::Test1* #t7 = t in #t7 == null ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
+    core::num* v8 = let final self::Test1* #t10 = t in #t10 == null ?{core::num*} null : let final core::num* #t11 = #t10.{self::Test1::prop}{core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t12 = #t10.{self::Test1::prop} = #t11 in #t11;
+    core::int* v10 = let final self::Test1* #t13 = t in #t13 == null ?{core::int*} null : let final core::int* #t14 = #t13.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t15 = #t13.{self::Test1::prop} = #t14 in #t14;
+    core::int* v11 = let final self::Test1* #t16 = t in #t16 == null ?{core::int*} null : let final core::int* #t17 = #t16.{self::Test1::prop}{core::int*} in let final void #t18 = #t16.{self::Test1::prop} = #t17.{core::num::+}(1){(core::num*) →* core::int*} in #t17;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -34,17 +34,17 @@
     : super core::Object::•()
     ;
   static method test(self::Test2* t) → void {
-    core::int* v1 = let final self::Test2* #t19 = t in #t19.{self::Test2::==}(null) ?{core::int*} null : #t19.{self::Test2::prop} = self::getInt();
-    core::num* v2 = let final self::Test2* #t20 = t in #t20.{self::Test2::==}(null) ?{core::num*} null : #t20.{self::Test2::prop} = self::getNum();
-    core::double* v3 = let final self::Test2* #t21 = t in #t21.{self::Test2::==}(null) ?{core::double*} null : #t21.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t22 = t in #t22.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop} in #t23.{core::num::==}(null) ?{core::num*} #t22.{self::Test2::prop} = self::getInt() : #t23;
-    core::num* v5 = let final self::Test2* #t24 = t in #t24.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t25 = #t24.{self::Test2::prop} in #t25.{core::num::==}(null) ?{core::num*} #t24.{self::Test2::prop} = self::getNum() : #t25;
-    core::num* v6 = let final self::Test2* #t26 = t in #t26.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t27 = #t26.{self::Test2::prop} in #t27.{core::num::==}(null) ?{core::num*} #t26.{self::Test2::prop} = self::getDouble() : #t27;
-    core::num* v7 = let final self::Test2* #t28 = t in #t28.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}.{core::num::+}(self::getInt()) in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
-    core::num* v8 = let final self::Test2* #t31 = t in #t31.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}.{core::num::+}(self::getNum()) in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
-    core::num* v9 = let final self::Test2* #t34 = t in #t34.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop}.{core::num::+}(self::getDouble()) in let final void #t36 = #t34.{self::Test2::prop} = #t35 in #t35;
-    core::num* v10 = let final self::Test2* #t37 = t in #t37.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t38 = #t37.{self::Test2::prop}.{core::num::+}(1) in let final void #t39 = #t37.{self::Test2::prop} = #t38 in #t38;
-    core::num* v11 = let final self::Test2* #t40 = t in #t40.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t41 = #t40.{self::Test2::prop} in let final void #t42 = #t40.{self::Test2::prop} = #t41.{core::num::+}(1) in #t41;
+    core::int* v1 = let final self::Test2* #t19 = t in #t19 == null ?{core::int*} null : #t19.{self::Test2::prop} = self::getInt();
+    core::num* v2 = let final self::Test2* #t20 = t in #t20 == null ?{core::num*} null : #t20.{self::Test2::prop} = self::getNum();
+    core::double* v3 = let final self::Test2* #t21 = t in #t21 == null ?{core::double*} null : #t21.{self::Test2::prop} = self::getDouble();
+    core::num* v4 = let final self::Test2* #t22 = t in #t22 == null ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop}{core::num*} in #t23 == null ?{core::num*} #t22.{self::Test2::prop} = self::getInt() : #t23;
+    core::num* v5 = let final self::Test2* #t24 = t in #t24 == null ?{core::num*} null : let final core::num* #t25 = #t24.{self::Test2::prop}{core::num*} in #t25 == null ?{core::num*} #t24.{self::Test2::prop} = self::getNum() : #t25;
+    core::num* v6 = let final self::Test2* #t26 = t in #t26 == null ?{core::num*} null : let final core::num* #t27 = #t26.{self::Test2::prop}{core::num*} in #t27 == null ?{core::num*} #t26.{self::Test2::prop} = self::getDouble() : #t27;
+    core::num* v7 = let final self::Test2* #t28 = t in #t28 == null ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
+    core::num* v8 = let final self::Test2* #t31 = t in #t31 == null ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
+    core::num* v9 = let final self::Test2* #t34 = t in #t34 == null ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t36 = #t34.{self::Test2::prop} = #t35 in #t35;
+    core::num* v10 = let final self::Test2* #t37 = t in #t37 == null ?{core::num*} null : let final core::num* #t38 = #t37.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t39 = #t37.{self::Test2::prop} = #t38 in #t38;
+    core::num* v11 = let final self::Test2* #t40 = t in #t40 == null ?{core::num*} null : let final core::num* #t41 = #t40.{self::Test2::prop}{core::num*} in let final void #t42 = #t40.{self::Test2::prop} = #t41.{core::num::+}(1){(core::num*) →* core::num*} in #t41;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -63,15 +63,15 @@
     : super core::Object::•()
     ;
   static method test3(self::Test3* t) → void {
-    core::num* v2 = let final self::Test3* #t43 = t in #t43.{self::Test3::==}(null) ?{core::num*} null : #t43.{self::Test3::prop} = self::getNum() as{TypeError} core::double*;
-    core::double* v3 = let final self::Test3* #t44 = t in #t44.{self::Test3::==}(null) ?{core::double*} null : #t44.{self::Test3::prop} = self::getDouble();
-    core::num* v5 = let final self::Test3* #t45 = t in #t45.{self::Test3::==}(null) ?{core::num*} null : let final core::double* #t46 = #t45.{self::Test3::prop} in #t46.{core::num::==}(null) ?{core::num*} #t45.{self::Test3::prop} = self::getNum() as{TypeError} core::double* : #t46;
-    core::double* v6 = let final self::Test3* #t47 = t in #t47.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t48 = #t47.{self::Test3::prop} in #t48.{core::num::==}(null) ?{core::double*} #t47.{self::Test3::prop} = self::getDouble() : #t48;
-    core::double* v7 = let final self::Test3* #t49 = t in #t49.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}.{core::double::+}(self::getInt()) in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
-    core::double* v8 = let final self::Test3* #t52 = t in #t52.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop}.{core::double::+}(self::getNum()) in let final void #t54 = #t52.{self::Test3::prop} = #t53 in #t53;
-    core::double* v9 = let final self::Test3* #t55 = t in #t55.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t56 = #t55.{self::Test3::prop}.{core::double::+}(self::getDouble()) in let final void #t57 = #t55.{self::Test3::prop} = #t56 in #t56;
-    core::double* v10 = let final self::Test3* #t58 = t in #t58.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t59 = #t58.{self::Test3::prop}.{core::double::+}(1) in let final void #t60 = #t58.{self::Test3::prop} = #t59 in #t59;
-    core::double* v11 = let final self::Test3* #t61 = t in #t61.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t62 = #t61.{self::Test3::prop} in let final void #t63 = #t61.{self::Test3::prop} = #t62.{core::double::+}(1) in #t62;
+    core::num* v2 = let final self::Test3* #t43 = t in #t43 == null ?{core::num*} null : #t43.{self::Test3::prop} = self::getNum() as{TypeError} core::double*;
+    core::double* v3 = let final self::Test3* #t44 = t in #t44 == null ?{core::double*} null : #t44.{self::Test3::prop} = self::getDouble();
+    core::num* v5 = let final self::Test3* #t45 = t in #t45 == null ?{core::num*} null : let final core::double* #t46 = #t45.{self::Test3::prop}{core::double*} in #t46 == null ?{core::num*} #t45.{self::Test3::prop} = self::getNum() as{TypeError} core::double* : #t46;
+    core::double* v6 = let final self::Test3* #t47 = t in #t47 == null ?{core::double*} null : let final core::double* #t48 = #t47.{self::Test3::prop}{core::double*} in #t48 == null ?{core::double*} #t47.{self::Test3::prop} = self::getDouble() : #t48;
+    core::double* v7 = let final self::Test3* #t49 = t in #t49 == null ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
+    core::double* v8 = let final self::Test3* #t52 = t in #t52 == null ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t54 = #t52.{self::Test3::prop} = #t53 in #t53;
+    core::double* v9 = let final self::Test3* #t55 = t in #t55 == null ?{core::double*} null : let final core::double* #t56 = #t55.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t57 = #t55.{self::Test3::prop} = #t56 in #t56;
+    core::double* v10 = let final self::Test3* #t58 = t in #t58 == null ?{core::double*} null : let final core::double* #t59 = #t58.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t60 = #t58.{self::Test3::prop} = #t59 in #t59;
+    core::double* v11 = let final self::Test3* #t61 = t in #t61 == null ?{core::double*} null : let final core::double* #t62 = #t61.{self::Test3::prop}{core::double*} in let final void #t63 = #t61.{self::Test3::prop} = #t62.{core::double::+}(1){(core::num*) →* core::double*} in #t62;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.weak.transformed.expect
index 810f1d5..1e360b8 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.weak.transformed.expect
@@ -8,14 +8,14 @@
     : super core::Object::•()
     ;
   static method test(self::Test1* t) → void {
-    core::int* v1 = let final self::Test1* #t1 = t in #t1.{self::Test1::==}(null) ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
-    core::num* v2 = let final self::Test1* #t2 = t in #t2.{self::Test1::==}(null) ?{core::num*} null : #t2.{self::Test1::prop} = self::getNum() as{TypeError} core::int*;
-    core::int* v4 = let final self::Test1* #t3 = t in #t3.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t4 = #t3.{self::Test1::prop} in #t4.{core::num::==}(null) ?{core::int*} #t3.{self::Test1::prop} = self::getInt() : #t4;
-    core::num* v5 = let final self::Test1* #t5 = t in #t5.{self::Test1::==}(null) ?{core::num*} null : let final core::int* #t6 = #t5.{self::Test1::prop} in #t6.{core::num::==}(null) ?{core::num*} #t5.{self::Test1::prop} = self::getNum() as{TypeError} core::int* : #t6;
-    core::int* v7 = let final self::Test1* #t7 = t in #t7.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}.{core::num::+}(self::getInt()) in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
-    core::num* v8 = let final self::Test1* #t10 = t in #t10.{self::Test1::==}(null) ?{core::num*} null : let final core::num* #t11 = #t10.{self::Test1::prop}.{core::num::+}(self::getNum()) as{TypeError} core::int* in let final void #t12 = #t10.{self::Test1::prop} = #t11 in #t11;
-    core::int* v10 = let final self::Test1* #t13 = t in #t13.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t14 = #t13.{self::Test1::prop}.{core::num::+}(1) in let final void #t15 = #t13.{self::Test1::prop} = #t14 in #t14;
-    core::int* v11 = let final self::Test1* #t16 = t in #t16.{self::Test1::==}(null) ?{core::int*} null : let final core::int* #t17 = #t16.{self::Test1::prop} in let final void #t18 = #t16.{self::Test1::prop} = #t17.{core::num::+}(1) in #t17;
+    core::int* v1 = let final self::Test1* #t1 = t in #t1 == null ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
+    core::num* v2 = let final self::Test1* #t2 = t in #t2 == null ?{core::num*} null : #t2.{self::Test1::prop} = self::getNum() as{TypeError} core::int*;
+    core::int* v4 = let final self::Test1* #t3 = t in #t3 == null ?{core::int*} null : let final core::int* #t4 = #t3.{self::Test1::prop}{core::int*} in #t4 == null ?{core::int*} #t3.{self::Test1::prop} = self::getInt() : #t4;
+    core::num* v5 = let final self::Test1* #t5 = t in #t5 == null ?{core::num*} null : let final core::int* #t6 = #t5.{self::Test1::prop}{core::int*} in #t6 == null ?{core::num*} #t5.{self::Test1::prop} = self::getNum() as{TypeError} core::int* : #t6;
+    core::int* v7 = let final self::Test1* #t7 = t in #t7 == null ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
+    core::num* v8 = let final self::Test1* #t10 = t in #t10 == null ?{core::num*} null : let final core::num* #t11 = #t10.{self::Test1::prop}{core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t12 = #t10.{self::Test1::prop} = #t11 in #t11;
+    core::int* v10 = let final self::Test1* #t13 = t in #t13 == null ?{core::int*} null : let final core::int* #t14 = #t13.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t15 = #t13.{self::Test1::prop} = #t14 in #t14;
+    core::int* v11 = let final self::Test1* #t16 = t in #t16 == null ?{core::int*} null : let final core::int* #t17 = #t16.{self::Test1::prop}{core::int*} in let final void #t18 = #t16.{self::Test1::prop} = #t17.{core::num::+}(1){(core::num*) →* core::int*} in #t17;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -34,17 +34,17 @@
     : super core::Object::•()
     ;
   static method test(self::Test2* t) → void {
-    core::int* v1 = let final self::Test2* #t19 = t in #t19.{self::Test2::==}(null) ?{core::int*} null : #t19.{self::Test2::prop} = self::getInt();
-    core::num* v2 = let final self::Test2* #t20 = t in #t20.{self::Test2::==}(null) ?{core::num*} null : #t20.{self::Test2::prop} = self::getNum();
-    core::double* v3 = let final self::Test2* #t21 = t in #t21.{self::Test2::==}(null) ?{core::double*} null : #t21.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t22 = t in #t22.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop} in #t23.{core::num::==}(null) ?{core::num*} #t22.{self::Test2::prop} = self::getInt() : #t23;
-    core::num* v5 = let final self::Test2* #t24 = t in #t24.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t25 = #t24.{self::Test2::prop} in #t25.{core::num::==}(null) ?{core::num*} #t24.{self::Test2::prop} = self::getNum() : #t25;
-    core::num* v6 = let final self::Test2* #t26 = t in #t26.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t27 = #t26.{self::Test2::prop} in #t27.{core::num::==}(null) ?{core::num*} #t26.{self::Test2::prop} = self::getDouble() : #t27;
-    core::num* v7 = let final self::Test2* #t28 = t in #t28.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}.{core::num::+}(self::getInt()) in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
-    core::num* v8 = let final self::Test2* #t31 = t in #t31.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}.{core::num::+}(self::getNum()) in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
-    core::num* v9 = let final self::Test2* #t34 = t in #t34.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop}.{core::num::+}(self::getDouble()) in let final void #t36 = #t34.{self::Test2::prop} = #t35 in #t35;
-    core::num* v10 = let final self::Test2* #t37 = t in #t37.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t38 = #t37.{self::Test2::prop}.{core::num::+}(1) in let final void #t39 = #t37.{self::Test2::prop} = #t38 in #t38;
-    core::num* v11 = let final self::Test2* #t40 = t in #t40.{self::Test2::==}(null) ?{core::num*} null : let final core::num* #t41 = #t40.{self::Test2::prop} in let final void #t42 = #t40.{self::Test2::prop} = #t41.{core::num::+}(1) in #t41;
+    core::int* v1 = let final self::Test2* #t19 = t in #t19 == null ?{core::int*} null : #t19.{self::Test2::prop} = self::getInt();
+    core::num* v2 = let final self::Test2* #t20 = t in #t20 == null ?{core::num*} null : #t20.{self::Test2::prop} = self::getNum();
+    core::double* v3 = let final self::Test2* #t21 = t in #t21 == null ?{core::double*} null : #t21.{self::Test2::prop} = self::getDouble();
+    core::num* v4 = let final self::Test2* #t22 = t in #t22 == null ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop}{core::num*} in #t23 == null ?{core::num*} #t22.{self::Test2::prop} = self::getInt() : #t23;
+    core::num* v5 = let final self::Test2* #t24 = t in #t24 == null ?{core::num*} null : let final core::num* #t25 = #t24.{self::Test2::prop}{core::num*} in #t25 == null ?{core::num*} #t24.{self::Test2::prop} = self::getNum() : #t25;
+    core::num* v6 = let final self::Test2* #t26 = t in #t26 == null ?{core::num*} null : let final core::num* #t27 = #t26.{self::Test2::prop}{core::num*} in #t27 == null ?{core::num*} #t26.{self::Test2::prop} = self::getDouble() : #t27;
+    core::num* v7 = let final self::Test2* #t28 = t in #t28 == null ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
+    core::num* v8 = let final self::Test2* #t31 = t in #t31 == null ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
+    core::num* v9 = let final self::Test2* #t34 = t in #t34 == null ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t36 = #t34.{self::Test2::prop} = #t35 in #t35;
+    core::num* v10 = let final self::Test2* #t37 = t in #t37 == null ?{core::num*} null : let final core::num* #t38 = #t37.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t39 = #t37.{self::Test2::prop} = #t38 in #t38;
+    core::num* v11 = let final self::Test2* #t40 = t in #t40 == null ?{core::num*} null : let final core::num* #t41 = #t40.{self::Test2::prop}{core::num*} in let final void #t42 = #t40.{self::Test2::prop} = #t41.{core::num::+}(1){(core::num*) →* core::num*} in #t41;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -63,15 +63,15 @@
     : super core::Object::•()
     ;
   static method test3(self::Test3* t) → void {
-    core::num* v2 = let final self::Test3* #t43 = t in #t43.{self::Test3::==}(null) ?{core::num*} null : #t43.{self::Test3::prop} = self::getNum() as{TypeError} core::double*;
-    core::double* v3 = let final self::Test3* #t44 = t in #t44.{self::Test3::==}(null) ?{core::double*} null : #t44.{self::Test3::prop} = self::getDouble();
-    core::num* v5 = let final self::Test3* #t45 = t in #t45.{self::Test3::==}(null) ?{core::num*} null : let final core::double* #t46 = #t45.{self::Test3::prop} in #t46.{core::num::==}(null) ?{core::num*} #t45.{self::Test3::prop} = self::getNum() as{TypeError} core::double* : #t46;
-    core::double* v6 = let final self::Test3* #t47 = t in #t47.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t48 = #t47.{self::Test3::prop} in #t48.{core::num::==}(null) ?{core::double*} #t47.{self::Test3::prop} = self::getDouble() : #t48;
-    core::double* v7 = let final self::Test3* #t49 = t in #t49.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}.{core::double::+}(self::getInt()) in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
-    core::double* v8 = let final self::Test3* #t52 = t in #t52.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop}.{core::double::+}(self::getNum()) in let final void #t54 = #t52.{self::Test3::prop} = #t53 in #t53;
-    core::double* v9 = let final self::Test3* #t55 = t in #t55.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t56 = #t55.{self::Test3::prop}.{core::double::+}(self::getDouble()) in let final void #t57 = #t55.{self::Test3::prop} = #t56 in #t56;
-    core::double* v10 = let final self::Test3* #t58 = t in #t58.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t59 = #t58.{self::Test3::prop}.{core::double::+}(1) in let final void #t60 = #t58.{self::Test3::prop} = #t59 in #t59;
-    core::double* v11 = let final self::Test3* #t61 = t in #t61.{self::Test3::==}(null) ?{core::double*} null : let final core::double* #t62 = #t61.{self::Test3::prop} in let final void #t63 = #t61.{self::Test3::prop} = #t62.{core::double::+}(1) in #t62;
+    core::num* v2 = let final self::Test3* #t43 = t in #t43 == null ?{core::num*} null : #t43.{self::Test3::prop} = self::getNum() as{TypeError} core::double*;
+    core::double* v3 = let final self::Test3* #t44 = t in #t44 == null ?{core::double*} null : #t44.{self::Test3::prop} = self::getDouble();
+    core::num* v5 = let final self::Test3* #t45 = t in #t45 == null ?{core::num*} null : let final core::double* #t46 = #t45.{self::Test3::prop}{core::double*} in #t46 == null ?{core::num*} #t45.{self::Test3::prop} = self::getNum() as{TypeError} core::double* : #t46;
+    core::double* v6 = let final self::Test3* #t47 = t in #t47 == null ?{core::double*} null : let final core::double* #t48 = #t47.{self::Test3::prop}{core::double*} in #t48 == null ?{core::double*} #t47.{self::Test3::prop} = self::getDouble() : #t48;
+    core::double* v7 = let final self::Test3* #t49 = t in #t49 == null ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
+    core::double* v8 = let final self::Test3* #t52 = t in #t52 == null ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t54 = #t52.{self::Test3::prop} = #t53 in #t53;
+    core::double* v9 = let final self::Test3* #t55 = t in #t55 == null ?{core::double*} null : let final core::double* #t56 = #t55.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t57 = #t55.{self::Test3::prop} = #t56 in #t56;
+    core::double* v10 = let final self::Test3* #t58 = t in #t58 == null ?{core::double*} null : let final core::double* #t59 = #t58.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t60 = #t58.{self::Test3::prop} = #t59 in #t59;
+    core::double* v11 = let final self::Test3* #t61 = t in #t61 == null ?{core::double*} null : let final core::double* #t62 = #t61.{self::Test3::prop}{core::double*} in let final void #t63 = #t61.{self::Test3::prop} = #t62.{core::double::+}(1){(core::num*) →* core::double*} in #t62;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.weak.expect
index fe71ec5..28b3433 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.weak.expect
@@ -57,19 +57,19 @@
     ;
   method test() → void {
     super.{self::Base::member} = self::f<self::B*>();
-    super.{self::Base::member}.{self::A::==}(null) ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : null;
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>());
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>());
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1);
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1);
+    super.{self::Base::member} == null ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : null;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = super.{self::Base::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = super.{self::Base::member} in #t1.{self::A::==}(null) ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    self::B* v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>());
-    self::C* v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>());
-    self::B* v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1);
-    self::B* v7 = let final self::B* #t2 = super.{self::Base::member} in let final self::B* #t3 = super.{self::Base::member} = #t2.{self::B::-}(1) in #t2;
+    self::B* v2 = let final self::B* #t1 = super.{self::Base::member} in #t1 == null ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : #t1;
+    self::A* v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::B* #t2 = super.{self::Base::member} in let final self::B* #t3 = super.{self::Base::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
   }
 }
 static method f<T extends core::Object* = dynamic>() → self::f::T*
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.weak.transformed.expect
index fe71ec5..28b3433 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.weak.transformed.expect
@@ -57,19 +57,19 @@
     ;
   method test() → void {
     super.{self::Base::member} = self::f<self::B*>();
-    super.{self::Base::member}.{self::A::==}(null) ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : null;
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>());
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>());
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1);
-    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1);
+    super.{self::Base::member} == null ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : null;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
     self::B* v1 = super.{self::Base::member} = self::f<self::B*>();
-    self::B* v2 = let final self::B* #t1 = super.{self::Base::member} in #t1.{self::A::==}(null) ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : #t1;
-    self::A* v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-    self::B* v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>());
-    self::C* v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>());
-    self::B* v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1);
-    self::B* v7 = let final self::B* #t2 = super.{self::Base::member} in let final self::B* #t3 = super.{self::Base::member} = #t2.{self::B::-}(1) in #t2;
+    self::B* v2 = let final self::B* #t1 = super.{self::Base::member} in #t1 == null ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : #t1;
+    self::A* v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::B* #t2 = super.{self::Base::member} in let final self::B* #t3 = super.{self::Base::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
   }
 }
 static method f<T extends core::Object* = dynamic>() → self::f::T*
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.weak.expect
index 38215e0..4dec3f9 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.weak.expect
@@ -27,12 +27,12 @@
   method test() → void {
     core::int* v1 = super.{self::Base::intProp} = self::getInt();
     core::num* v2 = super.{self::Base::intProp} = self::getNum() as{TypeError} core::int*;
-    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1.{core::num::==}(null) ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
-    core::num* v5 = let final core::int* #t2 = super.{self::Base::intProp} in #t2.{core::num::==}(null) ?{core::num*} super.{self::Base::intProp} = self::getNum() as{TypeError} core::int* : #t2;
-    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt());
-    core::num* v8 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getNum()) as{TypeError} core::int*;
-    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1);
-    core::int* v11 = let final core::int* #t3 = super.{self::Base::intProp} in let final core::int* #t4 = super.{self::Base::intProp} = #t3.{core::num::+}(1) in #t3;
+    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1 == null ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
+    core::num* v5 = let final core::int* #t2 = super.{self::Base::intProp} in #t2 == null ?{core::num*} super.{self::Base::intProp} = self::getNum() as{TypeError} core::int* : #t2;
+    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::num* v8 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final core::int* #t3 = super.{self::Base::intProp} in let final core::int* #t4 = super.{self::Base::intProp} = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3;
   }
 }
 class Test2 extends self::Base {
@@ -43,14 +43,14 @@
     core::int* v1 = super.{self::Base::numProp} = self::getInt();
     core::num* v2 = super.{self::Base::numProp} = self::getNum();
     core::double* v3 = super.{self::Base::numProp} = self::getDouble();
-    core::num* v4 = let final core::num* #t5 = super.{self::Base::numProp} in #t5.{core::num::==}(null) ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t5;
-    core::num* v5 = let final core::num* #t6 = super.{self::Base::numProp} in #t6.{core::num::==}(null) ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t6;
-    core::num* v6 = let final core::num* #t7 = super.{self::Base::numProp} in #t7.{core::num::==}(null) ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t7;
-    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt());
-    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum());
-    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble());
-    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1);
-    core::num* v11 = let final core::num* #t8 = super.{self::Base::numProp} in let final core::num* #t9 = super.{self::Base::numProp} = #t8.{core::num::+}(1) in #t8;
+    core::num* v4 = let final core::num* #t5 = super.{self::Base::numProp} in #t5 == null ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t5;
+    core::num* v5 = let final core::num* #t6 = super.{self::Base::numProp} in #t6 == null ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t6;
+    core::num* v6 = let final core::num* #t7 = super.{self::Base::numProp} in #t7 == null ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t7;
+    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final core::num* #t8 = super.{self::Base::numProp} in let final core::num* #t9 = super.{self::Base::numProp} = #t8.{core::num::+}(1){(core::num*) →* core::num*} in #t8;
   }
 }
 class Test3 extends self::Base {
@@ -60,13 +60,13 @@
   method test3() → void {
     core::num* v2 = super.{self::Base::doubleProp} = self::getNum() as{TypeError} core::double*;
     core::double* v3 = super.{self::Base::doubleProp} = self::getDouble();
-    core::num* v5 = let final core::double* #t10 = super.{self::Base::doubleProp} in #t10.{core::num::==}(null) ?{core::num*} super.{self::Base::doubleProp} = self::getNum() as{TypeError} core::double* : #t10;
-    core::double* v6 = let final core::double* #t11 = super.{self::Base::doubleProp} in #t11.{core::num::==}(null) ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t11;
-    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt());
-    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum());
-    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble());
-    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1);
-    core::double* v11 = let final core::double* #t12 = super.{self::Base::doubleProp} in let final core::double* #t13 = super.{self::Base::doubleProp} = #t12.{core::double::+}(1) in #t12;
+    core::num* v5 = let final core::double* #t10 = super.{self::Base::doubleProp} in #t10 == null ?{core::num*} super.{self::Base::doubleProp} = self::getNum() as{TypeError} core::double* : #t10;
+    core::double* v6 = let final core::double* #t11 = super.{self::Base::doubleProp} in #t11 == null ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t11;
+    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final core::double* #t12 = super.{self::Base::doubleProp} in let final core::double* #t13 = super.{self::Base::doubleProp} = #t12.{core::double::+}(1){(core::num*) →* core::double*} in #t12;
   }
 }
 static method getInt() → core::int*
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.weak.transformed.expect
index 38215e0..4dec3f9 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.weak.transformed.expect
@@ -27,12 +27,12 @@
   method test() → void {
     core::int* v1 = super.{self::Base::intProp} = self::getInt();
     core::num* v2 = super.{self::Base::intProp} = self::getNum() as{TypeError} core::int*;
-    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1.{core::num::==}(null) ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
-    core::num* v5 = let final core::int* #t2 = super.{self::Base::intProp} in #t2.{core::num::==}(null) ?{core::num*} super.{self::Base::intProp} = self::getNum() as{TypeError} core::int* : #t2;
-    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt());
-    core::num* v8 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getNum()) as{TypeError} core::int*;
-    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1);
-    core::int* v11 = let final core::int* #t3 = super.{self::Base::intProp} in let final core::int* #t4 = super.{self::Base::intProp} = #t3.{core::num::+}(1) in #t3;
+    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1 == null ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
+    core::num* v5 = let final core::int* #t2 = super.{self::Base::intProp} in #t2 == null ?{core::num*} super.{self::Base::intProp} = self::getNum() as{TypeError} core::int* : #t2;
+    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::num* v8 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final core::int* #t3 = super.{self::Base::intProp} in let final core::int* #t4 = super.{self::Base::intProp} = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3;
   }
 }
 class Test2 extends self::Base {
@@ -43,14 +43,14 @@
     core::int* v1 = super.{self::Base::numProp} = self::getInt();
     core::num* v2 = super.{self::Base::numProp} = self::getNum();
     core::double* v3 = super.{self::Base::numProp} = self::getDouble();
-    core::num* v4 = let final core::num* #t5 = super.{self::Base::numProp} in #t5.{core::num::==}(null) ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t5;
-    core::num* v5 = let final core::num* #t6 = super.{self::Base::numProp} in #t6.{core::num::==}(null) ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t6;
-    core::num* v6 = let final core::num* #t7 = super.{self::Base::numProp} in #t7.{core::num::==}(null) ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t7;
-    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt());
-    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum());
-    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble());
-    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1);
-    core::num* v11 = let final core::num* #t8 = super.{self::Base::numProp} in let final core::num* #t9 = super.{self::Base::numProp} = #t8.{core::num::+}(1) in #t8;
+    core::num* v4 = let final core::num* #t5 = super.{self::Base::numProp} in #t5 == null ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t5;
+    core::num* v5 = let final core::num* #t6 = super.{self::Base::numProp} in #t6 == null ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t6;
+    core::num* v6 = let final core::num* #t7 = super.{self::Base::numProp} in #t7 == null ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t7;
+    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final core::num* #t8 = super.{self::Base::numProp} in let final core::num* #t9 = super.{self::Base::numProp} = #t8.{core::num::+}(1){(core::num*) →* core::num*} in #t8;
   }
 }
 class Test3 extends self::Base {
@@ -60,13 +60,13 @@
   method test3() → void {
     core::num* v2 = super.{self::Base::doubleProp} = self::getNum() as{TypeError} core::double*;
     core::double* v3 = super.{self::Base::doubleProp} = self::getDouble();
-    core::num* v5 = let final core::double* #t10 = super.{self::Base::doubleProp} in #t10.{core::num::==}(null) ?{core::num*} super.{self::Base::doubleProp} = self::getNum() as{TypeError} core::double* : #t10;
-    core::double* v6 = let final core::double* #t11 = super.{self::Base::doubleProp} in #t11.{core::num::==}(null) ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t11;
-    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt());
-    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum());
-    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble());
-    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1);
-    core::double* v11 = let final core::double* #t12 = super.{self::Base::doubleProp} in let final core::double* #t13 = super.{self::Base::doubleProp} = #t12.{core::double::+}(1) in #t12;
+    core::num* v5 = let final core::double* #t10 = super.{self::Base::doubleProp} in #t10 == null ?{core::num*} super.{self::Base::doubleProp} = self::getNum() as{TypeError} core::double* : #t10;
+    core::double* v6 = let final core::double* #t11 = super.{self::Base::doubleProp} in #t11 == null ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t11;
+    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final core::double* #t12 = super.{self::Base::doubleProp} in let final core::double* #t13 = super.{self::Base::doubleProp} = #t12.{core::double::+}(1){(core::num*) →* core::double*} in #t12;
   }
 }
 static method getInt() → core::int*
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.weak.expect
index 36077e1..f994d28 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.weak.expect
@@ -10,12 +10,12 @@
   static method test(self::Test1* t) → void {
     core::int* v1 = t.{self::Test1::prop} = self::getInt();
     core::num* v2 = t.{self::Test1::prop} = self::getNum() as{TypeError} core::int*;
-    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop} in #t2.{core::num::==}(null) ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
-    core::num* v5 = let final self::Test1* #t3 = t in let final core::int* #t4 = #t3.{self::Test1::prop} in #t4.{core::num::==}(null) ?{core::num*} #t3.{self::Test1::prop} = self::getNum() as{TypeError} core::int* : #t4;
-    core::int* v7 = let final self::Test1* #t5 = t in #t5.{self::Test1::prop} = #t5.{self::Test1::prop}.{core::num::+}(self::getInt());
-    core::num* v8 = let final self::Test1* #t6 = t in #t6.{self::Test1::prop} = #t6.{self::Test1::prop}.{core::num::+}(self::getNum()) as{TypeError} core::int*;
-    core::int* v10 = let final self::Test1* #t7 = t in #t7.{self::Test1::prop} = #t7.{self::Test1::prop}.{core::num::+}(1);
-    core::int* v11 = let final self::Test1* #t8 = t in let final core::int* #t9 = #t8.{self::Test1::prop} in let final core::int* #t10 = #t8.{self::Test1::prop} = #t9.{core::num::+}(1) in #t9;
+    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop}{core::int*} in #t2 == null ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
+    core::num* v5 = let final self::Test1* #t3 = t in let final core::int* #t4 = #t3.{self::Test1::prop}{core::int*} in #t4 == null ?{core::num*} #t3.{self::Test1::prop} = self::getNum() as{TypeError} core::int* : #t4;
+    core::int* v7 = let final self::Test1* #t5 = t in #t5.{self::Test1::prop} = #t5.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::num* v8 = let final self::Test1* #t6 = t in #t6.{self::Test1::prop} = #t6.{self::Test1::prop}{core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+    core::int* v10 = let final self::Test1* #t7 = t in #t7.{self::Test1::prop} = #t7.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final self::Test1* #t8 = t in let final core::int* #t9 = #t8.{self::Test1::prop}{core::int*} in let final core::int* #t10 = #t8.{self::Test1::prop} = #t9.{core::num::+}(1){(core::num*) →* core::int*} in #t9;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -37,14 +37,14 @@
     core::int* v1 = t.{self::Test2::prop} = self::getInt();
     core::num* v2 = t.{self::Test2::prop} = self::getNum();
     core::double* v3 = t.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t11 = t in let final core::num* #t12 = #t11.{self::Test2::prop} in #t12.{core::num::==}(null) ?{core::num*} #t11.{self::Test2::prop} = self::getInt() : #t12;
-    core::num* v5 = let final self::Test2* #t13 = t in let final core::num* #t14 = #t13.{self::Test2::prop} in #t14.{core::num::==}(null) ?{core::num*} #t13.{self::Test2::prop} = self::getNum() : #t14;
-    core::num* v6 = let final self::Test2* #t15 = t in let final core::num* #t16 = #t15.{self::Test2::prop} in #t16.{core::num::==}(null) ?{core::num*} #t15.{self::Test2::prop} = self::getDouble() : #t16;
-    core::num* v7 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}.{core::num::+}(self::getInt());
-    core::num* v8 = let final self::Test2* #t18 = t in #t18.{self::Test2::prop} = #t18.{self::Test2::prop}.{core::num::+}(self::getNum());
-    core::num* v9 = let final self::Test2* #t19 = t in #t19.{self::Test2::prop} = #t19.{self::Test2::prop}.{core::num::+}(self::getDouble());
-    core::num* v10 = let final self::Test2* #t20 = t in #t20.{self::Test2::prop} = #t20.{self::Test2::prop}.{core::num::+}(1);
-    core::num* v11 = let final self::Test2* #t21 = t in let final core::num* #t22 = #t21.{self::Test2::prop} in let final core::num* #t23 = #t21.{self::Test2::prop} = #t22.{core::num::+}(1) in #t22;
+    core::num* v4 = let final self::Test2* #t11 = t in let final core::num* #t12 = #t11.{self::Test2::prop}{core::num*} in #t12 == null ?{core::num*} #t11.{self::Test2::prop} = self::getInt() : #t12;
+    core::num* v5 = let final self::Test2* #t13 = t in let final core::num* #t14 = #t13.{self::Test2::prop}{core::num*} in #t14 == null ?{core::num*} #t13.{self::Test2::prop} = self::getNum() : #t14;
+    core::num* v6 = let final self::Test2* #t15 = t in let final core::num* #t16 = #t15.{self::Test2::prop}{core::num*} in #t16 == null ?{core::num*} #t15.{self::Test2::prop} = self::getDouble() : #t16;
+    core::num* v7 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = let final self::Test2* #t18 = t in #t18.{self::Test2::prop} = #t18.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = let final self::Test2* #t19 = t in #t19.{self::Test2::prop} = #t19.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = let final self::Test2* #t20 = t in #t20.{self::Test2::prop} = #t20.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final self::Test2* #t21 = t in let final core::num* #t22 = #t21.{self::Test2::prop}{core::num*} in let final core::num* #t23 = #t21.{self::Test2::prop} = #t22.{core::num::+}(1){(core::num*) →* core::num*} in #t22;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -65,13 +65,13 @@
   static method test3(self::Test3* t) → void {
     core::num* v2 = t.{self::Test3::prop} = self::getNum() as{TypeError} core::double*;
     core::double* v3 = t.{self::Test3::prop} = self::getDouble();
-    core::num* v5 = let final self::Test3* #t24 = t in let final core::double* #t25 = #t24.{self::Test3::prop} in #t25.{core::num::==}(null) ?{core::num*} #t24.{self::Test3::prop} = self::getNum() as{TypeError} core::double* : #t25;
-    core::double* v6 = let final self::Test3* #t26 = t in let final core::double* #t27 = #t26.{self::Test3::prop} in #t27.{core::num::==}(null) ?{core::double*} #t26.{self::Test3::prop} = self::getDouble() : #t27;
-    core::double* v7 = let final self::Test3* #t28 = t in #t28.{self::Test3::prop} = #t28.{self::Test3::prop}.{core::double::+}(self::getInt());
-    core::double* v8 = let final self::Test3* #t29 = t in #t29.{self::Test3::prop} = #t29.{self::Test3::prop}.{core::double::+}(self::getNum());
-    core::double* v9 = let final self::Test3* #t30 = t in #t30.{self::Test3::prop} = #t30.{self::Test3::prop}.{core::double::+}(self::getDouble());
-    core::double* v10 = let final self::Test3* #t31 = t in #t31.{self::Test3::prop} = #t31.{self::Test3::prop}.{core::double::+}(1);
-    core::double* v11 = let final self::Test3* #t32 = t in let final core::double* #t33 = #t32.{self::Test3::prop} in let final core::double* #t34 = #t32.{self::Test3::prop} = #t33.{core::double::+}(1) in #t33;
+    core::num* v5 = let final self::Test3* #t24 = t in let final core::double* #t25 = #t24.{self::Test3::prop}{core::double*} in #t25 == null ?{core::num*} #t24.{self::Test3::prop} = self::getNum() as{TypeError} core::double* : #t25;
+    core::double* v6 = let final self::Test3* #t26 = t in let final core::double* #t27 = #t26.{self::Test3::prop}{core::double*} in #t27 == null ?{core::double*} #t26.{self::Test3::prop} = self::getDouble() : #t27;
+    core::double* v7 = let final self::Test3* #t28 = t in #t28.{self::Test3::prop} = #t28.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = let final self::Test3* #t29 = t in #t29.{self::Test3::prop} = #t29.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = let final self::Test3* #t30 = t in #t30.{self::Test3::prop} = #t30.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = let final self::Test3* #t31 = t in #t31.{self::Test3::prop} = #t31.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final self::Test3* #t32 = t in let final core::double* #t33 = #t32.{self::Test3::prop}{core::double*} in let final core::double* #t34 = #t32.{self::Test3::prop} = #t33.{core::double::+}(1){(core::num*) →* core::double*} in #t33;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.weak.transformed.expect
index 36077e1..f994d28 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.weak.transformed.expect
@@ -10,12 +10,12 @@
   static method test(self::Test1* t) → void {
     core::int* v1 = t.{self::Test1::prop} = self::getInt();
     core::num* v2 = t.{self::Test1::prop} = self::getNum() as{TypeError} core::int*;
-    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop} in #t2.{core::num::==}(null) ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
-    core::num* v5 = let final self::Test1* #t3 = t in let final core::int* #t4 = #t3.{self::Test1::prop} in #t4.{core::num::==}(null) ?{core::num*} #t3.{self::Test1::prop} = self::getNum() as{TypeError} core::int* : #t4;
-    core::int* v7 = let final self::Test1* #t5 = t in #t5.{self::Test1::prop} = #t5.{self::Test1::prop}.{core::num::+}(self::getInt());
-    core::num* v8 = let final self::Test1* #t6 = t in #t6.{self::Test1::prop} = #t6.{self::Test1::prop}.{core::num::+}(self::getNum()) as{TypeError} core::int*;
-    core::int* v10 = let final self::Test1* #t7 = t in #t7.{self::Test1::prop} = #t7.{self::Test1::prop}.{core::num::+}(1);
-    core::int* v11 = let final self::Test1* #t8 = t in let final core::int* #t9 = #t8.{self::Test1::prop} in let final core::int* #t10 = #t8.{self::Test1::prop} = #t9.{core::num::+}(1) in #t9;
+    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop}{core::int*} in #t2 == null ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
+    core::num* v5 = let final self::Test1* #t3 = t in let final core::int* #t4 = #t3.{self::Test1::prop}{core::int*} in #t4 == null ?{core::num*} #t3.{self::Test1::prop} = self::getNum() as{TypeError} core::int* : #t4;
+    core::int* v7 = let final self::Test1* #t5 = t in #t5.{self::Test1::prop} = #t5.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::num* v8 = let final self::Test1* #t6 = t in #t6.{self::Test1::prop} = #t6.{self::Test1::prop}{core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+    core::int* v10 = let final self::Test1* #t7 = t in #t7.{self::Test1::prop} = #t7.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final self::Test1* #t8 = t in let final core::int* #t9 = #t8.{self::Test1::prop}{core::int*} in let final core::int* #t10 = #t8.{self::Test1::prop} = #t9.{core::num::+}(1){(core::num*) →* core::int*} in #t9;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -37,14 +37,14 @@
     core::int* v1 = t.{self::Test2::prop} = self::getInt();
     core::num* v2 = t.{self::Test2::prop} = self::getNum();
     core::double* v3 = t.{self::Test2::prop} = self::getDouble();
-    core::num* v4 = let final self::Test2* #t11 = t in let final core::num* #t12 = #t11.{self::Test2::prop} in #t12.{core::num::==}(null) ?{core::num*} #t11.{self::Test2::prop} = self::getInt() : #t12;
-    core::num* v5 = let final self::Test2* #t13 = t in let final core::num* #t14 = #t13.{self::Test2::prop} in #t14.{core::num::==}(null) ?{core::num*} #t13.{self::Test2::prop} = self::getNum() : #t14;
-    core::num* v6 = let final self::Test2* #t15 = t in let final core::num* #t16 = #t15.{self::Test2::prop} in #t16.{core::num::==}(null) ?{core::num*} #t15.{self::Test2::prop} = self::getDouble() : #t16;
-    core::num* v7 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}.{core::num::+}(self::getInt());
-    core::num* v8 = let final self::Test2* #t18 = t in #t18.{self::Test2::prop} = #t18.{self::Test2::prop}.{core::num::+}(self::getNum());
-    core::num* v9 = let final self::Test2* #t19 = t in #t19.{self::Test2::prop} = #t19.{self::Test2::prop}.{core::num::+}(self::getDouble());
-    core::num* v10 = let final self::Test2* #t20 = t in #t20.{self::Test2::prop} = #t20.{self::Test2::prop}.{core::num::+}(1);
-    core::num* v11 = let final self::Test2* #t21 = t in let final core::num* #t22 = #t21.{self::Test2::prop} in let final core::num* #t23 = #t21.{self::Test2::prop} = #t22.{core::num::+}(1) in #t22;
+    core::num* v4 = let final self::Test2* #t11 = t in let final core::num* #t12 = #t11.{self::Test2::prop}{core::num*} in #t12 == null ?{core::num*} #t11.{self::Test2::prop} = self::getInt() : #t12;
+    core::num* v5 = let final self::Test2* #t13 = t in let final core::num* #t14 = #t13.{self::Test2::prop}{core::num*} in #t14 == null ?{core::num*} #t13.{self::Test2::prop} = self::getNum() : #t14;
+    core::num* v6 = let final self::Test2* #t15 = t in let final core::num* #t16 = #t15.{self::Test2::prop}{core::num*} in #t16 == null ?{core::num*} #t15.{self::Test2::prop} = self::getDouble() : #t16;
+    core::num* v7 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = let final self::Test2* #t18 = t in #t18.{self::Test2::prop} = #t18.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = let final self::Test2* #t19 = t in #t19.{self::Test2::prop} = #t19.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = let final self::Test2* #t20 = t in #t20.{self::Test2::prop} = #t20.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final self::Test2* #t21 = t in let final core::num* #t22 = #t21.{self::Test2::prop}{core::num*} in let final core::num* #t23 = #t21.{self::Test2::prop} = #t22.{core::num::+}(1){(core::num*) →* core::num*} in #t22;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -65,13 +65,13 @@
   static method test3(self::Test3* t) → void {
     core::num* v2 = t.{self::Test3::prop} = self::getNum() as{TypeError} core::double*;
     core::double* v3 = t.{self::Test3::prop} = self::getDouble();
-    core::num* v5 = let final self::Test3* #t24 = t in let final core::double* #t25 = #t24.{self::Test3::prop} in #t25.{core::num::==}(null) ?{core::num*} #t24.{self::Test3::prop} = self::getNum() as{TypeError} core::double* : #t25;
-    core::double* v6 = let final self::Test3* #t26 = t in let final core::double* #t27 = #t26.{self::Test3::prop} in #t27.{core::num::==}(null) ?{core::double*} #t26.{self::Test3::prop} = self::getDouble() : #t27;
-    core::double* v7 = let final self::Test3* #t28 = t in #t28.{self::Test3::prop} = #t28.{self::Test3::prop}.{core::double::+}(self::getInt());
-    core::double* v8 = let final self::Test3* #t29 = t in #t29.{self::Test3::prop} = #t29.{self::Test3::prop}.{core::double::+}(self::getNum());
-    core::double* v9 = let final self::Test3* #t30 = t in #t30.{self::Test3::prop} = #t30.{self::Test3::prop}.{core::double::+}(self::getDouble());
-    core::double* v10 = let final self::Test3* #t31 = t in #t31.{self::Test3::prop} = #t31.{self::Test3::prop}.{core::double::+}(1);
-    core::double* v11 = let final self::Test3* #t32 = t in let final core::double* #t33 = #t32.{self::Test3::prop} in let final core::double* #t34 = #t32.{self::Test3::prop} = #t33.{core::double::+}(1) in #t33;
+    core::num* v5 = let final self::Test3* #t24 = t in let final core::double* #t25 = #t24.{self::Test3::prop}{core::double*} in #t25 == null ?{core::num*} #t24.{self::Test3::prop} = self::getNum() as{TypeError} core::double* : #t25;
+    core::double* v6 = let final self::Test3* #t26 = t in let final core::double* #t27 = #t26.{self::Test3::prop}{core::double*} in #t27 == null ?{core::double*} #t26.{self::Test3::prop} = self::getDouble() : #t27;
+    core::double* v7 = let final self::Test3* #t28 = t in #t28.{self::Test3::prop} = #t28.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = let final self::Test3* #t29 = t in #t29.{self::Test3::prop} = #t29.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = let final self::Test3* #t30 = t in #t30.{self::Test3::prop} = #t30.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = let final self::Test3* #t31 = t in #t31.{self::Test3::prop} = #t31.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final self::Test3* #t32 = t in let final core::double* #t33 = #t32.{self::Test3::prop}{core::double*} in let final core::double* #t34 = #t32.{self::Test3::prop} = #t33.{core::double::+}(1){(core::num*) →* core::double*} in #t33;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.weak.expect
index cd7e710..090413f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.weak.expect
@@ -41,34 +41,34 @@
   return null;
 static method test_topLevelVariable() → void {
   self::topLevelVariable = self::f<self::B*>();
-  self::topLevelVariable.{self::A::==}(null) ?{self::B*} self::topLevelVariable = self::f<self::B*>() : null;
-  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>());
-  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>());
-  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1);
-  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1);
+  self::topLevelVariable == null ?{self::B*} self::topLevelVariable = self::f<self::B*>() : null;
+  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
   self::B* v1 = self::topLevelVariable = self::f<self::B*>();
-  self::B* v2 = let final self::B* #t1 = self::topLevelVariable in #t1.{self::A::==}(null) ?{self::B*} self::topLevelVariable = self::f<self::B*>() : #t1;
-  self::A* v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B* v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>());
-  self::C* v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>());
-  self::B* v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1);
-  self::B* v7 = let final self::B* #t2 = self::topLevelVariable in let final self::B* #t3 = self::topLevelVariable = #t2.{self::B::-}(1) in #t2;
+  self::B* v2 = let final self::B* #t1 = self::topLevelVariable in #t1 == null ?{self::B*} self::topLevelVariable = self::f<self::B*>() : #t1;
+  self::A* v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t2 = self::topLevelVariable in let final self::B* #t3 = self::topLevelVariable = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
 }
 static method test_staticVariable() → void {
   self::B::staticVariable = self::f<self::B*>();
-  self::B::staticVariable.{self::A::==}(null) ?{self::B*} self::B::staticVariable = self::f<self::B*>() : null;
-  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>());
-  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>());
-  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1);
-  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1);
+  self::B::staticVariable == null ?{self::B*} self::B::staticVariable = self::f<self::B*>() : null;
+  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
   self::B* v1 = self::B::staticVariable = self::f<self::B*>();
-  self::B* v2 = let final self::B* #t4 = self::B::staticVariable in #t4.{self::A::==}(null) ?{self::B*} self::B::staticVariable = self::f<self::B*>() : #t4;
-  self::A* v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B* v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>());
-  self::C* v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>());
-  self::B* v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1);
-  self::B* v7 = let final self::B* #t5 = self::B::staticVariable in let final self::B* #t6 = self::B::staticVariable = #t5.{self::B::-}(1) in #t5;
+  self::B* v2 = let final self::B* #t4 = self::B::staticVariable in #t4 == null ?{self::B*} self::B::staticVariable = self::f<self::B*>() : #t4;
+  self::A* v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t5 = self::B::staticVariable in let final self::B* #t6 = self::B::staticVariable = #t5.{self::B::-}(1){(core::int*) →* self::B*} in #t5;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.weak.transformed.expect
index cd7e710..090413f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.weak.transformed.expect
@@ -41,34 +41,34 @@
   return null;
 static method test_topLevelVariable() → void {
   self::topLevelVariable = self::f<self::B*>();
-  self::topLevelVariable.{self::A::==}(null) ?{self::B*} self::topLevelVariable = self::f<self::B*>() : null;
-  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>());
-  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>());
-  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1);
-  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1);
+  self::topLevelVariable == null ?{self::B*} self::topLevelVariable = self::f<self::B*>() : null;
+  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
   self::B* v1 = self::topLevelVariable = self::f<self::B*>();
-  self::B* v2 = let final self::B* #t1 = self::topLevelVariable in #t1.{self::A::==}(null) ?{self::B*} self::topLevelVariable = self::f<self::B*>() : #t1;
-  self::A* v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B* v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>());
-  self::C* v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>());
-  self::B* v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1);
-  self::B* v7 = let final self::B* #t2 = self::topLevelVariable in let final self::B* #t3 = self::topLevelVariable = #t2.{self::B::-}(1) in #t2;
+  self::B* v2 = let final self::B* #t1 = self::topLevelVariable in #t1 == null ?{self::B*} self::topLevelVariable = self::f<self::B*>() : #t1;
+  self::A* v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t2 = self::topLevelVariable in let final self::B* #t3 = self::topLevelVariable = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
 }
 static method test_staticVariable() → void {
   self::B::staticVariable = self::f<self::B*>();
-  self::B::staticVariable.{self::A::==}(null) ?{self::B*} self::B::staticVariable = self::f<self::B*>() : null;
-  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>());
-  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>());
-  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1);
-  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1);
+  self::B::staticVariable == null ?{self::B*} self::B::staticVariable = self::f<self::B*>() : null;
+  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
   self::B* v1 = self::B::staticVariable = self::f<self::B*>();
-  self::B* v2 = let final self::B* #t4 = self::B::staticVariable in #t4.{self::A::==}(null) ?{self::B*} self::B::staticVariable = self::f<self::B*>() : #t4;
-  self::A* v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()) as{TypeError} self::B*;
-  self::B* v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>());
-  self::C* v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>());
-  self::B* v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1);
-  self::B* v7 = let final self::B* #t5 = self::B::staticVariable in let final self::B* #t6 = self::B::staticVariable = #t5.{self::B::-}(1) in #t5;
+  self::B* v2 = let final self::B* #t4 = self::B::staticVariable in #t4 == null ?{self::B*} self::B::staticVariable = self::f<self::B*>() : #t4;
+  self::A* v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t5 = self::B::staticVariable in let final self::B* #t6 = self::B::staticVariable = #t5.{self::B::-}(1){(core::int*) →* self::B*} in #t5;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart.weak.expect
index b9a69ea..ae43fd0 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart.weak.expect
@@ -14,35 +14,35 @@
 static method test1() → void {
   core::int* v1 = self::topLevelInt = self::getInt();
   core::num* v2 = self::topLevelInt = self::getNum() as{TypeError} core::int*;
-  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1.{core::num::==}(null) ?{core::int*} self::topLevelInt = self::getInt() : #t1;
-  core::num* v5 = let final core::int* #t2 = self::topLevelInt in #t2.{core::num::==}(null) ?{core::num*} self::topLevelInt = self::getNum() as{TypeError} core::int* : #t2;
-  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt());
-  core::num* v8 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getNum()) as{TypeError} core::int*;
-  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1);
-  core::int* v11 = let final core::int* #t3 = self::topLevelInt in let final core::int* #t4 = self::topLevelInt = #t3.{core::num::+}(1) in #t3;
+  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1 == null ?{core::int*} self::topLevelInt = self::getInt() : #t1;
+  core::num* v5 = let final core::int* #t2 = self::topLevelInt in #t2 == null ?{core::num*} self::topLevelInt = self::getNum() as{TypeError} core::int* : #t2;
+  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+  core::num* v8 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num*) →* core::int*};
+  core::int* v11 = let final core::int* #t3 = self::topLevelInt in let final core::int* #t4 = self::topLevelInt = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3;
 }
 static method test2() → void {
   core::int* v1 = self::topLevelNum = self::getInt();
   core::num* v2 = self::topLevelNum = self::getNum();
   core::double* v3 = self::topLevelNum = self::getDouble();
-  core::num* v4 = let final core::num* #t5 = self::topLevelNum in #t5.{core::num::==}(null) ?{core::num*} self::topLevelNum = self::getInt() : #t5;
-  core::num* v5 = let final core::num* #t6 = self::topLevelNum in #t6.{core::num::==}(null) ?{core::num*} self::topLevelNum = self::getNum() : #t6;
-  core::num* v6 = let final core::num* #t7 = self::topLevelNum in #t7.{core::num::==}(null) ?{core::num*} self::topLevelNum = self::getDouble() : #t7;
-  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt());
-  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum());
-  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble());
-  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1);
-  core::num* v11 = let final core::num* #t8 = self::topLevelNum in let final core::num* #t9 = self::topLevelNum = #t8.{core::num::+}(1) in #t8;
+  core::num* v4 = let final core::num* #t5 = self::topLevelNum in #t5 == null ?{core::num*} self::topLevelNum = self::getInt() : #t5;
+  core::num* v5 = let final core::num* #t6 = self::topLevelNum in #t6 == null ?{core::num*} self::topLevelNum = self::getNum() : #t6;
+  core::num* v6 = let final core::num* #t7 = self::topLevelNum in #t7 == null ?{core::num*} self::topLevelNum = self::getDouble() : #t7;
+  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num*) →* core::num*};
+  core::num* v11 = let final core::num* #t8 = self::topLevelNum in let final core::num* #t9 = self::topLevelNum = #t8.{core::num::+}(1){(core::num*) →* core::num*} in #t8;
 }
 static method test3() → void {
   core::num* v2 = self::topLevelDouble = self::getNum() as{TypeError} core::double*;
   core::double* v3 = self::topLevelDouble = self::getDouble();
-  core::num* v5 = let final core::double* #t10 = self::topLevelDouble in #t10.{core::num::==}(null) ?{core::num*} self::topLevelDouble = self::getNum() as{TypeError} core::double* : #t10;
-  core::double* v6 = let final core::double* #t11 = self::topLevelDouble in #t11.{core::num::==}(null) ?{core::double*} self::topLevelDouble = self::getDouble() : #t11;
-  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt());
-  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum());
-  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble());
-  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1);
-  core::double* v11 = let final core::double* #t12 = self::topLevelDouble in let final core::double* #t13 = self::topLevelDouble = #t12.{core::double::+}(1) in #t12;
+  core::num* v5 = let final core::double* #t10 = self::topLevelDouble in #t10 == null ?{core::num*} self::topLevelDouble = self::getNum() as{TypeError} core::double* : #t10;
+  core::double* v6 = let final core::double* #t11 = self::topLevelDouble in #t11 == null ?{core::double*} self::topLevelDouble = self::getDouble() : #t11;
+  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num*) →* core::double*};
+  core::double* v11 = let final core::double* #t12 = self::topLevelDouble in let final core::double* #t13 = self::topLevelDouble = #t12.{core::double::+}(1){(core::num*) →* core::double*} in #t12;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart.weak.transformed.expect
index b9a69ea..ae43fd0 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart.weak.transformed.expect
@@ -14,35 +14,35 @@
 static method test1() → void {
   core::int* v1 = self::topLevelInt = self::getInt();
   core::num* v2 = self::topLevelInt = self::getNum() as{TypeError} core::int*;
-  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1.{core::num::==}(null) ?{core::int*} self::topLevelInt = self::getInt() : #t1;
-  core::num* v5 = let final core::int* #t2 = self::topLevelInt in #t2.{core::num::==}(null) ?{core::num*} self::topLevelInt = self::getNum() as{TypeError} core::int* : #t2;
-  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt());
-  core::num* v8 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getNum()) as{TypeError} core::int*;
-  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1);
-  core::int* v11 = let final core::int* #t3 = self::topLevelInt in let final core::int* #t4 = self::topLevelInt = #t3.{core::num::+}(1) in #t3;
+  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1 == null ?{core::int*} self::topLevelInt = self::getInt() : #t1;
+  core::num* v5 = let final core::int* #t2 = self::topLevelInt in #t2 == null ?{core::num*} self::topLevelInt = self::getNum() as{TypeError} core::int* : #t2;
+  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+  core::num* v8 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num*) →* core::int*};
+  core::int* v11 = let final core::int* #t3 = self::topLevelInt in let final core::int* #t4 = self::topLevelInt = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3;
 }
 static method test2() → void {
   core::int* v1 = self::topLevelNum = self::getInt();
   core::num* v2 = self::topLevelNum = self::getNum();
   core::double* v3 = self::topLevelNum = self::getDouble();
-  core::num* v4 = let final core::num* #t5 = self::topLevelNum in #t5.{core::num::==}(null) ?{core::num*} self::topLevelNum = self::getInt() : #t5;
-  core::num* v5 = let final core::num* #t6 = self::topLevelNum in #t6.{core::num::==}(null) ?{core::num*} self::topLevelNum = self::getNum() : #t6;
-  core::num* v6 = let final core::num* #t7 = self::topLevelNum in #t7.{core::num::==}(null) ?{core::num*} self::topLevelNum = self::getDouble() : #t7;
-  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt());
-  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum());
-  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble());
-  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1);
-  core::num* v11 = let final core::num* #t8 = self::topLevelNum in let final core::num* #t9 = self::topLevelNum = #t8.{core::num::+}(1) in #t8;
+  core::num* v4 = let final core::num* #t5 = self::topLevelNum in #t5 == null ?{core::num*} self::topLevelNum = self::getInt() : #t5;
+  core::num* v5 = let final core::num* #t6 = self::topLevelNum in #t6 == null ?{core::num*} self::topLevelNum = self::getNum() : #t6;
+  core::num* v6 = let final core::num* #t7 = self::topLevelNum in #t7 == null ?{core::num*} self::topLevelNum = self::getDouble() : #t7;
+  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num*) →* core::num*};
+  core::num* v11 = let final core::num* #t8 = self::topLevelNum in let final core::num* #t9 = self::topLevelNum = #t8.{core::num::+}(1){(core::num*) →* core::num*} in #t8;
 }
 static method test3() → void {
   core::num* v2 = self::topLevelDouble = self::getNum() as{TypeError} core::double*;
   core::double* v3 = self::topLevelDouble = self::getDouble();
-  core::num* v5 = let final core::double* #t10 = self::topLevelDouble in #t10.{core::num::==}(null) ?{core::num*} self::topLevelDouble = self::getNum() as{TypeError} core::double* : #t10;
-  core::double* v6 = let final core::double* #t11 = self::topLevelDouble in #t11.{core::num::==}(null) ?{core::double*} self::topLevelDouble = self::getDouble() : #t11;
-  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt());
-  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum());
-  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble());
-  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1);
-  core::double* v11 = let final core::double* #t12 = self::topLevelDouble in let final core::double* #t13 = self::topLevelDouble = #t12.{core::double::+}(1) in #t12;
+  core::num* v5 = let final core::double* #t10 = self::topLevelDouble in #t10 == null ?{core::num*} self::topLevelDouble = self::getNum() as{TypeError} core::double* : #t10;
+  core::double* v6 = let final core::double* #t11 = self::topLevelDouble in #t11 == null ?{core::double*} self::topLevelDouble = self::getDouble() : #t11;
+  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num*) →* core::double*};
+  core::double* v11 = let final core::double* #t12 = self::topLevelDouble in let final core::double* #t13 = self::topLevelDouble = #t12.{core::double::+}(1){(core::num*) →* core::double*} in #t12;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect
index 7527873..7934529 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.expect
@@ -57,6 +57,6 @@
     ;
 }
 static field self::A* a = new self::A::•();
-static field self::C* x = self::a.{self::A::b}.{self::B::c};
-static field self::C* y = let final self::B* #t1 = self::a.{self::A::b} in let final self::C* #t2 = #t1.{self::B::c} in #t2.{self::C::==}(null) ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
+static field self::C* x = self::a.{self::A::b}{self::B*}.{self::B::c}{self::C*};
+static field self::C* y = let final self::B* #t1 = self::a.{self::A::b}{self::B*} in let final self::C* #t2 = #t1.{self::B::c}{self::C*} in #t2 == null ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect
index 7527873..7934529 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.transformed.expect
@@ -57,6 +57,6 @@
     ;
 }
 static field self::A* a = new self::A::•();
-static field self::C* x = self::a.{self::A::b}.{self::B::c};
-static field self::C* y = let final self::B* #t1 = self::a.{self::A::b} in let final self::C* #t2 = #t1.{self::B::c} in #t2.{self::C::==}(null) ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
+static field self::C* x = self::a.{self::A::b}{self::B*}.{self::B::c}{self::C*};
+static field self::C* y = let final self::B* #t1 = self::a.{self::A::b}{self::B*} in let final self::C* #t2 = #t1.{self::B::c}{self::C*} in #t2 == null ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect
index 05c93c1..07d3dfd 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.expect
@@ -55,6 +55,6 @@
     ;
 }
 static field self::A* a = new self::A::•();
-static field self::C* x = self::a.{self::A::b}.{self::B::c};
-static field self::C* y = let final self::B* #t1 = self::a.{self::A::b} in let final self::C* #t2 = #t1.{self::B::c} in #t2.{self::C::==}(null) ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
+static field self::C* x = self::a.{self::A::b}{self::B*}.{self::B::c}{self::C*};
+static field self::C* y = let final self::B* #t1 = self::a.{self::A::b}{self::B*} in let final self::C* #t2 = #t1.{self::B::c}{self::C*} in #t2 == null ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect
index 05c93c1..07d3dfd 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.transformed.expect
@@ -55,6 +55,6 @@
     ;
 }
 static field self::A* a = new self::A::•();
-static field self::C* x = self::a.{self::A::b}.{self::B::c};
-static field self::C* y = let final self::B* #t1 = self::a.{self::A::b} in let final self::C* #t2 = #t1.{self::B::c} in #t2.{self::C::==}(null) ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
+static field self::C* x = self::a.{self::A::b}{self::B*}.{self::B::c}{self::C*};
+static field self::C* y = let final self::B* #t1 = self::a.{self::A::b}{self::B*} in let final self::C* #t2 = #t1.{self::B::c}{self::C*} in #t2 == null ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.expect
index a842dc0..21df0fc 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.expect
@@ -28,6 +28,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::A* a = new self::A::•();
-static field () →* invalid-type x = () → invalid-type => self::a.{self::A::b};
-static field () →* () →* () →* invalid-type y = () → () →* () →* invalid-type => self::a.{self::A::c};
+static field () →* invalid-type x = () → invalid-type => self::a.{self::A::b}{invalid-type};
+static field () →* () →* () →* invalid-type y = () → () →* () →* invalid-type => self::a.{self::A::c}{() →* () →* invalid-type};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.transformed.expect
index a842dc0..21df0fc 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.transformed.expect
@@ -28,6 +28,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::A* a = new self::A::•();
-static field () →* invalid-type x = () → invalid-type => self::a.{self::A::b};
-static field () →* () →* () →* invalid-type y = () → () →* () →* invalid-type => self::a.{self::A::c};
+static field () →* invalid-type x = () → invalid-type => self::a.{self::A::b}{invalid-type};
+static field () →* () →* () →* invalid-type y = () → () →* () →* invalid-type => self::a.{self::A::c}{() →* () →* invalid-type};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.expect
index 08191b9..18cf625 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.expect
@@ -24,7 +24,7 @@
     ;
   method f() → void {}
 }
-static field void x = new self::C::•().{self::C::f}();
+static field void x = new self::C::•().{self::C::f}(){() →* void};
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.transformed.expect
index 08191b9..18cf625 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
     ;
   method f() → void {}
 }
-static field void x = new self::C::•().{self::C::f}();
+static field void x = new self::C::•().{self::C::f}(){() →* void};
 static method main() → dynamic {
   self::x;
 }
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.expect
index fa1ffe6..35f8118 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.expect
@@ -78,10 +78,10 @@
   method f(core::Object* o) → void {}
 }
 static method g1(self::C* c) → void {
-  c.{self::C::f}("hi");
+  c.{self::C::f}("hi"){(core::Object*) →* void};
 }
 static method g2(self::E* e) → void {
-  e.{self::I2::f}("hi");
+  e.{self::I2::f}("hi"){(core::Object*) →* void};
 }
 static method main() → dynamic {
   self::g1(new self::D::•());
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.transformed.expect
index fa1ffe6..35f8118 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.transformed.expect
@@ -78,10 +78,10 @@
   method f(core::Object* o) → void {}
 }
 static method g1(self::C* c) → void {
-  c.{self::C::f}("hi");
+  c.{self::C::f}("hi"){(core::Object*) →* void};
 }
 static method g2(self::E* e) → void {
-  e.{self::I2::f}("hi");
+  e.{self::I2::f}("hi"){(core::Object*) →* void};
 }
 static method main() → dynamic {
   self::g1(new self::D::•());
diff --git a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.expect b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.expect
index 0683b1f..fa63c03 100644
--- a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.expect
@@ -21,5 +21,5 @@
 }
 static method main() → dynamic {
   self::Class* c;
-  () →* core::num* f = let final self::Class* #t1 = c in #t1.{self::Class::==}(null) ?{() →* core::num*} null : #t1.{self::Class::method}<core::num*>;
+  () →* core::num* f = let final self::Class* #t1 = c in #t1 == null ?{() →* core::num*} null : #t1.{self::Class::method}{<T extends core::Object* = dynamic>() →* T*}<core::num*>;
 }
diff --git a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.transformed.expect
index 0683b1f..fa63c03 100644
--- a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.transformed.expect
@@ -21,5 +21,5 @@
 }
 static method main() → dynamic {
   self::Class* c;
-  () →* core::num* f = let final self::Class* #t1 = c in #t1.{self::Class::==}(null) ?{() →* core::num*} null : #t1.{self::Class::method}<core::num*>;
+  () →* core::num* f = let final self::Class* #t1 = c in #t1 == null ?{() →* core::num*} null : #t1.{self::Class::method}{<T extends core::Object* = dynamic>() →* T*}<core::num*>;
 }
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.expect
index b551bed..facdace 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.expect
@@ -123,15 +123,15 @@
 static method f<T extends core::Object* = dynamic>() → self::f::T*
   return null;
 static method test1(self::G* g) → void {
-  let final self::G* #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}.{self::A::*}(self::f<self::D*>());
-  self::C* x = let final self::G* #t2 = g in #t2.{self::G::target} = #t2.{self::G::target}.{self::A::*}(self::f<self::D*>());
+  let final self::G* #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}{self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+  self::C* x = let final self::G* #t2 = g in #t2.{self::G::target} = #t2.{self::G::target}{self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
 }
 static method test2(self::G* g) → void {
-  let final self::G* #t3 = g in #t3.{self::G::target} = #t3.{self::G::target}.{self::A::+}(1);
-  self::C* x = let final self::G* #t4 = g in #t4.{self::G::target} = #t4.{self::G::target}.{self::A::+}(1);
+  let final self::G* #t3 = g in #t3.{self::G::target} = #t3.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
+  self::C* x = let final self::G* #t4 = g in #t4.{self::G::target} = #t4.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
 }
 static method test3(self::G* g) → void {
-  let final self::G* #t5 = g in #t5.{self::G::target} = #t5.{self::G::target}.{self::A::+}(1);
-  self::A* x = let final self::G* #t6 = g in let final self::A* #t7 = #t6.{self::G::target} in let final self::C* #t8 = #t6.{self::G::target} = #t7.{self::A::+}(1) in #t7;
+  let final self::G* #t5 = g in #t5.{self::G::target} = #t5.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
+  self::A* x = let final self::G* #t6 = g in let final self::A* #t7 = #t6.{self::G::target}{self::A*} in let final self::C* #t8 = #t6.{self::G::target} = #t7.{self::A::+}(1){(core::int*) →* self::C*} in #t7;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.transformed.expect
index b551bed..facdace 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.transformed.expect
@@ -123,15 +123,15 @@
 static method f<T extends core::Object* = dynamic>() → self::f::T*
   return null;
 static method test1(self::G* g) → void {
-  let final self::G* #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}.{self::A::*}(self::f<self::D*>());
-  self::C* x = let final self::G* #t2 = g in #t2.{self::G::target} = #t2.{self::G::target}.{self::A::*}(self::f<self::D*>());
+  let final self::G* #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}{self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+  self::C* x = let final self::G* #t2 = g in #t2.{self::G::target} = #t2.{self::G::target}{self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
 }
 static method test2(self::G* g) → void {
-  let final self::G* #t3 = g in #t3.{self::G::target} = #t3.{self::G::target}.{self::A::+}(1);
-  self::C* x = let final self::G* #t4 = g in #t4.{self::G::target} = #t4.{self::G::target}.{self::A::+}(1);
+  let final self::G* #t3 = g in #t3.{self::G::target} = #t3.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
+  self::C* x = let final self::G* #t4 = g in #t4.{self::G::target} = #t4.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
 }
 static method test3(self::G* g) → void {
-  let final self::G* #t5 = g in #t5.{self::G::target} = #t5.{self::G::target}.{self::A::+}(1);
-  self::A* x = let final self::G* #t6 = g in let final self::A* #t7 = #t6.{self::G::target} in let final self::C* #t8 = #t6.{self::G::target} = #t7.{self::A::+}(1) in #t7;
+  let final self::G* #t5 = g in #t5.{self::G::target} = #t5.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
+  self::A* x = let final self::G* #t6 = g in let final self::A* #t7 = #t6.{self::G::target}{self::A*} in let final self::C* #t8 = #t6.{self::G::target} = #t7.{self::A::+}(1){(core::int*) →* self::C*} in #t7;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.expect
index 4151ea0..d52af61 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.expect
@@ -23,10 +23,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c = new self::C::•();
-static field core::int* field_ref = self::c.{self::C::field};
-static field core::int* getter_ref = self::c.{self::C::getter};
-static field () →* core::int* function_ref = self::c.{self::C::function};
-static field core::List<core::int*>* field_ref_list = <core::int*>[self::c.{self::C::field}];
-static field core::List<core::int*>* getter_ref_list = <core::int*>[self::c.{self::C::getter}];
-static field core::List<() →* core::int*>* function_ref_list = <() →* core::int*>[self::c.{self::C::function}];
+static field core::int* field_ref = self::c.{self::C::field}{core::int*};
+static field core::int* getter_ref = self::c.{self::C::getter}{core::int*};
+static field () →* core::int* function_ref = self::c.{self::C::function}{() →* core::int*};
+static field core::List<core::int*>* field_ref_list = <core::int*>[self::c.{self::C::field}{core::int*}];
+static field core::List<core::int*>* getter_ref_list = <core::int*>[self::c.{self::C::getter}{core::int*}];
+static field core::List<() →* core::int*>* function_ref_list = <() →* core::int*>[self::c.{self::C::function}{() →* core::int*}];
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.transformed.expect
index c23ee62..6c6d71c 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.transformed.expect
@@ -23,10 +23,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field self::C* c = new self::C::•();
-static field core::int* field_ref = self::c.{self::C::field};
-static field core::int* getter_ref = self::c.{self::C::getter};
-static field () →* core::int* function_ref = self::c.{self::C::function};
-static field core::List<core::int*>* field_ref_list = core::_GrowableList::_literal1<core::int*>(self::c.{self::C::field});
-static field core::List<core::int*>* getter_ref_list = core::_GrowableList::_literal1<core::int*>(self::c.{self::C::getter});
-static field core::List<() →* core::int*>* function_ref_list = core::_GrowableList::_literal1<() →* core::int*>(self::c.{self::C::function});
+static field core::int* field_ref = self::c.{self::C::field}{core::int*};
+static field core::int* getter_ref = self::c.{self::C::getter}{core::int*};
+static field () →* core::int* function_ref = self::c.{self::C::function}{() →* core::int*};
+static field core::List<core::int*>* field_ref_list = core::_GrowableList::_literal1<core::int*>(self::c.{self::C::field}{core::int*});
+static field core::List<core::int*>* getter_ref_list = core::_GrowableList::_literal1<core::int*>(self::c.{self::C::getter}{core::int*});
+static field core::List<() →* core::int*>* function_ref_list = core::_GrowableList::_literal1<() →* core::int*>(self::c.{self::C::function}{() →* core::int*});
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.expect
index a2976ca..0c920ee 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.expect
@@ -108,15 +108,15 @@
   return null;
 static set target(self::B* value) → void {}
 static method test1() → void {
-  self::target = self::target.{self::A::*}(self::f<self::D*>());
-  self::C* x = self::target = self::target.{self::A::*}(self::f<self::D*>());
+  self::target = self::target.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+  self::C* x = self::target = self::target.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
 }
 static method test2() → void {
-  self::target = self::target.{self::A::+}(1);
-  self::C* x = self::target = self::target.{self::A::+}(1);
+  self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
+  self::C* x = self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
 }
 static method test3() → void {
-  self::target = self::target.{self::A::+}(1);
-  self::A* x = let final self::A* #t1 = self::target in let final self::C* #t2 = self::target = #t1.{self::A::+}(1) in #t1;
+  self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
+  self::A* x = let final self::A* #t1 = self::target in let final self::C* #t2 = self::target = #t1.{self::A::+}(1){(core::int*) →* self::C*} in #t1;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.transformed.expect
index a2976ca..0c920ee 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.transformed.expect
@@ -108,15 +108,15 @@
   return null;
 static set target(self::B* value) → void {}
 static method test1() → void {
-  self::target = self::target.{self::A::*}(self::f<self::D*>());
-  self::C* x = self::target = self::target.{self::A::*}(self::f<self::D*>());
+  self::target = self::target.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+  self::C* x = self::target = self::target.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
 }
 static method test2() → void {
-  self::target = self::target.{self::A::+}(1);
-  self::C* x = self::target = self::target.{self::A::+}(1);
+  self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
+  self::C* x = self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
 }
 static method test3() → void {
-  self::target = self::target.{self::A::+}(1);
-  self::A* x = let final self::A* #t1 = self::target in let final self::C* #t2 = self::target = #t1.{self::A::+}(1) in #t1;
+  self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
+  self::A* x = let final self::A* #t1 = self::target in let final self::C* #t2 = self::target = #t1.{self::A::+}(1){(core::int*) →* self::C*} in #t1;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.expect
index 8be3350..69cac39 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.expect
@@ -98,7 +98,7 @@
   method foo() → self::C*
     return new self::C::•();
 }
-static field self::B* x = self::bar().{self::G::foo}();
+static field self::B* x = self::bar().{self::G::foo}(){() →* self::B*};
 static method bar() → self::G*
   return new self::H::•();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.transformed.expect
index 8be3350..69cac39 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.transformed.expect
@@ -98,7 +98,7 @@
   method foo() → self::C*
     return new self::C::•();
 }
-static field self::B* x = self::bar().{self::G::foo}();
+static field self::B* x = self::bar().{self::G::foo}(){() →* self::B*};
 static method bar() → self::G*
   return new self::H::•();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect
index 129610f..169486b 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = (#C1).call<core::int*>(() → core::int* {
+static field core::List<core::int*>* v = (#C1)<core::int*>(() → core::int* {
   return 1;
-});
+}){(() →* core::int*) →* core::List<core::int*>*};
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g.call()];
+  return <self::f::T*>[g(){() →* self::f::T*}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect
index cf09c4f..633c890 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = (#C1).call<core::int*>(() → core::int* {
+static field core::List<core::int*>* v = (#C1)<core::int*>(() → core::int* {
   return 1;
-});
+}){(() →* core::int*) →* core::List<core::int*>*};
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g.call());
+  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect
index 129610f..169486b 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = (#C1).call<core::int*>(() → core::int* {
+static field core::List<core::int*>* v = (#C1)<core::int*>(() → core::int* {
   return 1;
-});
+}){(() →* core::int*) →* core::List<core::int*>*};
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return <self::f::T*>[g.call()];
+  return <self::f::T*>[g(){() →* self::f::T*}];
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect
index cf09c4f..633c890 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::List<core::int*>* v = (#C1).call<core::int*>(() → core::int* {
+static field core::List<core::int*>* v = (#C1)<core::int*>(() → core::int* {
   return 1;
-});
+}){(() →* core::int*) →* core::List<core::int*>*};
 static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
-  return core::_GrowableList::_literal1<self::f::T*>(g.call());
+  return core::_GrowableList::_literal1<self::f::T*>(g(){() →* self::f::T*});
 static method main() → dynamic {
   self::v;
 }
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.expect
index 42f01d5..7e0013f 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.expect
@@ -5,7 +5,7 @@
 static field void y = self::run<void>(#C1);
 static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T* {
   core::print("running");
-  self::run::T* t = f.call();
+  self::run::T* t = f(){() →* self::run::T*};
   core::print("done running");
   return t;
 }
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.transformed.expect
index 42f01d5..7e0013f 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 static field void y = self::run<void>(#C1);
 static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T* {
   core::print("running");
-  self::run::T* t = f.call();
+  self::run::T* t = f(){() →* self::run::T*};
   core::print("done running");
   return t;
 }
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect b/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
index 7d24707..72b278b 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
@@ -13,36 +13,36 @@
 static method main() → dynamic {
   lowered core::int? #local1;
   function #local1#get() → core::int
-    return let final core::int? #t1 = #local1 in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("local1") : #t1{core::int};
+    return let final core::int? #t1 = #local1 in #t1 == null ?{core::int} throw new _in::LateError::localNI("local1") : #t1{core::int};
   function #local1#set(core::int #t2) → dynamic
     return #local1 = #t2;
-  #local1#set.call(0);
-  self::expect(0, #local1#get.call());
-  #local1#set.call(#local1#get.call().{core::num::+}(2));
-  self::expect(2, #local1#get.call());
+  #local1#set(0){(core::int) → dynamic};
+  self::expect(0, #local1#get(){() → core::int});
+  #local1#set(#local1#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
+  self::expect(2, #local1#get(){() → core::int});
   lowered core::int? #local2;
   function #local2#get() → core::int
-    return let final core::int? #t3 = #local2 in #t3.==(null) ?{core::int} #local2 = 1 : #t3{core::int};
+    return let final core::int? #t3 = #local2 in #t3 == null ?{core::int} #local2 = 1 : #t3{core::int};
   function #local2#set(core::int #t4) → dynamic
     return #local2 = #t4;
-  self::expect(1, #local2#get.call());
-  #local2#set.call(#local2#get.call().{core::num::+}(2));
-  self::expect(3, #local2#get.call());
+  self::expect(1, #local2#get(){() → core::int});
+  #local2#set(#local2#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
+  self::expect(3, #local2#get(){() → core::int});
 }
 static method error() → dynamic {
   lowered final core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t5 = #local in #t5.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t5{core::int};
+    return let final core::int? #t5 = #local in #t5 == null ?{core::int} throw new _in::LateError::localNI("local") : #t5{core::int};
   function #local#set(core::int #t6) → dynamic
-    if(#local.==(null))
+    if(#local == null)
       return #local = #t6;
     else
       throw new _in::LateError::localAI("local");
-  #local#set.call((let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
+  #local#set((let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
   local += 0;
-  ^^^^^" in #local#get.call()).{core::num::+}(0));
+  ^^^^^" in #local#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
index 7d24707..72b278b 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
@@ -13,36 +13,36 @@
 static method main() → dynamic {
   lowered core::int? #local1;
   function #local1#get() → core::int
-    return let final core::int? #t1 = #local1 in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("local1") : #t1{core::int};
+    return let final core::int? #t1 = #local1 in #t1 == null ?{core::int} throw new _in::LateError::localNI("local1") : #t1{core::int};
   function #local1#set(core::int #t2) → dynamic
     return #local1 = #t2;
-  #local1#set.call(0);
-  self::expect(0, #local1#get.call());
-  #local1#set.call(#local1#get.call().{core::num::+}(2));
-  self::expect(2, #local1#get.call());
+  #local1#set(0){(core::int) → dynamic};
+  self::expect(0, #local1#get(){() → core::int});
+  #local1#set(#local1#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
+  self::expect(2, #local1#get(){() → core::int});
   lowered core::int? #local2;
   function #local2#get() → core::int
-    return let final core::int? #t3 = #local2 in #t3.==(null) ?{core::int} #local2 = 1 : #t3{core::int};
+    return let final core::int? #t3 = #local2 in #t3 == null ?{core::int} #local2 = 1 : #t3{core::int};
   function #local2#set(core::int #t4) → dynamic
     return #local2 = #t4;
-  self::expect(1, #local2#get.call());
-  #local2#set.call(#local2#get.call().{core::num::+}(2));
-  self::expect(3, #local2#get.call());
+  self::expect(1, #local2#get(){() → core::int});
+  #local2#set(#local2#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
+  self::expect(3, #local2#get(){() → core::int});
 }
 static method error() → dynamic {
   lowered final core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t5 = #local in #t5.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t5{core::int};
+    return let final core::int? #t5 = #local in #t5 == null ?{core::int} throw new _in::LateError::localNI("local") : #t5{core::int};
   function #local#set(core::int #t6) → dynamic
-    if(#local.==(null))
+    if(#local == null)
       return #local = #t6;
     else
       throw new _in::LateError::localAI("local");
-  #local#set.call((let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
+  #local#set((let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
   local += 0;
-  ^^^^^" in #local#get.call()).{core::num::+}(0));
+  ^^^^^" in #local#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect b/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
index 4433e65..918a8c7 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
@@ -19,10 +19,10 @@
     #local1#isSet = true;
     return #local1 = #t1;
   }
-  #local1#set.call(0);
-  self::expect(0, #local1#get.call());
-  #local1#set.call(#local1#get.call().{core::num::+}(2));
-  self::expect(2, #local1#get.call());
+  #local1#set(0){(core::int) → dynamic};
+  self::expect(0, #local1#get(){() → core::int});
+  #local1#set(#local1#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
+  self::expect(2, #local1#get(){() → core::int});
   lowered core::int? #local2;
   lowered core::bool #local2#isSet = false;
   function #local2#get() → core::int {
@@ -36,9 +36,9 @@
     #local2#isSet = true;
     return #local2 = #t2;
   }
-  self::expect(1, #local2#get.call());
-  #local2#set.call(#local2#get.call().{core::num::+}(2));
-  self::expect(3, #local2#get.call());
+  self::expect(1, #local2#get(){() → core::int});
+  #local2#set(#local2#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
+  self::expect(3, #local2#get(){() → core::int});
 }
 static method error() → dynamic {
   lowered final core::int? #local;
@@ -52,11 +52,11 @@
       #local#isSet = true;
       return #local = #t3;
     }
-  #local#set.call((let final Never #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
+  #local#set((let final Never #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
   local += 0;
-  ^^^^^" in #local#get.call()).{core::num::+}(0));
+  ^^^^^" in #local#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
index 4433e65..918a8c7 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
@@ -19,10 +19,10 @@
     #local1#isSet = true;
     return #local1 = #t1;
   }
-  #local1#set.call(0);
-  self::expect(0, #local1#get.call());
-  #local1#set.call(#local1#get.call().{core::num::+}(2));
-  self::expect(2, #local1#get.call());
+  #local1#set(0){(core::int) → dynamic};
+  self::expect(0, #local1#get(){() → core::int});
+  #local1#set(#local1#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
+  self::expect(2, #local1#get(){() → core::int});
   lowered core::int? #local2;
   lowered core::bool #local2#isSet = false;
   function #local2#get() → core::int {
@@ -36,9 +36,9 @@
     #local2#isSet = true;
     return #local2 = #t2;
   }
-  self::expect(1, #local2#get.call());
-  #local2#set.call(#local2#get.call().{core::num::+}(2));
-  self::expect(3, #local2#get.call());
+  self::expect(1, #local2#get(){() → core::int});
+  #local2#set(#local2#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
+  self::expect(3, #local2#get(){() → core::int});
 }
 static method error() → dynamic {
   lowered final core::int? #local;
@@ -52,11 +52,11 @@
       #local#isSet = true;
       return #local = #t3;
     }
-  #local#set.call((let final Never #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
+  #local#set((let final Never #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
   local += 0;
-  ^^^^^" in #local#get.call()).{core::num::+}(0));
+  ^^^^^" in #local#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.strong.expect b/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.strong.expect
index 4a03bd6..42ba9e8 100644
--- a/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.strong.expect
@@ -21,11 +21,11 @@
     : super core::Object::•()
     ;
   get invariantField() → core::num
-    return let final core::num? #t1 = this.{self::A::_#A#invariantField} in #t1.==(null) ?{core::num} throw new _in::LateError::fieldNI("invariantField") : #t1{core::num};
+    return let final core::num? #t1 = this.{self::A::_#A#invariantField}{core::num?} in #t1 == null ?{core::num} throw new _in::LateError::fieldNI("invariantField") : #t1{core::num};
   set invariantField(core::num #t2) → void
     this.{self::A::_#A#invariantField} = #t2;
   get covariantField() → core::num
-    return let final core::num? #t3 = this.{self::A::_#A#covariantField} in #t3.==(null) ?{core::num} throw new _in::LateError::fieldNI("covariantField") : #t3{core::num};
+    return let final core::num? #t3 = this.{self::A::_#A#covariantField}{core::num?} in #t3 == null ?{core::num} throw new _in::LateError::fieldNI("covariantField") : #t3{core::num};
   set covariantField(covariant core::num #t4) → void
     this.{self::A::_#A#covariantField} = #t4;
 }
diff --git a/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.expect b/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.expect
index 1ef4b89..57c3e7c 100644
--- a/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.expect
@@ -23,13 +23,13 @@
     : super core::Object::•()
     ;
   get invariantField() → core::num
-    return this.{self::A::_#A#invariantField#isSet} ?{core::num} let final core::num? #t1 = this.{self::A::_#A#invariantField} in #t1{core::num} : throw new _in::LateError::fieldNI("invariantField");
+    return this.{self::A::_#A#invariantField#isSet}{core::bool} ?{core::num} let final core::num? #t1 = this.{self::A::_#A#invariantField}{core::num?} in #t1{core::num} : throw new _in::LateError::fieldNI("invariantField");
   set invariantField(core::num #t2) → void {
     this.{self::A::_#A#invariantField#isSet} = true;
     this.{self::A::_#A#invariantField} = #t2;
   }
   get covariantField() → core::num
-    return this.{self::A::_#A#covariantField#isSet} ?{core::num} let final core::num? #t3 = this.{self::A::_#A#covariantField} in #t3{core::num} : throw new _in::LateError::fieldNI("covariantField");
+    return this.{self::A::_#A#covariantField#isSet}{core::bool} ?{core::num} let final core::num? #t3 = this.{self::A::_#A#covariantField}{core::num?} in #t3{core::num} : throw new _in::LateError::fieldNI("covariantField");
   set covariantField(covariant core::num #t4) → void {
     this.{self::A::_#A#covariantField#isSet} = true;
     this.{self::A::_#A#covariantField} = #t4;
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect
index d679533..d7714fc 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect
@@ -78,32 +78,32 @@
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t2 = #local4 in #t2.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
+    return let final core::int? #t2 = #local4 in #t2 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
   function #local4#set(core::int #t3) → dynamic
-    if(#local4.==(null))
+    if(#local4 == null)
       return #local4 = #t3;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t4 = #local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t4 = #local6 in #t4 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t5) → dynamic
-    if(#local6.==(null))
+    if(#local6 == null)
       return #local6 = #t5;
     else
       throw new _in::LateError::localAI("local6");
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(T%) → dynamic};
   let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
   lowered final T? #local2;
@@ -119,51 +119,51 @@
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t10 = #local4 in #t10.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t10{core::int};
+    return let final core::int? #t10 = #local4 in #t10 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t10{core::int};
   function #local4#set(core::int #t11) → dynamic
-    if(#local4.==(null))
+    if(#local4 == null)
       return #local4 = #t11;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t12 = #local6 in #t12.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t12{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t12 = #local6 in #t12 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t12{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t13) → dynamic
-    if(#local6.==(null))
+    if(#local6 == null)
       return #local6 = #t13;
     else
       throw new _in::LateError::localAI("local6");
   if(b) {
-    #local2#set.call(value);
-    #local4#set.call(0);
-    #local6#set.call(0);
+    #local2#set(value){(T%) → dynamic};
+    #local4#set(0){(core::int) → dynamic};
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
   }
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(T%) → dynamic};
   let final Never #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
 static field () → Null fieldCompound = () → Null {
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t17 = #local4 in #t17.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t17{core::int};
+    return let final core::int? #t17 = #local4 in #t17 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t17{core::int};
   function #local4#set(core::int #t18) → dynamic
-    if(#local4.==(null))
+    if(#local4 == null)
       return #local4 = #t18;
     else
       throw new _in::LateError::localAI("local4");
-  #local4#set.call(0);
+  #local4#set(0){(core::int) → dynamic};
   let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   lowered final self::methodDirect::T? #local2;
@@ -179,32 +179,32 @@
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t21 = #local4 in #t21.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t21{core::int};
+    return let final core::int? #t21 = #local4 in #t21 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t21{core::int};
   function #local4#set(core::int #t22) → dynamic
-    if(#local4.==(null))
+    if(#local4 == null)
       return #local4 = #t22;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t23 = #local6 in #t23.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t23{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t23 = #local6 in #t23 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t23{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t24) → dynamic
-    if(#local6.==(null))
+    if(#local6 == null)
       return #local6 = #t24;
     else
       throw new _in::LateError::localAI("local6");
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(self::methodDirect::T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(self::methodDirect::T%) → dynamic};
   let final Never #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
   lowered final self::methodConditional::T? #local2;
@@ -220,50 +220,50 @@
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t29 = #local4 in #t29.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t29{core::int};
+    return let final core::int? #t29 = #local4 in #t29 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t29{core::int};
   function #local4#set(core::int #t30) → dynamic
-    if(#local4.==(null))
+    if(#local4 == null)
       return #local4 = #t30;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t31 = #local6 in #t31.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t31{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t31 = #local6 in #t31 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t31{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t32) → dynamic
-    if(#local6.==(null))
+    if(#local6 == null)
       return #local6 = #t32;
     else
       throw new _in::LateError::localAI("local6");
   if(b) {
-    #local2#set.call(value);
-    #local4#set.call(0);
-    #local6#set.call(0);
+    #local2#set(value){(self::methodConditional::T%) → dynamic};
+    #local4#set(0){(core::int) → dynamic};
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
   }
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(self::methodConditional::T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(self::methodConditional::T%) → dynamic};
   let final Never #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
 static method methodCompound() → dynamic {
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t36 = #local4 in #t36.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t36{core::int};
+    return let final core::int? #t36 = #local4 in #t36 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t36{core::int};
   function #local4#set(core::int #t37) → dynamic
-    if(#local4.==(null))
+    if(#local4 == null)
       return #local4 = #t37;
     else
       throw new _in::LateError::localAI("local4");
-  #local4#set.call(0);
+  #local4#set(0){(core::int) → dynamic};
   let final Never #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect
index d679533..d7714fc 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect
@@ -78,32 +78,32 @@
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t2 = #local4 in #t2.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
+    return let final core::int? #t2 = #local4 in #t2 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
   function #local4#set(core::int #t3) → dynamic
-    if(#local4.==(null))
+    if(#local4 == null)
       return #local4 = #t3;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t4 = #local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t4 = #local6 in #t4 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t5) → dynamic
-    if(#local6.==(null))
+    if(#local6 == null)
       return #local6 = #t5;
     else
       throw new _in::LateError::localAI("local6");
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(T%) → dynamic};
   let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
   lowered final T? #local2;
@@ -119,51 +119,51 @@
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t10 = #local4 in #t10.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t10{core::int};
+    return let final core::int? #t10 = #local4 in #t10 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t10{core::int};
   function #local4#set(core::int #t11) → dynamic
-    if(#local4.==(null))
+    if(#local4 == null)
       return #local4 = #t11;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t12 = #local6 in #t12.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t12{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t12 = #local6 in #t12 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t12{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t13) → dynamic
-    if(#local6.==(null))
+    if(#local6 == null)
       return #local6 = #t13;
     else
       throw new _in::LateError::localAI("local6");
   if(b) {
-    #local2#set.call(value);
-    #local4#set.call(0);
-    #local6#set.call(0);
+    #local2#set(value){(T%) → dynamic};
+    #local4#set(0){(core::int) → dynamic};
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
   }
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(T%) → dynamic};
   let final Never #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
 static field () → Null fieldCompound = () → Null {
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t17 = #local4 in #t17.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t17{core::int};
+    return let final core::int? #t17 = #local4 in #t17 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t17{core::int};
   function #local4#set(core::int #t18) → dynamic
-    if(#local4.==(null))
+    if(#local4 == null)
       return #local4 = #t18;
     else
       throw new _in::LateError::localAI("local4");
-  #local4#set.call(0);
+  #local4#set(0){(core::int) → dynamic};
   let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   lowered final self::methodDirect::T? #local2;
@@ -179,32 +179,32 @@
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t21 = #local4 in #t21.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t21{core::int};
+    return let final core::int? #t21 = #local4 in #t21 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t21{core::int};
   function #local4#set(core::int #t22) → dynamic
-    if(#local4.==(null))
+    if(#local4 == null)
       return #local4 = #t22;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t23 = #local6 in #t23.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t23{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t23 = #local6 in #t23 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t23{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t24) → dynamic
-    if(#local6.==(null))
+    if(#local6 == null)
       return #local6 = #t24;
     else
       throw new _in::LateError::localAI("local6");
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(self::methodDirect::T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(self::methodDirect::T%) → dynamic};
   let final Never #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
   lowered final self::methodConditional::T? #local2;
@@ -220,50 +220,50 @@
     }
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t29 = #local4 in #t29.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t29{core::int};
+    return let final core::int? #t29 = #local4 in #t29 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t29{core::int};
   function #local4#set(core::int #t30) → dynamic
-    if(#local4.==(null))
+    if(#local4 == null)
       return #local4 = #t30;
     else
       throw new _in::LateError::localAI("local4");
   lowered final FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t31 = #local6 in #t31.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t31{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t31 = #local6 in #t31 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t31{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t32) → dynamic
-    if(#local6.==(null))
+    if(#local6 == null)
       return #local6 = #t32;
     else
       throw new _in::LateError::localAI("local6");
   if(b) {
-    #local2#set.call(value);
-    #local4#set.call(0);
-    #local6#set.call(0);
+    #local2#set(value){(self::methodConditional::T%) → dynamic};
+    #local4#set(0){(core::int) → dynamic};
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
   }
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(self::methodConditional::T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(self::methodConditional::T%) → dynamic};
   let final Never #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
 static method methodCompound() → dynamic {
   lowered final core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t36 = #local4 in #t36.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t36{core::int};
+    return let final core::int? #t36 = #local4 in #t36 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t36{core::int};
   function #local4#set(core::int #t37) → dynamic
-    if(#local4.==(null))
+    if(#local4 == null)
       return #local4 = #t37;
     else
       throw new _in::LateError::localAI("local4");
-  #local4#set.call(0);
+  #local4#set(0){(core::int) → dynamic};
   let final Never #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect
index 5f281d8..62841e6a 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect
@@ -98,18 +98,18 @@
       #local6#isSet = true;
       return #local6 = #t3;
     }
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(T%) → dynamic};
   let final Never #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
   lowered final T? #local2;
@@ -146,22 +146,22 @@
       return #local6 = #t9;
     }
   if(b) {
-    #local2#set.call(value);
-    #local4#set.call(0);
-    #local6#set.call(0);
+    #local2#set(value){(T%) → dynamic};
+    #local4#set(0){(core::int) → dynamic};
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
   }
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(T%) → dynamic};
   let final Never #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
 static field () → Null fieldCompound = () → Null {
   lowered final core::int? #local4;
@@ -175,10 +175,10 @@
       #local4#isSet = true;
       return #local4 = #t13;
     }
-  #local4#set.call(0);
+  #local4#set(0){(core::int) → dynamic};
   let final Never #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   lowered final self::methodDirect::T? #local2;
@@ -214,18 +214,18 @@
       #local6#isSet = true;
       return #local6 = #t17;
     }
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(self::methodDirect::T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t18 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(self::methodDirect::T%) → dynamic};
   let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
   lowered final self::methodConditional::T? #local2;
@@ -262,22 +262,22 @@
       return #local6 = #t23;
     }
   if(b) {
-    #local2#set.call(value);
-    #local4#set.call(0);
-    #local6#set.call(0);
+    #local2#set(value){(self::methodConditional::T%) → dynamic};
+    #local4#set(0){(core::int) → dynamic};
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
   }
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(self::methodConditional::T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(self::methodConditional::T%) → dynamic};
   let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
 static method methodCompound() → dynamic {
   lowered final core::int? #local4;
@@ -291,9 +291,9 @@
       #local4#isSet = true;
       return #local4 = #t27;
     }
-  #local4#set.call(0);
+  #local4#set(0){(core::int) → dynamic};
   let final Never #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect
index 5f281d8..62841e6a 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect
@@ -98,18 +98,18 @@
       #local6#isSet = true;
       return #local6 = #t3;
     }
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t4 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(T%) → dynamic};
   let final Never #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
   lowered final T? #local2;
@@ -146,22 +146,22 @@
       return #local6 = #t9;
     }
   if(b) {
-    #local2#set.call(value);
-    #local4#set.call(0);
-    #local6#set.call(0);
+    #local2#set(value){(T%) → dynamic};
+    #local4#set(0){(core::int) → dynamic};
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
   }
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(T%) → dynamic};
   let final Never #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 };
 static field () → Null fieldCompound = () → Null {
   lowered final core::int? #local4;
@@ -175,10 +175,10 @@
       #local4#isSet = true;
       return #local4 = #t13;
     }
-  #local4#set.call(0);
+  #local4#set(0){(core::int) → dynamic};
   let final Never #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   lowered final self::methodDirect::T? #local2;
@@ -214,18 +214,18 @@
       #local6#isSet = true;
       return #local6 = #t17;
     }
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(self::methodDirect::T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t18 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(self::methodDirect::T%) → dynamic};
   let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
   lowered final self::methodConditional::T? #local2;
@@ -262,22 +262,22 @@
       return #local6 = #t23;
     }
   if(b) {
-    #local2#set.call(value);
-    #local4#set.call(0);
-    #local6#set.call(0);
+    #local2#set(value){(self::methodConditional::T%) → dynamic};
+    #local4#set(0){(core::int) → dynamic};
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
   }
-  #local2#set.call(value);
-  #local4#set.call(0);
-  #local6#set.call(0);
+  #local2#set(value){(self::methodConditional::T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
   let final Never #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
   local2 = value; // error
-  ^^^^^^^" in #local2#set.call(value);
+  ^^^^^^^" in #local2#set(value){(self::methodConditional::T%) → dynamic};
   let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
   local4 = 0; // error
-  ^^^^^^^" in #local4#set.call(0);
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
   let final Never #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
   local6 = 0; // error
-  ^^^^^^^" in #local6#set.call(0);
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
 }
 static method methodCompound() → dynamic {
   lowered final core::int? #local4;
@@ -291,9 +291,9 @@
       #local4#isSet = true;
       return #local4 = #t27;
     }
-  #local4#set.call(0);
+  #local4#set(0){(core::int) → dynamic};
   let final Never #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+  ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
index ca083c7..0b556b4 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
@@ -109,13 +109,13 @@
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t2 = #local4 in #t2.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
+    return let final core::int? #t2 = #local4 in #t2 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
   function #local4#set(core::int #t3) → dynamic
     return #local4 = #t3;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t4 = #local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t4 = #local6 in #t4 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t5) → dynamic
     return #local6 = #t5;
   lowered T? #local7;
@@ -136,20 +136,20 @@
   ^^^^^^" in local1;
   let final Never #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
-  ^^^^^^" in #local2#get.call();
+  ^^^^^^" in #local2#get(){() → T%};
   let final Never #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   let final Never #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
-  ^^^^^^" in #local4#get.call();
+  ^^^^^^" in #local4#get(){() → core::int};
   let final Never #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   let final Never #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
-  ^^^^^^" in #local6#get.call();
-  #local7#get.call();
+  ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → T%};
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
   T% local1;
@@ -164,13 +164,13 @@
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t14 = #local4 in #t14.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t14{core::int};
+    return let final core::int? #t14 = #local4 in #t14 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t14{core::int};
   function #local4#set(core::int #t15) → dynamic
     return #local4 = #t15;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t16 = #local6 in #t16.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t16{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t16 = #local6 in #t16 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t16{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t17) → dynamic
     return #local6 = #t17;
   lowered T? #local7;
@@ -188,40 +188,40 @@
   }
   if(b) {
     local1 = value;
-    #local2#set.call(value);
+    #local2#set(value){(T%) → dynamic};
     local3 = 0;
-    #local4#set.call(0);
+    #local4#set(0){(core::int) → dynamic};
     local5 = 0;
-    #local6#set.call(0);
-    #local7#get.call();
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
+    #local7#get(){() → T%};
   }
   let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  #local2#get.call();
+  #local2#get(){() → T%};
   let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  #local4#get.call();
+  #local4#get(){() → core::int};
   let final Never #t21 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  #local6#get.call();
-  #local7#get.call();
+  #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → T%};
 };
 static field () → Null fieldCompound = () → Null {
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t22 = #local4 in #t22.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t22{core::int};
+    return let final core::int? #t22 = #local4 in #t22 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t22{core::int};
   function #local4#set(core::int #t23) → dynamic
     return #local4 = #t23;
   local3 = (let final Never #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
-  #local4#set.call((let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
+  #local4#set((let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -236,13 +236,13 @@
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t27 = #local4 in #t27.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t27{core::int};
+    return let final core::int? #t27 = #local4 in #t27 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t27{core::int};
   function #local4#set(core::int #t28) → dynamic
     return #local4 = #t28;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t29 = #local6 in #t29.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t29{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t29 = #local6 in #t29 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t29{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t30) → dynamic
     return #local6 = #t30;
   lowered self::methodDirect::T? #local7;
@@ -263,20 +263,20 @@
   ^^^^^^" in local1;
   let final Never #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
-  ^^^^^^" in #local2#get.call();
+  ^^^^^^" in #local2#get(){() → self::methodDirect::T%};
   let final Never #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   let final Never #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
-  ^^^^^^" in #local4#get.call();
+  ^^^^^^" in #local4#get(){() → core::int};
   let final Never #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   let final Never #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
-  ^^^^^^" in #local6#get.call();
-  #local7#get.call();
+  ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → self::methodDirect::T%};
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
   self::methodConditional::T% local1;
@@ -291,13 +291,13 @@
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t39 = #local4 in #t39.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t39{core::int};
+    return let final core::int? #t39 = #local4 in #t39 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t39{core::int};
   function #local4#set(core::int #t40) → dynamic
     return #local4 = #t40;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t41 = #local6 in #t41.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t41{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t41 = #local6 in #t41 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t41{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t42) → dynamic
     return #local6 = #t42;
   lowered self::methodConditional::T? #local7;
@@ -315,39 +315,39 @@
   }
   if(b) {
     local1 = value;
-    #local2#set.call(value);
+    #local2#set(value){(self::methodConditional::T%) → dynamic};
     local3 = 0;
-    #local4#set.call(0);
+    #local4#set(0){(core::int) → dynamic};
     local5 = 0;
-    #local6#set.call(0);
-    #local7#set.call(value);
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
+    #local7#set(value){(self::methodConditional::T%) → dynamic};
   }
   let final Never #t44 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  #local2#get.call();
+  #local2#get(){() → self::methodConditional::T%};
   let final Never #t45 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  #local4#get.call();
+  #local4#get(){() → core::int};
   let final Never #t46 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  #local6#get.call();
-  #local7#get.call();
+  #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → self::methodConditional::T%};
 }
 static method methodCompound() → dynamic {
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t47 = #local4 in #t47.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t47{core::int};
+    return let final core::int? #t47 = #local4 in #t47 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t47{core::int};
   function #local4#set(core::int #t48) → dynamic
     return #local4 = #t48;
   local3 = (let final Never #t49 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
-  #local4#set.call((let final Never #t50 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
+  #local4#set((let final Never #t50 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
index ca083c7..0b556b4 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
@@ -109,13 +109,13 @@
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t2 = #local4 in #t2.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
+    return let final core::int? #t2 = #local4 in #t2 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t2{core::int};
   function #local4#set(core::int #t3) → dynamic
     return #local4 = #t3;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t4 = #local6 in #t4.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t4 = #local6 in #t4 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t5) → dynamic
     return #local6 = #t5;
   lowered T? #local7;
@@ -136,20 +136,20 @@
   ^^^^^^" in local1;
   let final Never #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
-  ^^^^^^" in #local2#get.call();
+  ^^^^^^" in #local2#get(){() → T%};
   let final Never #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   let final Never #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
-  ^^^^^^" in #local4#get.call();
+  ^^^^^^" in #local4#get(){() → core::int};
   let final Never #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   let final Never #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
-  ^^^^^^" in #local6#get.call();
-  #local7#get.call();
+  ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → T%};
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
   T% local1;
@@ -164,13 +164,13 @@
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t14 = #local4 in #t14.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t14{core::int};
+    return let final core::int? #t14 = #local4 in #t14 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t14{core::int};
   function #local4#set(core::int #t15) → dynamic
     return #local4 = #t15;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t16 = #local6 in #t16.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t16{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t16 = #local6 in #t16 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t16{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t17) → dynamic
     return #local6 = #t17;
   lowered T? #local7;
@@ -188,40 +188,40 @@
   }
   if(b) {
     local1 = value;
-    #local2#set.call(value);
+    #local2#set(value){(T%) → dynamic};
     local3 = 0;
-    #local4#set.call(0);
+    #local4#set(0){(core::int) → dynamic};
     local5 = 0;
-    #local6#set.call(0);
-    #local7#get.call();
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
+    #local7#get(){() → T%};
   }
   let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  #local2#get.call();
+  #local2#get(){() → T%};
   let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  #local4#get.call();
+  #local4#get(){() → core::int};
   let final Never #t21 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  #local6#get.call();
-  #local7#get.call();
+  #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → T%};
 };
 static field () → Null fieldCompound = () → Null {
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t22 = #local4 in #t22.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t22{core::int};
+    return let final core::int? #t22 = #local4 in #t22 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t22{core::int};
   function #local4#set(core::int #t23) → dynamic
     return #local4 = #t23;
   local3 = (let final Never #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
-  #local4#set.call((let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
+  #local4#set((let final Never #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -236,13 +236,13 @@
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t27 = #local4 in #t27.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t27{core::int};
+    return let final core::int? #t27 = #local4 in #t27 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t27{core::int};
   function #local4#set(core::int #t28) → dynamic
     return #local4 = #t28;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t29 = #local6 in #t29.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t29{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t29 = #local6 in #t29 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t29{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t30) → dynamic
     return #local6 = #t30;
   lowered self::methodDirect::T? #local7;
@@ -263,20 +263,20 @@
   ^^^^^^" in local1;
   let final Never #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
-  ^^^^^^" in #local2#get.call();
+  ^^^^^^" in #local2#get(){() → self::methodDirect::T%};
   let final Never #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   let final Never #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
-  ^^^^^^" in #local4#get.call();
+  ^^^^^^" in #local4#get(){() → core::int};
   let final Never #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   let final Never #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
-  ^^^^^^" in #local6#get.call();
-  #local7#get.call();
+  ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → self::methodDirect::T%};
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
   self::methodConditional::T% local1;
@@ -291,13 +291,13 @@
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t39 = #local4 in #t39.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t39{core::int};
+    return let final core::int? #t39 = #local4 in #t39 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t39{core::int};
   function #local4#set(core::int #t40) → dynamic
     return #local4 = #t40;
   FutureOr<core::int>local5;
   lowered FutureOr<core::int>? #local6;
   function #local6#get() → FutureOr<core::int>
-    return let final FutureOr<core::int>? #t41 = #local6 in #t41.==(null) ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t41{FutureOr<core::int>};
+    return let final FutureOr<core::int>? #t41 = #local6 in #t41 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t41{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>#t42) → dynamic
     return #local6 = #t42;
   lowered self::methodConditional::T? #local7;
@@ -315,39 +315,39 @@
   }
   if(b) {
     local1 = value;
-    #local2#set.call(value);
+    #local2#set(value){(self::methodConditional::T%) → dynamic};
     local3 = 0;
-    #local4#set.call(0);
+    #local4#set(0){(core::int) → dynamic};
     local5 = 0;
-    #local6#set.call(0);
-    #local7#set.call(value);
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
+    #local7#set(value){(self::methodConditional::T%) → dynamic};
   }
   let final Never #t44 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  #local2#get.call();
+  #local2#get(){() → self::methodConditional::T%};
   let final Never #t45 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  #local4#get.call();
+  #local4#get(){() → core::int};
   let final Never #t46 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  #local6#get.call();
-  #local7#get.call();
+  #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → self::methodConditional::T%};
 }
 static method methodCompound() → dynamic {
   core::int local3;
   lowered core::int? #local4;
   function #local4#get() → core::int
-    return let final core::int? #t47 = #local4 in #t47.==(null) ?{core::int} throw new _in::LateError::localNI("local4") : #t47{core::int};
+    return let final core::int? #t47 = #local4 in #t47 == null ?{core::int} throw new _in::LateError::localNI("local4") : #t47{core::int};
   function #local4#set(core::int #t48) → dynamic
     return #local4 = #t48;
   local3 = (let final Never #t49 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
-  #local4#set.call((let final Never #t50 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
+  #local4#set((let final Never #t50 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
index da7e307..2c9947c 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
@@ -142,20 +142,20 @@
   ^^^^^^" in local1;
   let final Never #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
-  ^^^^^^" in #local2#get.call();
+  ^^^^^^" in #local2#get(){() → T%};
   let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   let final Never #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
-  ^^^^^^" in #local4#get.call();
+  ^^^^^^" in #local4#get(){() → core::int};
   let final Never #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   let final Never #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
-  ^^^^^^" in #local6#get.call();
-  #local7#get.call();
+  ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → T%};
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
   T% local1;
@@ -200,26 +200,26 @@
   }
   if(b) {
     local1 = value;
-    #local2#set.call(value);
+    #local2#set(value){(T%) → dynamic};
     local3 = 0;
-    #local4#set.call(0);
+    #local4#set(0){(core::int) → dynamic};
     local5 = 0;
-    #local6#set.call(0);
-    #local7#get.call();
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
+    #local7#get(){() → T%};
   }
   let final Never #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  #local2#get.call();
+  #local2#get(){() → T%};
   let final Never #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  #local4#get.call();
+  #local4#get(){() → core::int};
   let final Never #t17 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  #local6#get.call();
-  #local7#get.call();
+  #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → T%};
 };
 static field () → Null fieldCompound = () → Null {
   core::int local3;
@@ -233,10 +233,10 @@
   }
   local3 = (let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
-  #local4#set.call((let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
+  #local4#set((let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -284,20 +284,20 @@
   ^^^^^^" in local1;
   let final Never #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
-  ^^^^^^" in #local2#get.call();
+  ^^^^^^" in #local2#get(){() → self::methodDirect::T%};
   let final Never #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   let final Never #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
-  ^^^^^^" in #local4#get.call();
+  ^^^^^^" in #local4#get(){() → core::int};
   let final Never #t29 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   let final Never #t30 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
-  ^^^^^^" in #local6#get.call();
-  #local7#get.call();
+  ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → self::methodDirect::T%};
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
   self::methodConditional::T% local1;
@@ -342,26 +342,26 @@
   }
   if(b) {
     local1 = value;
-    #local2#set.call(value);
+    #local2#set(value){(self::methodConditional::T%) → dynamic};
     local3 = 0;
-    #local4#set.call(0);
+    #local4#set(0){(core::int) → dynamic};
     local5 = 0;
-    #local6#set.call(0);
-    #local7#set.call(value);
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
+    #local7#set(value){(self::methodConditional::T%) → dynamic};
   }
   let final Never #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  #local2#get.call();
+  #local2#get(){() → self::methodConditional::T%};
   let final Never #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  #local4#get.call();
+  #local4#get(){() → core::int};
   let final Never #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  #local6#get.call();
-  #local7#get.call();
+  #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → self::methodConditional::T%};
 }
 static method methodCompound() → dynamic {
   core::int local3;
@@ -375,9 +375,9 @@
   }
   local3 = (let final Never #t39 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
-  #local4#set.call((let final Never #t40 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
+  #local4#set((let final Never #t40 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
index da7e307..2c9947c 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
@@ -142,20 +142,20 @@
   ^^^^^^" in local1;
   let final Never #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
-  ^^^^^^" in #local2#get.call();
+  ^^^^^^" in #local2#get(){() → T%};
   let final Never #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   let final Never #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
-  ^^^^^^" in #local4#get.call();
+  ^^^^^^" in #local4#get(){() → core::int};
   let final Never #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   let final Never #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
-  ^^^^^^" in #local6#get.call();
-  #local7#get.call();
+  ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → T%};
 };
 static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
   T% local1;
@@ -200,26 +200,26 @@
   }
   if(b) {
     local1 = value;
-    #local2#set.call(value);
+    #local2#set(value){(T%) → dynamic};
     local3 = 0;
-    #local4#set.call(0);
+    #local4#set(0){(core::int) → dynamic};
     local5 = 0;
-    #local6#set.call(0);
-    #local7#get.call();
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
+    #local7#get(){() → T%};
   }
   let final Never #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  #local2#get.call();
+  #local2#get(){() → T%};
   let final Never #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  #local4#get.call();
+  #local4#get(){() → core::int};
   let final Never #t17 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  #local6#get.call();
-  #local7#get.call();
+  #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → T%};
 };
 static field () → Null fieldCompound = () → Null {
   core::int local3;
@@ -233,10 +233,10 @@
   }
   local3 = (let final Never #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
-  #local4#set.call((let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
+  #local4#set((let final Never #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -284,20 +284,20 @@
   ^^^^^^" in local1;
   let final Never #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
   local2; // error
-  ^^^^^^" in #local2#get.call();
+  ^^^^^^" in #local2#get(){() → self::methodDirect::T%};
   let final Never #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
   let final Never #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4; // error
-  ^^^^^^" in #local4#get.call();
+  ^^^^^^" in #local4#get(){() → core::int};
   let final Never #t29 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
   let final Never #t30 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
   local6; // error
-  ^^^^^^" in #local6#get.call();
-  #local7#get.call();
+  ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → self::methodDirect::T%};
 }
 static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
   self::methodConditional::T% local1;
@@ -342,26 +342,26 @@
   }
   if(b) {
     local1 = value;
-    #local2#set.call(value);
+    #local2#set(value){(self::methodConditional::T%) → dynamic};
     local3 = 0;
-    #local4#set.call(0);
+    #local4#set(0){(core::int) → dynamic};
     local5 = 0;
-    #local6#set.call(0);
-    #local7#set.call(value);
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
+    #local7#set(value){(self::methodConditional::T%) → dynamic};
   }
   let final Never #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
   local1; // error
   ^^^^^^" in local1;
-  #local2#get.call();
+  #local2#get(){() → self::methodConditional::T%};
   let final Never #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3; // error
   ^^^^^^" in local3;
-  #local4#get.call();
+  #local4#get(){() → core::int};
   let final Never #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
   local5; // error
   ^^^^^^" in local5;
-  #local6#get.call();
-  #local7#get.call();
+  #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → self::methodConditional::T%};
 }
 static method methodCompound() → dynamic {
   core::int local3;
@@ -375,9 +375,9 @@
   }
   local3 = (let final Never #t39 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
-  #local4#set.call((let final Never #t40 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
+  #local4#set((let final Never #t40 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+  ^^^^^^" in #local4#get(){() → core::int}).{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.expect
index f982c6a..f161d74 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.expect
@@ -45,17 +45,17 @@
     : self::A::_#A#property4 = property4, self::A::_#A#property5#isSet = true, self::A::_#A#property5 = property5, self::A::_#A#property6 = property6, super core::Object::•()
     ;
   get property4() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#property4} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("property4") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#property4}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("property4") : #t1{core::int};
   set property4(core::int #t2) → void
     this.{self::A::_#A#property4} = #t2;
   get property5() → core::int?
-    return this.{self::A::_#A#property5#isSet} ?{core::int?} this.{self::A::_#A#property5} : throw new _in::LateError::fieldNI("property5");
+    return this.{self::A::_#A#property5#isSet}{core::bool} ?{core::int?} this.{self::A::_#A#property5}{core::int?} : throw new _in::LateError::fieldNI("property5");
   set property5(core::int? #t3) → void {
     this.{self::A::_#A#property5#isSet} = true;
     this.{self::A::_#A#property5} = #t3;
   }
   get property6() → core::int
-    return let final core::int? #t4 = this.{self::A::_#A#property6} in #t4.==(null) ?{core::int} throw new _in::LateError::fieldNI("property6") : #t4{core::int};
+    return let final core::int? #t4 = this.{self::A::_#A#property6}{core::int?} in #t4 == null ?{core::int} throw new _in::LateError::fieldNI("property6") : #t4{core::int};
   set property6(covariant core::int #t5) → void
     this.{self::A::_#A#property6} = #t5;
 }
@@ -68,23 +68,23 @@
     : self::B1::_#B1#property4 = property4, self::B1::_#B1#property5 = property5, self::B1::_#B1#property6#isSet = true, self::B1::_#B1#property6 = property6, super core::Object::•()
     ;
   get property4() → core::int
-    return let final core::int? #t6 = this.{self::B1::_#B1#property4} in #t6.==(null) ?{core::int} throw new _in::LateError::fieldNI("property4") : #t6{core::int};
+    return let final core::int? #t6 = this.{self::B1::_#B1#property4}{core::int?} in #t6 == null ?{core::int} throw new _in::LateError::fieldNI("property4") : #t6{core::int};
   set property4(core::int #t7) → void
-    if(this.{self::B1::_#B1#property4}.==(null))
+    if(this.{self::B1::_#B1#property4}{core::int?} == null)
       this.{self::B1::_#B1#property4} = #t7;
     else
       throw new _in::LateError::fieldAI("property4");
   get property5() → core::int
-    return let final core::int? #t8 = this.{self::B1::_#B1#property5} in #t8.==(null) ?{core::int} throw new _in::LateError::fieldNI("property5") : #t8{core::int};
+    return let final core::int? #t8 = this.{self::B1::_#B1#property5}{core::int?} in #t8 == null ?{core::int} throw new _in::LateError::fieldNI("property5") : #t8{core::int};
   set property5(core::int #t9) → void
-    if(this.{self::B1::_#B1#property5}.==(null))
+    if(this.{self::B1::_#B1#property5}{core::int?} == null)
       this.{self::B1::_#B1#property5} = #t9;
     else
       throw new _in::LateError::fieldAI("property5");
   get property6() → core::int?
-    return this.{self::B1::_#B1#property6#isSet} ?{core::int?} this.{self::B1::_#B1#property6} : throw new _in::LateError::fieldNI("property6");
+    return this.{self::B1::_#B1#property6#isSet}{core::bool} ?{core::int?} this.{self::B1::_#B1#property6}{core::int?} : throw new _in::LateError::fieldNI("property6");
   set property6(core::int? #t10) → void
-    if(this.{self::B1::_#B1#property6#isSet})
+    if(this.{self::B1::_#B1#property6#isSet}{core::bool})
       throw new _in::LateError::fieldAI("property6");
     else {
       this.{self::B1::_#B1#property6#isSet} = true;
@@ -107,15 +107,15 @@
     : self::C1::_#C1#property4 = property4, self::C1::_#C1#property5 = property5, self::C1::_#C1#property6 = property6, super core::Object::•()
     ;
   get property4() → core::int
-    return let final core::int? #t11 = this.{self::C1::_#C1#property4} in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("property4") : #t11{core::int};
+    return let final core::int? #t11 = this.{self::C1::_#C1#property4}{core::int?} in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("property4") : #t11{core::int};
   set property4(core::int #t12) → void
     this.{self::C1::_#C1#property4} = #t12;
   get property5() → core::int
-    return let final core::int? #t13 = this.{self::C1::_#C1#property5} in #t13.==(null) ?{core::int} throw new _in::LateError::fieldNI("property5") : #t13{core::int};
+    return let final core::int? #t13 = this.{self::C1::_#C1#property5}{core::int?} in #t13 == null ?{core::int} throw new _in::LateError::fieldNI("property5") : #t13{core::int};
   set property5(core::int #t14) → void
     this.{self::C1::_#C1#property5} = #t14;
   get property6() → core::int
-    return let final core::int? #t15 = this.{self::C1::_#C1#property6} in #t15.==(null) ?{core::int} throw new _in::LateError::fieldNI("property6") : #t15{core::int};
+    return let final core::int? #t15 = this.{self::C1::_#C1#property6}{core::int?} in #t15 == null ?{core::int} throw new _in::LateError::fieldNI("property6") : #t15{core::int};
   set property6(core::int #t16) → void
     this.{self::C1::_#C1#property6} = #t16;
 }
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.transformed.expect
index f982c6a..f161d74 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.transformed.expect
@@ -45,17 +45,17 @@
     : self::A::_#A#property4 = property4, self::A::_#A#property5#isSet = true, self::A::_#A#property5 = property5, self::A::_#A#property6 = property6, super core::Object::•()
     ;
   get property4() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#property4} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("property4") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#property4}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("property4") : #t1{core::int};
   set property4(core::int #t2) → void
     this.{self::A::_#A#property4} = #t2;
   get property5() → core::int?
-    return this.{self::A::_#A#property5#isSet} ?{core::int?} this.{self::A::_#A#property5} : throw new _in::LateError::fieldNI("property5");
+    return this.{self::A::_#A#property5#isSet}{core::bool} ?{core::int?} this.{self::A::_#A#property5}{core::int?} : throw new _in::LateError::fieldNI("property5");
   set property5(core::int? #t3) → void {
     this.{self::A::_#A#property5#isSet} = true;
     this.{self::A::_#A#property5} = #t3;
   }
   get property6() → core::int
-    return let final core::int? #t4 = this.{self::A::_#A#property6} in #t4.==(null) ?{core::int} throw new _in::LateError::fieldNI("property6") : #t4{core::int};
+    return let final core::int? #t4 = this.{self::A::_#A#property6}{core::int?} in #t4 == null ?{core::int} throw new _in::LateError::fieldNI("property6") : #t4{core::int};
   set property6(covariant core::int #t5) → void
     this.{self::A::_#A#property6} = #t5;
 }
@@ -68,23 +68,23 @@
     : self::B1::_#B1#property4 = property4, self::B1::_#B1#property5 = property5, self::B1::_#B1#property6#isSet = true, self::B1::_#B1#property6 = property6, super core::Object::•()
     ;
   get property4() → core::int
-    return let final core::int? #t6 = this.{self::B1::_#B1#property4} in #t6.==(null) ?{core::int} throw new _in::LateError::fieldNI("property4") : #t6{core::int};
+    return let final core::int? #t6 = this.{self::B1::_#B1#property4}{core::int?} in #t6 == null ?{core::int} throw new _in::LateError::fieldNI("property4") : #t6{core::int};
   set property4(core::int #t7) → void
-    if(this.{self::B1::_#B1#property4}.==(null))
+    if(this.{self::B1::_#B1#property4}{core::int?} == null)
       this.{self::B1::_#B1#property4} = #t7;
     else
       throw new _in::LateError::fieldAI("property4");
   get property5() → core::int
-    return let final core::int? #t8 = this.{self::B1::_#B1#property5} in #t8.==(null) ?{core::int} throw new _in::LateError::fieldNI("property5") : #t8{core::int};
+    return let final core::int? #t8 = this.{self::B1::_#B1#property5}{core::int?} in #t8 == null ?{core::int} throw new _in::LateError::fieldNI("property5") : #t8{core::int};
   set property5(core::int #t9) → void
-    if(this.{self::B1::_#B1#property5}.==(null))
+    if(this.{self::B1::_#B1#property5}{core::int?} == null)
       this.{self::B1::_#B1#property5} = #t9;
     else
       throw new _in::LateError::fieldAI("property5");
   get property6() → core::int?
-    return this.{self::B1::_#B1#property6#isSet} ?{core::int?} this.{self::B1::_#B1#property6} : throw new _in::LateError::fieldNI("property6");
+    return this.{self::B1::_#B1#property6#isSet}{core::bool} ?{core::int?} this.{self::B1::_#B1#property6}{core::int?} : throw new _in::LateError::fieldNI("property6");
   set property6(core::int? #t10) → void
-    if(this.{self::B1::_#B1#property6#isSet})
+    if(this.{self::B1::_#B1#property6#isSet}{core::bool})
       throw new _in::LateError::fieldAI("property6");
     else {
       this.{self::B1::_#B1#property6#isSet} = true;
@@ -107,15 +107,15 @@
     : self::C1::_#C1#property4 = property4, self::C1::_#C1#property5 = property5, self::C1::_#C1#property6 = property6, super core::Object::•()
     ;
   get property4() → core::int
-    return let final core::int? #t11 = this.{self::C1::_#C1#property4} in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("property4") : #t11{core::int};
+    return let final core::int? #t11 = this.{self::C1::_#C1#property4}{core::int?} in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("property4") : #t11{core::int};
   set property4(core::int #t12) → void
     this.{self::C1::_#C1#property4} = #t12;
   get property5() → core::int
-    return let final core::int? #t13 = this.{self::C1::_#C1#property5} in #t13.==(null) ?{core::int} throw new _in::LateError::fieldNI("property5") : #t13{core::int};
+    return let final core::int? #t13 = this.{self::C1::_#C1#property5}{core::int?} in #t13 == null ?{core::int} throw new _in::LateError::fieldNI("property5") : #t13{core::int};
   set property5(core::int #t14) → void
     this.{self::C1::_#C1#property5} = #t14;
   get property6() → core::int
-    return let final core::int? #t15 = this.{self::C1::_#C1#property6} in #t15.==(null) ?{core::int} throw new _in::LateError::fieldNI("property6") : #t15{core::int};
+    return let final core::int? #t15 = this.{self::C1::_#C1#property6}{core::int?} in #t15 == null ?{core::int} throw new _in::LateError::fieldNI("property6") : #t15{core::int};
   set property6(core::int #t16) → void
     this.{self::C1::_#C1#property6} = #t16;
 }
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.expect
index 8d9af18..6a04d36 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.expect
@@ -47,19 +47,19 @@
     : self::A::_#A#property4#isSet = true, self::A::_#A#property4 = property4, self::A::_#A#property5#isSet = true, self::A::_#A#property5 = property5, self::A::_#A#property6#isSet = true, self::A::_#A#property6 = property6, super core::Object::•()
     ;
   get property4() → core::int
-    return this.{self::A::_#A#property4#isSet} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#property4} in #t1{core::int} : throw new _in::LateError::fieldNI("property4");
+    return this.{self::A::_#A#property4#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#property4}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("property4");
   set property4(core::int #t2) → void {
     this.{self::A::_#A#property4#isSet} = true;
     this.{self::A::_#A#property4} = #t2;
   }
   get property5() → core::int?
-    return this.{self::A::_#A#property5#isSet} ?{core::int?} this.{self::A::_#A#property5} : throw new _in::LateError::fieldNI("property5");
+    return this.{self::A::_#A#property5#isSet}{core::bool} ?{core::int?} this.{self::A::_#A#property5}{core::int?} : throw new _in::LateError::fieldNI("property5");
   set property5(core::int? #t3) → void {
     this.{self::A::_#A#property5#isSet} = true;
     this.{self::A::_#A#property5} = #t3;
   }
   get property6() → core::int
-    return this.{self::A::_#A#property6#isSet} ?{core::int} let final core::int? #t4 = this.{self::A::_#A#property6} in #t4{core::int} : throw new _in::LateError::fieldNI("property6");
+    return this.{self::A::_#A#property6#isSet}{core::bool} ?{core::int} let final core::int? #t4 = this.{self::A::_#A#property6}{core::int?} in #t4{core::int} : throw new _in::LateError::fieldNI("property6");
   set property6(covariant core::int #t5) → void {
     this.{self::A::_#A#property6#isSet} = true;
     this.{self::A::_#A#property6} = #t5;
@@ -76,27 +76,27 @@
     : self::B1::_#B1#property4#isSet = true, self::B1::_#B1#property4 = property4, self::B1::_#B1#property5#isSet = true, self::B1::_#B1#property5 = property5, self::B1::_#B1#property6#isSet = true, self::B1::_#B1#property6 = property6, super core::Object::•()
     ;
   get property4() → core::int
-    return this.{self::B1::_#B1#property4#isSet} ?{core::int} let final core::int? #t6 = this.{self::B1::_#B1#property4} in #t6{core::int} : throw new _in::LateError::fieldNI("property4");
+    return this.{self::B1::_#B1#property4#isSet}{core::bool} ?{core::int} let final core::int? #t6 = this.{self::B1::_#B1#property4}{core::int?} in #t6{core::int} : throw new _in::LateError::fieldNI("property4");
   set property4(core::int #t7) → void
-    if(this.{self::B1::_#B1#property4#isSet})
+    if(this.{self::B1::_#B1#property4#isSet}{core::bool})
       throw new _in::LateError::fieldAI("property4");
     else {
       this.{self::B1::_#B1#property4#isSet} = true;
       this.{self::B1::_#B1#property4} = #t7;
     }
   get property5() → core::int
-    return this.{self::B1::_#B1#property5#isSet} ?{core::int} let final core::int? #t8 = this.{self::B1::_#B1#property5} in #t8{core::int} : throw new _in::LateError::fieldNI("property5");
+    return this.{self::B1::_#B1#property5#isSet}{core::bool} ?{core::int} let final core::int? #t8 = this.{self::B1::_#B1#property5}{core::int?} in #t8{core::int} : throw new _in::LateError::fieldNI("property5");
   set property5(core::int #t9) → void
-    if(this.{self::B1::_#B1#property5#isSet})
+    if(this.{self::B1::_#B1#property5#isSet}{core::bool})
       throw new _in::LateError::fieldAI("property5");
     else {
       this.{self::B1::_#B1#property5#isSet} = true;
       this.{self::B1::_#B1#property5} = #t9;
     }
   get property6() → core::int?
-    return this.{self::B1::_#B1#property6#isSet} ?{core::int?} this.{self::B1::_#B1#property6} : throw new _in::LateError::fieldNI("property6");
+    return this.{self::B1::_#B1#property6#isSet}{core::bool} ?{core::int?} this.{self::B1::_#B1#property6}{core::int?} : throw new _in::LateError::fieldNI("property6");
   set property6(core::int? #t10) → void
-    if(this.{self::B1::_#B1#property6#isSet})
+    if(this.{self::B1::_#B1#property6#isSet}{core::bool})
       throw new _in::LateError::fieldAI("property6");
     else {
       this.{self::B1::_#B1#property6#isSet} = true;
@@ -122,19 +122,19 @@
     : self::C1::_#C1#property4#isSet = true, self::C1::_#C1#property4 = property4, self::C1::_#C1#property5#isSet = true, self::C1::_#C1#property5 = property5, self::C1::_#C1#property6#isSet = true, self::C1::_#C1#property6 = property6, super core::Object::•()
     ;
   get property4() → core::int
-    return this.{self::C1::_#C1#property4#isSet} ?{core::int} let final core::int? #t11 = this.{self::C1::_#C1#property4} in #t11{core::int} : throw new _in::LateError::fieldNI("property4");
+    return this.{self::C1::_#C1#property4#isSet}{core::bool} ?{core::int} let final core::int? #t11 = this.{self::C1::_#C1#property4}{core::int?} in #t11{core::int} : throw new _in::LateError::fieldNI("property4");
   set property4(core::int #t12) → void {
     this.{self::C1::_#C1#property4#isSet} = true;
     this.{self::C1::_#C1#property4} = #t12;
   }
   get property5() → core::int
-    return this.{self::C1::_#C1#property5#isSet} ?{core::int} let final core::int? #t13 = this.{self::C1::_#C1#property5} in #t13{core::int} : throw new _in::LateError::fieldNI("property5");
+    return this.{self::C1::_#C1#property5#isSet}{core::bool} ?{core::int} let final core::int? #t13 = this.{self::C1::_#C1#property5}{core::int?} in #t13{core::int} : throw new _in::LateError::fieldNI("property5");
   set property5(core::int #t14) → void {
     this.{self::C1::_#C1#property5#isSet} = true;
     this.{self::C1::_#C1#property5} = #t14;
   }
   get property6() → core::int
-    return this.{self::C1::_#C1#property6#isSet} ?{core::int} let final core::int? #t15 = this.{self::C1::_#C1#property6} in #t15{core::int} : throw new _in::LateError::fieldNI("property6");
+    return this.{self::C1::_#C1#property6#isSet}{core::bool} ?{core::int} let final core::int? #t15 = this.{self::C1::_#C1#property6}{core::int?} in #t15{core::int} : throw new _in::LateError::fieldNI("property6");
   set property6(core::int #t16) → void {
     this.{self::C1::_#C1#property6#isSet} = true;
     this.{self::C1::_#C1#property6} = #t16;
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.transformed.expect
index 8d9af18..6a04d36 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.transformed.expect
@@ -47,19 +47,19 @@
     : self::A::_#A#property4#isSet = true, self::A::_#A#property4 = property4, self::A::_#A#property5#isSet = true, self::A::_#A#property5 = property5, self::A::_#A#property6#isSet = true, self::A::_#A#property6 = property6, super core::Object::•()
     ;
   get property4() → core::int
-    return this.{self::A::_#A#property4#isSet} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#property4} in #t1{core::int} : throw new _in::LateError::fieldNI("property4");
+    return this.{self::A::_#A#property4#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#property4}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("property4");
   set property4(core::int #t2) → void {
     this.{self::A::_#A#property4#isSet} = true;
     this.{self::A::_#A#property4} = #t2;
   }
   get property5() → core::int?
-    return this.{self::A::_#A#property5#isSet} ?{core::int?} this.{self::A::_#A#property5} : throw new _in::LateError::fieldNI("property5");
+    return this.{self::A::_#A#property5#isSet}{core::bool} ?{core::int?} this.{self::A::_#A#property5}{core::int?} : throw new _in::LateError::fieldNI("property5");
   set property5(core::int? #t3) → void {
     this.{self::A::_#A#property5#isSet} = true;
     this.{self::A::_#A#property5} = #t3;
   }
   get property6() → core::int
-    return this.{self::A::_#A#property6#isSet} ?{core::int} let final core::int? #t4 = this.{self::A::_#A#property6} in #t4{core::int} : throw new _in::LateError::fieldNI("property6");
+    return this.{self::A::_#A#property6#isSet}{core::bool} ?{core::int} let final core::int? #t4 = this.{self::A::_#A#property6}{core::int?} in #t4{core::int} : throw new _in::LateError::fieldNI("property6");
   set property6(covariant core::int #t5) → void {
     this.{self::A::_#A#property6#isSet} = true;
     this.{self::A::_#A#property6} = #t5;
@@ -76,27 +76,27 @@
     : self::B1::_#B1#property4#isSet = true, self::B1::_#B1#property4 = property4, self::B1::_#B1#property5#isSet = true, self::B1::_#B1#property5 = property5, self::B1::_#B1#property6#isSet = true, self::B1::_#B1#property6 = property6, super core::Object::•()
     ;
   get property4() → core::int
-    return this.{self::B1::_#B1#property4#isSet} ?{core::int} let final core::int? #t6 = this.{self::B1::_#B1#property4} in #t6{core::int} : throw new _in::LateError::fieldNI("property4");
+    return this.{self::B1::_#B1#property4#isSet}{core::bool} ?{core::int} let final core::int? #t6 = this.{self::B1::_#B1#property4}{core::int?} in #t6{core::int} : throw new _in::LateError::fieldNI("property4");
   set property4(core::int #t7) → void
-    if(this.{self::B1::_#B1#property4#isSet})
+    if(this.{self::B1::_#B1#property4#isSet}{core::bool})
       throw new _in::LateError::fieldAI("property4");
     else {
       this.{self::B1::_#B1#property4#isSet} = true;
       this.{self::B1::_#B1#property4} = #t7;
     }
   get property5() → core::int
-    return this.{self::B1::_#B1#property5#isSet} ?{core::int} let final core::int? #t8 = this.{self::B1::_#B1#property5} in #t8{core::int} : throw new _in::LateError::fieldNI("property5");
+    return this.{self::B1::_#B1#property5#isSet}{core::bool} ?{core::int} let final core::int? #t8 = this.{self::B1::_#B1#property5}{core::int?} in #t8{core::int} : throw new _in::LateError::fieldNI("property5");
   set property5(core::int #t9) → void
-    if(this.{self::B1::_#B1#property5#isSet})
+    if(this.{self::B1::_#B1#property5#isSet}{core::bool})
       throw new _in::LateError::fieldAI("property5");
     else {
       this.{self::B1::_#B1#property5#isSet} = true;
       this.{self::B1::_#B1#property5} = #t9;
     }
   get property6() → core::int?
-    return this.{self::B1::_#B1#property6#isSet} ?{core::int?} this.{self::B1::_#B1#property6} : throw new _in::LateError::fieldNI("property6");
+    return this.{self::B1::_#B1#property6#isSet}{core::bool} ?{core::int?} this.{self::B1::_#B1#property6}{core::int?} : throw new _in::LateError::fieldNI("property6");
   set property6(core::int? #t10) → void
-    if(this.{self::B1::_#B1#property6#isSet})
+    if(this.{self::B1::_#B1#property6#isSet}{core::bool})
       throw new _in::LateError::fieldAI("property6");
     else {
       this.{self::B1::_#B1#property6#isSet} = true;
@@ -122,19 +122,19 @@
     : self::C1::_#C1#property4#isSet = true, self::C1::_#C1#property4 = property4, self::C1::_#C1#property5#isSet = true, self::C1::_#C1#property5 = property5, self::C1::_#C1#property6#isSet = true, self::C1::_#C1#property6 = property6, super core::Object::•()
     ;
   get property4() → core::int
-    return this.{self::C1::_#C1#property4#isSet} ?{core::int} let final core::int? #t11 = this.{self::C1::_#C1#property4} in #t11{core::int} : throw new _in::LateError::fieldNI("property4");
+    return this.{self::C1::_#C1#property4#isSet}{core::bool} ?{core::int} let final core::int? #t11 = this.{self::C1::_#C1#property4}{core::int?} in #t11{core::int} : throw new _in::LateError::fieldNI("property4");
   set property4(core::int #t12) → void {
     this.{self::C1::_#C1#property4#isSet} = true;
     this.{self::C1::_#C1#property4} = #t12;
   }
   get property5() → core::int
-    return this.{self::C1::_#C1#property5#isSet} ?{core::int} let final core::int? #t13 = this.{self::C1::_#C1#property5} in #t13{core::int} : throw new _in::LateError::fieldNI("property5");
+    return this.{self::C1::_#C1#property5#isSet}{core::bool} ?{core::int} let final core::int? #t13 = this.{self::C1::_#C1#property5}{core::int?} in #t13{core::int} : throw new _in::LateError::fieldNI("property5");
   set property5(core::int #t14) → void {
     this.{self::C1::_#C1#property5#isSet} = true;
     this.{self::C1::_#C1#property5} = #t14;
   }
   get property6() → core::int
-    return this.{self::C1::_#C1#property6#isSet} ?{core::int} let final core::int? #t15 = this.{self::C1::_#C1#property6} in #t15{core::int} : throw new _in::LateError::fieldNI("property6");
+    return this.{self::C1::_#C1#property6#isSet}{core::bool} ?{core::int} let final core::int? #t15 = this.{self::C1::_#C1#property6}{core::int?} in #t15{core::int} : throw new _in::LateError::fieldNI("property6");
   set property6(core::int #t16) → void {
     this.{self::C1::_#C1#property6#isSet} = true;
     this.{self::C1::_#C1#property6} = #t16;
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.expect
index b34786e..5f86747 100644
--- a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.expect
@@ -8,8 +8,8 @@
 static method main() → dynamic {
   lowered core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t1 = #local in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t1{core::int};
+    return let final core::int? #t1 = #local in #t1 == null ?{core::int} throw new _in::LateError::localNI("local") : #t1{core::int};
   function #local#set(core::int #t2) → dynamic
     return #local = #t2;
-  #local#set.call(self::f<core::int>(0));
+  #local#set(self::f<core::int>(0)){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.transformed.expect
index b34786e..5f86747 100644
--- a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.transformed.expect
@@ -8,8 +8,8 @@
 static method main() → dynamic {
   lowered core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t1 = #local in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t1{core::int};
+    return let final core::int? #t1 = #local in #t1 == null ?{core::int} throw new _in::LateError::localNI("local") : #t1{core::int};
   function #local#set(core::int #t2) → dynamic
     return #local = #t2;
-  #local#set.call(self::f<core::int>(0));
+  #local#set(self::f<core::int>(0)){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.expect
index 4a7ba84..6d53db1 100644
--- a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.expect
@@ -14,5 +14,5 @@
     #local#isSet = true;
     return #local = #t1;
   }
-  #local#set.call(self::f<core::int>(0));
+  #local#set(self::f<core::int>(0)){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.transformed.expect
index 4a7ba84..6d53db1 100644
--- a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.transformed.expect
@@ -14,5 +14,5 @@
     #local#isSet = true;
     return #local = #t1;
   }
-  #local#set.call(self::f<core::int>(0));
+  #local#set(self::f<core::int>(0)){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.strong.expect b/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.strong.expect
index 4055b4c..f6de289 100644
--- a/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.strong.expect
@@ -16,7 +16,7 @@
     : super core::Object::•()
     ;
   get field() → core::int?
-    return this.{self::B::_#B#field#isSet} ?{core::int?} this.{self::B::_#B#field} : throw new _in::LateError::fieldNI("field");
+    return this.{self::B::_#B#field#isSet}{core::bool} ?{core::int?} this.{self::B::_#B#field}{core::int?} : throw new _in::LateError::fieldNI("field");
   set field(core::int? #t1) → void {
     this.{self::B::_#B#field#isSet} = true;
     this.{self::B::_#B#field} = #t1;
diff --git a/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.strong.transformed.expect
index 4055b4c..f6de289 100644
--- a/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
     : super core::Object::•()
     ;
   get field() → core::int?
-    return this.{self::B::_#B#field#isSet} ?{core::int?} this.{self::B::_#B#field} : throw new _in::LateError::fieldNI("field");
+    return this.{self::B::_#B#field#isSet}{core::bool} ?{core::int?} this.{self::B::_#B#field}{core::int?} : throw new _in::LateError::fieldNI("field");
   set field(core::int? #t1) → void {
     this.{self::B::_#B#field#isSet} = true;
     this.{self::B::_#B#field} = #t1;
diff --git a/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.weak.expect b/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.weak.expect
index 4055b4c..f6de289 100644
--- a/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.weak.expect
@@ -16,7 +16,7 @@
     : super core::Object::•()
     ;
   get field() → core::int?
-    return this.{self::B::_#B#field#isSet} ?{core::int?} this.{self::B::_#B#field} : throw new _in::LateError::fieldNI("field");
+    return this.{self::B::_#B#field#isSet}{core::bool} ?{core::int?} this.{self::B::_#B#field}{core::int?} : throw new _in::LateError::fieldNI("field");
   set field(core::int? #t1) → void {
     this.{self::B::_#B#field#isSet} = true;
     this.{self::B::_#B#field} = #t1;
diff --git a/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.weak.transformed.expect
index 4055b4c..f6de289 100644
--- a/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
     : super core::Object::•()
     ;
   get field() → core::int?
-    return this.{self::B::_#B#field#isSet} ?{core::int?} this.{self::B::_#B#field} : throw new _in::LateError::fieldNI("field");
+    return this.{self::B::_#B#field#isSet}{core::bool} ?{core::int?} this.{self::B::_#B#field}{core::int?} : throw new _in::LateError::fieldNI("field");
   set field(core::int? #t1) → void {
     this.{self::B::_#B#field#isSet} = true;
     this.{self::B::_#B#field} = #t1;
diff --git a/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.strong.expect b/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.strong.expect
index 477672b..8601c26 100644
--- a/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.strong.expect
@@ -18,10 +18,10 @@
     : super core::Object::•()
     ;
   static get nonNullableStaticField() → core::int
-    return let final core::int? #t1 = self::Class::_#nonNullableStaticField in #t1.==(null) ?{core::int} let final core::int #t2 = (let final core::int #t3 = self::Class::nonNullableStaticFieldReads in let final core::int #t4 = self::Class::nonNullableStaticFieldReads = #t3.{core::num::+}(1) in #t3).{core::num::==}(0) ?{core::int} self::Class::nonNullableStaticField.{core::num::+}(1) : 0 in self::Class::_#nonNullableStaticField.==(null) ?{core::int} self::Class::_#nonNullableStaticField = #t2 : throw new _in::LateError::fieldADI("nonNullableStaticField") : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#nonNullableStaticField in #t1 == null ?{core::int} let final core::int #t2 = (let final core::int #t3 = self::Class::nonNullableStaticFieldReads in let final core::int #t4 = self::Class::nonNullableStaticFieldReads = #t3.{core::num::+}(1){(core::num) → core::int} in #t3) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nonNullableStaticField.{core::num::+}(1){(core::num) → core::int} : 0 in self::Class::_#nonNullableStaticField == null ?{core::int} self::Class::_#nonNullableStaticField = #t2 : throw new _in::LateError::fieldADI("nonNullableStaticField") : #t1{core::int};
   static get nullableStaticField() → core::int? {
     if(!self::Class::_#nullableStaticField#isSet) {
-      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1) in #t6).{core::num::==}(0) ?{core::int} self::Class::nullableStaticField.{core::Object::hashCode} : 0;
+      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1){(core::num) → core::int} in #t6) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nullableStaticField.{core::Object::hashCode}{core::int} : 0;
       if(self::Class::_#nullableStaticField#isSet)
         throw new _in::LateError::fieldADI("nullableStaticField");
       self::Class::_#nullableStaticField = #t5;
@@ -30,16 +30,16 @@
     return self::Class::_#nullableStaticField;
   }
   get nonNullableInstanceField() → core::int
-    return let final core::int? #t8 = this.{self::Class::_#Class#nonNullableInstanceField} in #t8.==(null) ?{core::int} let final core::int #t9 = (let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} in let final core::int #t11 = this.{self::Class::nonNullableInstanceFieldReads} = #t10.{core::num::+}(1) in #t10).{core::num::==}(0) ?{core::int} this.{self::Class::nonNullableInstanceField}.{core::num::+}(1) : 0 in this.{self::Class::_#Class#nonNullableInstanceField}.==(null) ?{core::int} this.{self::Class::_#Class#nonNullableInstanceField} = #t9 : throw new _in::LateError::fieldADI("nonNullableInstanceField") : #t8{core::int};
+    return let final core::int? #t8 = this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} in #t8 == null ?{core::int} let final core::int #t9 = (let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads}{core::int} in let final core::int #t11 = this.{self::Class::nonNullableInstanceFieldReads} = #t10.{core::num::+}(1){(core::num) → core::int} in #t10) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} this.{self::Class::nonNullableInstanceField}{core::int}.{core::num::+}(1){(core::num) → core::int} : 0 in this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#nonNullableInstanceField} = #t9 : throw new _in::LateError::fieldADI("nonNullableInstanceField") : #t8{core::int};
   get nullableInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}) {
-      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1) in #t13).{core::num::==}(0) ?{core::int} this.{self::Class::nullableInstanceField}.{core::Object::hashCode} : 0;
-      if(this.{self::Class::_#Class#nullableInstanceField#isSet})
+    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool}) {
+      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads}{core::int} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} this.{self::Class::nullableInstanceField}{core::int?}.{core::Object::hashCode}{core::int} : 0;
+      if(this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("nullableInstanceField");
       this.{self::Class::_#Class#nullableInstanceField} = #t12;
       this.{self::Class::_#Class#nullableInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#nullableInstanceField};
+    return this.{self::Class::_#Class#nullableInstanceField}{core::int?};
   }
 }
 static field core::int nonNullableTopLevelFieldReads = 0;
@@ -48,10 +48,10 @@
 static field core::int? _#nullableTopLevelField = null;
 static field core::bool _#nullableTopLevelField#isSet = false;
 static get nonNullableTopLevelField() → core::int
-  return let final core::int? #t15 = self::_#nonNullableTopLevelField in #t15.==(null) ?{core::int} let final core::int #t16 = (let final core::int #t17 = self::nonNullableTopLevelFieldReads in let final core::int #t18 = self::nonNullableTopLevelFieldReads = #t17.{core::num::+}(1) in #t17).{core::num::==}(0) ?{core::int} self::nonNullableTopLevelField.{core::num::+}(1) : 0 in self::_#nonNullableTopLevelField.==(null) ?{core::int} self::_#nonNullableTopLevelField = #t16 : throw new _in::LateError::fieldADI("nonNullableTopLevelField") : #t15{core::int};
+  return let final core::int? #t15 = self::_#nonNullableTopLevelField in #t15 == null ?{core::int} let final core::int #t16 = (let final core::int #t17 = self::nonNullableTopLevelFieldReads in let final core::int #t18 = self::nonNullableTopLevelFieldReads = #t17.{core::num::+}(1){(core::num) → core::int} in #t17) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nonNullableTopLevelField.{core::num::+}(1){(core::num) → core::int} : 0 in self::_#nonNullableTopLevelField == null ?{core::int} self::_#nonNullableTopLevelField = #t16 : throw new _in::LateError::fieldADI("nonNullableTopLevelField") : #t15{core::int};
 static get nullableTopLevelField() → core::int? {
   if(!self::_#nullableTopLevelField#isSet) {
-    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1) in #t20).{core::num::==}(0) ?{core::int} self::nullableTopLevelField.{core::Object::hashCode} : 0;
+    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1){(core::num) → core::int} in #t20) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nullableTopLevelField.{core::Object::hashCode}{core::int} : 0;
     if(self::_#nullableTopLevelField#isSet)
       throw new _in::LateError::fieldADI("nullableTopLevelField");
     self::_#nullableTopLevelField = #t19;
@@ -64,13 +64,13 @@
   self::throws(() → core::int? => self::nullableTopLevelField, "Read nullableTopLevelField");
   self::throws(() → core::int => self::Class::nonNullableStaticField, "Read nonNullableStaticField");
   self::throws(() → core::int? => self::Class::nullableStaticField, "Read nullableStaticField");
-  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}, "Read nonNullableInstanceField");
-  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}, "Read nullableInstanceField");
+  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}{core::int}, "Read nonNullableInstanceField");
+  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}{core::int?}, "Read nullableInstanceField");
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.strong.transformed.expect
index 477672b..8601c26 100644
--- a/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.strong.transformed.expect
@@ -18,10 +18,10 @@
     : super core::Object::•()
     ;
   static get nonNullableStaticField() → core::int
-    return let final core::int? #t1 = self::Class::_#nonNullableStaticField in #t1.==(null) ?{core::int} let final core::int #t2 = (let final core::int #t3 = self::Class::nonNullableStaticFieldReads in let final core::int #t4 = self::Class::nonNullableStaticFieldReads = #t3.{core::num::+}(1) in #t3).{core::num::==}(0) ?{core::int} self::Class::nonNullableStaticField.{core::num::+}(1) : 0 in self::Class::_#nonNullableStaticField.==(null) ?{core::int} self::Class::_#nonNullableStaticField = #t2 : throw new _in::LateError::fieldADI("nonNullableStaticField") : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#nonNullableStaticField in #t1 == null ?{core::int} let final core::int #t2 = (let final core::int #t3 = self::Class::nonNullableStaticFieldReads in let final core::int #t4 = self::Class::nonNullableStaticFieldReads = #t3.{core::num::+}(1){(core::num) → core::int} in #t3) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nonNullableStaticField.{core::num::+}(1){(core::num) → core::int} : 0 in self::Class::_#nonNullableStaticField == null ?{core::int} self::Class::_#nonNullableStaticField = #t2 : throw new _in::LateError::fieldADI("nonNullableStaticField") : #t1{core::int};
   static get nullableStaticField() → core::int? {
     if(!self::Class::_#nullableStaticField#isSet) {
-      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1) in #t6).{core::num::==}(0) ?{core::int} self::Class::nullableStaticField.{core::Object::hashCode} : 0;
+      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1){(core::num) → core::int} in #t6) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nullableStaticField.{core::Object::hashCode}{core::int} : 0;
       if(self::Class::_#nullableStaticField#isSet)
         throw new _in::LateError::fieldADI("nullableStaticField");
       self::Class::_#nullableStaticField = #t5;
@@ -30,16 +30,16 @@
     return self::Class::_#nullableStaticField;
   }
   get nonNullableInstanceField() → core::int
-    return let final core::int? #t8 = this.{self::Class::_#Class#nonNullableInstanceField} in #t8.==(null) ?{core::int} let final core::int #t9 = (let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} in let final core::int #t11 = this.{self::Class::nonNullableInstanceFieldReads} = #t10.{core::num::+}(1) in #t10).{core::num::==}(0) ?{core::int} this.{self::Class::nonNullableInstanceField}.{core::num::+}(1) : 0 in this.{self::Class::_#Class#nonNullableInstanceField}.==(null) ?{core::int} this.{self::Class::_#Class#nonNullableInstanceField} = #t9 : throw new _in::LateError::fieldADI("nonNullableInstanceField") : #t8{core::int};
+    return let final core::int? #t8 = this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} in #t8 == null ?{core::int} let final core::int #t9 = (let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads}{core::int} in let final core::int #t11 = this.{self::Class::nonNullableInstanceFieldReads} = #t10.{core::num::+}(1){(core::num) → core::int} in #t10) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} this.{self::Class::nonNullableInstanceField}{core::int}.{core::num::+}(1){(core::num) → core::int} : 0 in this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#nonNullableInstanceField} = #t9 : throw new _in::LateError::fieldADI("nonNullableInstanceField") : #t8{core::int};
   get nullableInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}) {
-      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1) in #t13).{core::num::==}(0) ?{core::int} this.{self::Class::nullableInstanceField}.{core::Object::hashCode} : 0;
-      if(this.{self::Class::_#Class#nullableInstanceField#isSet})
+    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool}) {
+      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads}{core::int} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} this.{self::Class::nullableInstanceField}{core::int?}.{core::Object::hashCode}{core::int} : 0;
+      if(this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("nullableInstanceField");
       this.{self::Class::_#Class#nullableInstanceField} = #t12;
       this.{self::Class::_#Class#nullableInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#nullableInstanceField};
+    return this.{self::Class::_#Class#nullableInstanceField}{core::int?};
   }
 }
 static field core::int nonNullableTopLevelFieldReads = 0;
@@ -48,10 +48,10 @@
 static field core::int? _#nullableTopLevelField = null;
 static field core::bool _#nullableTopLevelField#isSet = false;
 static get nonNullableTopLevelField() → core::int
-  return let final core::int? #t15 = self::_#nonNullableTopLevelField in #t15.==(null) ?{core::int} let final core::int #t16 = (let final core::int #t17 = self::nonNullableTopLevelFieldReads in let final core::int #t18 = self::nonNullableTopLevelFieldReads = #t17.{core::num::+}(1) in #t17).{core::num::==}(0) ?{core::int} self::nonNullableTopLevelField.{core::num::+}(1) : 0 in self::_#nonNullableTopLevelField.==(null) ?{core::int} self::_#nonNullableTopLevelField = #t16 : throw new _in::LateError::fieldADI("nonNullableTopLevelField") : #t15{core::int};
+  return let final core::int? #t15 = self::_#nonNullableTopLevelField in #t15 == null ?{core::int} let final core::int #t16 = (let final core::int #t17 = self::nonNullableTopLevelFieldReads in let final core::int #t18 = self::nonNullableTopLevelFieldReads = #t17.{core::num::+}(1){(core::num) → core::int} in #t17) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nonNullableTopLevelField.{core::num::+}(1){(core::num) → core::int} : 0 in self::_#nonNullableTopLevelField == null ?{core::int} self::_#nonNullableTopLevelField = #t16 : throw new _in::LateError::fieldADI("nonNullableTopLevelField") : #t15{core::int};
 static get nullableTopLevelField() → core::int? {
   if(!self::_#nullableTopLevelField#isSet) {
-    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1) in #t20).{core::num::==}(0) ?{core::int} self::nullableTopLevelField.{core::Object::hashCode} : 0;
+    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1){(core::num) → core::int} in #t20) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nullableTopLevelField.{core::Object::hashCode}{core::int} : 0;
     if(self::_#nullableTopLevelField#isSet)
       throw new _in::LateError::fieldADI("nullableTopLevelField");
     self::_#nullableTopLevelField = #t19;
@@ -64,13 +64,13 @@
   self::throws(() → core::int? => self::nullableTopLevelField, "Read nullableTopLevelField");
   self::throws(() → core::int => self::Class::nonNullableStaticField, "Read nonNullableStaticField");
   self::throws(() → core::int? => self::Class::nullableStaticField, "Read nullableStaticField");
-  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}, "Read nonNullableInstanceField");
-  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}, "Read nullableInstanceField");
+  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}{core::int}, "Read nonNullableInstanceField");
+  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}{core::int?}, "Read nullableInstanceField");
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.weak.expect b/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.weak.expect
index f0df89a..fdfbb02 100644
--- a/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.weak.expect
@@ -21,7 +21,7 @@
     ;
   static get nonNullableStaticField() → core::int {
     if(!self::Class::_#nonNullableStaticField#isSet) {
-      final core::int #t1 = (let final core::int #t2 = self::Class::nonNullableStaticFieldReads in let final core::int #t3 = self::Class::nonNullableStaticFieldReads = #t2.{core::num::+}(1) in #t2).{core::num::==}(0) ?{core::int} self::Class::nonNullableStaticField.{core::num::+}(1) : 0;
+      final core::int #t1 = (let final core::int #t2 = self::Class::nonNullableStaticFieldReads in let final core::int #t3 = self::Class::nonNullableStaticFieldReads = #t2.{core::num::+}(1){(core::num) → core::int} in #t2) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nonNullableStaticField.{core::num::+}(1){(core::num) → core::int} : 0;
       if(self::Class::_#nonNullableStaticField#isSet)
         throw new _in::LateError::fieldADI("nonNullableStaticField");
       self::Class::_#nonNullableStaticField = #t1;
@@ -31,7 +31,7 @@
   }
   static get nullableStaticField() → core::int? {
     if(!self::Class::_#nullableStaticField#isSet) {
-      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1) in #t6).{core::num::==}(0) ?{core::int} self::Class::nullableStaticField.{core::Object::hashCode} : 0;
+      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1){(core::num) → core::int} in #t6) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nullableStaticField.{core::Object::hashCode}{core::int} : 0;
       if(self::Class::_#nullableStaticField#isSet)
         throw new _in::LateError::fieldADI("nullableStaticField");
       self::Class::_#nullableStaticField = #t5;
@@ -40,24 +40,24 @@
     return self::Class::_#nullableStaticField;
   }
   get nonNullableInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#nonNullableInstanceField#isSet}) {
-      final core::int #t8 = (let final core::int #t9 = this.{self::Class::nonNullableInstanceFieldReads} in let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} = #t9.{core::num::+}(1) in #t9).{core::num::==}(0) ?{core::int} this.{self::Class::nonNullableInstanceField}.{core::num::+}(1) : 0;
-      if(this.{self::Class::_#Class#nonNullableInstanceField#isSet})
+    if(!this.{self::Class::_#Class#nonNullableInstanceField#isSet}{core::bool}) {
+      final core::int #t8 = (let final core::int #t9 = this.{self::Class::nonNullableInstanceFieldReads}{core::int} in let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} = #t9.{core::num::+}(1){(core::num) → core::int} in #t9) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} this.{self::Class::nonNullableInstanceField}{core::int}.{core::num::+}(1){(core::num) → core::int} : 0;
+      if(this.{self::Class::_#Class#nonNullableInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("nonNullableInstanceField");
       this.{self::Class::_#Class#nonNullableInstanceField} = #t8;
       this.{self::Class::_#Class#nonNullableInstanceField#isSet} = true;
     }
-    return let final core::int? #t11 = this.{self::Class::_#Class#nonNullableInstanceField} in #t11{core::int};
+    return let final core::int? #t11 = this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} in #t11{core::int};
   }
   get nullableInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}) {
-      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1) in #t13).{core::num::==}(0) ?{core::int} this.{self::Class::nullableInstanceField}.{core::Object::hashCode} : 0;
-      if(this.{self::Class::_#Class#nullableInstanceField#isSet})
+    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool}) {
+      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads}{core::int} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} this.{self::Class::nullableInstanceField}{core::int?}.{core::Object::hashCode}{core::int} : 0;
+      if(this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("nullableInstanceField");
       this.{self::Class::_#Class#nullableInstanceField} = #t12;
       this.{self::Class::_#Class#nullableInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#nullableInstanceField};
+    return this.{self::Class::_#Class#nullableInstanceField}{core::int?};
   }
 }
 static field core::int nonNullableTopLevelFieldReads = 0;
@@ -68,7 +68,7 @@
 static field core::bool _#nullableTopLevelField#isSet = false;
 static get nonNullableTopLevelField() → core::int {
   if(!self::_#nonNullableTopLevelField#isSet) {
-    final core::int #t15 = (let final core::int #t16 = self::nonNullableTopLevelFieldReads in let final core::int #t17 = self::nonNullableTopLevelFieldReads = #t16.{core::num::+}(1) in #t16).{core::num::==}(0) ?{core::int} self::nonNullableTopLevelField.{core::num::+}(1) : 0;
+    final core::int #t15 = (let final core::int #t16 = self::nonNullableTopLevelFieldReads in let final core::int #t17 = self::nonNullableTopLevelFieldReads = #t16.{core::num::+}(1){(core::num) → core::int} in #t16) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nonNullableTopLevelField.{core::num::+}(1){(core::num) → core::int} : 0;
     if(self::_#nonNullableTopLevelField#isSet)
       throw new _in::LateError::fieldADI("nonNullableTopLevelField");
     self::_#nonNullableTopLevelField = #t15;
@@ -78,7 +78,7 @@
 }
 static get nullableTopLevelField() → core::int? {
   if(!self::_#nullableTopLevelField#isSet) {
-    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1) in #t20).{core::num::==}(0) ?{core::int} self::nullableTopLevelField.{core::Object::hashCode} : 0;
+    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1){(core::num) → core::int} in #t20) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nullableTopLevelField.{core::Object::hashCode}{core::int} : 0;
     if(self::_#nullableTopLevelField#isSet)
       throw new _in::LateError::fieldADI("nullableTopLevelField");
     self::_#nullableTopLevelField = #t19;
@@ -91,13 +91,13 @@
   self::throws(() → core::int? => self::nullableTopLevelField, "Read nullableTopLevelField");
   self::throws(() → core::int => self::Class::nonNullableStaticField, "Read nonNullableStaticField");
   self::throws(() → core::int? => self::Class::nullableStaticField, "Read nullableStaticField");
-  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}, "Read nonNullableInstanceField");
-  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}, "Read nullableInstanceField");
+  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}{core::int}, "Read nonNullableInstanceField");
+  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}{core::int?}, "Read nullableInstanceField");
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.weak.transformed.expect
index f0df89a..fdfbb02 100644
--- a/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
     ;
   static get nonNullableStaticField() → core::int {
     if(!self::Class::_#nonNullableStaticField#isSet) {
-      final core::int #t1 = (let final core::int #t2 = self::Class::nonNullableStaticFieldReads in let final core::int #t3 = self::Class::nonNullableStaticFieldReads = #t2.{core::num::+}(1) in #t2).{core::num::==}(0) ?{core::int} self::Class::nonNullableStaticField.{core::num::+}(1) : 0;
+      final core::int #t1 = (let final core::int #t2 = self::Class::nonNullableStaticFieldReads in let final core::int #t3 = self::Class::nonNullableStaticFieldReads = #t2.{core::num::+}(1){(core::num) → core::int} in #t2) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nonNullableStaticField.{core::num::+}(1){(core::num) → core::int} : 0;
       if(self::Class::_#nonNullableStaticField#isSet)
         throw new _in::LateError::fieldADI("nonNullableStaticField");
       self::Class::_#nonNullableStaticField = #t1;
@@ -31,7 +31,7 @@
   }
   static get nullableStaticField() → core::int? {
     if(!self::Class::_#nullableStaticField#isSet) {
-      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1) in #t6).{core::num::==}(0) ?{core::int} self::Class::nullableStaticField.{core::Object::hashCode} : 0;
+      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1){(core::num) → core::int} in #t6) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nullableStaticField.{core::Object::hashCode}{core::int} : 0;
       if(self::Class::_#nullableStaticField#isSet)
         throw new _in::LateError::fieldADI("nullableStaticField");
       self::Class::_#nullableStaticField = #t5;
@@ -40,24 +40,24 @@
     return self::Class::_#nullableStaticField;
   }
   get nonNullableInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#nonNullableInstanceField#isSet}) {
-      final core::int #t8 = (let final core::int #t9 = this.{self::Class::nonNullableInstanceFieldReads} in let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} = #t9.{core::num::+}(1) in #t9).{core::num::==}(0) ?{core::int} this.{self::Class::nonNullableInstanceField}.{core::num::+}(1) : 0;
-      if(this.{self::Class::_#Class#nonNullableInstanceField#isSet})
+    if(!this.{self::Class::_#Class#nonNullableInstanceField#isSet}{core::bool}) {
+      final core::int #t8 = (let final core::int #t9 = this.{self::Class::nonNullableInstanceFieldReads}{core::int} in let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} = #t9.{core::num::+}(1){(core::num) → core::int} in #t9) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} this.{self::Class::nonNullableInstanceField}{core::int}.{core::num::+}(1){(core::num) → core::int} : 0;
+      if(this.{self::Class::_#Class#nonNullableInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("nonNullableInstanceField");
       this.{self::Class::_#Class#nonNullableInstanceField} = #t8;
       this.{self::Class::_#Class#nonNullableInstanceField#isSet} = true;
     }
-    return let final core::int? #t11 = this.{self::Class::_#Class#nonNullableInstanceField} in #t11{core::int};
+    return let final core::int? #t11 = this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} in #t11{core::int};
   }
   get nullableInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}) {
-      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1) in #t13).{core::num::==}(0) ?{core::int} this.{self::Class::nullableInstanceField}.{core::Object::hashCode} : 0;
-      if(this.{self::Class::_#Class#nullableInstanceField#isSet})
+    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool}) {
+      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads}{core::int} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} this.{self::Class::nullableInstanceField}{core::int?}.{core::Object::hashCode}{core::int} : 0;
+      if(this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("nullableInstanceField");
       this.{self::Class::_#Class#nullableInstanceField} = #t12;
       this.{self::Class::_#Class#nullableInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#nullableInstanceField};
+    return this.{self::Class::_#Class#nullableInstanceField}{core::int?};
   }
 }
 static field core::int nonNullableTopLevelFieldReads = 0;
@@ -68,7 +68,7 @@
 static field core::bool _#nullableTopLevelField#isSet = false;
 static get nonNullableTopLevelField() → core::int {
   if(!self::_#nonNullableTopLevelField#isSet) {
-    final core::int #t15 = (let final core::int #t16 = self::nonNullableTopLevelFieldReads in let final core::int #t17 = self::nonNullableTopLevelFieldReads = #t16.{core::num::+}(1) in #t16).{core::num::==}(0) ?{core::int} self::nonNullableTopLevelField.{core::num::+}(1) : 0;
+    final core::int #t15 = (let final core::int #t16 = self::nonNullableTopLevelFieldReads in let final core::int #t17 = self::nonNullableTopLevelFieldReads = #t16.{core::num::+}(1){(core::num) → core::int} in #t16) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nonNullableTopLevelField.{core::num::+}(1){(core::num) → core::int} : 0;
     if(self::_#nonNullableTopLevelField#isSet)
       throw new _in::LateError::fieldADI("nonNullableTopLevelField");
     self::_#nonNullableTopLevelField = #t15;
@@ -78,7 +78,7 @@
 }
 static get nullableTopLevelField() → core::int? {
   if(!self::_#nullableTopLevelField#isSet) {
-    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1) in #t20).{core::num::==}(0) ?{core::int} self::nullableTopLevelField.{core::Object::hashCode} : 0;
+    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1){(core::num) → core::int} in #t20) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nullableTopLevelField.{core::Object::hashCode}{core::int} : 0;
     if(self::_#nullableTopLevelField#isSet)
       throw new _in::LateError::fieldADI("nullableTopLevelField");
     self::_#nullableTopLevelField = #t19;
@@ -91,13 +91,13 @@
   self::throws(() → core::int? => self::nullableTopLevelField, "Read nullableTopLevelField");
   self::throws(() → core::int => self::Class::nonNullableStaticField, "Read nonNullableStaticField");
   self::throws(() → core::int? => self::Class::nullableStaticField, "Read nullableStaticField");
-  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}, "Read nonNullableInstanceField");
-  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}, "Read nullableInstanceField");
+  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}{core::int}, "Read nonNullableInstanceField");
+  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}{core::int?}, "Read nullableInstanceField");
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.strong.expect b/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.strong.expect
index 74f12ef..d9be34e 100644
--- a/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.strong.expect
@@ -21,10 +21,10 @@
     : super core::Object::•()
     ;
   static get nonNullableStaticField() → core::int
-    return let final core::int? #t1 = self::Class::_#nonNullableStaticField in #t1.==(null) ?{core::int} let final core::int #t2 = (let final core::int #t3 = self::Class::nonNullableStaticFieldReads in let final core::int #t4 = self::Class::nonNullableStaticFieldReads = #t3.{core::num::+}(1) in #t3).{core::num::==}(0) ?{core::int*} self::Class::nonNullableStaticField : ini::computeInitialValue() in self::Class::_#nonNullableStaticField.==(null) ?{core::int} self::Class::_#nonNullableStaticField = #t2 : throw new _in::LateError::fieldADI("nonNullableStaticField") : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#nonNullableStaticField in #t1 == null ?{core::int} let final core::int #t2 = (let final core::int #t3 = self::Class::nonNullableStaticFieldReads in let final core::int #t4 = self::Class::nonNullableStaticFieldReads = #t3.{core::num::+}(1){(core::num) → core::int} in #t3) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} self::Class::nonNullableStaticField : ini::computeInitialValue() in self::Class::_#nonNullableStaticField == null ?{core::int} self::Class::_#nonNullableStaticField = #t2 : throw new _in::LateError::fieldADI("nonNullableStaticField") : #t1{core::int};
   static get nullableStaticField() → core::int? {
     if(!self::Class::_#nullableStaticField#isSet) {
-      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1) in #t6).{core::num::==}(0) ?{core::int?} self::Class::nullableStaticField : ini::computeInitialValue();
+      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1){(core::num) → core::int} in #t6) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} self::Class::nullableStaticField : ini::computeInitialValue();
       if(self::Class::_#nullableStaticField#isSet)
         throw new _in::LateError::fieldADI("nullableStaticField");
       self::Class::_#nullableStaticField = #t5;
@@ -33,16 +33,16 @@
     return self::Class::_#nullableStaticField;
   }
   get nonNullableInstanceField() → core::int
-    return let final core::int? #t8 = this.{self::Class::_#Class#nonNullableInstanceField} in #t8.==(null) ?{core::int} let final core::int #t9 = (let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} in let final core::int #t11 = this.{self::Class::nonNullableInstanceFieldReads} = #t10.{core::num::+}(1) in #t10).{core::num::==}(0) ?{core::int*} this.{self::Class::nonNullableInstanceField} : ini::computeInitialValue() in this.{self::Class::_#Class#nonNullableInstanceField}.==(null) ?{core::int} this.{self::Class::_#Class#nonNullableInstanceField} = #t9 : throw new _in::LateError::fieldADI("nonNullableInstanceField") : #t8{core::int};
+    return let final core::int? #t8 = this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} in #t8 == null ?{core::int} let final core::int #t9 = (let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads}{core::int} in let final core::int #t11 = this.{self::Class::nonNullableInstanceFieldReads} = #t10.{core::num::+}(1){(core::num) → core::int} in #t10) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} this.{self::Class::nonNullableInstanceField}{core::int} : ini::computeInitialValue() in this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#nonNullableInstanceField} = #t9 : throw new _in::LateError::fieldADI("nonNullableInstanceField") : #t8{core::int};
   get nullableInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}) {
-      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1) in #t13).{core::num::==}(0) ?{core::int?} this.{self::Class::nullableInstanceField} : ini::computeInitialValue();
-      if(this.{self::Class::_#Class#nullableInstanceField#isSet})
+    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool}) {
+      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads}{core::int} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} this.{self::Class::nullableInstanceField}{core::int?} : ini::computeInitialValue();
+      if(this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("nullableInstanceField");
       this.{self::Class::_#Class#nullableInstanceField} = #t12;
       this.{self::Class::_#Class#nullableInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#nullableInstanceField};
+    return this.{self::Class::_#Class#nullableInstanceField}{core::int?};
   }
 }
 static field core::int nonNullableTopLevelFieldReads = 0;
@@ -51,10 +51,10 @@
 static field core::int? _#nullableTopLevelField = null;
 static field core::bool _#nullableTopLevelField#isSet = false;
 static get nonNullableTopLevelField() → core::int
-  return let final core::int? #t15 = self::_#nonNullableTopLevelField in #t15.==(null) ?{core::int} let final core::int #t16 = (let final core::int #t17 = self::nonNullableTopLevelFieldReads in let final core::int #t18 = self::nonNullableTopLevelFieldReads = #t17.{core::num::+}(1) in #t17).{core::num::==}(0) ?{core::int*} self::nonNullableTopLevelField : ini::computeInitialValue() in self::_#nonNullableTopLevelField.==(null) ?{core::int} self::_#nonNullableTopLevelField = #t16 : throw new _in::LateError::fieldADI("nonNullableTopLevelField") : #t15{core::int};
+  return let final core::int? #t15 = self::_#nonNullableTopLevelField in #t15 == null ?{core::int} let final core::int #t16 = (let final core::int #t17 = self::nonNullableTopLevelFieldReads in let final core::int #t18 = self::nonNullableTopLevelFieldReads = #t17.{core::num::+}(1){(core::num) → core::int} in #t17) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} self::nonNullableTopLevelField : ini::computeInitialValue() in self::_#nonNullableTopLevelField == null ?{core::int} self::_#nonNullableTopLevelField = #t16 : throw new _in::LateError::fieldADI("nonNullableTopLevelField") : #t15{core::int};
 static get nullableTopLevelField() → core::int? {
   if(!self::_#nullableTopLevelField#isSet) {
-    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1) in #t20).{core::num::==}(0) ?{core::int?} self::nullableTopLevelField : ini::computeInitialValue();
+    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1){(core::num) → core::int} in #t20) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} self::nullableTopLevelField : ini::computeInitialValue();
     if(self::_#nullableTopLevelField#isSet)
       throw new _in::LateError::fieldADI("nullableTopLevelField");
     self::_#nullableTopLevelField = #t19;
@@ -67,13 +67,13 @@
   self::throws(() → core::int? => self::nullableTopLevelField, "Read nullableTopLevelField");
   self::throws(() → core::int => self::Class::nonNullableStaticField, "Read nonNullableStaticField");
   self::throws(() → core::int? => self::Class::nullableStaticField, "Read nullableStaticField");
-  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}, "Read nonNullableInstanceField");
-  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}, "Read nullableInstanceField");
+  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}{core::int}, "Read nonNullableInstanceField");
+  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}{core::int?}, "Read nullableInstanceField");
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.strong.transformed.expect
index 74f12ef..d9be34e 100644
--- a/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.strong.transformed.expect
@@ -21,10 +21,10 @@
     : super core::Object::•()
     ;
   static get nonNullableStaticField() → core::int
-    return let final core::int? #t1 = self::Class::_#nonNullableStaticField in #t1.==(null) ?{core::int} let final core::int #t2 = (let final core::int #t3 = self::Class::nonNullableStaticFieldReads in let final core::int #t4 = self::Class::nonNullableStaticFieldReads = #t3.{core::num::+}(1) in #t3).{core::num::==}(0) ?{core::int*} self::Class::nonNullableStaticField : ini::computeInitialValue() in self::Class::_#nonNullableStaticField.==(null) ?{core::int} self::Class::_#nonNullableStaticField = #t2 : throw new _in::LateError::fieldADI("nonNullableStaticField") : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#nonNullableStaticField in #t1 == null ?{core::int} let final core::int #t2 = (let final core::int #t3 = self::Class::nonNullableStaticFieldReads in let final core::int #t4 = self::Class::nonNullableStaticFieldReads = #t3.{core::num::+}(1){(core::num) → core::int} in #t3) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} self::Class::nonNullableStaticField : ini::computeInitialValue() in self::Class::_#nonNullableStaticField == null ?{core::int} self::Class::_#nonNullableStaticField = #t2 : throw new _in::LateError::fieldADI("nonNullableStaticField") : #t1{core::int};
   static get nullableStaticField() → core::int? {
     if(!self::Class::_#nullableStaticField#isSet) {
-      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1) in #t6).{core::num::==}(0) ?{core::int?} self::Class::nullableStaticField : ini::computeInitialValue();
+      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1){(core::num) → core::int} in #t6) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} self::Class::nullableStaticField : ini::computeInitialValue();
       if(self::Class::_#nullableStaticField#isSet)
         throw new _in::LateError::fieldADI("nullableStaticField");
       self::Class::_#nullableStaticField = #t5;
@@ -33,16 +33,16 @@
     return self::Class::_#nullableStaticField;
   }
   get nonNullableInstanceField() → core::int
-    return let final core::int? #t8 = this.{self::Class::_#Class#nonNullableInstanceField} in #t8.==(null) ?{core::int} let final core::int #t9 = (let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} in let final core::int #t11 = this.{self::Class::nonNullableInstanceFieldReads} = #t10.{core::num::+}(1) in #t10).{core::num::==}(0) ?{core::int*} this.{self::Class::nonNullableInstanceField} : ini::computeInitialValue() in this.{self::Class::_#Class#nonNullableInstanceField}.==(null) ?{core::int} this.{self::Class::_#Class#nonNullableInstanceField} = #t9 : throw new _in::LateError::fieldADI("nonNullableInstanceField") : #t8{core::int};
+    return let final core::int? #t8 = this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} in #t8 == null ?{core::int} let final core::int #t9 = (let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads}{core::int} in let final core::int #t11 = this.{self::Class::nonNullableInstanceFieldReads} = #t10.{core::num::+}(1){(core::num) → core::int} in #t10) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} this.{self::Class::nonNullableInstanceField}{core::int} : ini::computeInitialValue() in this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#nonNullableInstanceField} = #t9 : throw new _in::LateError::fieldADI("nonNullableInstanceField") : #t8{core::int};
   get nullableInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}) {
-      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1) in #t13).{core::num::==}(0) ?{core::int?} this.{self::Class::nullableInstanceField} : ini::computeInitialValue();
-      if(this.{self::Class::_#Class#nullableInstanceField#isSet})
+    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool}) {
+      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads}{core::int} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} this.{self::Class::nullableInstanceField}{core::int?} : ini::computeInitialValue();
+      if(this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("nullableInstanceField");
       this.{self::Class::_#Class#nullableInstanceField} = #t12;
       this.{self::Class::_#Class#nullableInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#nullableInstanceField};
+    return this.{self::Class::_#Class#nullableInstanceField}{core::int?};
   }
 }
 static field core::int nonNullableTopLevelFieldReads = 0;
@@ -51,10 +51,10 @@
 static field core::int? _#nullableTopLevelField = null;
 static field core::bool _#nullableTopLevelField#isSet = false;
 static get nonNullableTopLevelField() → core::int
-  return let final core::int? #t15 = self::_#nonNullableTopLevelField in #t15.==(null) ?{core::int} let final core::int #t16 = (let final core::int #t17 = self::nonNullableTopLevelFieldReads in let final core::int #t18 = self::nonNullableTopLevelFieldReads = #t17.{core::num::+}(1) in #t17).{core::num::==}(0) ?{core::int*} self::nonNullableTopLevelField : ini::computeInitialValue() in self::_#nonNullableTopLevelField.==(null) ?{core::int} self::_#nonNullableTopLevelField = #t16 : throw new _in::LateError::fieldADI("nonNullableTopLevelField") : #t15{core::int};
+  return let final core::int? #t15 = self::_#nonNullableTopLevelField in #t15 == null ?{core::int} let final core::int #t16 = (let final core::int #t17 = self::nonNullableTopLevelFieldReads in let final core::int #t18 = self::nonNullableTopLevelFieldReads = #t17.{core::num::+}(1){(core::num) → core::int} in #t17) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} self::nonNullableTopLevelField : ini::computeInitialValue() in self::_#nonNullableTopLevelField == null ?{core::int} self::_#nonNullableTopLevelField = #t16 : throw new _in::LateError::fieldADI("nonNullableTopLevelField") : #t15{core::int};
 static get nullableTopLevelField() → core::int? {
   if(!self::_#nullableTopLevelField#isSet) {
-    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1) in #t20).{core::num::==}(0) ?{core::int?} self::nullableTopLevelField : ini::computeInitialValue();
+    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1){(core::num) → core::int} in #t20) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} self::nullableTopLevelField : ini::computeInitialValue();
     if(self::_#nullableTopLevelField#isSet)
       throw new _in::LateError::fieldADI("nullableTopLevelField");
     self::_#nullableTopLevelField = #t19;
@@ -67,13 +67,13 @@
   self::throws(() → core::int? => self::nullableTopLevelField, "Read nullableTopLevelField");
   self::throws(() → core::int => self::Class::nonNullableStaticField, "Read nonNullableStaticField");
   self::throws(() → core::int? => self::Class::nullableStaticField, "Read nullableStaticField");
-  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}, "Read nonNullableInstanceField");
-  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}, "Read nullableInstanceField");
+  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}{core::int}, "Read nonNullableInstanceField");
+  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}{core::int?}, "Read nullableInstanceField");
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.weak.expect b/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.weak.expect
index c0f506a..c72d69f 100644
--- a/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.weak.expect
@@ -24,7 +24,7 @@
     ;
   static get nonNullableStaticField() → core::int {
     if(!self::Class::_#nonNullableStaticField#isSet) {
-      final core::int #t1 = (let final core::int #t2 = self::Class::nonNullableStaticFieldReads in let final core::int #t3 = self::Class::nonNullableStaticFieldReads = #t2.{core::num::+}(1) in #t2).{core::num::==}(0) ?{core::int*} self::Class::nonNullableStaticField : ini::computeInitialValue();
+      final core::int #t1 = (let final core::int #t2 = self::Class::nonNullableStaticFieldReads in let final core::int #t3 = self::Class::nonNullableStaticFieldReads = #t2.{core::num::+}(1){(core::num) → core::int} in #t2) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} self::Class::nonNullableStaticField : ini::computeInitialValue();
       if(self::Class::_#nonNullableStaticField#isSet)
         throw new _in::LateError::fieldADI("nonNullableStaticField");
       self::Class::_#nonNullableStaticField = #t1;
@@ -34,7 +34,7 @@
   }
   static get nullableStaticField() → core::int? {
     if(!self::Class::_#nullableStaticField#isSet) {
-      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1) in #t6).{core::num::==}(0) ?{core::int?} self::Class::nullableStaticField : ini::computeInitialValue();
+      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1){(core::num) → core::int} in #t6) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} self::Class::nullableStaticField : ini::computeInitialValue();
       if(self::Class::_#nullableStaticField#isSet)
         throw new _in::LateError::fieldADI("nullableStaticField");
       self::Class::_#nullableStaticField = #t5;
@@ -43,24 +43,24 @@
     return self::Class::_#nullableStaticField;
   }
   get nonNullableInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#nonNullableInstanceField#isSet}) {
-      final core::int #t8 = (let final core::int #t9 = this.{self::Class::nonNullableInstanceFieldReads} in let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} = #t9.{core::num::+}(1) in #t9).{core::num::==}(0) ?{core::int*} this.{self::Class::nonNullableInstanceField} : ini::computeInitialValue();
-      if(this.{self::Class::_#Class#nonNullableInstanceField#isSet})
+    if(!this.{self::Class::_#Class#nonNullableInstanceField#isSet}{core::bool}) {
+      final core::int #t8 = (let final core::int #t9 = this.{self::Class::nonNullableInstanceFieldReads}{core::int} in let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} = #t9.{core::num::+}(1){(core::num) → core::int} in #t9) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} this.{self::Class::nonNullableInstanceField}{core::int} : ini::computeInitialValue();
+      if(this.{self::Class::_#Class#nonNullableInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("nonNullableInstanceField");
       this.{self::Class::_#Class#nonNullableInstanceField} = #t8;
       this.{self::Class::_#Class#nonNullableInstanceField#isSet} = true;
     }
-    return let final core::int? #t11 = this.{self::Class::_#Class#nonNullableInstanceField} in #t11{core::int};
+    return let final core::int? #t11 = this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} in #t11{core::int};
   }
   get nullableInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}) {
-      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1) in #t13).{core::num::==}(0) ?{core::int?} this.{self::Class::nullableInstanceField} : ini::computeInitialValue();
-      if(this.{self::Class::_#Class#nullableInstanceField#isSet})
+    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool}) {
+      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads}{core::int} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} this.{self::Class::nullableInstanceField}{core::int?} : ini::computeInitialValue();
+      if(this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("nullableInstanceField");
       this.{self::Class::_#Class#nullableInstanceField} = #t12;
       this.{self::Class::_#Class#nullableInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#nullableInstanceField};
+    return this.{self::Class::_#Class#nullableInstanceField}{core::int?};
   }
 }
 static field core::int nonNullableTopLevelFieldReads = 0;
@@ -71,7 +71,7 @@
 static field core::bool _#nullableTopLevelField#isSet = false;
 static get nonNullableTopLevelField() → core::int {
   if(!self::_#nonNullableTopLevelField#isSet) {
-    final core::int #t15 = (let final core::int #t16 = self::nonNullableTopLevelFieldReads in let final core::int #t17 = self::nonNullableTopLevelFieldReads = #t16.{core::num::+}(1) in #t16).{core::num::==}(0) ?{core::int*} self::nonNullableTopLevelField : ini::computeInitialValue();
+    final core::int #t15 = (let final core::int #t16 = self::nonNullableTopLevelFieldReads in let final core::int #t17 = self::nonNullableTopLevelFieldReads = #t16.{core::num::+}(1){(core::num) → core::int} in #t16) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} self::nonNullableTopLevelField : ini::computeInitialValue();
     if(self::_#nonNullableTopLevelField#isSet)
       throw new _in::LateError::fieldADI("nonNullableTopLevelField");
     self::_#nonNullableTopLevelField = #t15;
@@ -81,7 +81,7 @@
 }
 static get nullableTopLevelField() → core::int? {
   if(!self::_#nullableTopLevelField#isSet) {
-    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1) in #t20).{core::num::==}(0) ?{core::int?} self::nullableTopLevelField : ini::computeInitialValue();
+    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1){(core::num) → core::int} in #t20) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} self::nullableTopLevelField : ini::computeInitialValue();
     if(self::_#nullableTopLevelField#isSet)
       throw new _in::LateError::fieldADI("nullableTopLevelField");
     self::_#nullableTopLevelField = #t19;
@@ -94,13 +94,13 @@
   self::throws(() → core::int? => self::nullableTopLevelField, "Read nullableTopLevelField");
   self::throws(() → core::int => self::Class::nonNullableStaticField, "Read nonNullableStaticField");
   self::throws(() → core::int? => self::Class::nullableStaticField, "Read nullableStaticField");
-  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}, "Read nonNullableInstanceField");
-  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}, "Read nullableInstanceField");
+  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}{core::int}, "Read nonNullableInstanceField");
+  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}{core::int?}, "Read nullableInstanceField");
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.weak.transformed.expect
index c0f506a..c72d69f 100644
--- a/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
     ;
   static get nonNullableStaticField() → core::int {
     if(!self::Class::_#nonNullableStaticField#isSet) {
-      final core::int #t1 = (let final core::int #t2 = self::Class::nonNullableStaticFieldReads in let final core::int #t3 = self::Class::nonNullableStaticFieldReads = #t2.{core::num::+}(1) in #t2).{core::num::==}(0) ?{core::int*} self::Class::nonNullableStaticField : ini::computeInitialValue();
+      final core::int #t1 = (let final core::int #t2 = self::Class::nonNullableStaticFieldReads in let final core::int #t3 = self::Class::nonNullableStaticFieldReads = #t2.{core::num::+}(1){(core::num) → core::int} in #t2) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} self::Class::nonNullableStaticField : ini::computeInitialValue();
       if(self::Class::_#nonNullableStaticField#isSet)
         throw new _in::LateError::fieldADI("nonNullableStaticField");
       self::Class::_#nonNullableStaticField = #t1;
@@ -34,7 +34,7 @@
   }
   static get nullableStaticField() → core::int? {
     if(!self::Class::_#nullableStaticField#isSet) {
-      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1) in #t6).{core::num::==}(0) ?{core::int?} self::Class::nullableStaticField : ini::computeInitialValue();
+      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1){(core::num) → core::int} in #t6) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} self::Class::nullableStaticField : ini::computeInitialValue();
       if(self::Class::_#nullableStaticField#isSet)
         throw new _in::LateError::fieldADI("nullableStaticField");
       self::Class::_#nullableStaticField = #t5;
@@ -43,24 +43,24 @@
     return self::Class::_#nullableStaticField;
   }
   get nonNullableInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#nonNullableInstanceField#isSet}) {
-      final core::int #t8 = (let final core::int #t9 = this.{self::Class::nonNullableInstanceFieldReads} in let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} = #t9.{core::num::+}(1) in #t9).{core::num::==}(0) ?{core::int*} this.{self::Class::nonNullableInstanceField} : ini::computeInitialValue();
-      if(this.{self::Class::_#Class#nonNullableInstanceField#isSet})
+    if(!this.{self::Class::_#Class#nonNullableInstanceField#isSet}{core::bool}) {
+      final core::int #t8 = (let final core::int #t9 = this.{self::Class::nonNullableInstanceFieldReads}{core::int} in let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} = #t9.{core::num::+}(1){(core::num) → core::int} in #t9) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} this.{self::Class::nonNullableInstanceField}{core::int} : ini::computeInitialValue();
+      if(this.{self::Class::_#Class#nonNullableInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("nonNullableInstanceField");
       this.{self::Class::_#Class#nonNullableInstanceField} = #t8;
       this.{self::Class::_#Class#nonNullableInstanceField#isSet} = true;
     }
-    return let final core::int? #t11 = this.{self::Class::_#Class#nonNullableInstanceField} in #t11{core::int};
+    return let final core::int? #t11 = this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} in #t11{core::int};
   }
   get nullableInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}) {
-      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1) in #t13).{core::num::==}(0) ?{core::int?} this.{self::Class::nullableInstanceField} : ini::computeInitialValue();
-      if(this.{self::Class::_#Class#nullableInstanceField#isSet})
+    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool}) {
+      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads}{core::int} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} this.{self::Class::nullableInstanceField}{core::int?} : ini::computeInitialValue();
+      if(this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("nullableInstanceField");
       this.{self::Class::_#Class#nullableInstanceField} = #t12;
       this.{self::Class::_#Class#nullableInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#nullableInstanceField};
+    return this.{self::Class::_#Class#nullableInstanceField}{core::int?};
   }
 }
 static field core::int nonNullableTopLevelFieldReads = 0;
@@ -71,7 +71,7 @@
 static field core::bool _#nullableTopLevelField#isSet = false;
 static get nonNullableTopLevelField() → core::int {
   if(!self::_#nonNullableTopLevelField#isSet) {
-    final core::int #t15 = (let final core::int #t16 = self::nonNullableTopLevelFieldReads in let final core::int #t17 = self::nonNullableTopLevelFieldReads = #t16.{core::num::+}(1) in #t16).{core::num::==}(0) ?{core::int*} self::nonNullableTopLevelField : ini::computeInitialValue();
+    final core::int #t15 = (let final core::int #t16 = self::nonNullableTopLevelFieldReads in let final core::int #t17 = self::nonNullableTopLevelFieldReads = #t16.{core::num::+}(1){(core::num) → core::int} in #t16) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} self::nonNullableTopLevelField : ini::computeInitialValue();
     if(self::_#nonNullableTopLevelField#isSet)
       throw new _in::LateError::fieldADI("nonNullableTopLevelField");
     self::_#nonNullableTopLevelField = #t15;
@@ -81,7 +81,7 @@
 }
 static get nullableTopLevelField() → core::int? {
   if(!self::_#nullableTopLevelField#isSet) {
-    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1) in #t20).{core::num::==}(0) ?{core::int?} self::nullableTopLevelField : ini::computeInitialValue();
+    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1){(core::num) → core::int} in #t20) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} self::nullableTopLevelField : ini::computeInitialValue();
     if(self::_#nullableTopLevelField#isSet)
       throw new _in::LateError::fieldADI("nullableTopLevelField");
     self::_#nullableTopLevelField = #t19;
@@ -94,13 +94,13 @@
   self::throws(() → core::int? => self::nullableTopLevelField, "Read nullableTopLevelField");
   self::throws(() → core::int => self::Class::nonNullableStaticField, "Read nonNullableStaticField");
   self::throws(() → core::int? => self::Class::nullableStaticField, "Read nullableStaticField");
-  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}, "Read nonNullableInstanceField");
-  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}, "Read nullableInstanceField");
+  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}{core::int}, "Read nonNullableInstanceField");
+  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}{core::int?}, "Read nullableInstanceField");
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.strong.expect b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.strong.expect
index 3ed20f7..abaed59 100644
--- a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.strong.expect
@@ -22,7 +22,7 @@
     : self2::Class::_#Class#foo = foo, super core::Object::•()
     ;
   get /* from org-dartlang-testcase:///patch_lib.dart */ foo() → core::int
-    return let final core::int? #t1 = this.{self2::Class::_#Class#foo} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("foo") : #t1{core::int};
+    return let final core::int? #t1 = this.{self2::Class::_#Class#foo}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("foo") : #t1{core::int};
   set /* from org-dartlang-testcase:///patch_lib.dart */ foo(core::int #t2) → void
     this.{self2::Class::_#Class#foo} = #t2;
 }
diff --git a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.strong.transformed.expect
index 3ed20f7..abaed59 100644
--- a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.strong.transformed.expect
@@ -22,7 +22,7 @@
     : self2::Class::_#Class#foo = foo, super core::Object::•()
     ;
   get /* from org-dartlang-testcase:///patch_lib.dart */ foo() → core::int
-    return let final core::int? #t1 = this.{self2::Class::_#Class#foo} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("foo") : #t1{core::int};
+    return let final core::int? #t1 = this.{self2::Class::_#Class#foo}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("foo") : #t1{core::int};
   set /* from org-dartlang-testcase:///patch_lib.dart */ foo(core::int #t2) → void
     this.{self2::Class::_#Class#foo} = #t2;
 }
diff --git a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.expect b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.expect
index 7458102..75e0cf4 100644
--- a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.expect
@@ -23,7 +23,7 @@
     : self2::Class::_#Class#foo#isSet = true, self2::Class::_#Class#foo = foo, super core::Object::•()
     ;
   get /* from org-dartlang-testcase:///patch_lib.dart */ foo() → core::int
-    return this.{self2::Class::_#Class#foo#isSet} ?{core::int} let final core::int? #t1 = this.{self2::Class::_#Class#foo} in #t1{core::int} : throw new _in::LateError::fieldNI("foo");
+    return this.{self2::Class::_#Class#foo#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self2::Class::_#Class#foo}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("foo");
   set /* from org-dartlang-testcase:///patch_lib.dart */ foo(core::int #t2) → void {
     this.{self2::Class::_#Class#foo#isSet} = true;
     this.{self2::Class::_#Class#foo} = #t2;
diff --git a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.transformed.expect
index 7458102..75e0cf4 100644
--- a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     : self2::Class::_#Class#foo#isSet = true, self2::Class::_#Class#foo = foo, super core::Object::•()
     ;
   get /* from org-dartlang-testcase:///patch_lib.dart */ foo() → core::int
-    return this.{self2::Class::_#Class#foo#isSet} ?{core::int} let final core::int? #t1 = this.{self2::Class::_#Class#foo} in #t1{core::int} : throw new _in::LateError::fieldNI("foo");
+    return this.{self2::Class::_#Class#foo#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self2::Class::_#Class#foo}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("foo");
   set /* from org-dartlang-testcase:///patch_lib.dart */ foo(core::int #t2) → void {
     this.{self2::Class::_#Class#foo#isSet} = true;
     this.{self2::Class::_#Class#foo} = #t2;
diff --git a/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.strong.expect
index 0cfc574..df03fdf 100644
--- a/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.strong.expect
@@ -11,13 +11,13 @@
     : self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int field = #C1]) → self::Class
     : self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int
-    return let final core::int? #t1 = this.{self::Class::_#Class#field} in #t1.==(null) ?{core::int} this.{self::Class::_#Class#field} = 10 : #t1{core::int};
+    return let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1 == null ?{core::int} this.{self::Class::_#Class#field} = 10 : #t1{core::int};
   set field(core::int #t2) → void
     this.{self::Class::_#Class#field} = #t2;
 }
@@ -37,54 +37,54 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.strong.transformed.expect
index 0cfc574..df03fdf 100644
--- a/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.strong.transformed.expect
@@ -11,13 +11,13 @@
     : self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int field = #C1]) → self::Class
     : self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int
-    return let final core::int? #t1 = this.{self::Class::_#Class#field} in #t1.==(null) ?{core::int} this.{self::Class::_#Class#field} = 10 : #t1{core::int};
+    return let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1 == null ?{core::int} this.{self::Class::_#Class#field} = 10 : #t1{core::int};
   set field(core::int #t2) → void
     this.{self::Class::_#Class#field} = #t2;
 }
@@ -37,54 +37,54 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.weak.expect
index 9dc836f..ccb0618 100644
--- a/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.weak.expect
@@ -12,17 +12,17 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int {
-    if(!this.{self::Class::_#Class#field#isSet}) {
+    if(!this.{self::Class::_#Class#field#isSet}{core::bool}) {
       this.{self::Class::_#Class#field} = 10;
       this.{self::Class::_#Class#field#isSet} = true;
     }
-    return let final core::int? #t1 = this.{self::Class::_#Class#field} in #t1{core::int};
+    return let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1{core::int};
   }
   set field(core::int #t2) → void {
     this.{self::Class::_#Class#field#isSet} = true;
@@ -45,54 +45,54 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.weak.transformed.expect
index 9dc836f..ccb0618 100644
--- a/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.weak.transformed.expect
@@ -12,17 +12,17 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int {
-    if(!this.{self::Class::_#Class#field#isSet}) {
+    if(!this.{self::Class::_#Class#field#isSet}{core::bool}) {
       this.{self::Class::_#Class#field} = 10;
       this.{self::Class::_#Class#field#isSet} = true;
     }
-    return let final core::int? #t1 = this.{self::Class::_#Class#field} in #t1{core::int};
+    return let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1{core::int};
   }
   set field(core::int #t2) → void {
     this.{self::Class::_#Class#field#isSet} = true;
@@ -45,54 +45,54 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.strong.expect
index 6e465d7..8218ba0 100644
--- a/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.strong.expect
@@ -12,13 +12,13 @@
     : self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int field = #C1]) → self::Class
     : self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int
-    return let final core::int? #t1 = this.{self::Class::_#Class#field} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("field") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("field") : #t1{core::int};
   set field(core::int #t2) → void
     this.{self::Class::_#Class#field} = #t2;
 }
@@ -38,60 +38,60 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.strong.transformed.expect
index 6e465d7..8218ba0 100644
--- a/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.strong.transformed.expect
@@ -12,13 +12,13 @@
     : self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int field = #C1]) → self::Class
     : self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int
-    return let final core::int? #t1 = this.{self::Class::_#Class#field} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("field") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("field") : #t1{core::int};
   set field(core::int #t2) → void
     this.{self::Class::_#Class#field} = #t2;
 }
@@ -38,60 +38,60 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.weak.expect
index 5c9ecce..b2fdacb 100644
--- a/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.weak.expect
@@ -13,13 +13,13 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int
-    return this.{self::Class::_#Class#field#isSet} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field} in #t1{core::int} : throw new _in::LateError::fieldNI("field");
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("field");
   set field(core::int #t2) → void {
     this.{self::Class::_#Class#field#isSet} = true;
     this.{self::Class::_#Class#field} = #t2;
@@ -41,60 +41,60 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.weak.transformed.expect
index 5c9ecce..b2fdacb 100644
--- a/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.weak.transformed.expect
@@ -13,13 +13,13 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int
-    return this.{self::Class::_#Class#field#isSet} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field} in #t1{core::int} : throw new _in::LateError::fieldNI("field");
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("field");
   set field(core::int #t2) → void {
     this.{self::Class::_#Class#field#isSet} = true;
     this.{self::Class::_#Class#field} = #t2;
@@ -41,60 +41,60 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.strong.expect
index c480ab9..33596c4 100644
--- a/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.strong.expect
@@ -12,15 +12,15 @@
     : self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int field = #C1]) → self::Class
     : self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int
-    return let final core::int? #t1 = this.{self::Class::_#Class#field} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("field") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("field") : #t1{core::int};
   set field(core::int #t2) → void
-    if(this.{self::Class::_#Class#field}.==(null))
+    if(this.{self::Class::_#Class#field}{core::int?} == null)
       this.{self::Class::_#Class#field} = #t2;
     else
       throw new _in::LateError::fieldAI("field");
@@ -41,48 +41,48 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int});
   self::throws(() → core::int => c4.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Class c6 = new self::Class::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class1.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class1.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int});
   self::throws(() → core::int => c4.{self::Class::field} = 88, "Write value to initialized Class.field");
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Subclass c6 = new self::Subclass::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method main() → dynamic {
@@ -90,13 +90,13 @@
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.strong.transformed.expect
index c480ab9..33596c4 100644
--- a/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.strong.transformed.expect
@@ -12,15 +12,15 @@
     : self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int field = #C1]) → self::Class
     : self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int
-    return let final core::int? #t1 = this.{self::Class::_#Class#field} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("field") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("field") : #t1{core::int};
   set field(core::int #t2) → void
-    if(this.{self::Class::_#Class#field}.==(null))
+    if(this.{self::Class::_#Class#field}{core::int?} == null)
       this.{self::Class::_#Class#field} = #t2;
     else
       throw new _in::LateError::fieldAI("field");
@@ -41,48 +41,48 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int});
   self::throws(() → core::int => c4.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Class c6 = new self::Class::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class1.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class1.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int});
   self::throws(() → core::int => c4.{self::Class::field} = 88, "Write value to initialized Class.field");
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Subclass c6 = new self::Subclass::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method main() → dynamic {
@@ -90,13 +90,13 @@
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.weak.expect
index 2f21d23..463e342 100644
--- a/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.weak.expect
@@ -13,15 +13,15 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int
-    return this.{self::Class::_#Class#field#isSet} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field} in #t1{core::int} : throw new _in::LateError::fieldNI("field");
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("field");
   set field(core::int #t2) → void
-    if(this.{self::Class::_#Class#field#isSet})
+    if(this.{self::Class::_#Class#field#isSet}{core::bool})
       throw new _in::LateError::fieldAI("field");
     else {
       this.{self::Class::_#Class#field#isSet} = true;
@@ -44,48 +44,48 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int});
   self::throws(() → core::int => c4.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Class c6 = new self::Class::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class1.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class1.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int});
   self::throws(() → core::int => c4.{self::Class::field} = 88, "Write value to initialized Class.field");
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Subclass c6 = new self::Subclass::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method main() → dynamic {
@@ -93,13 +93,13 @@
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.weak.transformed.expect
index 2f21d23..463e342 100644
--- a/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.weak.transformed.expect
@@ -13,15 +13,15 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int
-    return this.{self::Class::_#Class#field#isSet} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field} in #t1{core::int} : throw new _in::LateError::fieldNI("field");
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("field");
   set field(core::int #t2) → void
-    if(this.{self::Class::_#Class#field#isSet})
+    if(this.{self::Class::_#Class#field#isSet}{core::bool})
       throw new _in::LateError::fieldAI("field");
     else {
       this.{self::Class::_#Class#field#isSet} = true;
@@ -44,48 +44,48 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int});
   self::throws(() → core::int => c4.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Class c6 = new self::Class::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int => c1.{self::Class::field}, "Read value from uninitialized Class1.field");
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class1.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int});
   self::throws(() → core::int => c4.{self::Class::field} = 88, "Write value to initialized Class.field");
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Subclass c6 = new self::Subclass::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method main() → dynamic {
@@ -93,13 +93,13 @@
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.strong.expect
index 7895ba5..5a147d7 100644
--- a/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.strong.expect
@@ -12,17 +12,17 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int? field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int? {
-    if(!this.{self::Class::_#Class#field#isSet}) {
+    if(!this.{self::Class::_#Class#field#isSet}{core::bool}) {
       this.{self::Class::_#Class#field} = self::initField();
       this.{self::Class::_#Class#field#isSet} = true;
     }
-    return this.{self::Class::_#Class#field};
+    return this.{self::Class::_#Class#field}{core::int?};
   }
   set field(core::int? #t1) → void {
     this.{self::Class::_#Class#field#isSet} = true;
@@ -47,54 +47,54 @@
   return 10;
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int?});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int?});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int?});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int?});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.strong.transformed.expect
index 7895ba5..5a147d7 100644
--- a/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.strong.transformed.expect
@@ -12,17 +12,17 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int? field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int? {
-    if(!this.{self::Class::_#Class#field#isSet}) {
+    if(!this.{self::Class::_#Class#field#isSet}{core::bool}) {
       this.{self::Class::_#Class#field} = self::initField();
       this.{self::Class::_#Class#field#isSet} = true;
     }
-    return this.{self::Class::_#Class#field};
+    return this.{self::Class::_#Class#field}{core::int?};
   }
   set field(core::int? #t1) → void {
     this.{self::Class::_#Class#field#isSet} = true;
@@ -47,54 +47,54 @@
   return 10;
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int?});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int?});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int?});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int?});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.weak.expect
index 7895ba5..5a147d7 100644
--- a/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.weak.expect
@@ -12,17 +12,17 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int? field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int? {
-    if(!this.{self::Class::_#Class#field#isSet}) {
+    if(!this.{self::Class::_#Class#field#isSet}{core::bool}) {
       this.{self::Class::_#Class#field} = self::initField();
       this.{self::Class::_#Class#field#isSet} = true;
     }
-    return this.{self::Class::_#Class#field};
+    return this.{self::Class::_#Class#field}{core::int?};
   }
   set field(core::int? #t1) → void {
     this.{self::Class::_#Class#field#isSet} = true;
@@ -47,54 +47,54 @@
   return 10;
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int?});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int?});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int?});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int?});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.weak.transformed.expect
index 7895ba5..5a147d7 100644
--- a/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.weak.transformed.expect
@@ -12,17 +12,17 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int? field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int? {
-    if(!this.{self::Class::_#Class#field#isSet}) {
+    if(!this.{self::Class::_#Class#field#isSet}{core::bool}) {
       this.{self::Class::_#Class#field} = self::initField();
       this.{self::Class::_#Class#field#isSet} = true;
     }
-    return this.{self::Class::_#Class#field};
+    return this.{self::Class::_#Class#field}{core::int?};
   }
   set field(core::int? #t1) → void {
     this.{self::Class::_#Class#field#isSet} = true;
@@ -47,54 +47,54 @@
   return 10;
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int?});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int?});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::expect(10, c1.{self::Class::field});
+  self::expect(10, c1.{self::Class::field}{core::int?});
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int?});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.strong.expect
index 1692057..58f7272 100644
--- a/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.strong.expect
@@ -13,13 +13,13 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int? field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int?
-    return this.{self::Class::_#Class#field#isSet} ?{core::int?} this.{self::Class::_#Class#field} : throw new _in::LateError::fieldNI("field");
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#field}{core::int?} : throw new _in::LateError::fieldNI("field");
   set field(core::int? #t1) → void {
     this.{self::Class::_#Class#field#isSet} = true;
     this.{self::Class::_#Class#field} = #t1;
@@ -41,60 +41,60 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int?});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int?});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.strong.transformed.expect
index 1692057..58f7272 100644
--- a/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.strong.transformed.expect
@@ -13,13 +13,13 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int? field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int?
-    return this.{self::Class::_#Class#field#isSet} ?{core::int?} this.{self::Class::_#Class#field} : throw new _in::LateError::fieldNI("field");
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#field}{core::int?} : throw new _in::LateError::fieldNI("field");
   set field(core::int? #t1) → void {
     this.{self::Class::_#Class#field#isSet} = true;
     this.{self::Class::_#Class#field} = #t1;
@@ -41,60 +41,60 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int?});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int?});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.weak.expect
index 1692057..58f7272 100644
--- a/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.weak.expect
@@ -13,13 +13,13 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int? field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int?
-    return this.{self::Class::_#Class#field#isSet} ?{core::int?} this.{self::Class::_#Class#field} : throw new _in::LateError::fieldNI("field");
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#field}{core::int?} : throw new _in::LateError::fieldNI("field");
   set field(core::int? #t1) → void {
     this.{self::Class::_#Class#field#isSet} = true;
     this.{self::Class::_#Class#field} = #t1;
@@ -41,60 +41,60 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int?});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int?});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.weak.transformed.expect
index 1692057..58f7272 100644
--- a/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.weak.transformed.expect
@@ -13,13 +13,13 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int? field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int?
-    return this.{self::Class::_#Class#field#isSet} ?{core::int?} this.{self::Class::_#Class#field} : throw new _in::LateError::fieldNI("field");
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#field}{core::int?} : throw new _in::LateError::fieldNI("field");
   set field(core::int? #t1) → void {
     this.{self::Class::_#Class#field#isSet} = true;
     this.{self::Class::_#Class#field} = #t1;
@@ -41,60 +41,60 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 43;
-  self::expect(43, c4.{self::Class::field});
+  self::expect(43, c4.{self::Class::field}{core::int?});
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   c2.{self::Class::field} = 43;
-  self::expect(43, c2.{self::Class::field});
+  self::expect(43, c2.{self::Class::field}{core::int?});
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   c3.{self::Class::field} = 89;
-  self::expect(89, c3.{self::Class::field});
+  self::expect(89, c3.{self::Class::field}{core::int?});
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int?});
   c4.{self::Class::field} = 88;
-  self::expect(88, c4.{self::Class::field});
+  self::expect(88, c4.{self::Class::field}{core::int?});
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   c5.{self::Class::field} = 124;
-  self::expect(124, c5.{self::Class::field});
+  self::expect(124, c5.{self::Class::field}{core::int?});
 }
 static method main() → dynamic {
   self::test1();
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.strong.expect
index e4e4f30..8bbbcaf 100644
--- a/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.strong.expect
@@ -13,15 +13,15 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int? field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int?
-    return this.{self::Class::_#Class#field#isSet} ?{core::int?} this.{self::Class::_#Class#field} : throw new _in::LateError::fieldNI("field");
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#field}{core::int?} : throw new _in::LateError::fieldNI("field");
   set field(core::int? #t1) → void
-    if(this.{self::Class::_#Class#field#isSet})
+    if(this.{self::Class::_#Class#field#isSet}{core::bool})
       throw new _in::LateError::fieldAI("field");
     else {
       this.{self::Class::_#Class#field#isSet} = true;
@@ -44,48 +44,48 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int?});
   self::throws(() → core::int => c4.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Class c6 = new self::Class::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int?});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class1.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class1.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int?});
   self::throws(() → core::int => c4.{self::Class::field} = 88, "Write value to initialized Class.field");
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Subclass c6 = new self::Subclass::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int?});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method main() → dynamic {
@@ -93,13 +93,13 @@
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.strong.transformed.expect
index e4e4f30..8bbbcaf 100644
--- a/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.strong.transformed.expect
@@ -13,15 +13,15 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int? field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int?
-    return this.{self::Class::_#Class#field#isSet} ?{core::int?} this.{self::Class::_#Class#field} : throw new _in::LateError::fieldNI("field");
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#field}{core::int?} : throw new _in::LateError::fieldNI("field");
   set field(core::int? #t1) → void
-    if(this.{self::Class::_#Class#field#isSet})
+    if(this.{self::Class::_#Class#field#isSet}{core::bool})
       throw new _in::LateError::fieldAI("field");
     else {
       this.{self::Class::_#Class#field#isSet} = true;
@@ -44,48 +44,48 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int?});
   self::throws(() → core::int => c4.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Class c6 = new self::Class::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int?});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class1.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class1.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int?});
   self::throws(() → core::int => c4.{self::Class::field} = 88, "Write value to initialized Class.field");
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Subclass c6 = new self::Subclass::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int?});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method main() → dynamic {
@@ -93,13 +93,13 @@
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.weak.expect
index e4e4f30..8bbbcaf 100644
--- a/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.weak.expect
@@ -13,15 +13,15 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int? field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int?
-    return this.{self::Class::_#Class#field#isSet} ?{core::int?} this.{self::Class::_#Class#field} : throw new _in::LateError::fieldNI("field");
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#field}{core::int?} : throw new _in::LateError::fieldNI("field");
   set field(core::int? #t1) → void
-    if(this.{self::Class::_#Class#field#isSet})
+    if(this.{self::Class::_#Class#field#isSet}{core::bool})
       throw new _in::LateError::fieldAI("field");
     else {
       this.{self::Class::_#Class#field#isSet} = true;
@@ -44,48 +44,48 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int?});
   self::throws(() → core::int => c4.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Class c6 = new self::Class::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int?});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class1.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class1.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int?});
   self::throws(() → core::int => c4.{self::Class::field} = 88, "Write value to initialized Class.field");
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Subclass c6 = new self::Subclass::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int?});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method main() → dynamic {
@@ -93,13 +93,13 @@
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.weak.transformed.expect
index e4e4f30..8bbbcaf 100644
--- a/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.weak.transformed.expect
@@ -13,15 +13,15 @@
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   constructor constructor3(core::int value) → self::Class
-    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1), super core::Object::•()
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
     ;
   constructor constructor4([core::int? field = #C1]) → self::Class
     : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
     ;
   get field() → core::int?
-    return this.{self::Class::_#Class#field#isSet} ?{core::int?} this.{self::Class::_#Class#field} : throw new _in::LateError::fieldNI("field");
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#field}{core::int?} : throw new _in::LateError::fieldNI("field");
   set field(core::int? #t1) → void
-    if(this.{self::Class::_#Class#field#isSet})
+    if(this.{self::Class::_#Class#field#isSet}{core::bool})
       throw new _in::LateError::fieldAI("field");
     else {
       this.{self::Class::_#Class#field#isSet} = true;
@@ -44,48 +44,48 @@
 }
 static method test1() → dynamic {
   self::Class c1 = new self::Class::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Class c2 = new self::Class::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c3 = new self::Class::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Class c4 = new self::Class::constructor4();
-  self::expect(42, c4.{self::Class::field});
+  self::expect(42, c4.{self::Class::field}{core::int?});
   self::throws(() → core::int => c4.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Class c5 = new self::Class::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Class c6 = new self::Class::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int?});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method test2() → dynamic {
   self::Subclass c1 = new self::Subclass::constructor1();
-  self::throws(() → core::int? => c1.{self::Class::field}, "Read value from uninitialized Class1.field");
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class1.field");
   c1.{self::Class::field} = 16;
-  self::expect(16, c1.{self::Class::field});
+  self::expect(16, c1.{self::Class::field}{core::int?});
   self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
   self::Subclass c2 = new self::Subclass::constructor2(42);
-  self::expect(42, c2.{self::Class::field});
+  self::expect(42, c2.{self::Class::field}{core::int?});
   self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
   self::Subclass c3 = new self::Subclass::constructor3(87);
-  self::expect(88, c3.{self::Class::field});
+  self::expect(88, c3.{self::Class::field}{core::int?});
   self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
   self::Subclass c4 = new self::Subclass::constructor4();
-  self::expect(87, c4.{self::Class::field});
+  self::expect(87, c4.{self::Class::field}{core::int?});
   self::throws(() → core::int => c4.{self::Class::field} = 88, "Write value to initialized Class.field");
   self::Subclass c5 = new self::Subclass::constructor4(123);
-  self::expect(123, c5.{self::Class::field});
+  self::expect(123, c5.{self::Class::field}{core::int?});
   self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
   self::Subclass c6 = new self::Subclass::constructor1();
   c6.{self::Class::field} = 32;
-  self::expect(32, c6.{self::Class::field});
+  self::expect(32, c6.{self::Class::field}{core::int?});
   self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
 }
 static method main() → dynamic {
@@ -93,13 +93,13 @@
   self::test2();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/issue40093.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue40093.dart.strong.expect
index 551b8f0..fe10901 100644
--- a/pkg/front_end/testcases/late_lowering/issue40093.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40093.dart.strong.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 static method error() → dynamic {
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print(i);
   }
   for (core::int i in <core::int>[]) {
diff --git a/pkg/front_end/testcases/late_lowering/issue40093.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40093.dart.strong.transformed.expect
index 9d0dbc9..4aedf2e 100644
--- a/pkg/front_end/testcases/late_lowering/issue40093.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40093.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 static method error() → dynamic {
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print(i);
   }
   {
diff --git a/pkg/front_end/testcases/late_lowering/issue40093.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue40093.dart.weak.expect
index 551b8f0..fe10901 100644
--- a/pkg/front_end/testcases/late_lowering/issue40093.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40093.dart.weak.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 static method error() → dynamic {
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print(i);
   }
   for (core::int i in <core::int>[]) {
diff --git a/pkg/front_end/testcases/late_lowering/issue40093.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40093.dart.weak.transformed.expect
index 9d0dbc9..4aedf2e 100644
--- a/pkg/front_end/testcases/late_lowering/issue40093.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40093.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 static method error() → dynamic {
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print(i);
   }
   {
diff --git a/pkg/front_end/testcases/late_lowering/issue40373.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue40373.dart.strong.expect
index b7c4bbf..5064c1b 100644
--- a/pkg/front_end/testcases/late_lowering/issue40373.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40373.dart.strong.expect
@@ -12,17 +12,17 @@
     : super core::Object::•()
     ;
   get p1() → core::num
-    return let final core::num? #t1 = this.{self::C::_#C#p1} in #t1.==(null) ?{core::num} this.{self::C::_#C#p1} = this.{self::C::pi} : #t1{core::num};
+    return let final core::num? #t1 = this.{self::C::_#C#p1}{core::num?} in #t1 == null ?{core::num} this.{self::C::_#C#p1} = this.{self::C::pi}{core::num} : #t1{core::num};
   set p1(core::num #t2) → void
     this.{self::C::_#C#p1} = #t2;
   get p2() → core::num
-    return let final core::num? #t3 = this.{self::C::_#C#p2} in #t3.==(null) ?{core::num} let final core::num #t4 = this.{self::C::pi} in this.{self::C::_#C#p2}.==(null) ?{core::num} this.{self::C::_#C#p2} = #t4 : throw new _in::LateError::fieldADI("p2") : #t3{core::num};
+    return let final core::num? #t3 = this.{self::C::_#C#p2}{core::num?} in #t3 == null ?{core::num} let final core::num #t4 = this.{self::C::pi}{core::num} in this.{self::C::_#C#p2}{core::num?} == null ?{core::num} this.{self::C::_#C#p2} = #t4 : throw new _in::LateError::fieldADI("p2") : #t3{core::num};
 }
 static method main() → dynamic {
-  self::expect(3.14, new self::C::•().{self::C::p1});
-  self::expect(3.14, new self::C::•().{self::C::p2});
+  self::expect(3.14, new self::C::•().{self::C::p1}{core::num});
+  self::expect(3.14, new self::C::•().{self::C::p2}{core::num});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40373.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40373.dart.strong.transformed.expect
index b7c4bbf..5064c1b 100644
--- a/pkg/front_end/testcases/late_lowering/issue40373.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40373.dart.strong.transformed.expect
@@ -12,17 +12,17 @@
     : super core::Object::•()
     ;
   get p1() → core::num
-    return let final core::num? #t1 = this.{self::C::_#C#p1} in #t1.==(null) ?{core::num} this.{self::C::_#C#p1} = this.{self::C::pi} : #t1{core::num};
+    return let final core::num? #t1 = this.{self::C::_#C#p1}{core::num?} in #t1 == null ?{core::num} this.{self::C::_#C#p1} = this.{self::C::pi}{core::num} : #t1{core::num};
   set p1(core::num #t2) → void
     this.{self::C::_#C#p1} = #t2;
   get p2() → core::num
-    return let final core::num? #t3 = this.{self::C::_#C#p2} in #t3.==(null) ?{core::num} let final core::num #t4 = this.{self::C::pi} in this.{self::C::_#C#p2}.==(null) ?{core::num} this.{self::C::_#C#p2} = #t4 : throw new _in::LateError::fieldADI("p2") : #t3{core::num};
+    return let final core::num? #t3 = this.{self::C::_#C#p2}{core::num?} in #t3 == null ?{core::num} let final core::num #t4 = this.{self::C::pi}{core::num} in this.{self::C::_#C#p2}{core::num?} == null ?{core::num} this.{self::C::_#C#p2} = #t4 : throw new _in::LateError::fieldADI("p2") : #t3{core::num};
 }
 static method main() → dynamic {
-  self::expect(3.14, new self::C::•().{self::C::p1});
-  self::expect(3.14, new self::C::•().{self::C::p2});
+  self::expect(3.14, new self::C::•().{self::C::p1}{core::num});
+  self::expect(3.14, new self::C::•().{self::C::p2}{core::num});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40373.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue40373.dart.weak.expect
index b9751eb..32f6e7c 100644
--- a/pkg/front_end/testcases/late_lowering/issue40373.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40373.dart.weak.expect
@@ -13,32 +13,32 @@
     : super core::Object::•()
     ;
   get p1() → core::num {
-    if(!this.{self::C::_#C#p1#isSet}) {
-      this.{self::C::_#C#p1} = this.{self::C::pi};
+    if(!this.{self::C::_#C#p1#isSet}{core::bool}) {
+      this.{self::C::_#C#p1} = this.{self::C::pi}{core::num};
       this.{self::C::_#C#p1#isSet} = true;
     }
-    return let final core::num? #t1 = this.{self::C::_#C#p1} in #t1{core::num};
+    return let final core::num? #t1 = this.{self::C::_#C#p1}{core::num?} in #t1{core::num};
   }
   set p1(core::num #t2) → void {
     this.{self::C::_#C#p1#isSet} = true;
     this.{self::C::_#C#p1} = #t2;
   }
   get p2() → core::num {
-    if(!this.{self::C::_#C#p2#isSet}) {
-      final core::num #t3 = this.{self::C::pi};
-      if(this.{self::C::_#C#p2#isSet})
+    if(!this.{self::C::_#C#p2#isSet}{core::bool}) {
+      final core::num #t3 = this.{self::C::pi}{core::num};
+      if(this.{self::C::_#C#p2#isSet}{core::bool})
         throw new _in::LateError::fieldADI("p2");
       this.{self::C::_#C#p2} = #t3;
       this.{self::C::_#C#p2#isSet} = true;
     }
-    return let final core::num? #t4 = this.{self::C::_#C#p2} in #t4{core::num};
+    return let final core::num? #t4 = this.{self::C::_#C#p2}{core::num?} in #t4{core::num};
   }
 }
 static method main() → dynamic {
-  self::expect(3.14, new self::C::•().{self::C::p1});
-  self::expect(3.14, new self::C::•().{self::C::p2});
+  self::expect(3.14, new self::C::•().{self::C::p1}{core::num});
+  self::expect(3.14, new self::C::•().{self::C::p2}{core::num});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40373.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40373.dart.weak.transformed.expect
index b9751eb..32f6e7c 100644
--- a/pkg/front_end/testcases/late_lowering/issue40373.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40373.dart.weak.transformed.expect
@@ -13,32 +13,32 @@
     : super core::Object::•()
     ;
   get p1() → core::num {
-    if(!this.{self::C::_#C#p1#isSet}) {
-      this.{self::C::_#C#p1} = this.{self::C::pi};
+    if(!this.{self::C::_#C#p1#isSet}{core::bool}) {
+      this.{self::C::_#C#p1} = this.{self::C::pi}{core::num};
       this.{self::C::_#C#p1#isSet} = true;
     }
-    return let final core::num? #t1 = this.{self::C::_#C#p1} in #t1{core::num};
+    return let final core::num? #t1 = this.{self::C::_#C#p1}{core::num?} in #t1{core::num};
   }
   set p1(core::num #t2) → void {
     this.{self::C::_#C#p1#isSet} = true;
     this.{self::C::_#C#p1} = #t2;
   }
   get p2() → core::num {
-    if(!this.{self::C::_#C#p2#isSet}) {
-      final core::num #t3 = this.{self::C::pi};
-      if(this.{self::C::_#C#p2#isSet})
+    if(!this.{self::C::_#C#p2#isSet}{core::bool}) {
+      final core::num #t3 = this.{self::C::pi}{core::num};
+      if(this.{self::C::_#C#p2#isSet}{core::bool})
         throw new _in::LateError::fieldADI("p2");
       this.{self::C::_#C#p2} = #t3;
       this.{self::C::_#C#p2#isSet} = true;
     }
-    return let final core::num? #t4 = this.{self::C::_#C#p2} in #t4{core::num};
+    return let final core::num? #t4 = this.{self::C::_#C#p2}{core::num?} in #t4{core::num};
   }
 }
 static method main() → dynamic {
-  self::expect(3.14, new self::C::•().{self::C::p1});
-  self::expect(3.14, new self::C::•().{self::C::p2});
+  self::expect(3.14, new self::C::•().{self::C::p1}{core::num});
+  self::expect(3.14, new self::C::•().{self::C::p2}{core::num});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.expect
index b788f31..149d652 100644
--- a/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.expect
@@ -21,9 +21,9 @@
       self::C::_#s = #t1;
     }
   get v() → dynamic
-    return this.{self::C::_#C#v#isSet} ?{dynamic} this.{self::C::_#C#v} : throw new _in::LateError::fieldNI("v");
+    return this.{self::C::_#C#v#isSet}{core::bool} ?{dynamic} this.{self::C::_#C#v}{dynamic} : throw new _in::LateError::fieldNI("v");
   set v(dynamic #t2) → void
-    if(this.{self::C::_#C#v#isSet})
+    if(this.{self::C::_#C#v#isSet}{core::bool})
       throw new _in::LateError::fieldAI("v");
     else {
       this.{self::C::_#C#v#isSet} = true;
@@ -57,13 +57,13 @@
   self::C::s = "was";
   self::C c = new self::C::•();
   c.{self::C::v} = "here";
-  #l#set.call("Run, Forrest, run");
+  #l#set("Run, Forrest, run"){(dynamic) → dynamic};
   self::expect("Lily", self::g);
   self::expect("was", self::C::s);
-  self::expect("here", c.{self::C::v});
-  self::expect("Run, Forrest, run", #l#get.call());
+  self::expect("here", c.{self::C::v}{dynamic});
+  self::expect("Run, Forrest, run", #l#get(){() → dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.transformed.expect
index b788f31..149d652 100644
--- a/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40373b.dart.strong.transformed.expect
@@ -21,9 +21,9 @@
       self::C::_#s = #t1;
     }
   get v() → dynamic
-    return this.{self::C::_#C#v#isSet} ?{dynamic} this.{self::C::_#C#v} : throw new _in::LateError::fieldNI("v");
+    return this.{self::C::_#C#v#isSet}{core::bool} ?{dynamic} this.{self::C::_#C#v}{dynamic} : throw new _in::LateError::fieldNI("v");
   set v(dynamic #t2) → void
-    if(this.{self::C::_#C#v#isSet})
+    if(this.{self::C::_#C#v#isSet}{core::bool})
       throw new _in::LateError::fieldAI("v");
     else {
       this.{self::C::_#C#v#isSet} = true;
@@ -57,13 +57,13 @@
   self::C::s = "was";
   self::C c = new self::C::•();
   c.{self::C::v} = "here";
-  #l#set.call("Run, Forrest, run");
+  #l#set("Run, Forrest, run"){(dynamic) → dynamic};
   self::expect("Lily", self::g);
   self::expect("was", self::C::s);
-  self::expect("here", c.{self::C::v});
-  self::expect("Run, Forrest, run", #l#get.call());
+  self::expect("here", c.{self::C::v}{dynamic});
+  self::expect("Run, Forrest, run", #l#get(){() → dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.expect
index b788f31..149d652 100644
--- a/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.expect
@@ -21,9 +21,9 @@
       self::C::_#s = #t1;
     }
   get v() → dynamic
-    return this.{self::C::_#C#v#isSet} ?{dynamic} this.{self::C::_#C#v} : throw new _in::LateError::fieldNI("v");
+    return this.{self::C::_#C#v#isSet}{core::bool} ?{dynamic} this.{self::C::_#C#v}{dynamic} : throw new _in::LateError::fieldNI("v");
   set v(dynamic #t2) → void
-    if(this.{self::C::_#C#v#isSet})
+    if(this.{self::C::_#C#v#isSet}{core::bool})
       throw new _in::LateError::fieldAI("v");
     else {
       this.{self::C::_#C#v#isSet} = true;
@@ -57,13 +57,13 @@
   self::C::s = "was";
   self::C c = new self::C::•();
   c.{self::C::v} = "here";
-  #l#set.call("Run, Forrest, run");
+  #l#set("Run, Forrest, run"){(dynamic) → dynamic};
   self::expect("Lily", self::g);
   self::expect("was", self::C::s);
-  self::expect("here", c.{self::C::v});
-  self::expect("Run, Forrest, run", #l#get.call());
+  self::expect("here", c.{self::C::v}{dynamic});
+  self::expect("Run, Forrest, run", #l#get(){() → dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.transformed.expect
index b788f31..149d652 100644
--- a/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.transformed.expect
@@ -21,9 +21,9 @@
       self::C::_#s = #t1;
     }
   get v() → dynamic
-    return this.{self::C::_#C#v#isSet} ?{dynamic} this.{self::C::_#C#v} : throw new _in::LateError::fieldNI("v");
+    return this.{self::C::_#C#v#isSet}{core::bool} ?{dynamic} this.{self::C::_#C#v}{dynamic} : throw new _in::LateError::fieldNI("v");
   set v(dynamic #t2) → void
-    if(this.{self::C::_#C#v#isSet})
+    if(this.{self::C::_#C#v#isSet}{core::bool})
       throw new _in::LateError::fieldAI("v");
     else {
       this.{self::C::_#C#v#isSet} = true;
@@ -57,13 +57,13 @@
   self::C::s = "was";
   self::C c = new self::C::•();
   c.{self::C::v} = "here";
-  #l#set.call("Run, Forrest, run");
+  #l#set("Run, Forrest, run"){(dynamic) → dynamic};
   self::expect("Lily", self::g);
   self::expect("was", self::C::s);
-  self::expect("here", c.{self::C::v});
-  self::expect("Run, Forrest, run", #l#get.call());
+  self::expect("here", c.{self::C::v}{dynamic});
+  self::expect("Run, Forrest, run", #l#get(){() → dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect
index 6de62a5..d676a26 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect
@@ -18,10 +18,10 @@
       #value#isSet = true;
       return #value = #t1;
     }
-    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get.call());
+    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get(){() → self::A::T%}){(self::A::T%) → dynamic};
     (() → Null {
-      #value#set.call(this.{self::A::baz}());
-    }).call();
+      #value#set(this.{self::A::baz}(){() → self::A::T%}){(self::A::T%) → dynamic};
+    })(){() → Null};
     return result;
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect
index 6de62a5..d676a26 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect
@@ -18,10 +18,10 @@
       #value#isSet = true;
       return #value = #t1;
     }
-    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get.call());
+    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get(){() → self::A::T%}){(self::A::T%) → dynamic};
     (() → Null {
-      #value#set.call(this.{self::A::baz}());
-    }).call();
+      #value#set(this.{self::A::baz}(){() → self::A::T%}){(self::A::T%) → dynamic};
+    })(){() → Null};
     return result;
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect
index 6de62a5..d676a26 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect
@@ -18,10 +18,10 @@
       #value#isSet = true;
       return #value = #t1;
     }
-    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get.call());
+    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get(){() → self::A::T%}){(self::A::T%) → dynamic};
     (() → Null {
-      #value#set.call(this.{self::A::baz}());
-    }).call();
+      #value#set(this.{self::A::baz}(){() → self::A::T%}){(self::A::T%) → dynamic};
+    })(){() → Null};
     return result;
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect
index 6de62a5..d676a26 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect
@@ -18,10 +18,10 @@
       #value#isSet = true;
       return #value = #t1;
     }
-    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get.call());
+    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get(){() → self::A::T%}){(self::A::T%) → dynamic};
     (() → Null {
-      #value#set.call(this.{self::A::baz}());
-    }).call();
+      #value#set(this.{self::A::baz}(){() → self::A::T%}){(self::A::T%) → dynamic};
+    })(){() → Null};
     return result;
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.expect
index 7df4dbc..d9d0eaa 100644
--- a/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.expect
@@ -9,9 +9,9 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t1 = this.{self::C::_#C#x} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::C::_#C#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
   set x(covariant core::int #t2) → void
-    if(this.{self::C::_#C#x}.==(null))
+    if(this.{self::C::_#C#x}{core::int?} == null)
       this.{self::C::_#C#x} = #t2;
     else
       throw new _in::LateError::fieldAI("x");
@@ -21,7 +21,7 @@
     : super self::C::•()
     ;
   set x(covariant core::num value) → void {
-    super.{self::C::x} = value.{core::num::toInt}();
+    super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.transformed.expect
index 7df4dbc..d9d0eaa 100644
--- a/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.transformed.expect
@@ -9,9 +9,9 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t1 = this.{self::C::_#C#x} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::C::_#C#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
   set x(covariant core::int #t2) → void
-    if(this.{self::C::_#C#x}.==(null))
+    if(this.{self::C::_#C#x}{core::int?} == null)
       this.{self::C::_#C#x} = #t2;
     else
       throw new _in::LateError::fieldAI("x");
@@ -21,7 +21,7 @@
     : super self::C::•()
     ;
   set x(covariant core::num value) → void {
-    super.{self::C::x} = value.{core::num::toInt}();
+    super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.expect
index d0b344e..5807cfc 100644
--- a/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.expect
@@ -10,9 +10,9 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{self::C::_#C#x#isSet} ?{core::int} let final core::int? #t1 = this.{self::C::_#C#x} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{self::C::_#C#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::C::_#C#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
   set x(covariant core::int #t2) → void
-    if(this.{self::C::_#C#x#isSet})
+    if(this.{self::C::_#C#x#isSet}{core::bool})
       throw new _in::LateError::fieldAI("x");
     else {
       this.{self::C::_#C#x#isSet} = true;
@@ -24,7 +24,7 @@
     : super self::C::•()
     ;
   set x(covariant core::num value) → void {
-    super.{self::C::x} = value.{core::num::toInt}();
+    super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.transformed.expect
index d0b344e..5807cfc 100644
--- a/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.transformed.expect
@@ -10,9 +10,9 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{self::C::_#C#x#isSet} ?{core::int} let final core::int? #t1 = this.{self::C::_#C#x} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{self::C::_#C#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::C::_#C#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
   set x(covariant core::int #t2) → void
-    if(this.{self::C::_#C#x#isSet})
+    if(this.{self::C::_#C#x#isSet}{core::bool})
       throw new _in::LateError::fieldAI("x");
     else {
       this.{self::C::_#C#x#isSet} = true;
@@ -24,7 +24,7 @@
     : super self::C::•()
     ;
   set x(covariant core::num value) → void {
-    super.{self::C::x} = value.{core::num::toInt}();
+    super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.strong.expect
index 3c27241..ef8f0a6 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.strong.expect
@@ -19,7 +19,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t1 = this.{test::A::_#A#x} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
+    return let final core::int? #t1 = this.{test::A::_#A#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
   set x(core::int #t2) → void
     this.{test::A::_#A#x} = #t2;
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.strong.transformed.expect
index 3c27241..ef8f0a6 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t1 = this.{test::A::_#A#x} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
+    return let final core::int? #t1 = this.{test::A::_#A#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
   set x(core::int #t2) → void
     this.{test::A::_#A#x} = #t2;
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.weak.expect
index 132542f..c3f8ab3 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.weak.expect
@@ -20,7 +20,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{test::A::_#A#x#isSet} ?{core::int} let final core::int? #t1 = this.{test::A::_#A#x} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{test::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{test::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
   set x(core::int #t2) → void {
     this.{test::A::_#A#x#isSet} = true;
     this.{test::A::_#A#x} = #t2;
diff --git a/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.weak.transformed.expect
index 132542f..c3f8ab3 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{test::A::_#A#x#isSet} ?{core::int} let final core::int? #t1 = this.{test::A::_#A#x} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{test::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{test::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
   set x(core::int #t2) → void {
     this.{test::A::_#A#x#isSet} = true;
     this.{test::A::_#A#x} = #t2;
diff --git a/pkg/front_end/testcases/late_lowering/issue41436b.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue41436b.dart.strong.expect
index 61f91a8..e8817ef 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436b.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436b.dart.strong.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#x} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
   set x(core::int #t2) → void
     this.{self::A::_#A#x} = #t2;
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue41436b.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41436b.dart.strong.transformed.expect
index 61f91a8..e8817ef 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436b.dart.strong.transformed.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#x} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
   set x(core::int #t2) → void
     this.{self::A::_#A#x} = #t2;
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue41436b.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue41436b.dart.weak.expect
index 33ef62f..0c45d0a 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436b.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436b.dart.weak.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{self::A::_#A#x#isSet} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
   set x(core::int #t2) → void {
     this.{self::A::_#A#x#isSet} = true;
     this.{self::A::_#A#x} = #t2;
diff --git a/pkg/front_end/testcases/late_lowering/issue41436b.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41436b.dart.weak.transformed.expect
index 33ef62f..0c45d0a 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436b.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{self::A::_#A#x#isSet} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
   set x(core::int #t2) → void {
     this.{self::A::_#A#x#isSet} = true;
     this.{self::A::_#A#x} = #t2;
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.expect
index 6e6d809..f4a96a9 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.expect
@@ -10,9 +10,9 @@
     : super iss::B::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {
   new self::C::•();
@@ -29,7 +29,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t1 = this.{iss::A::_#A#x} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
+    return let final core::int? #t1 = this.{iss::A::_#A#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
   set x(core::int #t2) → void
     this.{iss::A::_#A#x} = #t2;
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.transformed.expect
index 6854c03..2a07753 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.transformed.expect
@@ -10,9 +10,9 @@
     : super iss::B::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {
   new self::C::•();
@@ -29,7 +29,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t1 = this.{iss::A::_#A#x} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
+    return let final core::int? #t1 = this.{iss::A::_#A#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
   set x(core::int #t2) → void
     this.{iss::A::_#A#x} = #t2;
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.expect
index bf446b5..963d836 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.expect
@@ -10,13 +10,13 @@
     : super iss::B::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet() → core::bool
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet(core::bool value) → void
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {
   new self::C::•();
@@ -34,7 +34,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{iss::A::_#A#x#isSet} ?{core::int} let final core::int? #t1 = this.{iss::A::_#A#x} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{iss::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{iss::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
   set x(core::int #t2) → void {
     this.{iss::A::_#A#x#isSet} = true;
     this.{iss::A::_#A#x} = #t2;
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.outline.expect
index cea7ad0..4f3a9d5 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.outline.expect
@@ -9,13 +9,13 @@
   synthetic constructor •() → self::C
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet() → core::bool
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_#A#x#isSet, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_#A#x#isSet, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_#A#x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_#A#x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet(core::bool value) → void
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_#A#x#isSet=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_#A#x#isSet=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_#A#x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_#A#x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.transformed.expect
index 8d7842a..3f54bd2 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.transformed.expect
@@ -10,13 +10,13 @@
     : super iss::B::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet() → core::bool
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet(core::bool value) → void
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {
   new self::C::•();
@@ -34,7 +34,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{iss::A::_#A#x#isSet} ?{core::int} let final core::int? #t1 = this.{iss::A::_#A#x} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{iss::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{iss::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
   set x(core::int #t2) → void {
     this.{iss::A::_#A#x#isSet} = true;
     this.{iss::A::_#A#x} = #t2;
diff --git a/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.expect
index f550130..f4abe91 100644
--- a/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.expect
@@ -35,12 +35,12 @@
   self::expect("lateValue", self::C::s);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.transformed.expect
index f550130..f4abe91 100644
--- a/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.transformed.expect
@@ -35,12 +35,12 @@
   self::expect("lateValue", self::C::s);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/late_lowering/issue41922.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue41922.dart.weak.expect
index f550130..f4abe91 100644
--- a/pkg/front_end/testcases/late_lowering/issue41922.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41922.dart.weak.expect
@@ -35,12 +35,12 @@
   self::expect("lateValue", self::C::s);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/late_lowering/issue41922.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41922.dart.weak.transformed.expect
index f550130..f4abe91 100644
--- a/pkg/front_end/testcases/late_lowering/issue41922.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41922.dart.weak.transformed.expect
@@ -35,12 +35,12 @@
   self::expect("lateValue", self::C::s);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.expect
index e2cc0e7..c0a69a4 100644
--- a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   get x() → self::A::T%
-    return this.{self::A::_#A#x#isSet} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x}{self::A::T?} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
   set x(generic-covariant-impl self::A::T% #t2) → void {
     this.{self::A::_#A#x#isSet} = true;
     this.{self::A::_#A#x} = #t2;
@@ -22,7 +22,7 @@
     : super core::Object::•()
     ;
   get y() → self::B::T?
-    return this.{self::B::_y};
+    return this.{self::B::_y}{self::B::T?};
   set y(generic-covariant-impl self::B::T? val) → void {
     this.{self::B::_y} = val;
   }
@@ -36,12 +36,12 @@
   self::throws(() → void => b.{self::B::y} = 0.5);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.transformed.expect
index e2cc0e7..c0a69a4 100644
--- a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   get x() → self::A::T%
-    return this.{self::A::_#A#x#isSet} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x}{self::A::T?} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
   set x(generic-covariant-impl self::A::T% #t2) → void {
     this.{self::A::_#A#x#isSet} = true;
     this.{self::A::_#A#x} = #t2;
@@ -22,7 +22,7 @@
     : super core::Object::•()
     ;
   get y() → self::B::T?
-    return this.{self::B::_y};
+    return this.{self::B::_y}{self::B::T?};
   set y(generic-covariant-impl self::B::T? val) → void {
     this.{self::B::_y} = val;
   }
@@ -36,12 +36,12 @@
   self::throws(() → void => b.{self::B::y} = 0.5);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.expect
index e2cc0e7..c0a69a4 100644
--- a/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   get x() → self::A::T%
-    return this.{self::A::_#A#x#isSet} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x}{self::A::T?} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
   set x(generic-covariant-impl self::A::T% #t2) → void {
     this.{self::A::_#A#x#isSet} = true;
     this.{self::A::_#A#x} = #t2;
@@ -22,7 +22,7 @@
     : super core::Object::•()
     ;
   get y() → self::B::T?
-    return this.{self::B::_y};
+    return this.{self::B::_y}{self::B::T?};
   set y(generic-covariant-impl self::B::T? val) → void {
     this.{self::B::_y} = val;
   }
@@ -36,12 +36,12 @@
   self::throws(() → void => b.{self::B::y} = 0.5);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.transformed.expect
index e2cc0e7..c0a69a4 100644
--- a/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   get x() → self::A::T%
-    return this.{self::A::_#A#x#isSet} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x}{self::A::T?} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
   set x(generic-covariant-impl self::A::T% #t2) → void {
     this.{self::A::_#A#x#isSet} = true;
     this.{self::A::_#A#x} = #t2;
@@ -22,7 +22,7 @@
     : super core::Object::•()
     ;
   get y() → self::B::T?
-    return this.{self::B::_y};
+    return this.{self::B::_y}{self::B::T?};
   set y(generic-covariant-impl self::B::T? val) → void {
     this.{self::B::_y} = val;
   }
@@ -36,12 +36,12 @@
   self::throws(() → void => b.{self::B::y} = 0.5);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.expect
index 6d44223..66a67c4 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.expect
@@ -6,39 +6,39 @@
 static method main(core::List<core::String> args) → dynamic {
   lowered () →? core::int #recursiveInitLocal;
   function #recursiveInitLocal#get() → () → core::int
-    return let final () →? core::int #t1 = #recursiveInitLocal in #t1.==(null) ?{() → core::int} throw new _in::LateError::localNI("recursiveInitLocal") : #t1{() → core::int};
+    return let final () →? core::int #t1 = #recursiveInitLocal in #t1 == null ?{() → core::int} throw new _in::LateError::localNI("recursiveInitLocal") : #t1{() → core::int};
   function #recursiveInitLocal#set(() → core::int #t2) → dynamic
     return #recursiveInitLocal = #t2;
   lowered final core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t3 = #local in #t3.==(null) ?{core::int} let final core::int #t4 = #recursiveInitLocal#get.call().call() in #local.==(null) ?{core::int} #local = #t4 : throw new _in::LateError::localADI("local") : #t3{core::int};
+    return let final core::int? #t3 = #local in #t3 == null ?{core::int} let final core::int #t4 = #recursiveInitLocal#get(){() → () → core::int}(){() → core::int} in #local == null ?{core::int} #local = #t4 : throw new _in::LateError::localADI("local") : #t3{core::int};
   core::bool doRecursiveInitLocal = true;
-  #recursiveInitLocal#set.call(() → core::int {
+  #recursiveInitLocal#set(() → core::int {
     core::print("Executing initializer");
     if(doRecursiveInitLocal) {
       doRecursiveInitLocal = false;
       core::print("Trigger recursive initialization");
-      core::int val = #local#get.call();
+      core::int val = #local#get(){() → core::int};
       core::print("Final local has value ${val}");
       core::print("Returning 4 from initializer");
       return 4;
     }
     core::print("Returning 3 from initializer");
     return 3;
-  });
+  }){(() → core::int) → dynamic};
   self::throws(() → Null {
-    core::int val = #local#get.call();
+    core::int val = #local#get(){() → core::int};
     core::print("Final local has value ${val}");
   }, "Read local");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.transformed.expect
index 6d44223..66a67c4 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.transformed.expect
@@ -6,39 +6,39 @@
 static method main(core::List<core::String> args) → dynamic {
   lowered () →? core::int #recursiveInitLocal;
   function #recursiveInitLocal#get() → () → core::int
-    return let final () →? core::int #t1 = #recursiveInitLocal in #t1.==(null) ?{() → core::int} throw new _in::LateError::localNI("recursiveInitLocal") : #t1{() → core::int};
+    return let final () →? core::int #t1 = #recursiveInitLocal in #t1 == null ?{() → core::int} throw new _in::LateError::localNI("recursiveInitLocal") : #t1{() → core::int};
   function #recursiveInitLocal#set(() → core::int #t2) → dynamic
     return #recursiveInitLocal = #t2;
   lowered final core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t3 = #local in #t3.==(null) ?{core::int} let final core::int #t4 = #recursiveInitLocal#get.call().call() in #local.==(null) ?{core::int} #local = #t4 : throw new _in::LateError::localADI("local") : #t3{core::int};
+    return let final core::int? #t3 = #local in #t3 == null ?{core::int} let final core::int #t4 = #recursiveInitLocal#get(){() → () → core::int}(){() → core::int} in #local == null ?{core::int} #local = #t4 : throw new _in::LateError::localADI("local") : #t3{core::int};
   core::bool doRecursiveInitLocal = true;
-  #recursiveInitLocal#set.call(() → core::int {
+  #recursiveInitLocal#set(() → core::int {
     core::print("Executing initializer");
     if(doRecursiveInitLocal) {
       doRecursiveInitLocal = false;
       core::print("Trigger recursive initialization");
-      core::int val = #local#get.call();
+      core::int val = #local#get(){() → core::int};
       core::print("Final local has value ${val}");
       core::print("Returning 4 from initializer");
       return 4;
     }
     core::print("Returning 3 from initializer");
     return 3;
-  });
+  }){(() → core::int) → dynamic};
   self::throws(() → Null {
-    core::int val = #local#get.call();
+    core::int val = #local#get(){() → core::int};
     core::print("Final local has value ${val}");
   }, "Read local");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.expect
index bc6ab71..57a90e0 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.expect
@@ -16,7 +16,7 @@
   lowered core::bool #local#isSet = false;
   function #local#get() → core::int {
     if(!#local#isSet) {
-      final core::int #t2 = #recursiveInitLocal#get.call().call();
+      final core::int #t2 = #recursiveInitLocal#get(){() → () → core::int}(){() → core::int};
       if(#local#isSet)
         throw new _in::LateError::localADI("local");
       #local = #t2;
@@ -25,32 +25,32 @@
     return #local{core::int};
   }
   core::bool doRecursiveInitLocal = true;
-  #recursiveInitLocal#set.call(() → core::int {
+  #recursiveInitLocal#set(() → core::int {
     core::print("Executing initializer");
     if(doRecursiveInitLocal) {
       doRecursiveInitLocal = false;
       core::print("Trigger recursive initialization");
-      core::int val = #local#get.call();
+      core::int val = #local#get(){() → core::int};
       core::print("Final local has value ${val}");
       core::print("Returning 4 from initializer");
       return 4;
     }
     core::print("Returning 3 from initializer");
     return 3;
-  });
+  }){(() → core::int) → dynamic};
   self::throws(() → Null {
-    core::int val = #local#get.call();
+    core::int val = #local#get(){() → core::int};
     core::print("Final local has value ${val}");
   }, "Read local");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.transformed.expect
index bc6ab71..57a90e0 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
   lowered core::bool #local#isSet = false;
   function #local#get() → core::int {
     if(!#local#isSet) {
-      final core::int #t2 = #recursiveInitLocal#get.call().call();
+      final core::int #t2 = #recursiveInitLocal#get(){() → () → core::int}(){() → core::int};
       if(#local#isSet)
         throw new _in::LateError::localADI("local");
       #local = #t2;
@@ -25,32 +25,32 @@
     return #local{core::int};
   }
   core::bool doRecursiveInitLocal = true;
-  #recursiveInitLocal#set.call(() → core::int {
+  #recursiveInitLocal#set(() → core::int {
     core::print("Executing initializer");
     if(doRecursiveInitLocal) {
       doRecursiveInitLocal = false;
       core::print("Trigger recursive initialization");
-      core::int val = #local#get.call();
+      core::int val = #local#get(){() → core::int};
       core::print("Final local has value ${val}");
       core::print("Returning 4 from initializer");
       return 4;
     }
     core::print("Returning 3 from initializer");
     return 3;
-  });
+  }){(() → core::int) → dynamic};
   self::throws(() → Null {
-    core::int val = #local#get.call();
+    core::int val = #local#get(){() → core::int};
     core::print("Final local has value ${val}");
   }, "Read local");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.expect
index 40eb00c..924fb03 100644
--- a/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.expect
@@ -21,46 +21,46 @@
     ;
   @#C1
   get instanceField() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#instanceField} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("instanceField") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#instanceField}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("instanceField") : #t1{core::int};
   @#C1
   set instanceField(core::int #t2) → void
     this.{self::A::_#A#instanceField} = #t2;
   @#C1
   get finalInstanceField() → core::int
-    return let final core::int? #t3 = this.{self::A::_#A#finalInstanceField} in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("finalInstanceField") : #t3{core::int};
+    return let final core::int? #t3 = this.{self::A::_#A#finalInstanceField}{core::int?} in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("finalInstanceField") : #t3{core::int};
   @#C1
   set finalInstanceField(core::int #t4) → void
-    if(this.{self::A::_#A#finalInstanceField}.==(null))
+    if(this.{self::A::_#A#finalInstanceField}{core::int?} == null)
       this.{self::A::_#A#finalInstanceField} = #t4;
     else
       throw new _in::LateError::fieldAI("finalInstanceField");
   @#C1
   get finalInstanceFieldWithInitializer() → core::int
-    return let final core::int? #t5 = this.{self::A::_#A#finalInstanceFieldWithInitializer} in #t5.==(null) ?{core::int} let final core::int #t6 = 0 in this.{self::A::_#A#finalInstanceFieldWithInitializer}.==(null) ?{core::int} this.{self::A::_#A#finalInstanceFieldWithInitializer} = #t6 : throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer") : #t5{core::int};
+    return let final core::int? #t5 = this.{self::A::_#A#finalInstanceFieldWithInitializer}{core::int?} in #t5 == null ?{core::int} let final core::int #t6 = 0 in this.{self::A::_#A#finalInstanceFieldWithInitializer}{core::int?} == null ?{core::int} this.{self::A::_#A#finalInstanceFieldWithInitializer} = #t6 : throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer") : #t5{core::int};
   @#C1
   get covariantInstanceField() → core::num
-    return let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField} in #t7.==(null) ?{core::num} throw new _in::LateError::fieldNI("covariantInstanceField") : #t7{core::num};
+    return let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField}{core::num?} in #t7 == null ?{core::num} throw new _in::LateError::fieldNI("covariantInstanceField") : #t7{core::num};
   @#C1
   set covariantInstanceField(covariant core::num #t8) → void
     this.{self::A::_#A#covariantInstanceField} = #t8;
   @#C1
   static get staticField() → core::int
-    return let final core::int? #t9 = self::A::_#staticField in #t9.==(null) ?{core::int} throw new _in::LateError::fieldNI("staticField") : #t9{core::int};
+    return let final core::int? #t9 = self::A::_#staticField in #t9 == null ?{core::int} throw new _in::LateError::fieldNI("staticField") : #t9{core::int};
   @#C1
   static set staticField(core::int #t10) → void
     self::A::_#staticField = #t10;
   @#C1
   static get finalStaticField() → core::int
-    return let final core::int? #t11 = self::A::_#finalStaticField in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("finalStaticField") : #t11{core::int};
+    return let final core::int? #t11 = self::A::_#finalStaticField in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("finalStaticField") : #t11{core::int};
   @#C1
   static set finalStaticField(core::int #t12) → void
-    if(self::A::_#finalStaticField.==(null))
+    if(self::A::_#finalStaticField == null)
       self::A::_#finalStaticField = #t12;
     else
       throw new _in::LateError::fieldAI("finalStaticField");
   @#C1
   static get finalStaticFieldWithInitializer() → core::int
-    return let final core::int? #t13 = self::A::_#finalStaticFieldWithInitializer in #t13.==(null) ?{core::int} let final core::int #t14 = 0 in self::A::_#finalStaticFieldWithInitializer.==(null) ?{core::int} self::A::_#finalStaticFieldWithInitializer = #t14 : throw new _in::LateError::fieldADI("finalStaticFieldWithInitializer") : #t13{core::int};
+    return let final core::int? #t13 = self::A::_#finalStaticFieldWithInitializer in #t13 == null ?{core::int} let final core::int #t14 = 0 in self::A::_#finalStaticFieldWithInitializer == null ?{core::int} self::A::_#finalStaticFieldWithInitializer = #t14 : throw new _in::LateError::fieldADI("finalStaticFieldWithInitializer") : #t13{core::int};
 }
 abstract class B extends core::Object /*isMixinDeclaration*/  {
   field core::int? _#B#instanceField = null;
@@ -72,46 +72,46 @@
   static field core::int? _#finalStaticFieldWithInitializer = null;
   @#C1
   get instanceField() → core::int
-    return let final core::int? #t15 = this.{self::B::_#B#instanceField} in #t15.==(null) ?{core::int} throw new _in::LateError::fieldNI("instanceField") : #t15{core::int};
+    return let final core::int? #t15 = this.{self::B::_#B#instanceField}{core::int?} in #t15 == null ?{core::int} throw new _in::LateError::fieldNI("instanceField") : #t15{core::int};
   @#C1
   set instanceField(core::int #t16) → void
     this.{self::B::_#B#instanceField} = #t16;
   @#C1
   get finalInstanceField() → core::int
-    return let final core::int? #t17 = this.{self::B::_#B#finalInstanceField} in #t17.==(null) ?{core::int} throw new _in::LateError::fieldNI("finalInstanceField") : #t17{core::int};
+    return let final core::int? #t17 = this.{self::B::_#B#finalInstanceField}{core::int?} in #t17 == null ?{core::int} throw new _in::LateError::fieldNI("finalInstanceField") : #t17{core::int};
   @#C1
   set finalInstanceField(core::int #t18) → void
-    if(this.{self::B::_#B#finalInstanceField}.==(null))
+    if(this.{self::B::_#B#finalInstanceField}{core::int?} == null)
       this.{self::B::_#B#finalInstanceField} = #t18;
     else
       throw new _in::LateError::fieldAI("finalInstanceField");
   @#C1
   get finalInstanceFieldWithInitializer() → core::int
-    return let final core::int? #t19 = this.{self::B::_#B#finalInstanceFieldWithInitializer} in #t19.==(null) ?{core::int} let final core::int #t20 = 0 in this.{self::B::_#B#finalInstanceFieldWithInitializer}.==(null) ?{core::int} this.{self::B::_#B#finalInstanceFieldWithInitializer} = #t20 : throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer") : #t19{core::int};
+    return let final core::int? #t19 = this.{self::B::_#B#finalInstanceFieldWithInitializer}{core::int?} in #t19 == null ?{core::int} let final core::int #t20 = 0 in this.{self::B::_#B#finalInstanceFieldWithInitializer}{core::int?} == null ?{core::int} this.{self::B::_#B#finalInstanceFieldWithInitializer} = #t20 : throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer") : #t19{core::int};
   @#C1
   get covariantInstanceField() → core::num
-    return let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField} in #t21.==(null) ?{core::num} throw new _in::LateError::fieldNI("covariantInstanceField") : #t21{core::num};
+    return let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField}{core::num?} in #t21 == null ?{core::num} throw new _in::LateError::fieldNI("covariantInstanceField") : #t21{core::num};
   @#C1
   set covariantInstanceField(covariant core::num #t22) → void
     this.{self::B::_#B#covariantInstanceField} = #t22;
   @#C1
   static get staticField() → core::int
-    return let final core::int? #t23 = self::B::_#staticField in #t23.==(null) ?{core::int} throw new _in::LateError::fieldNI("staticField") : #t23{core::int};
+    return let final core::int? #t23 = self::B::_#staticField in #t23 == null ?{core::int} throw new _in::LateError::fieldNI("staticField") : #t23{core::int};
   @#C1
   static set staticField(core::int #t24) → void
     self::B::_#staticField = #t24;
   @#C1
   static get finalStaticField() → core::int
-    return let final core::int? #t25 = self::B::_#finalStaticField in #t25.==(null) ?{core::int} throw new _in::LateError::fieldNI("finalStaticField") : #t25{core::int};
+    return let final core::int? #t25 = self::B::_#finalStaticField in #t25 == null ?{core::int} throw new _in::LateError::fieldNI("finalStaticField") : #t25{core::int};
   @#C1
   static set finalStaticField(core::int #t26) → void
-    if(self::B::_#finalStaticField.==(null))
+    if(self::B::_#finalStaticField == null)
       self::B::_#finalStaticField = #t26;
     else
       throw new _in::LateError::fieldAI("finalStaticField");
   @#C1
   static get finalStaticFieldWithInitializer() → core::int
-    return let final core::int? #t27 = self::B::_#finalStaticFieldWithInitializer in #t27.==(null) ?{core::int} let final core::int #t28 = 0 in self::B::_#finalStaticFieldWithInitializer.==(null) ?{core::int} self::B::_#finalStaticFieldWithInitializer = #t28 : throw new _in::LateError::fieldADI("finalStaticFieldWithInitializer") : #t27{core::int};
+    return let final core::int? #t27 = self::B::_#finalStaticFieldWithInitializer in #t27 == null ?{core::int} let final core::int #t28 = 0 in self::B::_#finalStaticFieldWithInitializer == null ?{core::int} self::B::_#finalStaticFieldWithInitializer = #t28 : throw new _in::LateError::fieldADI("finalStaticFieldWithInitializer") : #t27{core::int};
 }
 extension Extension on self::A {
   static field extensionStaticField = self::_#Extension|extensionStaticField;
@@ -131,40 +131,40 @@
 static field core::int? _#Extension|finalExtensionStaticFieldWithInitializer = null;
 @#C1
 static get topLevelField() → core::int
-  return let final core::int? #t29 = self::_#topLevelField in #t29.==(null) ?{core::int} throw new _in::LateError::fieldNI("topLevelField") : #t29{core::int};
+  return let final core::int? #t29 = self::_#topLevelField in #t29 == null ?{core::int} throw new _in::LateError::fieldNI("topLevelField") : #t29{core::int};
 @#C1
 static set topLevelField(core::int #t30) → void
   self::_#topLevelField = #t30;
 @#C1
 static get finalTopLevelField() → core::int
-  return let final core::int? #t31 = self::_#finalTopLevelField in #t31.==(null) ?{core::int} throw new _in::LateError::fieldNI("finalTopLevelField") : #t31{core::int};
+  return let final core::int? #t31 = self::_#finalTopLevelField in #t31 == null ?{core::int} throw new _in::LateError::fieldNI("finalTopLevelField") : #t31{core::int};
 @#C1
 static set finalTopLevelField(core::int #t32) → void
-  if(self::_#finalTopLevelField.==(null))
+  if(self::_#finalTopLevelField == null)
     self::_#finalTopLevelField = #t32;
   else
     throw new _in::LateError::fieldAI("finalTopLevelField");
 @#C1
 static get finalTopLevelFieldWithInitializer() → core::int
-  return let final core::int? #t33 = self::_#finalTopLevelFieldWithInitializer in #t33.==(null) ?{core::int} let final core::int #t34 = 0 in self::_#finalTopLevelFieldWithInitializer.==(null) ?{core::int} self::_#finalTopLevelFieldWithInitializer = #t34 : throw new _in::LateError::fieldADI("finalTopLevelFieldWithInitializer") : #t33{core::int};
+  return let final core::int? #t33 = self::_#finalTopLevelFieldWithInitializer in #t33 == null ?{core::int} let final core::int #t34 = 0 in self::_#finalTopLevelFieldWithInitializer == null ?{core::int} self::_#finalTopLevelFieldWithInitializer = #t34 : throw new _in::LateError::fieldADI("finalTopLevelFieldWithInitializer") : #t33{core::int};
 @#C1
 static get Extension|extensionStaticField() → core::int
-  return let final core::int? #t35 = self::_#Extension|extensionStaticField in #t35.==(null) ?{core::int} throw new _in::LateError::fieldNI("extensionStaticField") : #t35{core::int};
+  return let final core::int? #t35 = self::_#Extension|extensionStaticField in #t35 == null ?{core::int} throw new _in::LateError::fieldNI("extensionStaticField") : #t35{core::int};
 @#C1
 static set Extension|extensionStaticField(core::int #t36) → void
   self::_#Extension|extensionStaticField = #t36;
 @#C1
 static get Extension|finalExtensionStaticField() → core::int
-  return let final core::int? #t37 = self::_#Extension|finalExtensionStaticField in #t37.==(null) ?{core::int} throw new _in::LateError::fieldNI("finalExtensionStaticField") : #t37{core::int};
+  return let final core::int? #t37 = self::_#Extension|finalExtensionStaticField in #t37 == null ?{core::int} throw new _in::LateError::fieldNI("finalExtensionStaticField") : #t37{core::int};
 @#C1
 static set Extension|finalExtensionStaticField(core::int #t38) → void
-  if(self::_#Extension|finalExtensionStaticField.==(null))
+  if(self::_#Extension|finalExtensionStaticField == null)
     self::_#Extension|finalExtensionStaticField = #t38;
   else
     throw new _in::LateError::fieldAI("finalExtensionStaticField");
 @#C1
 static get Extension|finalExtensionStaticFieldWithInitializer() → core::int
-  return let final core::int? #t39 = self::_#Extension|finalExtensionStaticFieldWithInitializer in #t39.==(null) ?{core::int} let final core::int #t40 = 0 in self::_#Extension|finalExtensionStaticFieldWithInitializer.==(null) ?{core::int} self::_#Extension|finalExtensionStaticFieldWithInitializer = #t40 : throw new _in::LateError::fieldADI("finalExtensionStaticFieldWithInitializer") : #t39{core::int};
+  return let final core::int? #t39 = self::_#Extension|finalExtensionStaticFieldWithInitializer in #t39 == null ?{core::int} let final core::int #t40 = 0 in self::_#Extension|finalExtensionStaticFieldWithInitializer == null ?{core::int} self::_#Extension|finalExtensionStaticFieldWithInitializer = #t40 : throw new _in::LateError::fieldADI("finalExtensionStaticFieldWithInitializer") : #t39{core::int};
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.transformed.expect
index 5f7ea3c..4ec55b0 100644
--- a/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.transformed.expect
@@ -21,46 +21,46 @@
     ;
   @#C1
   get instanceField() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#instanceField} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("instanceField") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#instanceField}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("instanceField") : #t1{core::int};
   @#C1
   set instanceField(core::int #t2) → void
     this.{self::A::_#A#instanceField} = #t2;
   @#C1
   get finalInstanceField() → core::int
-    return let final core::int? #t3 = this.{self::A::_#A#finalInstanceField} in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("finalInstanceField") : #t3{core::int};
+    return let final core::int? #t3 = this.{self::A::_#A#finalInstanceField}{core::int?} in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("finalInstanceField") : #t3{core::int};
   @#C1
   set finalInstanceField(core::int #t4) → void
-    if(this.{self::A::_#A#finalInstanceField}.==(null))
+    if(this.{self::A::_#A#finalInstanceField}{core::int?} == null)
       this.{self::A::_#A#finalInstanceField} = #t4;
     else
       throw new _in::LateError::fieldAI("finalInstanceField");
   @#C1
   get finalInstanceFieldWithInitializer() → core::int
-    return let final core::int? #t5 = this.{self::A::_#A#finalInstanceFieldWithInitializer} in #t5.==(null) ?{core::int} let final core::int #t6 = 0 in this.{self::A::_#A#finalInstanceFieldWithInitializer}.==(null) ?{core::int} this.{self::A::_#A#finalInstanceFieldWithInitializer} = #t6 : throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer") : #t5{core::int};
+    return let final core::int? #t5 = this.{self::A::_#A#finalInstanceFieldWithInitializer}{core::int?} in #t5 == null ?{core::int} let final core::int #t6 = 0 in this.{self::A::_#A#finalInstanceFieldWithInitializer}{core::int?} == null ?{core::int} this.{self::A::_#A#finalInstanceFieldWithInitializer} = #t6 : throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer") : #t5{core::int};
   @#C1
   get covariantInstanceField() → core::num
-    return let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField} in #t7.==(null) ?{core::num} throw new _in::LateError::fieldNI("covariantInstanceField") : #t7{core::num};
+    return let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField}{core::num?} in #t7 == null ?{core::num} throw new _in::LateError::fieldNI("covariantInstanceField") : #t7{core::num};
   @#C1
   set covariantInstanceField(covariant core::num #t8) → void
     this.{self::A::_#A#covariantInstanceField} = #t8;
   @#C1
   static get staticField() → core::int
-    return let final core::int? #t9 = self::A::_#staticField in #t9.==(null) ?{core::int} throw new _in::LateError::fieldNI("staticField") : #t9{core::int};
+    return let final core::int? #t9 = self::A::_#staticField in #t9 == null ?{core::int} throw new _in::LateError::fieldNI("staticField") : #t9{core::int};
   @#C1
   static set staticField(core::int #t10) → void
     self::A::_#staticField = #t10;
   @#C1
   static get finalStaticField() → core::int
-    return let final core::int? #t11 = self::A::_#finalStaticField in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("finalStaticField") : #t11{core::int};
+    return let final core::int? #t11 = self::A::_#finalStaticField in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("finalStaticField") : #t11{core::int};
   @#C1
   static set finalStaticField(core::int #t12) → void
-    if(self::A::_#finalStaticField.==(null))
+    if(self::A::_#finalStaticField == null)
       self::A::_#finalStaticField = #t12;
     else
       throw new _in::LateError::fieldAI("finalStaticField");
   @#C1
   static get finalStaticFieldWithInitializer() → core::int
-    return let final core::int? #t13 = self::A::_#finalStaticFieldWithInitializer in #t13.==(null) ?{core::int} let final core::int #t14 = 0 in self::A::_#finalStaticFieldWithInitializer.==(null) ?{core::int} self::A::_#finalStaticFieldWithInitializer = #t14 : throw new _in::LateError::fieldADI("finalStaticFieldWithInitializer") : #t13{core::int};
+    return let final core::int? #t13 = self::A::_#finalStaticFieldWithInitializer in #t13 == null ?{core::int} let final core::int #t14 = 0 in self::A::_#finalStaticFieldWithInitializer == null ?{core::int} self::A::_#finalStaticFieldWithInitializer = #t14 : throw new _in::LateError::fieldADI("finalStaticFieldWithInitializer") : #t13{core::int};
 }
 abstract class B extends core::Object /*isMixinDeclaration*/  {
   field core::int? _#B#instanceField = null;
@@ -72,46 +72,46 @@
   static field core::int? _#finalStaticFieldWithInitializer = null;
   @#C1
   get instanceField() → core::int
-    return let final core::int? #t15 = this.{self::B::_#B#instanceField} in #t15.==(null) ?{core::int} throw new _in::LateError::fieldNI("instanceField") : #t15{core::int};
+    return let final core::int? #t15 = this.{self::B::_#B#instanceField}{core::int?} in #t15 == null ?{core::int} throw new _in::LateError::fieldNI("instanceField") : #t15{core::int};
   @#C1
   set instanceField(core::int #t16) → void
     this.{self::B::_#B#instanceField} = #t16;
   @#C1
   get finalInstanceField() → core::int
-    return let final core::int? #t17 = this.{self::B::_#B#finalInstanceField} in #t17.==(null) ?{core::int} throw new _in::LateError::fieldNI("finalInstanceField") : #t17{core::int};
+    return let final core::int? #t17 = this.{self::B::_#B#finalInstanceField}{core::int?} in #t17 == null ?{core::int} throw new _in::LateError::fieldNI("finalInstanceField") : #t17{core::int};
   @#C1
   set finalInstanceField(core::int #t18) → void
-    if(this.{self::B::_#B#finalInstanceField}.==(null))
+    if(this.{self::B::_#B#finalInstanceField}{core::int?} == null)
       this.{self::B::_#B#finalInstanceField} = #t18;
     else
       throw new _in::LateError::fieldAI("finalInstanceField");
   @#C1
   get finalInstanceFieldWithInitializer() → core::int
-    return let final core::int? #t19 = this.{self::B::_#B#finalInstanceFieldWithInitializer} in #t19.==(null) ?{core::int} let final core::int #t20 = 0 in this.{self::B::_#B#finalInstanceFieldWithInitializer}.==(null) ?{core::int} this.{self::B::_#B#finalInstanceFieldWithInitializer} = #t20 : throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer") : #t19{core::int};
+    return let final core::int? #t19 = this.{self::B::_#B#finalInstanceFieldWithInitializer}{core::int?} in #t19 == null ?{core::int} let final core::int #t20 = 0 in this.{self::B::_#B#finalInstanceFieldWithInitializer}{core::int?} == null ?{core::int} this.{self::B::_#B#finalInstanceFieldWithInitializer} = #t20 : throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer") : #t19{core::int};
   @#C1
   get covariantInstanceField() → core::num
-    return let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField} in #t21.==(null) ?{core::num} throw new _in::LateError::fieldNI("covariantInstanceField") : #t21{core::num};
+    return let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField}{core::num?} in #t21 == null ?{core::num} throw new _in::LateError::fieldNI("covariantInstanceField") : #t21{core::num};
   @#C1
   set covariantInstanceField(covariant core::num #t22) → void
     this.{self::B::_#B#covariantInstanceField} = #t22;
   @#C1
   static get staticField() → core::int
-    return let final core::int? #t23 = self::B::_#staticField in #t23.==(null) ?{core::int} throw new _in::LateError::fieldNI("staticField") : #t23{core::int};
+    return let final core::int? #t23 = self::B::_#staticField in #t23 == null ?{core::int} throw new _in::LateError::fieldNI("staticField") : #t23{core::int};
   @#C1
   static set staticField(core::int #t24) → void
     self::B::_#staticField = #t24;
   @#C1
   static get finalStaticField() → core::int
-    return let final core::int? #t25 = self::B::_#finalStaticField in #t25.==(null) ?{core::int} throw new _in::LateError::fieldNI("finalStaticField") : #t25{core::int};
+    return let final core::int? #t25 = self::B::_#finalStaticField in #t25 == null ?{core::int} throw new _in::LateError::fieldNI("finalStaticField") : #t25{core::int};
   @#C1
   static set finalStaticField(core::int #t26) → void
-    if(self::B::_#finalStaticField.==(null))
+    if(self::B::_#finalStaticField == null)
       self::B::_#finalStaticField = #t26;
     else
       throw new _in::LateError::fieldAI("finalStaticField");
   @#C1
   static get finalStaticFieldWithInitializer() → core::int
-    return let final core::int? #t27 = self::B::_#finalStaticFieldWithInitializer in #t27.==(null) ?{core::int} let final core::int #t28 = 0 in self::B::_#finalStaticFieldWithInitializer.==(null) ?{core::int} self::B::_#finalStaticFieldWithInitializer = #t28 : throw new _in::LateError::fieldADI("finalStaticFieldWithInitializer") : #t27{core::int};
+    return let final core::int? #t27 = self::B::_#finalStaticFieldWithInitializer in #t27 == null ?{core::int} let final core::int #t28 = 0 in self::B::_#finalStaticFieldWithInitializer == null ?{core::int} self::B::_#finalStaticFieldWithInitializer = #t28 : throw new _in::LateError::fieldADI("finalStaticFieldWithInitializer") : #t27{core::int};
 }
 extension Extension on self::A {
   static field extensionStaticField = self::_#Extension|extensionStaticField;
@@ -131,40 +131,40 @@
 static field core::int? _#Extension|finalExtensionStaticFieldWithInitializer = null;
 @#C1
 static get topLevelField() → core::int
-  return let final core::int? #t29 = self::_#topLevelField in #t29.==(null) ?{core::int} throw new _in::LateError::fieldNI("topLevelField") : #t29{core::int};
+  return let final core::int? #t29 = self::_#topLevelField in #t29 == null ?{core::int} throw new _in::LateError::fieldNI("topLevelField") : #t29{core::int};
 @#C1
 static set topLevelField(core::int #t30) → void
   self::_#topLevelField = #t30;
 @#C1
 static get finalTopLevelField() → core::int
-  return let final core::int? #t31 = self::_#finalTopLevelField in #t31.==(null) ?{core::int} throw new _in::LateError::fieldNI("finalTopLevelField") : #t31{core::int};
+  return let final core::int? #t31 = self::_#finalTopLevelField in #t31 == null ?{core::int} throw new _in::LateError::fieldNI("finalTopLevelField") : #t31{core::int};
 @#C1
 static set finalTopLevelField(core::int #t32) → void
-  if(self::_#finalTopLevelField.==(null))
+  if(self::_#finalTopLevelField == null)
     self::_#finalTopLevelField = #t32;
   else
     throw new _in::LateError::fieldAI("finalTopLevelField");
 @#C1
 static get finalTopLevelFieldWithInitializer() → core::int
-  return let final core::int? #t33 = self::_#finalTopLevelFieldWithInitializer in #t33.==(null) ?{core::int} let final core::int #t34 = 0 in self::_#finalTopLevelFieldWithInitializer.==(null) ?{core::int} self::_#finalTopLevelFieldWithInitializer = #t34 : throw new _in::LateError::fieldADI("finalTopLevelFieldWithInitializer") : #t33{core::int};
+  return let final core::int? #t33 = self::_#finalTopLevelFieldWithInitializer in #t33 == null ?{core::int} let final core::int #t34 = 0 in self::_#finalTopLevelFieldWithInitializer == null ?{core::int} self::_#finalTopLevelFieldWithInitializer = #t34 : throw new _in::LateError::fieldADI("finalTopLevelFieldWithInitializer") : #t33{core::int};
 @#C1
 static get Extension|extensionStaticField() → core::int
-  return let final core::int? #t35 = self::_#Extension|extensionStaticField in #t35.==(null) ?{core::int} throw new _in::LateError::fieldNI("extensionStaticField") : #t35{core::int};
+  return let final core::int? #t35 = self::_#Extension|extensionStaticField in #t35 == null ?{core::int} throw new _in::LateError::fieldNI("extensionStaticField") : #t35{core::int};
 @#C1
 static set Extension|extensionStaticField(core::int #t36) → void
   self::_#Extension|extensionStaticField = #t36;
 @#C1
 static get Extension|finalExtensionStaticField() → core::int
-  return let final core::int? #t37 = self::_#Extension|finalExtensionStaticField in #t37.==(null) ?{core::int} throw new _in::LateError::fieldNI("finalExtensionStaticField") : #t37{core::int};
+  return let final core::int? #t37 = self::_#Extension|finalExtensionStaticField in #t37 == null ?{core::int} throw new _in::LateError::fieldNI("finalExtensionStaticField") : #t37{core::int};
 @#C1
 static set Extension|finalExtensionStaticField(core::int #t38) → void
-  if(self::_#Extension|finalExtensionStaticField.==(null))
+  if(self::_#Extension|finalExtensionStaticField == null)
     self::_#Extension|finalExtensionStaticField = #t38;
   else
     throw new _in::LateError::fieldAI("finalExtensionStaticField");
 @#C1
 static get Extension|finalExtensionStaticFieldWithInitializer() → core::int
-  return let final core::int? #t39 = self::_#Extension|finalExtensionStaticFieldWithInitializer in #t39.==(null) ?{core::int} let final core::int #t40 = 0 in self::_#Extension|finalExtensionStaticFieldWithInitializer.==(null) ?{core::int} self::_#Extension|finalExtensionStaticFieldWithInitializer = #t40 : throw new _in::LateError::fieldADI("finalExtensionStaticFieldWithInitializer") : #t39{core::int};
+  return let final core::int? #t39 = self::_#Extension|finalExtensionStaticFieldWithInitializer in #t39 == null ?{core::int} let final core::int #t40 = 0 in self::_#Extension|finalExtensionStaticFieldWithInitializer == null ?{core::int} self::_#Extension|finalExtensionStaticFieldWithInitializer = #t40 : throw new _in::LateError::fieldADI("finalExtensionStaticFieldWithInitializer") : #t39{core::int};
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.expect
index 053c333..6e971c0 100644
--- a/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.expect
@@ -28,7 +28,7 @@
     ;
   @#C1
   get instanceField() → core::int
-    return this.{self::A::_#A#instanceField#isSet} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#instanceField} in #t1{core::int} : throw new _in::LateError::fieldNI("instanceField");
+    return this.{self::A::_#A#instanceField#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#instanceField}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("instanceField");
   @#C1
   set instanceField(core::int #t2) → void {
     this.{self::A::_#A#instanceField#isSet} = true;
@@ -36,10 +36,10 @@
   }
   @#C1
   get finalInstanceField() → core::int
-    return this.{self::A::_#A#finalInstanceField#isSet} ?{core::int} let final core::int? #t3 = this.{self::A::_#A#finalInstanceField} in #t3{core::int} : throw new _in::LateError::fieldNI("finalInstanceField");
+    return this.{self::A::_#A#finalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t3 = this.{self::A::_#A#finalInstanceField}{core::int?} in #t3{core::int} : throw new _in::LateError::fieldNI("finalInstanceField");
   @#C1
   set finalInstanceField(core::int #t4) → void
-    if(this.{self::A::_#A#finalInstanceField#isSet})
+    if(this.{self::A::_#A#finalInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("finalInstanceField");
     else {
       this.{self::A::_#A#finalInstanceField#isSet} = true;
@@ -47,18 +47,18 @@
     }
   @#C1
   get finalInstanceFieldWithInitializer() → core::int {
-    if(!this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet}) {
+    if(!this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet}{core::bool}) {
       final core::int #t5 = 0;
-      if(this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet})
+      if(this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet}{core::bool})
         throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer");
       this.{self::A::_#A#finalInstanceFieldWithInitializer} = #t5;
       this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet} = true;
     }
-    return let final core::int? #t6 = this.{self::A::_#A#finalInstanceFieldWithInitializer} in #t6{core::int};
+    return let final core::int? #t6 = this.{self::A::_#A#finalInstanceFieldWithInitializer}{core::int?} in #t6{core::int};
   }
   @#C1
   get covariantInstanceField() → core::num
-    return this.{self::A::_#A#covariantInstanceField#isSet} ?{core::num} let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField} in #t7{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
+    return this.{self::A::_#A#covariantInstanceField#isSet}{core::bool} ?{core::num} let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField}{core::num?} in #t7{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
   @#C1
   set covariantInstanceField(covariant core::num #t8) → void {
     this.{self::A::_#A#covariantInstanceField#isSet} = true;
@@ -112,7 +112,7 @@
   static field core::bool _#finalStaticFieldWithInitializer#isSet = false;
   @#C1
   get instanceField() → core::int
-    return this.{self::B::_#B#instanceField#isSet} ?{core::int} let final core::int? #t15 = this.{self::B::_#B#instanceField} in #t15{core::int} : throw new _in::LateError::fieldNI("instanceField");
+    return this.{self::B::_#B#instanceField#isSet}{core::bool} ?{core::int} let final core::int? #t15 = this.{self::B::_#B#instanceField}{core::int?} in #t15{core::int} : throw new _in::LateError::fieldNI("instanceField");
   @#C1
   set instanceField(core::int #t16) → void {
     this.{self::B::_#B#instanceField#isSet} = true;
@@ -120,10 +120,10 @@
   }
   @#C1
   get finalInstanceField() → core::int
-    return this.{self::B::_#B#finalInstanceField#isSet} ?{core::int} let final core::int? #t17 = this.{self::B::_#B#finalInstanceField} in #t17{core::int} : throw new _in::LateError::fieldNI("finalInstanceField");
+    return this.{self::B::_#B#finalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t17 = this.{self::B::_#B#finalInstanceField}{core::int?} in #t17{core::int} : throw new _in::LateError::fieldNI("finalInstanceField");
   @#C1
   set finalInstanceField(core::int #t18) → void
-    if(this.{self::B::_#B#finalInstanceField#isSet})
+    if(this.{self::B::_#B#finalInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("finalInstanceField");
     else {
       this.{self::B::_#B#finalInstanceField#isSet} = true;
@@ -131,18 +131,18 @@
     }
   @#C1
   get finalInstanceFieldWithInitializer() → core::int {
-    if(!this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet}) {
+    if(!this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet}{core::bool}) {
       final core::int #t19 = 0;
-      if(this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet})
+      if(this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet}{core::bool})
         throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer");
       this.{self::B::_#B#finalInstanceFieldWithInitializer} = #t19;
       this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet} = true;
     }
-    return let final core::int? #t20 = this.{self::B::_#B#finalInstanceFieldWithInitializer} in #t20{core::int};
+    return let final core::int? #t20 = this.{self::B::_#B#finalInstanceFieldWithInitializer}{core::int?} in #t20{core::int};
   }
   @#C1
   get covariantInstanceField() → core::num
-    return this.{self::B::_#B#covariantInstanceField#isSet} ?{core::num} let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField} in #t21{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
+    return this.{self::B::_#B#covariantInstanceField#isSet}{core::bool} ?{core::num} let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField}{core::num?} in #t21{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
   @#C1
   set covariantInstanceField(covariant core::num #t22) → void {
     this.{self::B::_#B#covariantInstanceField#isSet} = true;
diff --git a/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.transformed.expect
index 053c333..6e971c0 100644
--- a/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.transformed.expect
@@ -28,7 +28,7 @@
     ;
   @#C1
   get instanceField() → core::int
-    return this.{self::A::_#A#instanceField#isSet} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#instanceField} in #t1{core::int} : throw new _in::LateError::fieldNI("instanceField");
+    return this.{self::A::_#A#instanceField#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#instanceField}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("instanceField");
   @#C1
   set instanceField(core::int #t2) → void {
     this.{self::A::_#A#instanceField#isSet} = true;
@@ -36,10 +36,10 @@
   }
   @#C1
   get finalInstanceField() → core::int
-    return this.{self::A::_#A#finalInstanceField#isSet} ?{core::int} let final core::int? #t3 = this.{self::A::_#A#finalInstanceField} in #t3{core::int} : throw new _in::LateError::fieldNI("finalInstanceField");
+    return this.{self::A::_#A#finalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t3 = this.{self::A::_#A#finalInstanceField}{core::int?} in #t3{core::int} : throw new _in::LateError::fieldNI("finalInstanceField");
   @#C1
   set finalInstanceField(core::int #t4) → void
-    if(this.{self::A::_#A#finalInstanceField#isSet})
+    if(this.{self::A::_#A#finalInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("finalInstanceField");
     else {
       this.{self::A::_#A#finalInstanceField#isSet} = true;
@@ -47,18 +47,18 @@
     }
   @#C1
   get finalInstanceFieldWithInitializer() → core::int {
-    if(!this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet}) {
+    if(!this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet}{core::bool}) {
       final core::int #t5 = 0;
-      if(this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet})
+      if(this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet}{core::bool})
         throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer");
       this.{self::A::_#A#finalInstanceFieldWithInitializer} = #t5;
       this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet} = true;
     }
-    return let final core::int? #t6 = this.{self::A::_#A#finalInstanceFieldWithInitializer} in #t6{core::int};
+    return let final core::int? #t6 = this.{self::A::_#A#finalInstanceFieldWithInitializer}{core::int?} in #t6{core::int};
   }
   @#C1
   get covariantInstanceField() → core::num
-    return this.{self::A::_#A#covariantInstanceField#isSet} ?{core::num} let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField} in #t7{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
+    return this.{self::A::_#A#covariantInstanceField#isSet}{core::bool} ?{core::num} let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField}{core::num?} in #t7{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
   @#C1
   set covariantInstanceField(covariant core::num #t8) → void {
     this.{self::A::_#A#covariantInstanceField#isSet} = true;
@@ -112,7 +112,7 @@
   static field core::bool _#finalStaticFieldWithInitializer#isSet = false;
   @#C1
   get instanceField() → core::int
-    return this.{self::B::_#B#instanceField#isSet} ?{core::int} let final core::int? #t15 = this.{self::B::_#B#instanceField} in #t15{core::int} : throw new _in::LateError::fieldNI("instanceField");
+    return this.{self::B::_#B#instanceField#isSet}{core::bool} ?{core::int} let final core::int? #t15 = this.{self::B::_#B#instanceField}{core::int?} in #t15{core::int} : throw new _in::LateError::fieldNI("instanceField");
   @#C1
   set instanceField(core::int #t16) → void {
     this.{self::B::_#B#instanceField#isSet} = true;
@@ -120,10 +120,10 @@
   }
   @#C1
   get finalInstanceField() → core::int
-    return this.{self::B::_#B#finalInstanceField#isSet} ?{core::int} let final core::int? #t17 = this.{self::B::_#B#finalInstanceField} in #t17{core::int} : throw new _in::LateError::fieldNI("finalInstanceField");
+    return this.{self::B::_#B#finalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t17 = this.{self::B::_#B#finalInstanceField}{core::int?} in #t17{core::int} : throw new _in::LateError::fieldNI("finalInstanceField");
   @#C1
   set finalInstanceField(core::int #t18) → void
-    if(this.{self::B::_#B#finalInstanceField#isSet})
+    if(this.{self::B::_#B#finalInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("finalInstanceField");
     else {
       this.{self::B::_#B#finalInstanceField#isSet} = true;
@@ -131,18 +131,18 @@
     }
   @#C1
   get finalInstanceFieldWithInitializer() → core::int {
-    if(!this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet}) {
+    if(!this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet}{core::bool}) {
       final core::int #t19 = 0;
-      if(this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet})
+      if(this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet}{core::bool})
         throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer");
       this.{self::B::_#B#finalInstanceFieldWithInitializer} = #t19;
       this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet} = true;
     }
-    return let final core::int? #t20 = this.{self::B::_#B#finalInstanceFieldWithInitializer} in #t20{core::int};
+    return let final core::int? #t20 = this.{self::B::_#B#finalInstanceFieldWithInitializer}{core::int?} in #t20{core::int};
   }
   @#C1
   get covariantInstanceField() → core::num
-    return this.{self::B::_#B#covariantInstanceField#isSet} ?{core::num} let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField} in #t21{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
+    return this.{self::B::_#B#covariantInstanceField#isSet}{core::bool} ?{core::num} let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField}{core::num?} in #t21{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
   @#C1
   set covariantInstanceField(covariant core::num #t22) → void {
     this.{self::B::_#B#covariantInstanceField#isSet} = true;
diff --git a/pkg/front_end/testcases/late_lowering/late_field_inference.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_field_inference.dart.strong.expect
index d9bfacd..a356dda 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_inference.dart.strong.expect
@@ -15,22 +15,22 @@
     : super core::Object::•()
     ;
   get nonNullableInstanceField() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#nonNullableInstanceField} in #t1.==(null) ?{core::int} this.{self::A::_#A#nonNullableInstanceField} = 0 : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#nonNullableInstanceField}{core::int?} in #t1 == null ?{core::int} this.{self::A::_#A#nonNullableInstanceField} = 0 : #t1{core::int};
   set nonNullableInstanceField(core::int #t2) → void
     this.{self::A::_#A#nonNullableInstanceField} = #t2;
   get nullableInstanceField() → core::int? {
-    if(!this.{self::A::_#A#nullableInstanceField#isSet}) {
+    if(!this.{self::A::_#A#nullableInstanceField#isSet}{core::bool}) {
       this.{self::A::_#A#nullableInstanceField} = self::method();
       this.{self::A::_#A#nullableInstanceField#isSet} = true;
     }
-    return this.{self::A::_#A#nullableInstanceField};
+    return this.{self::A::_#A#nullableInstanceField}{core::int?};
   }
   set nullableInstanceField(core::int? #t3) → void {
     this.{self::A::_#A#nullableInstanceField#isSet} = true;
     this.{self::A::_#A#nullableInstanceField} = #t3;
   }
   static get nonNullableStaticField() → core::int
-    return let final core::int? #t4 = self::A::_#nonNullableStaticField in #t4.==(null) ?{core::int} self::A::_#nonNullableStaticField = 0 : #t4{core::int};
+    return let final core::int? #t4 = self::A::_#nonNullableStaticField in #t4 == null ?{core::int} self::A::_#nonNullableStaticField = 0 : #t4{core::int};
   static set nonNullableStaticField(core::int #t5) → void
     self::A::_#nonNullableStaticField = #t5;
   static get nullableStaticField() → core::int? {
@@ -63,7 +63,7 @@
 static method method() → core::int?
   return null;
 static get nonNullableTopLevelField() → core::int
-  return let final core::int? #t7 = self::_#nonNullableTopLevelField in #t7.==(null) ?{core::int} self::_#nonNullableTopLevelField = 0 : #t7{core::int};
+  return let final core::int? #t7 = self::_#nonNullableTopLevelField in #t7 == null ?{core::int} self::_#nonNullableTopLevelField = 0 : #t7{core::int};
 static set nonNullableTopLevelField(core::int #t8) → void
   self::_#nonNullableTopLevelField = #t8;
 static get nullableTopLevelField() → core::int? {
diff --git a/pkg/front_end/testcases/late_lowering/late_field_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_field_inference.dart.strong.transformed.expect
index d9bfacd..a356dda 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_inference.dart.strong.transformed.expect
@@ -15,22 +15,22 @@
     : super core::Object::•()
     ;
   get nonNullableInstanceField() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#nonNullableInstanceField} in #t1.==(null) ?{core::int} this.{self::A::_#A#nonNullableInstanceField} = 0 : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#nonNullableInstanceField}{core::int?} in #t1 == null ?{core::int} this.{self::A::_#A#nonNullableInstanceField} = 0 : #t1{core::int};
   set nonNullableInstanceField(core::int #t2) → void
     this.{self::A::_#A#nonNullableInstanceField} = #t2;
   get nullableInstanceField() → core::int? {
-    if(!this.{self::A::_#A#nullableInstanceField#isSet}) {
+    if(!this.{self::A::_#A#nullableInstanceField#isSet}{core::bool}) {
       this.{self::A::_#A#nullableInstanceField} = self::method();
       this.{self::A::_#A#nullableInstanceField#isSet} = true;
     }
-    return this.{self::A::_#A#nullableInstanceField};
+    return this.{self::A::_#A#nullableInstanceField}{core::int?};
   }
   set nullableInstanceField(core::int? #t3) → void {
     this.{self::A::_#A#nullableInstanceField#isSet} = true;
     this.{self::A::_#A#nullableInstanceField} = #t3;
   }
   static get nonNullableStaticField() → core::int
-    return let final core::int? #t4 = self::A::_#nonNullableStaticField in #t4.==(null) ?{core::int} self::A::_#nonNullableStaticField = 0 : #t4{core::int};
+    return let final core::int? #t4 = self::A::_#nonNullableStaticField in #t4 == null ?{core::int} self::A::_#nonNullableStaticField = 0 : #t4{core::int};
   static set nonNullableStaticField(core::int #t5) → void
     self::A::_#nonNullableStaticField = #t5;
   static get nullableStaticField() → core::int? {
@@ -63,7 +63,7 @@
 static method method() → core::int?
   return null;
 static get nonNullableTopLevelField() → core::int
-  return let final core::int? #t7 = self::_#nonNullableTopLevelField in #t7.==(null) ?{core::int} self::_#nonNullableTopLevelField = 0 : #t7{core::int};
+  return let final core::int? #t7 = self::_#nonNullableTopLevelField in #t7 == null ?{core::int} self::_#nonNullableTopLevelField = 0 : #t7{core::int};
 static set nonNullableTopLevelField(core::int #t8) → void
   self::_#nonNullableTopLevelField = #t8;
 static get nullableTopLevelField() → core::int? {
diff --git a/pkg/front_end/testcases/late_lowering/late_field_inference.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_field_inference.dart.weak.expect
index ce355da..bb1a104 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_inference.dart.weak.expect
@@ -15,22 +15,22 @@
     : super core::Object::•()
     ;
   get nonNullableInstanceField() → core::int {
-    if(!this.{self::A::_#A#nonNullableInstanceField#isSet}) {
+    if(!this.{self::A::_#A#nonNullableInstanceField#isSet}{core::bool}) {
       this.{self::A::_#A#nonNullableInstanceField} = 0;
       this.{self::A::_#A#nonNullableInstanceField#isSet} = true;
     }
-    return let final core::int? #t1 = this.{self::A::_#A#nonNullableInstanceField} in #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#nonNullableInstanceField}{core::int?} in #t1{core::int};
   }
   set nonNullableInstanceField(core::int #t2) → void {
     this.{self::A::_#A#nonNullableInstanceField#isSet} = true;
     this.{self::A::_#A#nonNullableInstanceField} = #t2;
   }
   get nullableInstanceField() → core::int? {
-    if(!this.{self::A::_#A#nullableInstanceField#isSet}) {
+    if(!this.{self::A::_#A#nullableInstanceField#isSet}{core::bool}) {
       this.{self::A::_#A#nullableInstanceField} = self::method();
       this.{self::A::_#A#nullableInstanceField#isSet} = true;
     }
-    return this.{self::A::_#A#nullableInstanceField};
+    return this.{self::A::_#A#nullableInstanceField}{core::int?};
   }
   set nullableInstanceField(core::int? #t3) → void {
     this.{self::A::_#A#nullableInstanceField#isSet} = true;
diff --git a/pkg/front_end/testcases/late_lowering/late_field_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_field_inference.dart.weak.transformed.expect
index ce355da..bb1a104 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_inference.dart.weak.transformed.expect
@@ -15,22 +15,22 @@
     : super core::Object::•()
     ;
   get nonNullableInstanceField() → core::int {
-    if(!this.{self::A::_#A#nonNullableInstanceField#isSet}) {
+    if(!this.{self::A::_#A#nonNullableInstanceField#isSet}{core::bool}) {
       this.{self::A::_#A#nonNullableInstanceField} = 0;
       this.{self::A::_#A#nonNullableInstanceField#isSet} = true;
     }
-    return let final core::int? #t1 = this.{self::A::_#A#nonNullableInstanceField} in #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#nonNullableInstanceField}{core::int?} in #t1{core::int};
   }
   set nonNullableInstanceField(core::int #t2) → void {
     this.{self::A::_#A#nonNullableInstanceField#isSet} = true;
     this.{self::A::_#A#nonNullableInstanceField} = #t2;
   }
   get nullableInstanceField() → core::int? {
-    if(!this.{self::A::_#A#nullableInstanceField#isSet}) {
+    if(!this.{self::A::_#A#nullableInstanceField#isSet}{core::bool}) {
       this.{self::A::_#A#nullableInstanceField} = self::method();
       this.{self::A::_#A#nullableInstanceField#isSet} = true;
     }
-    return this.{self::A::_#A#nullableInstanceField};
+    return this.{self::A::_#A#nullableInstanceField}{core::int?};
   }
   set nullableInstanceField(core::int? #t3) → void {
     this.{self::A::_#A#nullableInstanceField#isSet} = true;
diff --git a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.expect
index 4030034..3b5ec2f 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.expect
@@ -15,11 +15,11 @@
     : self::Class::field = field, super core::Object::•()
     ;
   static get lateStaticField1() → core::int
-    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1.==(null) ?{core::int} self::Class::_#lateStaticField1 = 87 : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1 == null ?{core::int} self::Class::_#lateStaticField1 = 87 : #t1{core::int};
   static set lateStaticField1(core::int #t2) → void
     self::Class::_#lateStaticField1 = #t2;
   static get lateStaticField2() → core::int
-    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3.==(null) ?{core::int} self::Class::_#lateStaticField2 = 42 : #t3{core::int};
+    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3 == null ?{core::int} self::Class::_#lateStaticField2 = 42 : #t3{core::int};
   static set lateStaticField2(core::int #t4) → void
     self::Class::_#lateStaticField2 = #t4;
   static method staticMethod() → dynamic {
@@ -28,40 +28,40 @@
     self::expect(43, self::Class::lateStaticField2);
   }
   get lateInstanceField() → core::int
-    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField} in #t5.==(null) ?{core::int} this.{self::Class::_#Class#lateInstanceField} = 16 : #t5{core::int};
+    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5 == null ?{core::int} this.{self::Class::_#Class#lateInstanceField} = 16 : #t5{core::int};
   set lateInstanceField(core::int #t6) → void
     this.{self::Class::_#Class#lateInstanceField} = #t6;
   get lateGenericField1() → self::Class::T% {
-    if(!this.{self::Class::_#Class#lateGenericField1#isSet}) {
-      this.{self::Class::_#Class#lateGenericField1} = this.{self::Class::field};
+    if(!this.{self::Class::_#Class#lateGenericField1#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericField1} = this.{self::Class::field}{self::Class::T%};
       this.{self::Class::_#Class#lateGenericField1#isSet} = true;
     }
-    return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1} in #t7{self::Class::T%};
+    return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1}{self::Class::T?} in #t7{self::Class::T%};
   }
   set lateGenericField1(generic-covariant-impl self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericField1#isSet} = true;
     this.{self::Class::_#Class#lateGenericField1} = #t8;
   }
   get lateGenericField2() → self::Class::T% {
-    if(!this.{self::Class::_#Class#lateGenericField2#isSet}) {
-      this.{self::Class::_#Class#lateGenericField2} = this.{self::Class::field};
+    if(!this.{self::Class::_#Class#lateGenericField2#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericField2} = this.{self::Class::field}{self::Class::T%};
       this.{self::Class::_#Class#lateGenericField2#isSet} = true;
     }
-    return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2} in #t9{self::Class::T%};
+    return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2}{self::Class::T?} in #t9{self::Class::T%};
   }
   set lateGenericField2(generic-covariant-impl self::Class::T% #t10) → void {
     this.{self::Class::_#Class#lateGenericField2#isSet} = true;
     this.{self::Class::_#Class#lateGenericField2} = #t10;
   }
   method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
     this.{self::Class::lateInstanceField} = 17;
-    self::expect(17, this.{self::Class::lateInstanceField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericField1});
+    self::expect(17, this.{self::Class::lateInstanceField}{core::int});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericField1}{self::Class::T%});
     this.{self::Class::lateGenericField1} = value;
-    self::expect(value, this.{self::Class::lateGenericField1});
+    self::expect(value, this.{self::Class::lateGenericField1}{self::Class::T%});
     this.{self::Class::lateGenericField2} = value;
-    self::expect(value, this.{self::Class::lateGenericField2});
+    self::expect(value, this.{self::Class::lateGenericField2}{self::Class::T%});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -77,15 +77,15 @@
 static field core::int? _#Extension|lateExtensionField1 = null;
 static field core::int? _#Extension|lateExtensionField2 = null;
 static get lateTopLevelField1() → core::int
-  return let final core::int? #t11 = self::_#lateTopLevelField1 in #t11.==(null) ?{core::int} self::_#lateTopLevelField1 = 123 : #t11{core::int};
+  return let final core::int? #t11 = self::_#lateTopLevelField1 in #t11 == null ?{core::int} self::_#lateTopLevelField1 = 123 : #t11{core::int};
 static set lateTopLevelField1(core::int #t12) → void
   self::_#lateTopLevelField1 = #t12;
 static get Extension|lateExtensionField1() → core::int
-  return let final core::int? #t13 = self::_#Extension|lateExtensionField1 in #t13.==(null) ?{core::int} self::_#Extension|lateExtensionField1 = 87 : #t13{core::int};
+  return let final core::int? #t13 = self::_#Extension|lateExtensionField1 in #t13 == null ?{core::int} self::_#Extension|lateExtensionField1 = 87 : #t13{core::int};
 static set Extension|lateExtensionField1(core::int #t14) → void
   self::_#Extension|lateExtensionField1 = #t14;
 static get Extension|lateExtensionField2() → core::int
-  return let final core::int? #t15 = self::_#Extension|lateExtensionField2 in #t15.==(null) ?{core::int} self::_#Extension|lateExtensionField2 = 42 : #t15{core::int};
+  return let final core::int? #t15 = self::_#Extension|lateExtensionField2 in #t15 == null ?{core::int} self::_#Extension|lateExtensionField2 = 42 : #t15{core::int};
 static set Extension|lateExtensionField2(core::int #t16) → void
   self::_#Extension|lateExtensionField2 = #t16;
 static method Extension|staticMethod() → dynamic {
@@ -101,13 +101,13 @@
   self::Class::lateStaticField1 = 88;
   self::expect(88, self::Class::lateStaticField1);
   self::Class::staticMethod();
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(42);
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(42){(core::int) → dynamic};
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|lateExtensionField1 = 88;
   self::expect(88, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.transformed.expect
index 4030034..3b5ec2f 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.transformed.expect
@@ -15,11 +15,11 @@
     : self::Class::field = field, super core::Object::•()
     ;
   static get lateStaticField1() → core::int
-    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1.==(null) ?{core::int} self::Class::_#lateStaticField1 = 87 : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1 == null ?{core::int} self::Class::_#lateStaticField1 = 87 : #t1{core::int};
   static set lateStaticField1(core::int #t2) → void
     self::Class::_#lateStaticField1 = #t2;
   static get lateStaticField2() → core::int
-    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3.==(null) ?{core::int} self::Class::_#lateStaticField2 = 42 : #t3{core::int};
+    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3 == null ?{core::int} self::Class::_#lateStaticField2 = 42 : #t3{core::int};
   static set lateStaticField2(core::int #t4) → void
     self::Class::_#lateStaticField2 = #t4;
   static method staticMethod() → dynamic {
@@ -28,40 +28,40 @@
     self::expect(43, self::Class::lateStaticField2);
   }
   get lateInstanceField() → core::int
-    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField} in #t5.==(null) ?{core::int} this.{self::Class::_#Class#lateInstanceField} = 16 : #t5{core::int};
+    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5 == null ?{core::int} this.{self::Class::_#Class#lateInstanceField} = 16 : #t5{core::int};
   set lateInstanceField(core::int #t6) → void
     this.{self::Class::_#Class#lateInstanceField} = #t6;
   get lateGenericField1() → self::Class::T% {
-    if(!this.{self::Class::_#Class#lateGenericField1#isSet}) {
-      this.{self::Class::_#Class#lateGenericField1} = this.{self::Class::field};
+    if(!this.{self::Class::_#Class#lateGenericField1#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericField1} = this.{self::Class::field}{self::Class::T%};
       this.{self::Class::_#Class#lateGenericField1#isSet} = true;
     }
-    return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1} in #t7{self::Class::T%};
+    return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1}{self::Class::T?} in #t7{self::Class::T%};
   }
   set lateGenericField1(generic-covariant-impl self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericField1#isSet} = true;
     this.{self::Class::_#Class#lateGenericField1} = #t8;
   }
   get lateGenericField2() → self::Class::T% {
-    if(!this.{self::Class::_#Class#lateGenericField2#isSet}) {
-      this.{self::Class::_#Class#lateGenericField2} = this.{self::Class::field};
+    if(!this.{self::Class::_#Class#lateGenericField2#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericField2} = this.{self::Class::field}{self::Class::T%};
       this.{self::Class::_#Class#lateGenericField2#isSet} = true;
     }
-    return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2} in #t9{self::Class::T%};
+    return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2}{self::Class::T?} in #t9{self::Class::T%};
   }
   set lateGenericField2(generic-covariant-impl self::Class::T% #t10) → void {
     this.{self::Class::_#Class#lateGenericField2#isSet} = true;
     this.{self::Class::_#Class#lateGenericField2} = #t10;
   }
   method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
     this.{self::Class::lateInstanceField} = 17;
-    self::expect(17, this.{self::Class::lateInstanceField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericField1});
+    self::expect(17, this.{self::Class::lateInstanceField}{core::int});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericField1}{self::Class::T%});
     this.{self::Class::lateGenericField1} = value;
-    self::expect(value, this.{self::Class::lateGenericField1});
+    self::expect(value, this.{self::Class::lateGenericField1}{self::Class::T%});
     this.{self::Class::lateGenericField2} = value;
-    self::expect(value, this.{self::Class::lateGenericField2});
+    self::expect(value, this.{self::Class::lateGenericField2}{self::Class::T%});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -77,15 +77,15 @@
 static field core::int? _#Extension|lateExtensionField1 = null;
 static field core::int? _#Extension|lateExtensionField2 = null;
 static get lateTopLevelField1() → core::int
-  return let final core::int? #t11 = self::_#lateTopLevelField1 in #t11.==(null) ?{core::int} self::_#lateTopLevelField1 = 123 : #t11{core::int};
+  return let final core::int? #t11 = self::_#lateTopLevelField1 in #t11 == null ?{core::int} self::_#lateTopLevelField1 = 123 : #t11{core::int};
 static set lateTopLevelField1(core::int #t12) → void
   self::_#lateTopLevelField1 = #t12;
 static get Extension|lateExtensionField1() → core::int
-  return let final core::int? #t13 = self::_#Extension|lateExtensionField1 in #t13.==(null) ?{core::int} self::_#Extension|lateExtensionField1 = 87 : #t13{core::int};
+  return let final core::int? #t13 = self::_#Extension|lateExtensionField1 in #t13 == null ?{core::int} self::_#Extension|lateExtensionField1 = 87 : #t13{core::int};
 static set Extension|lateExtensionField1(core::int #t14) → void
   self::_#Extension|lateExtensionField1 = #t14;
 static get Extension|lateExtensionField2() → core::int
-  return let final core::int? #t15 = self::_#Extension|lateExtensionField2 in #t15.==(null) ?{core::int} self::_#Extension|lateExtensionField2 = 42 : #t15{core::int};
+  return let final core::int? #t15 = self::_#Extension|lateExtensionField2 in #t15 == null ?{core::int} self::_#Extension|lateExtensionField2 = 42 : #t15{core::int};
 static set Extension|lateExtensionField2(core::int #t16) → void
   self::_#Extension|lateExtensionField2 = #t16;
 static method Extension|staticMethod() → dynamic {
@@ -101,13 +101,13 @@
   self::Class::lateStaticField1 = 88;
   self::expect(88, self::Class::lateStaticField1);
   self::Class::staticMethod();
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(42);
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(42){(core::int) → dynamic};
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|lateExtensionField1 = 88;
   self::expect(88, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.expect
index f6025fa..59acf34 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.expect
@@ -45,47 +45,47 @@
     self::expect(43, self::Class::lateStaticField2);
   }
   get lateInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#lateInstanceField#isSet}) {
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
       this.{self::Class::_#Class#lateInstanceField} = 16;
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     }
-    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField} in #t5{core::int};
+    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5{core::int};
   }
   set lateInstanceField(core::int #t6) → void {
     this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateInstanceField} = #t6;
   }
   get lateGenericField1() → self::Class::T% {
-    if(!this.{self::Class::_#Class#lateGenericField1#isSet}) {
-      this.{self::Class::_#Class#lateGenericField1} = this.{self::Class::field};
+    if(!this.{self::Class::_#Class#lateGenericField1#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericField1} = this.{self::Class::field}{self::Class::T%};
       this.{self::Class::_#Class#lateGenericField1#isSet} = true;
     }
-    return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1} in #t7{self::Class::T%};
+    return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1}{self::Class::T?} in #t7{self::Class::T%};
   }
   set lateGenericField1(generic-covariant-impl self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericField1#isSet} = true;
     this.{self::Class::_#Class#lateGenericField1} = #t8;
   }
   get lateGenericField2() → self::Class::T% {
-    if(!this.{self::Class::_#Class#lateGenericField2#isSet}) {
-      this.{self::Class::_#Class#lateGenericField2} = this.{self::Class::field};
+    if(!this.{self::Class::_#Class#lateGenericField2#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericField2} = this.{self::Class::field}{self::Class::T%};
       this.{self::Class::_#Class#lateGenericField2#isSet} = true;
     }
-    return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2} in #t9{self::Class::T%};
+    return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2}{self::Class::T?} in #t9{self::Class::T%};
   }
   set lateGenericField2(generic-covariant-impl self::Class::T% #t10) → void {
     this.{self::Class::_#Class#lateGenericField2#isSet} = true;
     this.{self::Class::_#Class#lateGenericField2} = #t10;
   }
   method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
     this.{self::Class::lateInstanceField} = 17;
-    self::expect(17, this.{self::Class::lateInstanceField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericField1});
+    self::expect(17, this.{self::Class::lateInstanceField}{core::int});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericField1}{self::Class::T%});
     this.{self::Class::lateGenericField1} = value;
-    self::expect(value, this.{self::Class::lateGenericField1});
+    self::expect(value, this.{self::Class::lateGenericField1}{self::Class::T%});
     this.{self::Class::lateGenericField2} = value;
-    self::expect(value, this.{self::Class::lateGenericField2});
+    self::expect(value, this.{self::Class::lateGenericField2}{self::Class::T%});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -151,13 +151,13 @@
   self::Class::lateStaticField1 = 88;
   self::expect(88, self::Class::lateStaticField1);
   self::Class::staticMethod();
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(42);
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(42){(core::int) → dynamic};
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|lateExtensionField1 = 88;
   self::expect(88, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.transformed.expect
index f6025fa..59acf34 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.transformed.expect
@@ -45,47 +45,47 @@
     self::expect(43, self::Class::lateStaticField2);
   }
   get lateInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#lateInstanceField#isSet}) {
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
       this.{self::Class::_#Class#lateInstanceField} = 16;
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     }
-    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField} in #t5{core::int};
+    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5{core::int};
   }
   set lateInstanceField(core::int #t6) → void {
     this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateInstanceField} = #t6;
   }
   get lateGenericField1() → self::Class::T% {
-    if(!this.{self::Class::_#Class#lateGenericField1#isSet}) {
-      this.{self::Class::_#Class#lateGenericField1} = this.{self::Class::field};
+    if(!this.{self::Class::_#Class#lateGenericField1#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericField1} = this.{self::Class::field}{self::Class::T%};
       this.{self::Class::_#Class#lateGenericField1#isSet} = true;
     }
-    return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1} in #t7{self::Class::T%};
+    return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1}{self::Class::T?} in #t7{self::Class::T%};
   }
   set lateGenericField1(generic-covariant-impl self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericField1#isSet} = true;
     this.{self::Class::_#Class#lateGenericField1} = #t8;
   }
   get lateGenericField2() → self::Class::T% {
-    if(!this.{self::Class::_#Class#lateGenericField2#isSet}) {
-      this.{self::Class::_#Class#lateGenericField2} = this.{self::Class::field};
+    if(!this.{self::Class::_#Class#lateGenericField2#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericField2} = this.{self::Class::field}{self::Class::T%};
       this.{self::Class::_#Class#lateGenericField2#isSet} = true;
     }
-    return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2} in #t9{self::Class::T%};
+    return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2}{self::Class::T?} in #t9{self::Class::T%};
   }
   set lateGenericField2(generic-covariant-impl self::Class::T% #t10) → void {
     this.{self::Class::_#Class#lateGenericField2#isSet} = true;
     this.{self::Class::_#Class#lateGenericField2} = #t10;
   }
   method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
     this.{self::Class::lateInstanceField} = 17;
-    self::expect(17, this.{self::Class::lateInstanceField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericField1});
+    self::expect(17, this.{self::Class::lateInstanceField}{core::int});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericField1}{self::Class::T%});
     this.{self::Class::lateGenericField1} = value;
-    self::expect(value, this.{self::Class::lateGenericField1});
+    self::expect(value, this.{self::Class::lateGenericField1}{self::Class::T%});
     this.{self::Class::lateGenericField2} = value;
-    self::expect(value, this.{self::Class::lateGenericField2});
+    self::expect(value, this.{self::Class::lateGenericField2}{self::Class::T%});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -151,13 +151,13 @@
   self::Class::lateStaticField1 = 88;
   self::expect(88, self::Class::lateStaticField1);
   self::Class::staticMethod();
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(42);
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(42){(core::int) → dynamic};
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|lateExtensionField1 = 88;
   self::expect(88, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.expect
index 8bbf5d9..1b8458c 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.expect
@@ -13,11 +13,11 @@
     : super core::Object::•()
     ;
   static get lateStaticField1() → core::int
-    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateStaticField1") : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("lateStaticField1") : #t1{core::int};
   static set lateStaticField1(core::int #t2) → void
     self::Class::_#lateStaticField1 = #t2;
   static get lateStaticField2() → core::int
-    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateStaticField2") : #t3{core::int};
+    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("lateStaticField2") : #t3{core::int};
   static set lateStaticField2(core::int #t4) → void
     self::Class::_#lateStaticField2 = #t4;
   static method staticMethod() → dynamic {
@@ -26,22 +26,22 @@
     self::expect(42, self::Class::lateStaticField2);
   }
   get lateInstanceField() → core::int
-    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField} in #t5.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateInstanceField") : #t5{core::int};
+    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5 == null ?{core::int} throw new _in::LateError::fieldNI("lateInstanceField") : #t5{core::int};
   set lateInstanceField(core::int #t6) → void
     this.{self::Class::_#Class#lateInstanceField} = #t6;
   get lateGenericInstanceField() → self::Class::T%
-    return this.{self::Class::_#Class#lateGenericInstanceField#isSet} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
   set lateGenericInstanceField(generic-covariant-impl self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t8;
   }
   method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
-    self::throws(() → core::int => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
+    self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField}{self::Class::T%}, "Read value from uninitialized Class.lateGenericInstanceField");
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T%});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -57,15 +57,15 @@
 static field core::int? _#Extension|lateExtensionField1 = null;
 static field core::int? _#Extension|lateExtensionField2 = null;
 static get lateTopLevelField() → core::int
-  return let final core::int? #t9 = self::_#lateTopLevelField in #t9.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateTopLevelField") : #t9{core::int};
+  return let final core::int? #t9 = self::_#lateTopLevelField in #t9 == null ?{core::int} throw new _in::LateError::fieldNI("lateTopLevelField") : #t9{core::int};
 static set lateTopLevelField(core::int #t10) → void
   self::_#lateTopLevelField = #t10;
 static get Extension|lateExtensionField1() → core::int
-  return let final core::int? #t11 = self::_#Extension|lateExtensionField1 in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField1") : #t11{core::int};
+  return let final core::int? #t11 = self::_#Extension|lateExtensionField1 in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField1") : #t11{core::int};
 static set Extension|lateExtensionField1(core::int #t12) → void
   self::_#Extension|lateExtensionField1 = #t12;
 static get Extension|lateExtensionField2() → core::int
-  return let final core::int? #t13 = self::_#Extension|lateExtensionField2 in #t13.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField2") : #t13{core::int};
+  return let final core::int? #t13 = self::_#Extension|lateExtensionField2 in #t13 == null ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField2") : #t13{core::int};
 static set Extension|lateExtensionField2(core::int #t14) → void
   self::_#Extension|lateExtensionField2 = #t14;
 static method Extension|staticMethod() → dynamic {
@@ -81,27 +81,27 @@
   self::Class::lateStaticField1 = 87;
   self::expect(87, self::Class::lateStaticField1);
   self::Class::staticMethod();
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(0);
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int) → dynamic};
   self::Class<core::int> c = new self::Class::•<core::int>();
-  self::throws(() → core::int => c.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+  self::throws(() → core::int => c.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
   c.{self::Class::lateInstanceField} = 16;
-  self::expect(16, c.{self::Class::lateInstanceField});
-  self::throws(() → core::int => c.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+  self::expect(16, c.{self::Class::lateInstanceField}{core::int});
+  self::throws(() → core::int => c.{self::Class::lateGenericInstanceField}{core::int}, "Read value from uninitialized Class.lateGenericInstanceField");
   c.{self::Class::lateGenericInstanceField} = 0;
-  self::expect(0, c.{self::Class::lateGenericInstanceField});
+  self::expect(0, c.{self::Class::lateGenericInstanceField}{core::int});
   self::throws(() → core::int => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.transformed.expect
index 8bbf5d9..1b8458c 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.transformed.expect
@@ -13,11 +13,11 @@
     : super core::Object::•()
     ;
   static get lateStaticField1() → core::int
-    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateStaticField1") : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("lateStaticField1") : #t1{core::int};
   static set lateStaticField1(core::int #t2) → void
     self::Class::_#lateStaticField1 = #t2;
   static get lateStaticField2() → core::int
-    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateStaticField2") : #t3{core::int};
+    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("lateStaticField2") : #t3{core::int};
   static set lateStaticField2(core::int #t4) → void
     self::Class::_#lateStaticField2 = #t4;
   static method staticMethod() → dynamic {
@@ -26,22 +26,22 @@
     self::expect(42, self::Class::lateStaticField2);
   }
   get lateInstanceField() → core::int
-    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField} in #t5.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateInstanceField") : #t5{core::int};
+    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5 == null ?{core::int} throw new _in::LateError::fieldNI("lateInstanceField") : #t5{core::int};
   set lateInstanceField(core::int #t6) → void
     this.{self::Class::_#Class#lateInstanceField} = #t6;
   get lateGenericInstanceField() → self::Class::T%
-    return this.{self::Class::_#Class#lateGenericInstanceField#isSet} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
   set lateGenericInstanceField(generic-covariant-impl self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t8;
   }
   method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
-    self::throws(() → core::int => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
+    self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField}{self::Class::T%}, "Read value from uninitialized Class.lateGenericInstanceField");
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T%});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -57,15 +57,15 @@
 static field core::int? _#Extension|lateExtensionField1 = null;
 static field core::int? _#Extension|lateExtensionField2 = null;
 static get lateTopLevelField() → core::int
-  return let final core::int? #t9 = self::_#lateTopLevelField in #t9.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateTopLevelField") : #t9{core::int};
+  return let final core::int? #t9 = self::_#lateTopLevelField in #t9 == null ?{core::int} throw new _in::LateError::fieldNI("lateTopLevelField") : #t9{core::int};
 static set lateTopLevelField(core::int #t10) → void
   self::_#lateTopLevelField = #t10;
 static get Extension|lateExtensionField1() → core::int
-  return let final core::int? #t11 = self::_#Extension|lateExtensionField1 in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField1") : #t11{core::int};
+  return let final core::int? #t11 = self::_#Extension|lateExtensionField1 in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField1") : #t11{core::int};
 static set Extension|lateExtensionField1(core::int #t12) → void
   self::_#Extension|lateExtensionField1 = #t12;
 static get Extension|lateExtensionField2() → core::int
-  return let final core::int? #t13 = self::_#Extension|lateExtensionField2 in #t13.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField2") : #t13{core::int};
+  return let final core::int? #t13 = self::_#Extension|lateExtensionField2 in #t13 == null ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField2") : #t13{core::int};
 static set Extension|lateExtensionField2(core::int #t14) → void
   self::_#Extension|lateExtensionField2 = #t14;
 static method Extension|staticMethod() → dynamic {
@@ -81,27 +81,27 @@
   self::Class::lateStaticField1 = 87;
   self::expect(87, self::Class::lateStaticField1);
   self::Class::staticMethod();
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(0);
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int) → dynamic};
   self::Class<core::int> c = new self::Class::•<core::int>();
-  self::throws(() → core::int => c.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+  self::throws(() → core::int => c.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
   c.{self::Class::lateInstanceField} = 16;
-  self::expect(16, c.{self::Class::lateInstanceField});
-  self::throws(() → core::int => c.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+  self::expect(16, c.{self::Class::lateInstanceField}{core::int});
+  self::throws(() → core::int => c.{self::Class::lateGenericInstanceField}{core::int}, "Read value from uninitialized Class.lateGenericInstanceField");
   c.{self::Class::lateGenericInstanceField} = 0;
-  self::expect(0, c.{self::Class::lateGenericInstanceField});
+  self::expect(0, c.{self::Class::lateGenericInstanceField}{core::int});
   self::throws(() → core::int => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.expect
index c20d687..03d2906 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.expect
@@ -33,24 +33,24 @@
     self::expect(42, self::Class::lateStaticField2);
   }
   get lateInstanceField() → core::int
-    return this.{self::Class::_#Class#lateInstanceField#isSet} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField} in #t5{core::int} : throw new _in::LateError::fieldNI("lateInstanceField");
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5{core::int} : throw new _in::LateError::fieldNI("lateInstanceField");
   set lateInstanceField(core::int #t6) → void {
     this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateInstanceField} = #t6;
   }
   get lateGenericInstanceField() → self::Class::T%
-    return this.{self::Class::_#Class#lateGenericInstanceField#isSet} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
   set lateGenericInstanceField(generic-covariant-impl self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t8;
   }
   method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
-    self::throws(() → core::int => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
+    self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField}{self::Class::T%}, "Read value from uninitialized Class.lateGenericInstanceField");
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T%});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -101,27 +101,27 @@
   self::Class::lateStaticField1 = 87;
   self::expect(87, self::Class::lateStaticField1);
   self::Class::staticMethod();
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(0);
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int) → dynamic};
   self::Class<core::int> c = new self::Class::•<core::int>();
-  self::throws(() → core::int => c.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+  self::throws(() → core::int => c.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
   c.{self::Class::lateInstanceField} = 16;
-  self::expect(16, c.{self::Class::lateInstanceField});
-  self::throws(() → core::int => c.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+  self::expect(16, c.{self::Class::lateInstanceField}{core::int});
+  self::throws(() → core::int => c.{self::Class::lateGenericInstanceField}{core::int}, "Read value from uninitialized Class.lateGenericInstanceField");
   c.{self::Class::lateGenericInstanceField} = 0;
-  self::expect(0, c.{self::Class::lateGenericInstanceField});
+  self::expect(0, c.{self::Class::lateGenericInstanceField}{core::int});
   self::throws(() → core::int => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.transformed.expect
index c20d687..03d2906 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.transformed.expect
@@ -33,24 +33,24 @@
     self::expect(42, self::Class::lateStaticField2);
   }
   get lateInstanceField() → core::int
-    return this.{self::Class::_#Class#lateInstanceField#isSet} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField} in #t5{core::int} : throw new _in::LateError::fieldNI("lateInstanceField");
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5{core::int} : throw new _in::LateError::fieldNI("lateInstanceField");
   set lateInstanceField(core::int #t6) → void {
     this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateInstanceField} = #t6;
   }
   get lateGenericInstanceField() → self::Class::T%
-    return this.{self::Class::_#Class#lateGenericInstanceField#isSet} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
   set lateGenericInstanceField(generic-covariant-impl self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t8;
   }
   method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
-    self::throws(() → core::int => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
+    self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField}{self::Class::T%}, "Read value from uninitialized Class.lateGenericInstanceField");
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T%});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -101,27 +101,27 @@
   self::Class::lateStaticField1 = 87;
   self::expect(87, self::Class::lateStaticField1);
   self::Class::staticMethod();
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(0);
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int) → dynamic};
   self::Class<core::int> c = new self::Class::•<core::int>();
-  self::throws(() → core::int => c.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+  self::throws(() → core::int => c.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
   c.{self::Class::lateInstanceField} = 16;
-  self::expect(16, c.{self::Class::lateInstanceField});
-  self::throws(() → core::int => c.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+  self::expect(16, c.{self::Class::lateInstanceField}{core::int});
+  self::throws(() → core::int => c.{self::Class::lateGenericInstanceField}{core::int}, "Read value from uninitialized Class.lateGenericInstanceField");
   c.{self::Class::lateGenericInstanceField} = 0;
-  self::expect(0, c.{self::Class::lateGenericInstanceField});
+  self::expect(0, c.{self::Class::lateGenericInstanceField}{core::int});
   self::throws(() → core::int => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.expect
index dc87dd2..3b2e679 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.expect
@@ -16,9 +16,9 @@
     : super self::B::•(x)
     ;
   get y() → core::int
-    return let final core::int? #t1 = this.{self::C::_#C#y} in #t1.==(null) ?{core::int} let final core::int #t2 = this.{self::B::x}.{core::num::+}(1) in this.{self::C::_#C#y}.==(null) ?{core::int} this.{self::C::_#C#y} = #t2 : throw new _in::LateError::fieldADI("y") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::C::_#C#y}{core::int?} in #t1 == null ?{core::int} let final core::int #t2 = this.{self::B::x}{core::int}.{core::num::+}(1){(core::num) → core::int} in this.{self::C::_#C#y}{core::int?} == null ?{core::int} this.{self::C::_#C#y} = #t2 : throw new _in::LateError::fieldADI("y") : #t1{core::int};
   method method() → dynamic
-    return this.{self::B::x};
+    return this.{self::B::x}{core::int};
 }
 class Class<T extends core::Object? = dynamic> extends core::Object {
   static field core::int? lateStaticField1Init = null;
@@ -38,12 +38,12 @@
     return self::Class::lateStaticField1Init = value;
   }
   static get lateStaticField1() → core::int
-    return let final core::int? #t3 = self::Class::_#lateStaticField1 in #t3.==(null) ?{core::int} let final core::int #t4 = self::Class::initLateStaticField1(87) in self::Class::_#lateStaticField1.==(null) ?{core::int} self::Class::_#lateStaticField1 = #t4 : throw new _in::LateError::fieldADI("lateStaticField1") : #t3{core::int};
+    return let final core::int? #t3 = self::Class::_#lateStaticField1 in #t3 == null ?{core::int} let final core::int #t4 = self::Class::initLateStaticField1(87) in self::Class::_#lateStaticField1 == null ?{core::int} self::Class::_#lateStaticField1 = #t4 : throw new _in::LateError::fieldADI("lateStaticField1") : #t3{core::int};
   static method initLateStaticField2(core::int value) → core::int {
     return self::Class::lateStaticField2Init = value;
   }
   static get lateStaticField2() → core::int
-    return let final core::int? #t5 = self::Class::_#lateStaticField2 in #t5.==(null) ?{core::int} let final core::int #t6 = self::Class::initLateStaticField2(42) in self::Class::_#lateStaticField2.==(null) ?{core::int} self::Class::_#lateStaticField2 = #t6 : throw new _in::LateError::fieldADI("lateStaticField2") : #t5{core::int};
+    return let final core::int? #t5 = self::Class::_#lateStaticField2 in #t5 == null ?{core::int} let final core::int #t6 = self::Class::initLateStaticField2(42) in self::Class::_#lateStaticField2 == null ?{core::int} self::Class::_#lateStaticField2 = #t6 : throw new _in::LateError::fieldADI("lateStaticField2") : #t5{core::int};
   static method staticMethod() → dynamic {
     self::expect(null, self::Class::lateStaticField2Init);
     self::expect(42, self::Class::lateStaticField2);
@@ -53,27 +53,27 @@
     return this.{self::Class::lateInstanceFieldInit} = value;
   }
   get lateInstanceField() → core::int
-    return let final core::int? #t7 = this.{self::Class::_#Class#lateInstanceField} in #t7.==(null) ?{core::int} let final core::int #t8 = this.{self::Class::initLateInstanceField}(16) in this.{self::Class::_#Class#lateInstanceField}.==(null) ?{core::int} this.{self::Class::_#Class#lateInstanceField} = #t8 : throw new _in::LateError::fieldADI("lateInstanceField") : #t7{core::int};
+    return let final core::int? #t7 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t7 == null ?{core::int} let final core::int #t8 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int} in this.{self::Class::_#Class#lateInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#lateInstanceField} = #t8 : throw new _in::LateError::fieldADI("lateInstanceField") : #t7{core::int};
   method initLateGenericField(generic-covariant-impl self::Class::T% value) → self::Class::T% {
     return this.{self::Class::lateGenericFieldInit} = value;
   }
   get lateGenericField() → self::Class::T% {
-    if(!this.{self::Class::_#Class#lateGenericField#isSet}) {
-      final self::Class::T% #t9 = this.{self::Class::initLateGenericField}(this.{self::Class::field});
-      if(this.{self::Class::_#Class#lateGenericField#isSet})
+    if(!this.{self::Class::_#Class#lateGenericField#isSet}{core::bool}) {
+      final self::Class::T% #t9 = this.{self::Class::initLateGenericField}(this.{self::Class::field}{self::Class::T%}){(self::Class::T%) → self::Class::T%};
+      if(this.{self::Class::_#Class#lateGenericField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateGenericField");
       this.{self::Class::_#Class#lateGenericField} = #t9;
       this.{self::Class::_#Class#lateGenericField#isSet} = true;
     }
-    return let final self::Class::T? #t10 = this.{self::Class::_#Class#lateGenericField} in #t10{self::Class::T%};
+    return let final self::Class::T? #t10 = this.{self::Class::_#Class#lateGenericField}{self::Class::T?} in #t10{self::Class::T%};
   }
   method instanceMethod() → dynamic {
-    self::expect(null, this.{self::Class::lateInstanceFieldInit});
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::expect(16, this.{self::Class::lateInstanceFieldInit});
-    self::expect(null, this.{self::Class::lateGenericFieldInit});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericFieldInit});
+    self::expect(null, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
+    self::expect(16, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(null, this.{self::Class::lateGenericFieldInit}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericField}{self::Class::T%});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericFieldInit}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -97,17 +97,17 @@
   return self::lateTopLevelField1Init = value;
 }
 static get lateTopLevelField1() → core::int
-  return let final core::int? #t11 = self::_#lateTopLevelField1 in #t11.==(null) ?{core::int} let final core::int #t12 = self::initLateTopLevelField1(123) in self::_#lateTopLevelField1.==(null) ?{core::int} self::_#lateTopLevelField1 = #t12 : throw new _in::LateError::fieldADI("lateTopLevelField1") : #t11{core::int};
+  return let final core::int? #t11 = self::_#lateTopLevelField1 in #t11 == null ?{core::int} let final core::int #t12 = self::initLateTopLevelField1(123) in self::_#lateTopLevelField1 == null ?{core::int} self::_#lateTopLevelField1 = #t12 : throw new _in::LateError::fieldADI("lateTopLevelField1") : #t11{core::int};
 static method Extension|initLateExtensionField1(core::int value) → core::int {
   return self::Extension|lateExtensionField1Init = value;
 }
 static get Extension|lateExtensionField1() → core::int
-  return let final core::int? #t13 = self::_#Extension|lateExtensionField1 in #t13.==(null) ?{core::int} let final core::int #t14 = self::Extension|initLateExtensionField1(87) in self::_#Extension|lateExtensionField1.==(null) ?{core::int} self::_#Extension|lateExtensionField1 = #t14 : throw new _in::LateError::fieldADI("lateExtensionField1") : #t13{core::int};
+  return let final core::int? #t13 = self::_#Extension|lateExtensionField1 in #t13 == null ?{core::int} let final core::int #t14 = self::Extension|initLateExtensionField1(87) in self::_#Extension|lateExtensionField1 == null ?{core::int} self::_#Extension|lateExtensionField1 = #t14 : throw new _in::LateError::fieldADI("lateExtensionField1") : #t13{core::int};
 static method Extension|initLateExtensionField2(core::int value) → core::int {
   return self::Extension|lateExtensionField2Init = value;
 }
 static get Extension|lateExtensionField2() → core::int
-  return let final core::int? #t15 = self::_#Extension|lateExtensionField2 in #t15.==(null) ?{core::int} let final core::int #t16 = self::Extension|initLateExtensionField2(42) in self::_#Extension|lateExtensionField2.==(null) ?{core::int} self::_#Extension|lateExtensionField2 = #t16 : throw new _in::LateError::fieldADI("lateExtensionField2") : #t15{core::int};
+  return let final core::int? #t15 = self::_#Extension|lateExtensionField2 in #t15 == null ?{core::int} let final core::int #t16 = self::Extension|initLateExtensionField2(42) in self::_#Extension|lateExtensionField2 == null ?{core::int} self::_#Extension|lateExtensionField2 = #t16 : throw new _in::LateError::fieldADI("lateExtensionField2") : #t15{core::int};
 static method Extension|staticMethod() → dynamic {
   self::expect(null, self::Extension|lateExtensionField2Init);
   self::expect(42, self::Extension|lateExtensionField2);
@@ -121,14 +121,14 @@
   self::expect(87, self::Class::lateStaticField1);
   self::expect(87, self::Class::lateStaticField1Init);
   self::Class::staticMethod();
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}();
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(){() → dynamic};
   self::expect(null, self::Extension|lateExtensionField1Init);
   self::expect(87, self::Extension|lateExtensionField1);
   self::expect(87, self::Extension|lateExtensionField1Init);
   self::Extension|staticMethod();
-  self::expect(2, new self::C::•(1).{self::C::y});
+  self::expect(2, new self::C::•(1).{self::C::y}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.transformed.expect
index dc87dd2..3b2e679 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.transformed.expect
@@ -16,9 +16,9 @@
     : super self::B::•(x)
     ;
   get y() → core::int
-    return let final core::int? #t1 = this.{self::C::_#C#y} in #t1.==(null) ?{core::int} let final core::int #t2 = this.{self::B::x}.{core::num::+}(1) in this.{self::C::_#C#y}.==(null) ?{core::int} this.{self::C::_#C#y} = #t2 : throw new _in::LateError::fieldADI("y") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::C::_#C#y}{core::int?} in #t1 == null ?{core::int} let final core::int #t2 = this.{self::B::x}{core::int}.{core::num::+}(1){(core::num) → core::int} in this.{self::C::_#C#y}{core::int?} == null ?{core::int} this.{self::C::_#C#y} = #t2 : throw new _in::LateError::fieldADI("y") : #t1{core::int};
   method method() → dynamic
-    return this.{self::B::x};
+    return this.{self::B::x}{core::int};
 }
 class Class<T extends core::Object? = dynamic> extends core::Object {
   static field core::int? lateStaticField1Init = null;
@@ -38,12 +38,12 @@
     return self::Class::lateStaticField1Init = value;
   }
   static get lateStaticField1() → core::int
-    return let final core::int? #t3 = self::Class::_#lateStaticField1 in #t3.==(null) ?{core::int} let final core::int #t4 = self::Class::initLateStaticField1(87) in self::Class::_#lateStaticField1.==(null) ?{core::int} self::Class::_#lateStaticField1 = #t4 : throw new _in::LateError::fieldADI("lateStaticField1") : #t3{core::int};
+    return let final core::int? #t3 = self::Class::_#lateStaticField1 in #t3 == null ?{core::int} let final core::int #t4 = self::Class::initLateStaticField1(87) in self::Class::_#lateStaticField1 == null ?{core::int} self::Class::_#lateStaticField1 = #t4 : throw new _in::LateError::fieldADI("lateStaticField1") : #t3{core::int};
   static method initLateStaticField2(core::int value) → core::int {
     return self::Class::lateStaticField2Init = value;
   }
   static get lateStaticField2() → core::int
-    return let final core::int? #t5 = self::Class::_#lateStaticField2 in #t5.==(null) ?{core::int} let final core::int #t6 = self::Class::initLateStaticField2(42) in self::Class::_#lateStaticField2.==(null) ?{core::int} self::Class::_#lateStaticField2 = #t6 : throw new _in::LateError::fieldADI("lateStaticField2") : #t5{core::int};
+    return let final core::int? #t5 = self::Class::_#lateStaticField2 in #t5 == null ?{core::int} let final core::int #t6 = self::Class::initLateStaticField2(42) in self::Class::_#lateStaticField2 == null ?{core::int} self::Class::_#lateStaticField2 = #t6 : throw new _in::LateError::fieldADI("lateStaticField2") : #t5{core::int};
   static method staticMethod() → dynamic {
     self::expect(null, self::Class::lateStaticField2Init);
     self::expect(42, self::Class::lateStaticField2);
@@ -53,27 +53,27 @@
     return this.{self::Class::lateInstanceFieldInit} = value;
   }
   get lateInstanceField() → core::int
-    return let final core::int? #t7 = this.{self::Class::_#Class#lateInstanceField} in #t7.==(null) ?{core::int} let final core::int #t8 = this.{self::Class::initLateInstanceField}(16) in this.{self::Class::_#Class#lateInstanceField}.==(null) ?{core::int} this.{self::Class::_#Class#lateInstanceField} = #t8 : throw new _in::LateError::fieldADI("lateInstanceField") : #t7{core::int};
+    return let final core::int? #t7 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t7 == null ?{core::int} let final core::int #t8 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int} in this.{self::Class::_#Class#lateInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#lateInstanceField} = #t8 : throw new _in::LateError::fieldADI("lateInstanceField") : #t7{core::int};
   method initLateGenericField(generic-covariant-impl self::Class::T% value) → self::Class::T% {
     return this.{self::Class::lateGenericFieldInit} = value;
   }
   get lateGenericField() → self::Class::T% {
-    if(!this.{self::Class::_#Class#lateGenericField#isSet}) {
-      final self::Class::T% #t9 = this.{self::Class::initLateGenericField}(this.{self::Class::field});
-      if(this.{self::Class::_#Class#lateGenericField#isSet})
+    if(!this.{self::Class::_#Class#lateGenericField#isSet}{core::bool}) {
+      final self::Class::T% #t9 = this.{self::Class::initLateGenericField}(this.{self::Class::field}{self::Class::T%}){(self::Class::T%) → self::Class::T%};
+      if(this.{self::Class::_#Class#lateGenericField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateGenericField");
       this.{self::Class::_#Class#lateGenericField} = #t9;
       this.{self::Class::_#Class#lateGenericField#isSet} = true;
     }
-    return let final self::Class::T? #t10 = this.{self::Class::_#Class#lateGenericField} in #t10{self::Class::T%};
+    return let final self::Class::T? #t10 = this.{self::Class::_#Class#lateGenericField}{self::Class::T?} in #t10{self::Class::T%};
   }
   method instanceMethod() → dynamic {
-    self::expect(null, this.{self::Class::lateInstanceFieldInit});
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::expect(16, this.{self::Class::lateInstanceFieldInit});
-    self::expect(null, this.{self::Class::lateGenericFieldInit});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericFieldInit});
+    self::expect(null, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
+    self::expect(16, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(null, this.{self::Class::lateGenericFieldInit}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericField}{self::Class::T%});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericFieldInit}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -97,17 +97,17 @@
   return self::lateTopLevelField1Init = value;
 }
 static get lateTopLevelField1() → core::int
-  return let final core::int? #t11 = self::_#lateTopLevelField1 in #t11.==(null) ?{core::int} let final core::int #t12 = self::initLateTopLevelField1(123) in self::_#lateTopLevelField1.==(null) ?{core::int} self::_#lateTopLevelField1 = #t12 : throw new _in::LateError::fieldADI("lateTopLevelField1") : #t11{core::int};
+  return let final core::int? #t11 = self::_#lateTopLevelField1 in #t11 == null ?{core::int} let final core::int #t12 = self::initLateTopLevelField1(123) in self::_#lateTopLevelField1 == null ?{core::int} self::_#lateTopLevelField1 = #t12 : throw new _in::LateError::fieldADI("lateTopLevelField1") : #t11{core::int};
 static method Extension|initLateExtensionField1(core::int value) → core::int {
   return self::Extension|lateExtensionField1Init = value;
 }
 static get Extension|lateExtensionField1() → core::int
-  return let final core::int? #t13 = self::_#Extension|lateExtensionField1 in #t13.==(null) ?{core::int} let final core::int #t14 = self::Extension|initLateExtensionField1(87) in self::_#Extension|lateExtensionField1.==(null) ?{core::int} self::_#Extension|lateExtensionField1 = #t14 : throw new _in::LateError::fieldADI("lateExtensionField1") : #t13{core::int};
+  return let final core::int? #t13 = self::_#Extension|lateExtensionField1 in #t13 == null ?{core::int} let final core::int #t14 = self::Extension|initLateExtensionField1(87) in self::_#Extension|lateExtensionField1 == null ?{core::int} self::_#Extension|lateExtensionField1 = #t14 : throw new _in::LateError::fieldADI("lateExtensionField1") : #t13{core::int};
 static method Extension|initLateExtensionField2(core::int value) → core::int {
   return self::Extension|lateExtensionField2Init = value;
 }
 static get Extension|lateExtensionField2() → core::int
-  return let final core::int? #t15 = self::_#Extension|lateExtensionField2 in #t15.==(null) ?{core::int} let final core::int #t16 = self::Extension|initLateExtensionField2(42) in self::_#Extension|lateExtensionField2.==(null) ?{core::int} self::_#Extension|lateExtensionField2 = #t16 : throw new _in::LateError::fieldADI("lateExtensionField2") : #t15{core::int};
+  return let final core::int? #t15 = self::_#Extension|lateExtensionField2 in #t15 == null ?{core::int} let final core::int #t16 = self::Extension|initLateExtensionField2(42) in self::_#Extension|lateExtensionField2 == null ?{core::int} self::_#Extension|lateExtensionField2 = #t16 : throw new _in::LateError::fieldADI("lateExtensionField2") : #t15{core::int};
 static method Extension|staticMethod() → dynamic {
   self::expect(null, self::Extension|lateExtensionField2Init);
   self::expect(42, self::Extension|lateExtensionField2);
@@ -121,14 +121,14 @@
   self::expect(87, self::Class::lateStaticField1);
   self::expect(87, self::Class::lateStaticField1Init);
   self::Class::staticMethod();
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}();
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(){() → dynamic};
   self::expect(null, self::Extension|lateExtensionField1Init);
   self::expect(87, self::Extension|lateExtensionField1);
   self::expect(87, self::Extension|lateExtensionField1Init);
   self::Extension|staticMethod();
-  self::expect(2, new self::C::•(1).{self::C::y});
+  self::expect(2, new self::C::•(1).{self::C::y}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.expect
index 5d1075d..25277e8 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.expect
@@ -16,17 +16,17 @@
     : super self::B::•(x)
     ;
   get y() → core::int {
-    if(!this.{self::C::_#C#y#isSet}) {
-      final core::int #t1 = this.{self::B::x}.{core::num::+}(1);
-      if(this.{self::C::_#C#y#isSet})
+    if(!this.{self::C::_#C#y#isSet}{core::bool}) {
+      final core::int #t1 = this.{self::B::x}{core::int}.{core::num::+}(1){(core::num) → core::int};
+      if(this.{self::C::_#C#y#isSet}{core::bool})
         throw new _in::LateError::fieldADI("y");
       this.{self::C::_#C#y} = #t1;
       this.{self::C::_#C#y#isSet} = true;
     }
-    return let final core::int? #t2 = this.{self::C::_#C#y} in #t2{core::int};
+    return let final core::int? #t2 = this.{self::C::_#C#y}{core::int?} in #t2{core::int};
   }
   method method() → dynamic
-    return this.{self::B::x};
+    return this.{self::B::x}{core::int};
 }
 class Class<T extends core::Object? = dynamic> extends core::Object {
   static field core::int? lateStaticField1Init = null;
@@ -80,35 +80,35 @@
     return this.{self::Class::lateInstanceFieldInit} = value;
   }
   get lateInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#lateInstanceField#isSet}) {
-      final core::int #t7 = this.{self::Class::initLateInstanceField}(16);
-      if(this.{self::Class::_#Class#lateInstanceField#isSet})
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      final core::int #t7 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int};
+      if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateInstanceField");
       this.{self::Class::_#Class#lateInstanceField} = #t7;
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     }
-    return let final core::int? #t8 = this.{self::Class::_#Class#lateInstanceField} in #t8{core::int};
+    return let final core::int? #t8 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t8{core::int};
   }
   method initLateGenericField(generic-covariant-impl self::Class::T% value) → self::Class::T% {
     return this.{self::Class::lateGenericFieldInit} = value;
   }
   get lateGenericField() → self::Class::T% {
-    if(!this.{self::Class::_#Class#lateGenericField#isSet}) {
-      final self::Class::T% #t9 = this.{self::Class::initLateGenericField}(this.{self::Class::field});
-      if(this.{self::Class::_#Class#lateGenericField#isSet})
+    if(!this.{self::Class::_#Class#lateGenericField#isSet}{core::bool}) {
+      final self::Class::T% #t9 = this.{self::Class::initLateGenericField}(this.{self::Class::field}{self::Class::T%}){(self::Class::T%) → self::Class::T%};
+      if(this.{self::Class::_#Class#lateGenericField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateGenericField");
       this.{self::Class::_#Class#lateGenericField} = #t9;
       this.{self::Class::_#Class#lateGenericField#isSet} = true;
     }
-    return let final self::Class::T? #t10 = this.{self::Class::_#Class#lateGenericField} in #t10{self::Class::T%};
+    return let final self::Class::T? #t10 = this.{self::Class::_#Class#lateGenericField}{self::Class::T?} in #t10{self::Class::T%};
   }
   method instanceMethod() → dynamic {
-    self::expect(null, this.{self::Class::lateInstanceFieldInit});
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::expect(16, this.{self::Class::lateInstanceFieldInit});
-    self::expect(null, this.{self::Class::lateGenericFieldInit});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericFieldInit});
+    self::expect(null, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
+    self::expect(16, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(null, this.{self::Class::lateGenericFieldInit}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericField}{self::Class::T%});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericFieldInit}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -185,14 +185,14 @@
   self::expect(87, self::Class::lateStaticField1);
   self::expect(87, self::Class::lateStaticField1Init);
   self::Class::staticMethod();
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}();
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(){() → dynamic};
   self::expect(null, self::Extension|lateExtensionField1Init);
   self::expect(87, self::Extension|lateExtensionField1);
   self::expect(87, self::Extension|lateExtensionField1Init);
   self::Extension|staticMethod();
-  self::expect(2, new self::C::•(1).{self::C::y});
+  self::expect(2, new self::C::•(1).{self::C::y}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.transformed.expect
index 5d1075d..25277e8 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.transformed.expect
@@ -16,17 +16,17 @@
     : super self::B::•(x)
     ;
   get y() → core::int {
-    if(!this.{self::C::_#C#y#isSet}) {
-      final core::int #t1 = this.{self::B::x}.{core::num::+}(1);
-      if(this.{self::C::_#C#y#isSet})
+    if(!this.{self::C::_#C#y#isSet}{core::bool}) {
+      final core::int #t1 = this.{self::B::x}{core::int}.{core::num::+}(1){(core::num) → core::int};
+      if(this.{self::C::_#C#y#isSet}{core::bool})
         throw new _in::LateError::fieldADI("y");
       this.{self::C::_#C#y} = #t1;
       this.{self::C::_#C#y#isSet} = true;
     }
-    return let final core::int? #t2 = this.{self::C::_#C#y} in #t2{core::int};
+    return let final core::int? #t2 = this.{self::C::_#C#y}{core::int?} in #t2{core::int};
   }
   method method() → dynamic
-    return this.{self::B::x};
+    return this.{self::B::x}{core::int};
 }
 class Class<T extends core::Object? = dynamic> extends core::Object {
   static field core::int? lateStaticField1Init = null;
@@ -80,35 +80,35 @@
     return this.{self::Class::lateInstanceFieldInit} = value;
   }
   get lateInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#lateInstanceField#isSet}) {
-      final core::int #t7 = this.{self::Class::initLateInstanceField}(16);
-      if(this.{self::Class::_#Class#lateInstanceField#isSet})
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      final core::int #t7 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int};
+      if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateInstanceField");
       this.{self::Class::_#Class#lateInstanceField} = #t7;
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     }
-    return let final core::int? #t8 = this.{self::Class::_#Class#lateInstanceField} in #t8{core::int};
+    return let final core::int? #t8 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t8{core::int};
   }
   method initLateGenericField(generic-covariant-impl self::Class::T% value) → self::Class::T% {
     return this.{self::Class::lateGenericFieldInit} = value;
   }
   get lateGenericField() → self::Class::T% {
-    if(!this.{self::Class::_#Class#lateGenericField#isSet}) {
-      final self::Class::T% #t9 = this.{self::Class::initLateGenericField}(this.{self::Class::field});
-      if(this.{self::Class::_#Class#lateGenericField#isSet})
+    if(!this.{self::Class::_#Class#lateGenericField#isSet}{core::bool}) {
+      final self::Class::T% #t9 = this.{self::Class::initLateGenericField}(this.{self::Class::field}{self::Class::T%}){(self::Class::T%) → self::Class::T%};
+      if(this.{self::Class::_#Class#lateGenericField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateGenericField");
       this.{self::Class::_#Class#lateGenericField} = #t9;
       this.{self::Class::_#Class#lateGenericField#isSet} = true;
     }
-    return let final self::Class::T? #t10 = this.{self::Class::_#Class#lateGenericField} in #t10{self::Class::T%};
+    return let final self::Class::T? #t10 = this.{self::Class::_#Class#lateGenericField}{self::Class::T?} in #t10{self::Class::T%};
   }
   method instanceMethod() → dynamic {
-    self::expect(null, this.{self::Class::lateInstanceFieldInit});
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::expect(16, this.{self::Class::lateInstanceFieldInit});
-    self::expect(null, this.{self::Class::lateGenericFieldInit});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericFieldInit});
+    self::expect(null, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
+    self::expect(16, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(null, this.{self::Class::lateGenericFieldInit}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericField}{self::Class::T%});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericFieldInit}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -185,14 +185,14 @@
   self::expect(87, self::Class::lateStaticField1);
   self::expect(87, self::Class::lateStaticField1Init);
   self::Class::staticMethod();
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}();
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(){() → dynamic};
   self::expect(null, self::Extension|lateExtensionField1Init);
   self::expect(87, self::Extension|lateExtensionField1);
   self::expect(87, self::Extension|lateExtensionField1Init);
   self::Extension|staticMethod();
-  self::expect(2, new self::C::•(1).{self::C::y});
+  self::expect(2, new self::C::•(1).{self::C::y}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.strong.expect
index f425376..a18219a 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.strong.expect
@@ -11,16 +11,16 @@
     : super core::Object::•()
     ;
   static get lateStaticField1() → core::int
-    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateStaticField1") : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("lateStaticField1") : #t1{core::int};
   static set lateStaticField1(core::int #t2) → void
-    if(self::Class::_#lateStaticField1.==(null))
+    if(self::Class::_#lateStaticField1 == null)
       self::Class::_#lateStaticField1 = #t2;
     else
       throw new _in::LateError::fieldAI("lateStaticField1");
   static get lateStaticField2() → core::int
-    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateStaticField2") : #t3{core::int};
+    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("lateStaticField2") : #t3{core::int};
   static set lateStaticField2(core::int #t4) → void
-    if(self::Class::_#lateStaticField2.==(null))
+    if(self::Class::_#lateStaticField2 == null)
       self::Class::_#lateStaticField2 = #t4;
     else
       throw new _in::LateError::fieldAI("lateStaticField2");
@@ -31,16 +31,16 @@
     self::throws(() → core::int => self::Class::lateStaticField2 = 43, "Write value to initialized Class.lateStaticField2");
   }
   get lateInstanceField() → core::int
-    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField} in #t5.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateInstanceField") : #t5{core::int};
+    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5 == null ?{core::int} throw new _in::LateError::fieldNI("lateInstanceField") : #t5{core::int};
   set lateInstanceField(core::int #t6) → void
-    if(this.{self::Class::_#Class#lateInstanceField}.==(null))
+    if(this.{self::Class::_#Class#lateInstanceField}{core::int?} == null)
       this.{self::Class::_#Class#lateInstanceField} = #t6;
     else
       throw new _in::LateError::fieldAI("lateInstanceField");
   method instanceMethod() → dynamic {
-    self::throws(() → core::int => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
     self::throws(() → core::int => this.{self::Class::lateInstanceField} = 17, "Write value to initialized Class.lateInstanceField");
   }
 }
@@ -57,23 +57,23 @@
 static field core::int? _#Extension|lateExtensionField1 = null;
 static field core::int? _#Extension|lateExtensionField2 = null;
 static get lateTopLevelField() → core::int
-  return let final core::int? #t7 = self::_#lateTopLevelField in #t7.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateTopLevelField") : #t7{core::int};
+  return let final core::int? #t7 = self::_#lateTopLevelField in #t7 == null ?{core::int} throw new _in::LateError::fieldNI("lateTopLevelField") : #t7{core::int};
 static set lateTopLevelField(core::int #t8) → void
-  if(self::_#lateTopLevelField.==(null))
+  if(self::_#lateTopLevelField == null)
     self::_#lateTopLevelField = #t8;
   else
     throw new _in::LateError::fieldAI("lateTopLevelField");
 static get Extension|lateExtensionField1() → core::int
-  return let final core::int? #t9 = self::_#Extension|lateExtensionField1 in #t9.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField1") : #t9{core::int};
+  return let final core::int? #t9 = self::_#Extension|lateExtensionField1 in #t9 == null ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField1") : #t9{core::int};
 static set Extension|lateExtensionField1(core::int #t10) → void
-  if(self::_#Extension|lateExtensionField1.==(null))
+  if(self::_#Extension|lateExtensionField1 == null)
     self::_#Extension|lateExtensionField1 = #t10;
   else
     throw new _in::LateError::fieldAI("lateExtensionField1");
 static get Extension|lateExtensionField2() → core::int
-  return let final core::int? #t11 = self::_#Extension|lateExtensionField2 in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField2") : #t11{core::int};
+  return let final core::int? #t11 = self::_#Extension|lateExtensionField2 in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField2") : #t11{core::int};
 static set Extension|lateExtensionField2(core::int #t12) → void
-  if(self::_#Extension|lateExtensionField2.==(null))
+  if(self::_#Extension|lateExtensionField2 == null)
     self::_#Extension|lateExtensionField2 = #t12;
   else
     throw new _in::LateError::fieldAI("lateExtensionField2");
@@ -93,7 +93,7 @@
   self::expect(87, self::Class::lateStaticField1);
   self::throws(() → core::int => self::Class::lateStaticField1 = 88, "Write value to initialized Class.lateStaticField1");
   self::Class::staticMethod();
-  new self::Class::•().{self::Class::instanceMethod}();
+  new self::Class::•().{self::Class::instanceMethod}(){() → dynamic};
   self::throws(() → core::int => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
@@ -101,13 +101,13 @@
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.strong.transformed.expect
index f425376..a18219a 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.strong.transformed.expect
@@ -11,16 +11,16 @@
     : super core::Object::•()
     ;
   static get lateStaticField1() → core::int
-    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateStaticField1") : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("lateStaticField1") : #t1{core::int};
   static set lateStaticField1(core::int #t2) → void
-    if(self::Class::_#lateStaticField1.==(null))
+    if(self::Class::_#lateStaticField1 == null)
       self::Class::_#lateStaticField1 = #t2;
     else
       throw new _in::LateError::fieldAI("lateStaticField1");
   static get lateStaticField2() → core::int
-    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateStaticField2") : #t3{core::int};
+    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("lateStaticField2") : #t3{core::int};
   static set lateStaticField2(core::int #t4) → void
-    if(self::Class::_#lateStaticField2.==(null))
+    if(self::Class::_#lateStaticField2 == null)
       self::Class::_#lateStaticField2 = #t4;
     else
       throw new _in::LateError::fieldAI("lateStaticField2");
@@ -31,16 +31,16 @@
     self::throws(() → core::int => self::Class::lateStaticField2 = 43, "Write value to initialized Class.lateStaticField2");
   }
   get lateInstanceField() → core::int
-    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField} in #t5.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateInstanceField") : #t5{core::int};
+    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5 == null ?{core::int} throw new _in::LateError::fieldNI("lateInstanceField") : #t5{core::int};
   set lateInstanceField(core::int #t6) → void
-    if(this.{self::Class::_#Class#lateInstanceField}.==(null))
+    if(this.{self::Class::_#Class#lateInstanceField}{core::int?} == null)
       this.{self::Class::_#Class#lateInstanceField} = #t6;
     else
       throw new _in::LateError::fieldAI("lateInstanceField");
   method instanceMethod() → dynamic {
-    self::throws(() → core::int => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
     self::throws(() → core::int => this.{self::Class::lateInstanceField} = 17, "Write value to initialized Class.lateInstanceField");
   }
 }
@@ -57,23 +57,23 @@
 static field core::int? _#Extension|lateExtensionField1 = null;
 static field core::int? _#Extension|lateExtensionField2 = null;
 static get lateTopLevelField() → core::int
-  return let final core::int? #t7 = self::_#lateTopLevelField in #t7.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateTopLevelField") : #t7{core::int};
+  return let final core::int? #t7 = self::_#lateTopLevelField in #t7 == null ?{core::int} throw new _in::LateError::fieldNI("lateTopLevelField") : #t7{core::int};
 static set lateTopLevelField(core::int #t8) → void
-  if(self::_#lateTopLevelField.==(null))
+  if(self::_#lateTopLevelField == null)
     self::_#lateTopLevelField = #t8;
   else
     throw new _in::LateError::fieldAI("lateTopLevelField");
 static get Extension|lateExtensionField1() → core::int
-  return let final core::int? #t9 = self::_#Extension|lateExtensionField1 in #t9.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField1") : #t9{core::int};
+  return let final core::int? #t9 = self::_#Extension|lateExtensionField1 in #t9 == null ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField1") : #t9{core::int};
 static set Extension|lateExtensionField1(core::int #t10) → void
-  if(self::_#Extension|lateExtensionField1.==(null))
+  if(self::_#Extension|lateExtensionField1 == null)
     self::_#Extension|lateExtensionField1 = #t10;
   else
     throw new _in::LateError::fieldAI("lateExtensionField1");
 static get Extension|lateExtensionField2() → core::int
-  return let final core::int? #t11 = self::_#Extension|lateExtensionField2 in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField2") : #t11{core::int};
+  return let final core::int? #t11 = self::_#Extension|lateExtensionField2 in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("lateExtensionField2") : #t11{core::int};
 static set Extension|lateExtensionField2(core::int #t12) → void
-  if(self::_#Extension|lateExtensionField2.==(null))
+  if(self::_#Extension|lateExtensionField2 == null)
     self::_#Extension|lateExtensionField2 = #t12;
   else
     throw new _in::LateError::fieldAI("lateExtensionField2");
@@ -93,7 +93,7 @@
   self::expect(87, self::Class::lateStaticField1);
   self::throws(() → core::int => self::Class::lateStaticField1 = 88, "Write value to initialized Class.lateStaticField1");
   self::Class::staticMethod();
-  new self::Class::•().{self::Class::instanceMethod}();
+  new self::Class::•().{self::Class::instanceMethod}(){() → dynamic};
   self::throws(() → core::int => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
@@ -101,13 +101,13 @@
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.weak.expect
index e2db739..f0429db 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.weak.expect
@@ -38,18 +38,18 @@
     self::throws(() → core::int => self::Class::lateStaticField2 = 43, "Write value to initialized Class.lateStaticField2");
   }
   get lateInstanceField() → core::int
-    return this.{self::Class::_#Class#lateInstanceField#isSet} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField} in #t5{core::int} : throw new _in::LateError::fieldNI("lateInstanceField");
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5{core::int} : throw new _in::LateError::fieldNI("lateInstanceField");
   set lateInstanceField(core::int #t6) → void
-    if(this.{self::Class::_#Class#lateInstanceField#isSet})
+    if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("lateInstanceField");
     else {
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateInstanceField} = #t6;
     }
   method instanceMethod() → dynamic {
-    self::throws(() → core::int => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
     self::throws(() → core::int => this.{self::Class::lateInstanceField} = 17, "Write value to initialized Class.lateInstanceField");
   }
 }
@@ -113,7 +113,7 @@
   self::expect(87, self::Class::lateStaticField1);
   self::throws(() → core::int => self::Class::lateStaticField1 = 88, "Write value to initialized Class.lateStaticField1");
   self::Class::staticMethod();
-  new self::Class::•().{self::Class::instanceMethod}();
+  new self::Class::•().{self::Class::instanceMethod}(){() → dynamic};
   self::throws(() → core::int => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
@@ -121,13 +121,13 @@
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.weak.transformed.expect
index e2db739..f0429db 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.weak.transformed.expect
@@ -38,18 +38,18 @@
     self::throws(() → core::int => self::Class::lateStaticField2 = 43, "Write value to initialized Class.lateStaticField2");
   }
   get lateInstanceField() → core::int
-    return this.{self::Class::_#Class#lateInstanceField#isSet} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField} in #t5{core::int} : throw new _in::LateError::fieldNI("lateInstanceField");
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5{core::int} : throw new _in::LateError::fieldNI("lateInstanceField");
   set lateInstanceField(core::int #t6) → void
-    if(this.{self::Class::_#Class#lateInstanceField#isSet})
+    if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("lateInstanceField");
     else {
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateInstanceField} = #t6;
     }
   method instanceMethod() → dynamic {
-    self::throws(() → core::int => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
     self::throws(() → core::int => this.{self::Class::lateInstanceField} = 17, "Write value to initialized Class.lateInstanceField");
   }
 }
@@ -113,7 +113,7 @@
   self::expect(87, self::Class::lateStaticField1);
   self::throws(() → core::int => self::Class::lateStaticField1 = 88, "Write value to initialized Class.lateStaticField1");
   self::Class::staticMethod();
-  new self::Class::•().{self::Class::instanceMethod}();
+  new self::Class::•().{self::Class::instanceMethod}(){() → dynamic};
   self::throws(() → core::int => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
@@ -121,13 +121,13 @@
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.expect
index b219a6f..76b2806 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.expect
@@ -10,9 +10,9 @@
   }
   lowered final core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} let final core::int #t2 = initLateLocal.call(123) in #lateLocal.==(null) ?{core::int} #lateLocal = #t2 : throw new _in::LateError::localADI("lateLocal") : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1 == null ?{core::int} let final core::int #t2 = initLateLocal(123){(core::int) → core::int} in #lateLocal == null ?{core::int} #lateLocal = #t2 : throw new _in::LateError::localADI("lateLocal") : #t1{core::int};
   self::expect(null, lateLocalInit);
-  self::expect(123, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int});
   self::expect(123, lateLocalInit);
   function local<T extends core::Object? = dynamic>(T% value) → Null {
     T? lateGenericLocalInit;
@@ -23,7 +23,7 @@
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
-        final T% #t3 = initLateGenericLocal.call(value);
+        final T% #t3 = initLateGenericLocal(value){(T%) → T%};
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
         #lateGenericLocal = #t3;
@@ -32,14 +32,14 @@
       return #lateGenericLocal{T%};
     }
     self::expect(null, lateGenericLocalInit);
-    self::expect(value, #lateGenericLocal#get.call());
+    self::expect(value, #lateGenericLocal#get(){() → T%});
     self::expect(value, lateGenericLocalInit);
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(42);
-  local.call<core::int>(42);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.transformed.expect
index b219a6f..76b2806 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.transformed.expect
@@ -10,9 +10,9 @@
   }
   lowered final core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} let final core::int #t2 = initLateLocal.call(123) in #lateLocal.==(null) ?{core::int} #lateLocal = #t2 : throw new _in::LateError::localADI("lateLocal") : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1 == null ?{core::int} let final core::int #t2 = initLateLocal(123){(core::int) → core::int} in #lateLocal == null ?{core::int} #lateLocal = #t2 : throw new _in::LateError::localADI("lateLocal") : #t1{core::int};
   self::expect(null, lateLocalInit);
-  self::expect(123, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int});
   self::expect(123, lateLocalInit);
   function local<T extends core::Object? = dynamic>(T% value) → Null {
     T? lateGenericLocalInit;
@@ -23,7 +23,7 @@
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
-        final T% #t3 = initLateGenericLocal.call(value);
+        final T% #t3 = initLateGenericLocal(value){(T%) → T%};
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
         #lateGenericLocal = #t3;
@@ -32,14 +32,14 @@
       return #lateGenericLocal{T%};
     }
     self::expect(null, lateGenericLocalInit);
-    self::expect(value, #lateGenericLocal#get.call());
+    self::expect(value, #lateGenericLocal#get(){() → T%});
     self::expect(value, lateGenericLocalInit);
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(42);
-  local.call<core::int>(42);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.expect
index fd2146f..49e5b26 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.expect
@@ -12,7 +12,7 @@
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int {
     if(!#lateLocal#isSet) {
-      final core::int #t1 = initLateLocal.call(123);
+      final core::int #t1 = initLateLocal(123){(core::int) → core::int};
       if(#lateLocal#isSet)
         throw new _in::LateError::localADI("lateLocal");
       #lateLocal = #t1;
@@ -21,7 +21,7 @@
     return #lateLocal{core::int};
   }
   self::expect(null, lateLocalInit);
-  self::expect(123, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int});
   self::expect(123, lateLocalInit);
   function local<T extends core::Object? = dynamic>(T% value) → Null {
     T? lateGenericLocalInit;
@@ -32,7 +32,7 @@
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
-        final T% #t2 = initLateGenericLocal.call(value);
+        final T% #t2 = initLateGenericLocal(value){(T%) → T%};
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
         #lateGenericLocal = #t2;
@@ -41,14 +41,14 @@
       return #lateGenericLocal{T%};
     }
     self::expect(null, lateGenericLocalInit);
-    self::expect(value, #lateGenericLocal#get.call());
+    self::expect(value, #lateGenericLocal#get(){() → T%});
     self::expect(value, lateGenericLocalInit);
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(42);
-  local.call<core::int>(42);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.transformed.expect
index fd2146f..49e5b26 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int {
     if(!#lateLocal#isSet) {
-      final core::int #t1 = initLateLocal.call(123);
+      final core::int #t1 = initLateLocal(123){(core::int) → core::int};
       if(#lateLocal#isSet)
         throw new _in::LateError::localADI("lateLocal");
       #lateLocal = #t1;
@@ -21,7 +21,7 @@
     return #lateLocal{core::int};
   }
   self::expect(null, lateLocalInit);
-  self::expect(123, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int});
   self::expect(123, lateLocalInit);
   function local<T extends core::Object? = dynamic>(T% value) → Null {
     T? lateGenericLocalInit;
@@ -32,7 +32,7 @@
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
-        final T% #t2 = initLateGenericLocal.call(value);
+        final T% #t2 = initLateGenericLocal(value){(T%) → T%};
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
         #lateGenericLocal = #t2;
@@ -41,14 +41,14 @@
       return #lateGenericLocal{T%};
     }
     self::expect(null, lateGenericLocalInit);
-    self::expect(value, #lateGenericLocal#get.call());
+    self::expect(value, #lateGenericLocal#get(){() → T%});
     self::expect(value, lateGenericLocalInit);
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(42);
-  local.call<core::int>(42);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.expect
index 103a9f9..fd2829a 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.expect
@@ -4,24 +4,24 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::bool b = (() → core::bool => false).call();
+  core::bool b = (() → core::bool => false)(){() → core::bool};
   lowered final core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1 == null ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
   function #lateLocal#set(core::int #t2) → dynamic
-    if(#lateLocal.==(null))
+    if(#lateLocal == null)
       return #lateLocal = #t2;
     else
       throw new _in::LateError::localAI("lateLocal");
   if(b) {
-    #lateLocal#set.call(123);
+    #lateLocal#set(123){(core::int) → dynamic};
   }
-  self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
+  self::throws(() → core::int => #lateLocal#get(){() → core::int}, "Read value from uninitialized lateLocal");
   if(!b) {
-    self::expect(123, #lateLocal#set.call(123));
-    self::expect(123, #lateLocal#get.call());
+    self::expect(123, #lateLocal#set(123){(core::int) → dynamic});
+    self::expect(123, #lateLocal#get(){() → core::int});
   }
-  self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
+  self::throws(() → core::int => #lateLocal#set(124){(core::int) → dynamic}, "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T% value) → Null {
     lowered final T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -35,27 +35,27 @@
         return #lateGenericLocal = #t3;
       }
     if(b) {
-      #lateGenericLocal#set.call(value);
+      #lateGenericLocal#set(value){(T%) → dynamic};
     }
-    self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
+    self::throws(() → T% => #lateGenericLocal#get(){() → T%}, "Read value from uninitialized lateGenericLocal");
     if(!b) {
-      self::expect(value, #lateGenericLocal#set.call(value));
-      self::expect(value, #lateGenericLocal#get.call());
+      self::expect(value, #lateGenericLocal#set(value){(T%) → dynamic});
+      self::expect(value, #lateGenericLocal#get(){() → T%});
     }
-    self::throws(() → T% => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
+    self::throws(() → T% => #lateGenericLocal#set(value){(T%) → dynamic}, "Write value to initialized lateGenericLocal");
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(42);
-  local.call<core::int>(42);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.transformed.expect
index 103a9f9..fd2829a 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.transformed.expect
@@ -4,24 +4,24 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::bool b = (() → core::bool => false).call();
+  core::bool b = (() → core::bool => false)(){() → core::bool};
   lowered final core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1 == null ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
   function #lateLocal#set(core::int #t2) → dynamic
-    if(#lateLocal.==(null))
+    if(#lateLocal == null)
       return #lateLocal = #t2;
     else
       throw new _in::LateError::localAI("lateLocal");
   if(b) {
-    #lateLocal#set.call(123);
+    #lateLocal#set(123){(core::int) → dynamic};
   }
-  self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
+  self::throws(() → core::int => #lateLocal#get(){() → core::int}, "Read value from uninitialized lateLocal");
   if(!b) {
-    self::expect(123, #lateLocal#set.call(123));
-    self::expect(123, #lateLocal#get.call());
+    self::expect(123, #lateLocal#set(123){(core::int) → dynamic});
+    self::expect(123, #lateLocal#get(){() → core::int});
   }
-  self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
+  self::throws(() → core::int => #lateLocal#set(124){(core::int) → dynamic}, "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T% value) → Null {
     lowered final T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -35,27 +35,27 @@
         return #lateGenericLocal = #t3;
       }
     if(b) {
-      #lateGenericLocal#set.call(value);
+      #lateGenericLocal#set(value){(T%) → dynamic};
     }
-    self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
+    self::throws(() → T% => #lateGenericLocal#get(){() → T%}, "Read value from uninitialized lateGenericLocal");
     if(!b) {
-      self::expect(value, #lateGenericLocal#set.call(value));
-      self::expect(value, #lateGenericLocal#get.call());
+      self::expect(value, #lateGenericLocal#set(value){(T%) → dynamic});
+      self::expect(value, #lateGenericLocal#get(){() → T%});
     }
-    self::throws(() → T% => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
+    self::throws(() → T% => #lateGenericLocal#set(value){(T%) → dynamic}, "Write value to initialized lateGenericLocal");
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(42);
-  local.call<core::int>(42);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.expect
index 4ed637a..6050d9e 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.expect
@@ -4,7 +4,7 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::bool b = (() → core::bool => false).call();
+  core::bool b = (() → core::bool => false)(){() → core::bool};
   lowered final core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int
@@ -17,14 +17,14 @@
       return #lateLocal = #t1;
     }
   if(b) {
-    #lateLocal#set.call(123);
+    #lateLocal#set(123){(core::int) → dynamic};
   }
-  self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
+  self::throws(() → core::int => #lateLocal#get(){() → core::int}, "Read value from uninitialized lateLocal");
   if(!b) {
-    self::expect(123, #lateLocal#set.call(123));
-    self::expect(123, #lateLocal#get.call());
+    self::expect(123, #lateLocal#set(123){(core::int) → dynamic});
+    self::expect(123, #lateLocal#get(){() → core::int});
   }
-  self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
+  self::throws(() → core::int => #lateLocal#set(124){(core::int) → dynamic}, "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T% value) → Null {
     lowered final T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -38,27 +38,27 @@
         return #lateGenericLocal = #t2;
       }
     if(b) {
-      #lateGenericLocal#set.call(value);
+      #lateGenericLocal#set(value){(T%) → dynamic};
     }
-    self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
+    self::throws(() → T% => #lateGenericLocal#get(){() → T%}, "Read value from uninitialized lateGenericLocal");
     if(!b) {
-      self::expect(value, #lateGenericLocal#set.call(value));
-      self::expect(value, #lateGenericLocal#get.call());
+      self::expect(value, #lateGenericLocal#set(value){(T%) → dynamic});
+      self::expect(value, #lateGenericLocal#get(){() → T%});
     }
-    self::throws(() → T% => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
+    self::throws(() → T% => #lateGenericLocal#set(value){(T%) → dynamic}, "Write value to initialized lateGenericLocal");
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(42);
-  local.call<core::int>(42);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.transformed.expect
index 4ed637a..6050d9e 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
-  core::bool b = (() → core::bool => false).call();
+  core::bool b = (() → core::bool => false)(){() → core::bool};
   lowered final core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int
@@ -17,14 +17,14 @@
       return #lateLocal = #t1;
     }
   if(b) {
-    #lateLocal#set.call(123);
+    #lateLocal#set(123){(core::int) → dynamic};
   }
-  self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
+  self::throws(() → core::int => #lateLocal#get(){() → core::int}, "Read value from uninitialized lateLocal");
   if(!b) {
-    self::expect(123, #lateLocal#set.call(123));
-    self::expect(123, #lateLocal#get.call());
+    self::expect(123, #lateLocal#set(123){(core::int) → dynamic});
+    self::expect(123, #lateLocal#get(){() → core::int});
   }
-  self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
+  self::throws(() → core::int => #lateLocal#set(124){(core::int) → dynamic}, "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T% value) → Null {
     lowered final T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -38,27 +38,27 @@
         return #lateGenericLocal = #t2;
       }
     if(b) {
-      #lateGenericLocal#set.call(value);
+      #lateGenericLocal#set(value){(T%) → dynamic};
     }
-    self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
+    self::throws(() → T% => #lateGenericLocal#get(){() → T%}, "Read value from uninitialized lateGenericLocal");
     if(!b) {
-      self::expect(value, #lateGenericLocal#set.call(value));
-      self::expect(value, #lateGenericLocal#get.call());
+      self::expect(value, #lateGenericLocal#set(value){(T%) → dynamic});
+      self::expect(value, #lateGenericLocal#get(){() → T%});
     }
-    self::throws(() → T% => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
+    self::throws(() → T% => #lateGenericLocal#set(value){(T%) → dynamic}, "Write value to initialized lateGenericLocal");
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(42);
-  local.call<core::int>(42);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.expect
index 705fc46..ef40a1e 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.expect
@@ -55,35 +55,35 @@
     return this.{self::Class::lateInstanceFieldInit} = value;
   }
   get lateInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#lateInstanceField#isSet}) {
-      final core::int? #t3 = this.{self::Class::initLateInstanceField}(16);
-      if(this.{self::Class::_#Class#lateInstanceField#isSet})
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      final core::int? #t3 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int?};
+      if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateInstanceField");
       this.{self::Class::_#Class#lateInstanceField} = #t3;
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateInstanceField};
+    return this.{self::Class::_#Class#lateInstanceField}{core::int?};
   }
   method initLateGenericInstanceField(generic-covariant-impl self::Class::T? value) → self::Class::T? {
     return this.{self::Class::lateGenericInstanceFieldInit} = value;
   }
   get lateGenericInstanceField() → self::Class::T? {
-    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}) {
-      final self::Class::T? #t4 = this.{self::Class::initLateGenericInstanceField}(this.{self::Class::field});
-      if(this.{self::Class::_#Class#lateGenericInstanceField#isSet})
+    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool}) {
+      final self::Class::T? #t4 = this.{self::Class::initLateGenericInstanceField}(this.{self::Class::field}{self::Class::T?}){(self::Class::T?) → self::Class::T?};
+      if(this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateGenericInstanceField");
       this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateGenericInstanceField};
+    return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
   }
   method instanceMethod() → dynamic {
-    self::expect(null, this.{self::Class::lateInstanceFieldInit});
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::expect(16, this.{self::Class::lateInstanceFieldInit});
-    self::expect(null, this.{self::Class::lateGenericInstanceFieldInit});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericInstanceField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericInstanceFieldInit});
+    self::expect(null, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(null, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -160,15 +160,15 @@
   self::expect(87, self::Class::lateStaticField1);
   self::expect(87, self::Class::lateStaticField1Init);
   self::Class::staticMethod();
-  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}();
-  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}();
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}();
+  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(){() → dynamic};
+  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(){() → dynamic};
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(){() → dynamic};
   self::expect(null, self::Extension|lateExtensionField1Init);
   self::expect(87, self::Extension|lateExtensionField1);
   self::expect(87, self::Extension|lateExtensionField1Init);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.transformed.expect
index 705fc46..ef40a1e 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.transformed.expect
@@ -55,35 +55,35 @@
     return this.{self::Class::lateInstanceFieldInit} = value;
   }
   get lateInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#lateInstanceField#isSet}) {
-      final core::int? #t3 = this.{self::Class::initLateInstanceField}(16);
-      if(this.{self::Class::_#Class#lateInstanceField#isSet})
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      final core::int? #t3 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int?};
+      if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateInstanceField");
       this.{self::Class::_#Class#lateInstanceField} = #t3;
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateInstanceField};
+    return this.{self::Class::_#Class#lateInstanceField}{core::int?};
   }
   method initLateGenericInstanceField(generic-covariant-impl self::Class::T? value) → self::Class::T? {
     return this.{self::Class::lateGenericInstanceFieldInit} = value;
   }
   get lateGenericInstanceField() → self::Class::T? {
-    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}) {
-      final self::Class::T? #t4 = this.{self::Class::initLateGenericInstanceField}(this.{self::Class::field});
-      if(this.{self::Class::_#Class#lateGenericInstanceField#isSet})
+    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool}) {
+      final self::Class::T? #t4 = this.{self::Class::initLateGenericInstanceField}(this.{self::Class::field}{self::Class::T?}){(self::Class::T?) → self::Class::T?};
+      if(this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateGenericInstanceField");
       this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateGenericInstanceField};
+    return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
   }
   method instanceMethod() → dynamic {
-    self::expect(null, this.{self::Class::lateInstanceFieldInit});
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::expect(16, this.{self::Class::lateInstanceFieldInit});
-    self::expect(null, this.{self::Class::lateGenericInstanceFieldInit});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericInstanceField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericInstanceFieldInit});
+    self::expect(null, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(null, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -160,15 +160,15 @@
   self::expect(87, self::Class::lateStaticField1);
   self::expect(87, self::Class::lateStaticField1Init);
   self::Class::staticMethod();
-  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}();
-  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}();
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}();
+  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(){() → dynamic};
+  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(){() → dynamic};
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(){() → dynamic};
   self::expect(null, self::Extension|lateExtensionField1Init);
   self::expect(87, self::Extension|lateExtensionField1);
   self::expect(87, self::Extension|lateExtensionField1Init);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.expect
index 705fc46..ef40a1e 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.expect
@@ -55,35 +55,35 @@
     return this.{self::Class::lateInstanceFieldInit} = value;
   }
   get lateInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#lateInstanceField#isSet}) {
-      final core::int? #t3 = this.{self::Class::initLateInstanceField}(16);
-      if(this.{self::Class::_#Class#lateInstanceField#isSet})
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      final core::int? #t3 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int?};
+      if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateInstanceField");
       this.{self::Class::_#Class#lateInstanceField} = #t3;
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateInstanceField};
+    return this.{self::Class::_#Class#lateInstanceField}{core::int?};
   }
   method initLateGenericInstanceField(generic-covariant-impl self::Class::T? value) → self::Class::T? {
     return this.{self::Class::lateGenericInstanceFieldInit} = value;
   }
   get lateGenericInstanceField() → self::Class::T? {
-    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}) {
-      final self::Class::T? #t4 = this.{self::Class::initLateGenericInstanceField}(this.{self::Class::field});
-      if(this.{self::Class::_#Class#lateGenericInstanceField#isSet})
+    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool}) {
+      final self::Class::T? #t4 = this.{self::Class::initLateGenericInstanceField}(this.{self::Class::field}{self::Class::T?}){(self::Class::T?) → self::Class::T?};
+      if(this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateGenericInstanceField");
       this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateGenericInstanceField};
+    return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
   }
   method instanceMethod() → dynamic {
-    self::expect(null, this.{self::Class::lateInstanceFieldInit});
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::expect(16, this.{self::Class::lateInstanceFieldInit});
-    self::expect(null, this.{self::Class::lateGenericInstanceFieldInit});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericInstanceField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericInstanceFieldInit});
+    self::expect(null, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(null, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -160,15 +160,15 @@
   self::expect(87, self::Class::lateStaticField1);
   self::expect(87, self::Class::lateStaticField1Init);
   self::Class::staticMethod();
-  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}();
-  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}();
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}();
+  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(){() → dynamic};
+  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(){() → dynamic};
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(){() → dynamic};
   self::expect(null, self::Extension|lateExtensionField1Init);
   self::expect(87, self::Extension|lateExtensionField1);
   self::expect(87, self::Extension|lateExtensionField1Init);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.transformed.expect
index 705fc46..ef40a1e 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.transformed.expect
@@ -55,35 +55,35 @@
     return this.{self::Class::lateInstanceFieldInit} = value;
   }
   get lateInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#lateInstanceField#isSet}) {
-      final core::int? #t3 = this.{self::Class::initLateInstanceField}(16);
-      if(this.{self::Class::_#Class#lateInstanceField#isSet})
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      final core::int? #t3 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int?};
+      if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateInstanceField");
       this.{self::Class::_#Class#lateInstanceField} = #t3;
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateInstanceField};
+    return this.{self::Class::_#Class#lateInstanceField}{core::int?};
   }
   method initLateGenericInstanceField(generic-covariant-impl self::Class::T? value) → self::Class::T? {
     return this.{self::Class::lateGenericInstanceFieldInit} = value;
   }
   get lateGenericInstanceField() → self::Class::T? {
-    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}) {
-      final self::Class::T? #t4 = this.{self::Class::initLateGenericInstanceField}(this.{self::Class::field});
-      if(this.{self::Class::_#Class#lateGenericInstanceField#isSet})
+    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool}) {
+      final self::Class::T? #t4 = this.{self::Class::initLateGenericInstanceField}(this.{self::Class::field}{self::Class::T?}){(self::Class::T?) → self::Class::T?};
+      if(this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("lateGenericInstanceField");
       this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateGenericInstanceField};
+    return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
   }
   method instanceMethod() → dynamic {
-    self::expect(null, this.{self::Class::lateInstanceFieldInit});
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::expect(16, this.{self::Class::lateInstanceFieldInit});
-    self::expect(null, this.{self::Class::lateGenericInstanceFieldInit});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericInstanceField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericInstanceFieldInit});
+    self::expect(null, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(null, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -160,15 +160,15 @@
   self::expect(87, self::Class::lateStaticField1);
   self::expect(87, self::Class::lateStaticField1Init);
   self::Class::staticMethod();
-  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}();
-  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}();
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}();
+  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(){() → dynamic};
+  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(){() → dynamic};
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(){() → dynamic};
   self::expect(null, self::Extension|lateExtensionField1Init);
   self::expect(87, self::Extension|lateExtensionField1);
   self::expect(87, self::Extension|lateExtensionField1Init);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.expect
index b107b44..5cf1101 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.expect
@@ -40,31 +40,31 @@
     self::throws(() → core::int => self::Class::lateStaticField2 = 43, "Write value to initialized Class.lateStaticField2");
   }
   get lateInstanceField() → core::int?
-    return this.{self::Class::_#Class#lateInstanceField#isSet} ?{core::int?} this.{self::Class::_#Class#lateInstanceField} : throw new _in::LateError::fieldNI("lateInstanceField");
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#lateInstanceField}{core::int?} : throw new _in::LateError::fieldNI("lateInstanceField");
   set lateInstanceField(core::int? #t3) → void
-    if(this.{self::Class::_#Class#lateInstanceField#isSet})
+    if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("lateInstanceField");
     else {
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateInstanceField} = #t3;
     }
   get lateGenericInstanceField() → self::Class::T?
-    return this.{self::Class::_#Class#lateGenericInstanceField#isSet} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
   set lateGenericInstanceField(self::Class::T? #t4) → void
-    if(this.{self::Class::_#Class#lateGenericInstanceField#isSet})
+    if(this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("lateGenericInstanceField");
     else {
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
     }
   method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
-    self::throws(() → core::int? => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
     self::throws(() → core::int => this.{self::Class::lateInstanceField} = 17, "Write value to initialized Class.lateInstanceField");
-    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}{self::Class::T?}, "Read value from uninitialized Class.lateGenericInstanceField");
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
     self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField} = value, "Write value to initialized Class.lateGenericInstanceField");
   }
 }
@@ -128,9 +128,9 @@
   self::expect(87, self::Class::lateStaticField1);
   self::throws(() → core::int => self::Class::lateStaticField1 = 88, "Write value to initialized Class.lateStaticField1");
   self::Class::staticMethod();
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(0);
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int) → dynamic};
   self::throws(() → core::int? => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
@@ -138,13 +138,13 @@
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.transformed.expect
index b107b44..5cf1101 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.transformed.expect
@@ -40,31 +40,31 @@
     self::throws(() → core::int => self::Class::lateStaticField2 = 43, "Write value to initialized Class.lateStaticField2");
   }
   get lateInstanceField() → core::int?
-    return this.{self::Class::_#Class#lateInstanceField#isSet} ?{core::int?} this.{self::Class::_#Class#lateInstanceField} : throw new _in::LateError::fieldNI("lateInstanceField");
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#lateInstanceField}{core::int?} : throw new _in::LateError::fieldNI("lateInstanceField");
   set lateInstanceField(core::int? #t3) → void
-    if(this.{self::Class::_#Class#lateInstanceField#isSet})
+    if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("lateInstanceField");
     else {
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateInstanceField} = #t3;
     }
   get lateGenericInstanceField() → self::Class::T?
-    return this.{self::Class::_#Class#lateGenericInstanceField#isSet} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
   set lateGenericInstanceField(self::Class::T? #t4) → void
-    if(this.{self::Class::_#Class#lateGenericInstanceField#isSet})
+    if(this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("lateGenericInstanceField");
     else {
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
     }
   method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
-    self::throws(() → core::int? => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
     self::throws(() → core::int => this.{self::Class::lateInstanceField} = 17, "Write value to initialized Class.lateInstanceField");
-    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}{self::Class::T?}, "Read value from uninitialized Class.lateGenericInstanceField");
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
     self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField} = value, "Write value to initialized Class.lateGenericInstanceField");
   }
 }
@@ -128,9 +128,9 @@
   self::expect(87, self::Class::lateStaticField1);
   self::throws(() → core::int => self::Class::lateStaticField1 = 88, "Write value to initialized Class.lateStaticField1");
   self::Class::staticMethod();
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(0);
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int) → dynamic};
   self::throws(() → core::int? => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
@@ -138,13 +138,13 @@
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.expect
index b107b44..5cf1101 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.expect
@@ -40,31 +40,31 @@
     self::throws(() → core::int => self::Class::lateStaticField2 = 43, "Write value to initialized Class.lateStaticField2");
   }
   get lateInstanceField() → core::int?
-    return this.{self::Class::_#Class#lateInstanceField#isSet} ?{core::int?} this.{self::Class::_#Class#lateInstanceField} : throw new _in::LateError::fieldNI("lateInstanceField");
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#lateInstanceField}{core::int?} : throw new _in::LateError::fieldNI("lateInstanceField");
   set lateInstanceField(core::int? #t3) → void
-    if(this.{self::Class::_#Class#lateInstanceField#isSet})
+    if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("lateInstanceField");
     else {
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateInstanceField} = #t3;
     }
   get lateGenericInstanceField() → self::Class::T?
-    return this.{self::Class::_#Class#lateGenericInstanceField#isSet} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
   set lateGenericInstanceField(self::Class::T? #t4) → void
-    if(this.{self::Class::_#Class#lateGenericInstanceField#isSet})
+    if(this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("lateGenericInstanceField");
     else {
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
     }
   method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
-    self::throws(() → core::int? => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
     self::throws(() → core::int => this.{self::Class::lateInstanceField} = 17, "Write value to initialized Class.lateInstanceField");
-    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}{self::Class::T?}, "Read value from uninitialized Class.lateGenericInstanceField");
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
     self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField} = value, "Write value to initialized Class.lateGenericInstanceField");
   }
 }
@@ -128,9 +128,9 @@
   self::expect(87, self::Class::lateStaticField1);
   self::throws(() → core::int => self::Class::lateStaticField1 = 88, "Write value to initialized Class.lateStaticField1");
   self::Class::staticMethod();
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(0);
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int) → dynamic};
   self::throws(() → core::int? => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
@@ -138,13 +138,13 @@
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.transformed.expect
index b107b44..5cf1101 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.transformed.expect
@@ -40,31 +40,31 @@
     self::throws(() → core::int => self::Class::lateStaticField2 = 43, "Write value to initialized Class.lateStaticField2");
   }
   get lateInstanceField() → core::int?
-    return this.{self::Class::_#Class#lateInstanceField#isSet} ?{core::int?} this.{self::Class::_#Class#lateInstanceField} : throw new _in::LateError::fieldNI("lateInstanceField");
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#lateInstanceField}{core::int?} : throw new _in::LateError::fieldNI("lateInstanceField");
   set lateInstanceField(core::int? #t3) → void
-    if(this.{self::Class::_#Class#lateInstanceField#isSet})
+    if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("lateInstanceField");
     else {
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateInstanceField} = #t3;
     }
   get lateGenericInstanceField() → self::Class::T?
-    return this.{self::Class::_#Class#lateGenericInstanceField#isSet} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
   set lateGenericInstanceField(self::Class::T? #t4) → void
-    if(this.{self::Class::_#Class#lateGenericInstanceField#isSet})
+    if(this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("lateGenericInstanceField");
     else {
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
     }
   method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
-    self::throws(() → core::int? => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
     self::throws(() → core::int => this.{self::Class::lateInstanceField} = 17, "Write value to initialized Class.lateInstanceField");
-    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}{self::Class::T?}, "Read value from uninitialized Class.lateGenericInstanceField");
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
     self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField} = value, "Write value to initialized Class.lateGenericInstanceField");
   }
 }
@@ -128,9 +128,9 @@
   self::expect(87, self::Class::lateStaticField1);
   self::throws(() → core::int => self::Class::lateStaticField1 = 88, "Write value to initialized Class.lateStaticField1");
   self::Class::staticMethod();
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(0);
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int) → dynamic};
   self::throws(() → core::int? => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
@@ -138,13 +138,13 @@
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.expect
index d2e95b9..9d9501d 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.expect
@@ -12,7 +12,7 @@
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
-      final core::int? #t1 = initLateLocal.call(123);
+      final core::int? #t1 = initLateLocal(123){(core::int?) → core::int?};
       if(#lateLocal#isSet)
         throw new _in::LateError::localADI("lateLocal");
       #lateLocal = #t1;
@@ -21,7 +21,7 @@
     return #lateLocal;
   }
   self::expect(null, lateLocalInit);
-  self::expect(123, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int?});
   self::expect(123, lateLocalInit);
   function local<T extends core::Object? = dynamic>(T? value) → Null {
     T? lateGenericLocalInit;
@@ -32,7 +32,7 @@
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
-        final T? #t2 = initLateGenericLocal.call(value);
+        final T? #t2 = initLateGenericLocal(value){(T?) → T?};
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
         #lateGenericLocal = #t2;
@@ -41,14 +41,14 @@
       return #lateGenericLocal;
     }
     self::expect(null, lateGenericLocalInit);
-    self::expect(value, #lateGenericLocal#get.call());
+    self::expect(value, #lateGenericLocal#get(){() → T?});
     self::expect(value, lateGenericLocalInit);
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(42);
-  local.call<core::int>(42);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.transformed.expect
index d2e95b9..9d9501d 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
-      final core::int? #t1 = initLateLocal.call(123);
+      final core::int? #t1 = initLateLocal(123){(core::int?) → core::int?};
       if(#lateLocal#isSet)
         throw new _in::LateError::localADI("lateLocal");
       #lateLocal = #t1;
@@ -21,7 +21,7 @@
     return #lateLocal;
   }
   self::expect(null, lateLocalInit);
-  self::expect(123, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int?});
   self::expect(123, lateLocalInit);
   function local<T extends core::Object? = dynamic>(T? value) → Null {
     T? lateGenericLocalInit;
@@ -32,7 +32,7 @@
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
-        final T? #t2 = initLateGenericLocal.call(value);
+        final T? #t2 = initLateGenericLocal(value){(T?) → T?};
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
         #lateGenericLocal = #t2;
@@ -41,14 +41,14 @@
       return #lateGenericLocal;
     }
     self::expect(null, lateGenericLocalInit);
-    self::expect(value, #lateGenericLocal#get.call());
+    self::expect(value, #lateGenericLocal#get(){() → T?});
     self::expect(value, lateGenericLocalInit);
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(42);
-  local.call<core::int>(42);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.expect
index d2e95b9..9d9501d 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.expect
@@ -12,7 +12,7 @@
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
-      final core::int? #t1 = initLateLocal.call(123);
+      final core::int? #t1 = initLateLocal(123){(core::int?) → core::int?};
       if(#lateLocal#isSet)
         throw new _in::LateError::localADI("lateLocal");
       #lateLocal = #t1;
@@ -21,7 +21,7 @@
     return #lateLocal;
   }
   self::expect(null, lateLocalInit);
-  self::expect(123, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int?});
   self::expect(123, lateLocalInit);
   function local<T extends core::Object? = dynamic>(T? value) → Null {
     T? lateGenericLocalInit;
@@ -32,7 +32,7 @@
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
-        final T? #t2 = initLateGenericLocal.call(value);
+        final T? #t2 = initLateGenericLocal(value){(T?) → T?};
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
         #lateGenericLocal = #t2;
@@ -41,14 +41,14 @@
       return #lateGenericLocal;
     }
     self::expect(null, lateGenericLocalInit);
-    self::expect(value, #lateGenericLocal#get.call());
+    self::expect(value, #lateGenericLocal#get(){() → T?});
     self::expect(value, lateGenericLocalInit);
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(42);
-  local.call<core::int>(42);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.transformed.expect
index d2e95b9..9d9501d 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
-      final core::int? #t1 = initLateLocal.call(123);
+      final core::int? #t1 = initLateLocal(123){(core::int?) → core::int?};
       if(#lateLocal#isSet)
         throw new _in::LateError::localADI("lateLocal");
       #lateLocal = #t1;
@@ -21,7 +21,7 @@
     return #lateLocal;
   }
   self::expect(null, lateLocalInit);
-  self::expect(123, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int?});
   self::expect(123, lateLocalInit);
   function local<T extends core::Object? = dynamic>(T? value) → Null {
     T? lateGenericLocalInit;
@@ -32,7 +32,7 @@
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
-        final T? #t2 = initLateGenericLocal.call(value);
+        final T? #t2 = initLateGenericLocal(value){(T?) → T?};
         if(#lateGenericLocal#isSet)
           throw new _in::LateError::localADI("lateGenericLocal");
         #lateGenericLocal = #t2;
@@ -41,14 +41,14 @@
       return #lateGenericLocal;
     }
     self::expect(null, lateGenericLocalInit);
-    self::expect(value, #lateGenericLocal#get.call());
+    self::expect(value, #lateGenericLocal#get(){() → T?});
     self::expect(value, lateGenericLocalInit);
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(42);
-  local.call<core::int>(42);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.expect
index 9fa00df..751ada1 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.expect
@@ -15,12 +15,12 @@
       #lateLocal#isSet = true;
       return #lateLocal = #t1;
     }
-  self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  if(1.{core::num::==}(1)) {
-    self::expect(123, #lateLocal#set.call(123));
+  self::throws(() → core::int? => #lateLocal#get(){() → core::int?}, "Read value from uninitialized lateLocal");
+  if(1 =={core::num::==}{(core::Object) → core::bool} 1) {
+    self::expect(123, #lateLocal#set(123){(core::int?) → dynamic});
   }
-  self::expect(123, #lateLocal#get.call());
-  self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
+  self::expect(123, #lateLocal#get(){() → core::int?});
+  self::throws(() → core::int => #lateLocal#set(124){(core::int?) → dynamic}, "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T? value) → Null {
     lowered final T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -33,26 +33,26 @@
         #lateGenericLocal#isSet = true;
         return #lateGenericLocal = #t2;
       }
-    self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    if(1.{core::num::==}(1)) {
-      self::expect(value, #lateGenericLocal#set.call(value));
+    self::throws(() → T? => #lateGenericLocal#get(){() → T?}, "Read value from uninitialized lateGenericLocal");
+    if(1 =={core::num::==}{(core::Object) → core::bool} 1) {
+      self::expect(value, #lateGenericLocal#set(value){(T?) → dynamic});
     }
-    self::expect(value, #lateGenericLocal#get.call());
-    self::throws(() → T? => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#get(){() → T?});
+    self::throws(() → T? => #lateGenericLocal#set(value){(T?) → dynamic}, "Write value to initialized lateGenericLocal");
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(0);
-  local.call<core::int>(null);
-  local.call<core::int>(0);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(null){(core::int?) → Null};
+  local<core::int>(0){(core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.transformed.expect
index b844175..0a5fece 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.strong.transformed.expect
@@ -15,12 +15,12 @@
       #lateLocal#isSet = true;
       return #lateLocal = #t1;
     }
-  self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  if(1.{core::num::==}(1)) {
-    self::expect(123, #lateLocal#set.call(123));
+  self::throws(() → core::int? => #lateLocal#get(){() → core::int?}, "Read value from uninitialized lateLocal");
+  if(1 =={core::num::==}{(core::Object) → core::bool} 1) {
+    self::expect(123, #lateLocal#set(123){(core::int?) → dynamic});
   }
-  self::expect(123, #lateLocal#get.call());
-  self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
+  self::expect(123, #lateLocal#get(){() → core::int?});
+  self::throws(() → core::int => #lateLocal#set(124){(core::int?) → dynamic}, "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T? value) → Null {
     lowered final T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -33,26 +33,26 @@
         #lateGenericLocal#isSet = true;
         return #lateGenericLocal = #t2;
       }
-    self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    if(1.{core::num::==}(1)) {
-      self::expect(value, #lateGenericLocal#set.call(value));
+    self::throws(() → T? => #lateGenericLocal#get(){() → T?}, "Read value from uninitialized lateGenericLocal");
+    if(1 =={core::num::==}{(core::Object) → core::bool} 1) {
+      self::expect(value, #lateGenericLocal#set(value){(T?) → dynamic});
     }
-    self::expect(value, #lateGenericLocal#get.call());
-    self::throws(() → T? => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#get(){() → T?});
+    self::throws(() → T? => #lateGenericLocal#set(value){(T?) → dynamic}, "Write value to initialized lateGenericLocal");
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(0);
-  local.call<core::int>(null);
-  local.call<core::int>(0);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(null){(core::int?) → Null};
+  local<core::int>(0){(core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
@@ -63,6 +63,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///late_final_nullable_local_without_initializer.dart:12:9 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///late_final_nullable_local_without_initializer.dart:26:11 -> BoolConstant(true)
-Extra constant evaluation: evaluated: 81, effectively constant: 2
+Evaluated: EqualsCall @ org-dartlang-testcase:///late_final_nullable_local_without_initializer.dart:12:9 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///late_final_nullable_local_without_initializer.dart:26:11 -> BoolConstant(true)
+Extra constant evaluation: evaluated: 69, effectively constant: 2
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.expect
index 9fa00df..751ada1 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.expect
@@ -15,12 +15,12 @@
       #lateLocal#isSet = true;
       return #lateLocal = #t1;
     }
-  self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  if(1.{core::num::==}(1)) {
-    self::expect(123, #lateLocal#set.call(123));
+  self::throws(() → core::int? => #lateLocal#get(){() → core::int?}, "Read value from uninitialized lateLocal");
+  if(1 =={core::num::==}{(core::Object) → core::bool} 1) {
+    self::expect(123, #lateLocal#set(123){(core::int?) → dynamic});
   }
-  self::expect(123, #lateLocal#get.call());
-  self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
+  self::expect(123, #lateLocal#get(){() → core::int?});
+  self::throws(() → core::int => #lateLocal#set(124){(core::int?) → dynamic}, "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T? value) → Null {
     lowered final T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -33,26 +33,26 @@
         #lateGenericLocal#isSet = true;
         return #lateGenericLocal = #t2;
       }
-    self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    if(1.{core::num::==}(1)) {
-      self::expect(value, #lateGenericLocal#set.call(value));
+    self::throws(() → T? => #lateGenericLocal#get(){() → T?}, "Read value from uninitialized lateGenericLocal");
+    if(1 =={core::num::==}{(core::Object) → core::bool} 1) {
+      self::expect(value, #lateGenericLocal#set(value){(T?) → dynamic});
     }
-    self::expect(value, #lateGenericLocal#get.call());
-    self::throws(() → T? => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#get(){() → T?});
+    self::throws(() → T? => #lateGenericLocal#set(value){(T?) → dynamic}, "Write value to initialized lateGenericLocal");
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(0);
-  local.call<core::int>(null);
-  local.call<core::int>(0);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(null){(core::int?) → Null};
+  local<core::int>(0){(core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.transformed.expect
index b844175..0a5fece 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.transformed.expect
@@ -15,12 +15,12 @@
       #lateLocal#isSet = true;
       return #lateLocal = #t1;
     }
-  self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  if(1.{core::num::==}(1)) {
-    self::expect(123, #lateLocal#set.call(123));
+  self::throws(() → core::int? => #lateLocal#get(){() → core::int?}, "Read value from uninitialized lateLocal");
+  if(1 =={core::num::==}{(core::Object) → core::bool} 1) {
+    self::expect(123, #lateLocal#set(123){(core::int?) → dynamic});
   }
-  self::expect(123, #lateLocal#get.call());
-  self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
+  self::expect(123, #lateLocal#get(){() → core::int?});
+  self::throws(() → core::int => #lateLocal#set(124){(core::int?) → dynamic}, "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T? value) → Null {
     lowered final T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -33,26 +33,26 @@
         #lateGenericLocal#isSet = true;
         return #lateGenericLocal = #t2;
       }
-    self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    if(1.{core::num::==}(1)) {
-      self::expect(value, #lateGenericLocal#set.call(value));
+    self::throws(() → T? => #lateGenericLocal#get(){() → T?}, "Read value from uninitialized lateGenericLocal");
+    if(1 =={core::num::==}{(core::Object) → core::bool} 1) {
+      self::expect(value, #lateGenericLocal#set(value){(T?) → dynamic});
     }
-    self::expect(value, #lateGenericLocal#get.call());
-    self::throws(() → T? => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#get(){() → T?});
+    self::throws(() → T? => #lateGenericLocal#set(value){(T?) → dynamic}, "Write value to initialized lateGenericLocal");
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(0);
-  local.call<core::int>(null);
-  local.call<core::int>(0);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(null){(core::int?) → Null};
+  local<core::int>(0){(core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
@@ -63,6 +63,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///late_final_nullable_local_without_initializer.dart:12:9 -> BoolConstant(true)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///late_final_nullable_local_without_initializer.dart:26:11 -> BoolConstant(true)
-Extra constant evaluation: evaluated: 81, effectively constant: 2
+Evaluated: EqualsCall @ org-dartlang-testcase:///late_final_nullable_local_without_initializer.dart:12:9 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///late_final_nullable_local_without_initializer.dart:26:11 -> BoolConstant(true)
+Extra constant evaluation: evaluated: 69, effectively constant: 2
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.expect
index 2a49ff2..514f607 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.expect
@@ -20,31 +20,31 @@
     : super core::Object::•()
     ;
   get field1() → FutureOr<dynamic>
-    return this.{self::C::_#C#field1#isSet} ?{FutureOr<dynamic>} this.{self::C::_#C#field1} : throw new _in::LateError::fieldNI("field1");
+    return this.{self::C::_#C#field1#isSet}{core::bool} ?{FutureOr<dynamic>} this.{self::C::_#C#field1}{FutureOr<dynamic>?} : throw new _in::LateError::fieldNI("field1");
   set field1(FutureOr<dynamic>#t1) → void {
     this.{self::C::_#C#field1#isSet} = true;
     this.{self::C::_#C#field1} = #t1;
   }
   get field2() → FutureOr<dynamic>?
-    return this.{self::C::_#C#field2#isSet} ?{FutureOr<dynamic>?} this.{self::C::_#C#field2} : throw new _in::LateError::fieldNI("field2");
+    return this.{self::C::_#C#field2#isSet}{core::bool} ?{FutureOr<dynamic>?} this.{self::C::_#C#field2}{FutureOr<dynamic>?} : throw new _in::LateError::fieldNI("field2");
   set field2(FutureOr<dynamic>? #t2) → void {
     this.{self::C::_#C#field2#isSet} = true;
     this.{self::C::_#C#field2} = #t2;
   }
   get field3() → FutureOr<self::C::T%>
-    return this.{self::C::_#C#field3#isSet} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
+    return this.{self::C::_#C#field3#isSet}{core::bool} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3}{FutureOr<self::C::T%>?} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
   set field3(generic-covariant-impl FutureOr<self::C::T%>#t4) → void {
     this.{self::C::_#C#field3#isSet} = true;
     this.{self::C::_#C#field3} = #t4;
   }
   get field4() → FutureOr<self::C::T?>
-    return this.{self::C::_#C#field4#isSet} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4} : throw new _in::LateError::fieldNI("field4");
+    return this.{self::C::_#C#field4#isSet}{core::bool} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field4");
   set field4(generic-covariant-impl FutureOr<self::C::T?>#t5) → void {
     this.{self::C::_#C#field4#isSet} = true;
     this.{self::C::_#C#field4} = #t5;
   }
   get field5() → FutureOr<self::C::T?>?
-    return this.{self::C::_#C#field5#isSet} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5} : throw new _in::LateError::fieldNI("field5");
+    return this.{self::C::_#C#field5#isSet}{core::bool} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field5");
   set field5(generic-covariant-impl FutureOr<self::C::T?>? #t6) → void {
     this.{self::C::_#C#field5#isSet} = true;
     this.{self::C::_#C#field5} = #t6;
@@ -150,7 +150,7 @@
   self::_#field3 = #t14;
 }
 static get field4() → FutureOr<core::int>
-  return let final FutureOr<core::int>? #t15 = self::_#field4 in #t15.==(null) ?{FutureOr<core::int>} self::_#field4 = self::method4() : #t15{FutureOr<core::int>};
+  return let final FutureOr<core::int>? #t15 = self::_#field4 in #t15 == null ?{FutureOr<core::int>} self::_#field4 = self::method4() : #t15{FutureOr<core::int>};
 static set field4(FutureOr<core::int>#t16) → void
   self::_#field4 = #t16;
 static get field5() → FutureOr<core::int?> {
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.transformed.expect
index 2a49ff2..514f607 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.transformed.expect
@@ -20,31 +20,31 @@
     : super core::Object::•()
     ;
   get field1() → FutureOr<dynamic>
-    return this.{self::C::_#C#field1#isSet} ?{FutureOr<dynamic>} this.{self::C::_#C#field1} : throw new _in::LateError::fieldNI("field1");
+    return this.{self::C::_#C#field1#isSet}{core::bool} ?{FutureOr<dynamic>} this.{self::C::_#C#field1}{FutureOr<dynamic>?} : throw new _in::LateError::fieldNI("field1");
   set field1(FutureOr<dynamic>#t1) → void {
     this.{self::C::_#C#field1#isSet} = true;
     this.{self::C::_#C#field1} = #t1;
   }
   get field2() → FutureOr<dynamic>?
-    return this.{self::C::_#C#field2#isSet} ?{FutureOr<dynamic>?} this.{self::C::_#C#field2} : throw new _in::LateError::fieldNI("field2");
+    return this.{self::C::_#C#field2#isSet}{core::bool} ?{FutureOr<dynamic>?} this.{self::C::_#C#field2}{FutureOr<dynamic>?} : throw new _in::LateError::fieldNI("field2");
   set field2(FutureOr<dynamic>? #t2) → void {
     this.{self::C::_#C#field2#isSet} = true;
     this.{self::C::_#C#field2} = #t2;
   }
   get field3() → FutureOr<self::C::T%>
-    return this.{self::C::_#C#field3#isSet} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
+    return this.{self::C::_#C#field3#isSet}{core::bool} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3}{FutureOr<self::C::T%>?} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
   set field3(generic-covariant-impl FutureOr<self::C::T%>#t4) → void {
     this.{self::C::_#C#field3#isSet} = true;
     this.{self::C::_#C#field3} = #t4;
   }
   get field4() → FutureOr<self::C::T?>
-    return this.{self::C::_#C#field4#isSet} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4} : throw new _in::LateError::fieldNI("field4");
+    return this.{self::C::_#C#field4#isSet}{core::bool} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field4");
   set field4(generic-covariant-impl FutureOr<self::C::T?>#t5) → void {
     this.{self::C::_#C#field4#isSet} = true;
     this.{self::C::_#C#field4} = #t5;
   }
   get field5() → FutureOr<self::C::T?>?
-    return this.{self::C::_#C#field5#isSet} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5} : throw new _in::LateError::fieldNI("field5");
+    return this.{self::C::_#C#field5#isSet}{core::bool} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field5");
   set field5(generic-covariant-impl FutureOr<self::C::T?>? #t6) → void {
     this.{self::C::_#C#field5#isSet} = true;
     this.{self::C::_#C#field5} = #t6;
@@ -150,7 +150,7 @@
   self::_#field3 = #t14;
 }
 static get field4() → FutureOr<core::int>
-  return let final FutureOr<core::int>? #t15 = self::_#field4 in #t15.==(null) ?{FutureOr<core::int>} self::_#field4 = self::method4() : #t15{FutureOr<core::int>};
+  return let final FutureOr<core::int>? #t15 = self::_#field4 in #t15 == null ?{FutureOr<core::int>} self::_#field4 = self::method4() : #t15{FutureOr<core::int>};
 static set field4(FutureOr<core::int>#t16) → void
   self::_#field4 = #t16;
 static get field5() → FutureOr<core::int?> {
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.expect
index 0ac8dba..6e2e07e 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.expect
@@ -20,31 +20,31 @@
     : super core::Object::•()
     ;
   get field1() → FutureOr<dynamic>
-    return this.{self::C::_#C#field1#isSet} ?{FutureOr<dynamic>} this.{self::C::_#C#field1} : throw new _in::LateError::fieldNI("field1");
+    return this.{self::C::_#C#field1#isSet}{core::bool} ?{FutureOr<dynamic>} this.{self::C::_#C#field1}{FutureOr<dynamic>?} : throw new _in::LateError::fieldNI("field1");
   set field1(FutureOr<dynamic>#t1) → void {
     this.{self::C::_#C#field1#isSet} = true;
     this.{self::C::_#C#field1} = #t1;
   }
   get field2() → FutureOr<dynamic>?
-    return this.{self::C::_#C#field2#isSet} ?{FutureOr<dynamic>?} this.{self::C::_#C#field2} : throw new _in::LateError::fieldNI("field2");
+    return this.{self::C::_#C#field2#isSet}{core::bool} ?{FutureOr<dynamic>?} this.{self::C::_#C#field2}{FutureOr<dynamic>?} : throw new _in::LateError::fieldNI("field2");
   set field2(FutureOr<dynamic>? #t2) → void {
     this.{self::C::_#C#field2#isSet} = true;
     this.{self::C::_#C#field2} = #t2;
   }
   get field3() → FutureOr<self::C::T%>
-    return this.{self::C::_#C#field3#isSet} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
+    return this.{self::C::_#C#field3#isSet}{core::bool} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3}{FutureOr<self::C::T%>?} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
   set field3(generic-covariant-impl FutureOr<self::C::T%>#t4) → void {
     this.{self::C::_#C#field3#isSet} = true;
     this.{self::C::_#C#field3} = #t4;
   }
   get field4() → FutureOr<self::C::T?>
-    return this.{self::C::_#C#field4#isSet} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4} : throw new _in::LateError::fieldNI("field4");
+    return this.{self::C::_#C#field4#isSet}{core::bool} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field4");
   set field4(generic-covariant-impl FutureOr<self::C::T?>#t5) → void {
     this.{self::C::_#C#field4#isSet} = true;
     this.{self::C::_#C#field4} = #t5;
   }
   get field5() → FutureOr<self::C::T?>?
-    return this.{self::C::_#C#field5#isSet} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5} : throw new _in::LateError::fieldNI("field5");
+    return this.{self::C::_#C#field5#isSet}{core::bool} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field5");
   set field5(generic-covariant-impl FutureOr<self::C::T?>? #t6) → void {
     this.{self::C::_#C#field5#isSet} = true;
     this.{self::C::_#C#field5} = #t6;
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.transformed.expect
index 0ac8dba..6e2e07e 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.transformed.expect
@@ -20,31 +20,31 @@
     : super core::Object::•()
     ;
   get field1() → FutureOr<dynamic>
-    return this.{self::C::_#C#field1#isSet} ?{FutureOr<dynamic>} this.{self::C::_#C#field1} : throw new _in::LateError::fieldNI("field1");
+    return this.{self::C::_#C#field1#isSet}{core::bool} ?{FutureOr<dynamic>} this.{self::C::_#C#field1}{FutureOr<dynamic>?} : throw new _in::LateError::fieldNI("field1");
   set field1(FutureOr<dynamic>#t1) → void {
     this.{self::C::_#C#field1#isSet} = true;
     this.{self::C::_#C#field1} = #t1;
   }
   get field2() → FutureOr<dynamic>?
-    return this.{self::C::_#C#field2#isSet} ?{FutureOr<dynamic>?} this.{self::C::_#C#field2} : throw new _in::LateError::fieldNI("field2");
+    return this.{self::C::_#C#field2#isSet}{core::bool} ?{FutureOr<dynamic>?} this.{self::C::_#C#field2}{FutureOr<dynamic>?} : throw new _in::LateError::fieldNI("field2");
   set field2(FutureOr<dynamic>? #t2) → void {
     this.{self::C::_#C#field2#isSet} = true;
     this.{self::C::_#C#field2} = #t2;
   }
   get field3() → FutureOr<self::C::T%>
-    return this.{self::C::_#C#field3#isSet} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
+    return this.{self::C::_#C#field3#isSet}{core::bool} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3}{FutureOr<self::C::T%>?} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
   set field3(generic-covariant-impl FutureOr<self::C::T%>#t4) → void {
     this.{self::C::_#C#field3#isSet} = true;
     this.{self::C::_#C#field3} = #t4;
   }
   get field4() → FutureOr<self::C::T?>
-    return this.{self::C::_#C#field4#isSet} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4} : throw new _in::LateError::fieldNI("field4");
+    return this.{self::C::_#C#field4#isSet}{core::bool} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field4");
   set field4(generic-covariant-impl FutureOr<self::C::T?>#t5) → void {
     this.{self::C::_#C#field4#isSet} = true;
     this.{self::C::_#C#field4} = #t5;
   }
   get field5() → FutureOr<self::C::T?>?
-    return this.{self::C::_#C#field5#isSet} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5} : throw new _in::LateError::fieldNI("field5");
+    return this.{self::C::_#C#field5#isSet}{core::bool} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field5");
   set field5(generic-covariant-impl FutureOr<self::C::T?>? #t6) → void {
     this.{self::C::_#C#field5#isSet} = true;
     this.{self::C::_#C#field5} = #t6;
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.expect
index 77cb4ba..3e73dd7 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.expect
@@ -5,12 +5,12 @@
 static method main() → dynamic {
   lowered core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} #lateLocal = 123 : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1 == null ?{core::int} #lateLocal = 123 : #t1{core::int};
   function #lateLocal#set(core::int #t2) → dynamic
     return #lateLocal = #t2;
-  self::expect(123, #lateLocal#get.call());
-  self::expect(124, #lateLocal#set.call(124));
-  self::expect(124, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int});
+  self::expect(124, #lateLocal#set(124){(core::int) → dynamic});
+  self::expect(124, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -25,15 +25,15 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t3;
     }
-    self::expect(value1, #lateGenericLocal#get.call());
-    self::expect(value2, #lateGenericLocal#set.call(value2));
-    self::expect(value2, #lateGenericLocal#get.call());
+    self::expect(value1, #lateGenericLocal#get(){() → T%});
+    self::expect(value2, #lateGenericLocal#set(value2){(T%) → dynamic});
+    self::expect(value2, #lateGenericLocal#get(){() → T%});
   }
-  local.call<core::int?>(null, 0);
-  local.call<core::int?>(0, null);
-  local.call<core::int>(0, 42);
+  local<core::int?>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int?>(0, null){(core::int?, core::int?) → Null};
+  local<core::int>(0, 42){(core::int, core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.transformed.expect
index 77cb4ba..3e73dd7 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.transformed.expect
@@ -5,12 +5,12 @@
 static method main() → dynamic {
   lowered core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} #lateLocal = 123 : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1 == null ?{core::int} #lateLocal = 123 : #t1{core::int};
   function #lateLocal#set(core::int #t2) → dynamic
     return #lateLocal = #t2;
-  self::expect(123, #lateLocal#get.call());
-  self::expect(124, #lateLocal#set.call(124));
-  self::expect(124, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int});
+  self::expect(124, #lateLocal#set(124){(core::int) → dynamic});
+  self::expect(124, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -25,15 +25,15 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t3;
     }
-    self::expect(value1, #lateGenericLocal#get.call());
-    self::expect(value2, #lateGenericLocal#set.call(value2));
-    self::expect(value2, #lateGenericLocal#get.call());
+    self::expect(value1, #lateGenericLocal#get(){() → T%});
+    self::expect(value2, #lateGenericLocal#set(value2){(T%) → dynamic});
+    self::expect(value2, #lateGenericLocal#get(){() → T%});
   }
-  local.call<core::int?>(null, 0);
-  local.call<core::int?>(0, null);
-  local.call<core::int>(0, 42);
+  local<core::int?>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int?>(0, null){(core::int?, core::int?) → Null};
+  local<core::int>(0, 42){(core::int, core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.expect
index 8942212..caa8e52 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.expect
@@ -16,9 +16,9 @@
     #lateLocal#isSet = true;
     return #lateLocal = #t1;
   }
-  self::expect(123, #lateLocal#get.call());
-  self::expect(124, #lateLocal#set.call(124));
-  self::expect(124, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int});
+  self::expect(124, #lateLocal#set(124){(core::int) → dynamic});
+  self::expect(124, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -33,15 +33,15 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t2;
     }
-    self::expect(value1, #lateGenericLocal#get.call());
-    self::expect(value2, #lateGenericLocal#set.call(value2));
-    self::expect(value2, #lateGenericLocal#get.call());
+    self::expect(value1, #lateGenericLocal#get(){() → T%});
+    self::expect(value2, #lateGenericLocal#set(value2){(T%) → dynamic});
+    self::expect(value2, #lateGenericLocal#get(){() → T%});
   }
-  local.call<core::int?>(null, 0);
-  local.call<core::int?>(0, null);
-  local.call<core::int>(0, 42);
+  local<core::int?>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int?>(0, null){(core::int?, core::int?) → Null};
+  local<core::int>(0, 42){(core::int, core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.transformed.expect
index 8942212..caa8e52 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.transformed.expect
@@ -16,9 +16,9 @@
     #lateLocal#isSet = true;
     return #lateLocal = #t1;
   }
-  self::expect(123, #lateLocal#get.call());
-  self::expect(124, #lateLocal#set.call(124));
-  self::expect(124, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int});
+  self::expect(124, #lateLocal#set(124){(core::int) → dynamic});
+  self::expect(124, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -33,15 +33,15 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t2;
     }
-    self::expect(value1, #lateGenericLocal#get.call());
-    self::expect(value2, #lateGenericLocal#set.call(value2));
-    self::expect(value2, #lateGenericLocal#get.call());
+    self::expect(value1, #lateGenericLocal#get(){() → T%});
+    self::expect(value2, #lateGenericLocal#set(value2){(T%) → dynamic});
+    self::expect(value2, #lateGenericLocal#get(){() → T%});
   }
-  local.call<core::int?>(null, 0);
-  local.call<core::int?>(0, null);
-  local.call<core::int>(0, 42);
+  local<core::int?>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int?>(0, null){(core::int?, core::int?) → Null};
+  local<core::int>(0, 42){(core::int, core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.expect
index 40781ea..9b91555 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.expect
@@ -6,12 +6,12 @@
 static method main() → dynamic {
   lowered core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1 == null ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
   function #lateLocal#set(core::int #t2) → dynamic
     return #lateLocal = #t2;
-  self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  self::expect(123, #lateLocal#set.call(123));
-  self::expect(123, #lateLocal#get.call());
+  self::throws(() → core::int => #lateLocal#get(){() → core::int}, "Read value from uninitialized lateLocal");
+  self::expect(123, #lateLocal#set(123){(core::int) → dynamic});
+  self::expect(123, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -21,22 +21,22 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t3;
     }
-    self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    self::expect(value, #lateGenericLocal#set.call(value));
-    self::expect(value, #lateGenericLocal#get.call());
+    self::throws(() → T% => #lateGenericLocal#get(){() → T%}, "Read value from uninitialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#set(value){(T%) → dynamic});
+    self::expect(value, #lateGenericLocal#get(){() → T%});
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(0);
-  local.call<core::int>(0);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(0){(core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.transformed.expect
index 40781ea..9b91555 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.strong.transformed.expect
@@ -6,12 +6,12 @@
 static method main() → dynamic {
   lowered core::int? #lateLocal;
   function #lateLocal#get() → core::int
-    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
+    return let final core::int? #t1 = #lateLocal in #t1 == null ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
   function #lateLocal#set(core::int #t2) → dynamic
     return #lateLocal = #t2;
-  self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  self::expect(123, #lateLocal#set.call(123));
-  self::expect(123, #lateLocal#get.call());
+  self::throws(() → core::int => #lateLocal#get(){() → core::int}, "Read value from uninitialized lateLocal");
+  self::expect(123, #lateLocal#set(123){(core::int) → dynamic});
+  self::expect(123, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -21,22 +21,22 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t3;
     }
-    self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    self::expect(value, #lateGenericLocal#set.call(value));
-    self::expect(value, #lateGenericLocal#get.call());
+    self::throws(() → T% => #lateGenericLocal#get(){() → T%}, "Read value from uninitialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#set(value){(T%) → dynamic});
+    self::expect(value, #lateGenericLocal#get(){() → T%});
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(0);
-  local.call<core::int>(0);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(0){(core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.expect
index 237c5ac..c6c3b91 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.expect
@@ -12,9 +12,9 @@
     #lateLocal#isSet = true;
     return #lateLocal = #t1;
   }
-  self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  self::expect(123, #lateLocal#set.call(123));
-  self::expect(123, #lateLocal#get.call());
+  self::throws(() → core::int => #lateLocal#get(){() → core::int}, "Read value from uninitialized lateLocal");
+  self::expect(123, #lateLocal#set(123){(core::int) → dynamic});
+  self::expect(123, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -24,22 +24,22 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t2;
     }
-    self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    self::expect(value, #lateGenericLocal#set.call(value));
-    self::expect(value, #lateGenericLocal#get.call());
+    self::throws(() → T% => #lateGenericLocal#get(){() → T%}, "Read value from uninitialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#set(value){(T%) → dynamic});
+    self::expect(value, #lateGenericLocal#get(){() → T%});
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(0);
-  local.call<core::int>(0);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(0){(core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.transformed.expect
index 237c5ac..c6c3b91 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.transformed.expect
@@ -12,9 +12,9 @@
     #lateLocal#isSet = true;
     return #lateLocal = #t1;
   }
-  self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  self::expect(123, #lateLocal#set.call(123));
-  self::expect(123, #lateLocal#get.call());
+  self::throws(() → core::int => #lateLocal#get(){() → core::int}, "Read value from uninitialized lateLocal");
+  self::expect(123, #lateLocal#set(123){(core::int) → dynamic});
+  self::expect(123, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -24,22 +24,22 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t2;
     }
-    self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    self::expect(value, #lateGenericLocal#set.call(value));
-    self::expect(value, #lateGenericLocal#get.call());
+    self::throws(() → T% => #lateGenericLocal#get(){() → T%}, "Read value from uninitialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#set(value){(T%) → dynamic});
+    self::expect(value, #lateGenericLocal#get(){() → T%});
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(0);
-  local.call<core::int>(0);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(0){(core::int) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.expect
index b8d325b..9cfa15f 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.expect
@@ -16,39 +16,39 @@
     : super core::Object::•()
     ;
   static get uninitializedNonFinalStaticField() → core::int
-    return let final core::int? #t1 = self::Class::_#uninitializedNonFinalStaticField in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalStaticField") : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#uninitializedNonFinalStaticField in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalStaticField") : #t1{core::int};
   static set uninitializedNonFinalStaticField(core::int #t2) → void
     self::Class::_#uninitializedNonFinalStaticField = #t2;
   static get uninitializedFinalStaticField() → core::int
-    return let final core::int? #t3 = self::Class::_#uninitializedFinalStaticField in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalStaticField") : #t3{core::int};
+    return let final core::int? #t3 = self::Class::_#uninitializedFinalStaticField in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalStaticField") : #t3{core::int};
   static set uninitializedFinalStaticField(core::int #t4) → void
-    if(self::Class::_#uninitializedFinalStaticField.==(null))
+    if(self::Class::_#uninitializedFinalStaticField == null)
       self::Class::_#uninitializedFinalStaticField = #t4;
     else
       throw new _in::LateError::fieldAI("uninitializedFinalStaticField");
   static get initializedNonFinalStaticField() → core::int
-    return let final core::int? #t5 = self::Class::_#initializedNonFinalStaticField in #t5.==(null) ?{core::int} self::Class::_#initializedNonFinalStaticField = 0 : #t5{core::int};
+    return let final core::int? #t5 = self::Class::_#initializedNonFinalStaticField in #t5 == null ?{core::int} self::Class::_#initializedNonFinalStaticField = 0 : #t5{core::int};
   static set initializedNonFinalStaticField(core::int #t6) → void
     self::Class::_#initializedNonFinalStaticField = #t6;
   static get initializedFinalStaticField() → core::int
-    return let final core::int? #t7 = self::Class::_#initializedFinalStaticField in #t7.==(null) ?{core::int} let final core::int #t8 = 0 in self::Class::_#initializedFinalStaticField.==(null) ?{core::int} self::Class::_#initializedFinalStaticField = #t8 : throw new _in::LateError::fieldADI("initializedFinalStaticField") : #t7{core::int};
+    return let final core::int? #t7 = self::Class::_#initializedFinalStaticField in #t7 == null ?{core::int} let final core::int #t8 = 0 in self::Class::_#initializedFinalStaticField == null ?{core::int} self::Class::_#initializedFinalStaticField = #t8 : throw new _in::LateError::fieldADI("initializedFinalStaticField") : #t7{core::int};
   get uninitializedNonFinalInstanceField() → core::int
-    return let final core::int? #t9 = this.{self::Class::_#Class#uninitializedNonFinalInstanceField} in #t9.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalInstanceField") : #t9{core::int};
+    return let final core::int? #t9 = this.{self::Class::_#Class#uninitializedNonFinalInstanceField}{core::int?} in #t9 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalInstanceField") : #t9{core::int};
   set uninitializedNonFinalInstanceField(core::int #t10) → void
     this.{self::Class::_#Class#uninitializedNonFinalInstanceField} = #t10;
   get uninitializedFinalInstanceField() → core::int
-    return let final core::int? #t11 = this.{self::Class::_#Class#uninitializedFinalInstanceField} in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalInstanceField") : #t11{core::int};
+    return let final core::int? #t11 = this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalInstanceField") : #t11{core::int};
   set uninitializedFinalInstanceField(core::int #t12) → void
-    if(this.{self::Class::_#Class#uninitializedFinalInstanceField}.==(null))
+    if(this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} == null)
       this.{self::Class::_#Class#uninitializedFinalInstanceField} = #t12;
     else
       throw new _in::LateError::fieldAI("uninitializedFinalInstanceField");
   get initializedNonFinalInstanceField() → core::int
-    return let final core::int? #t13 = this.{self::Class::_#Class#initializedNonFinalInstanceField} in #t13.==(null) ?{core::int} this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0 : #t13{core::int};
+    return let final core::int? #t13 = this.{self::Class::_#Class#initializedNonFinalInstanceField}{core::int?} in #t13 == null ?{core::int} this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0 : #t13{core::int};
   set initializedNonFinalInstanceField(core::int #t14) → void
     this.{self::Class::_#Class#initializedNonFinalInstanceField} = #t14;
   get initializedFinalInstanceField() → core::int
-    return let final core::int? #t15 = this.{self::Class::_#Class#initializedFinalInstanceField} in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in this.{self::Class::_#Class#initializedFinalInstanceField}.==(null) ?{core::int} this.{self::Class::_#Class#initializedFinalInstanceField} = #t16 : throw new _in::LateError::fieldADI("initializedFinalInstanceField") : #t15{core::int};
+    return let final core::int? #t15 = this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} in #t15 == null ?{core::int} let final core::int #t16 = 0 in this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#initializedFinalInstanceField} = #t16 : throw new _in::LateError::fieldADI("initializedFinalInstanceField") : #t15{core::int};
 }
 static field core::int? _#uninitializedNonFinalTopLevelField = null;
 static field core::int? _#uninitializedFinalTopLevelField = null;
@@ -66,7 +66,7 @@
   }
   lowered core::int? #nonNullableUninitializedNonFinalLocal;
   function #nonNullableUninitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t18 = #nonNullableUninitializedNonFinalLocal in #t18.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t18{core::int};
+    return let final core::int? #t18 = #nonNullableUninitializedNonFinalLocal in #t18 == null ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t18{core::int};
   function #nonNullableUninitializedNonFinalLocal#set(core::int #t19) → dynamic
     return #nonNullableUninitializedNonFinalLocal = #t19;
   lowered final core::int? #nullableUninitializedFinalLocal;
@@ -82,9 +82,9 @@
     }
   lowered final core::int? #nonNullableUninitializedFinalLocal;
   function #nonNullableUninitializedFinalLocal#get() → core::int
-    return let final core::int? #t21 = #nonNullableUninitializedFinalLocal in #t21.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t21{core::int};
+    return let final core::int? #t21 = #nonNullableUninitializedFinalLocal in #t21 == null ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t21{core::int};
   function #nonNullableUninitializedFinalLocal#set(core::int #t22) → dynamic
-    if(#nonNullableUninitializedFinalLocal.==(null))
+    if(#nonNullableUninitializedFinalLocal == null)
       return #nonNullableUninitializedFinalLocal = #t22;
     else
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
@@ -103,7 +103,7 @@
   }
   lowered core::int? #nonNullableInitializedNonFinalLocal;
   function #nonNullableInitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t24 = #nonNullableInitializedNonFinalLocal in #t24.==(null) ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t24{core::int};
+    return let final core::int? #t24 = #nonNullableInitializedNonFinalLocal in #t24 == null ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t24{core::int};
   function #nonNullableInitializedNonFinalLocal#set(core::int #t25) → dynamic
     return #nonNullableInitializedNonFinalLocal = #t25;
   lowered final core::int? #nullableInitializedFinalLocal;
@@ -120,22 +120,22 @@
   }
   lowered final core::int? #nonNullableInitializedFinalLocal;
   function #nonNullableInitializedFinalLocal#get() → core::int
-    return let final core::int? #t27 = #nonNullableInitializedFinalLocal in #t27.==(null) ?{core::int} let final core::int #t28 = 0 in #nonNullableInitializedFinalLocal.==(null) ?{core::int} #nonNullableInitializedFinalLocal = #t28 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t27{core::int};
+    return let final core::int? #t27 = #nonNullableInitializedFinalLocal in #t27 == null ?{core::int} let final core::int #t28 = 0 in #nonNullableInitializedFinalLocal == null ?{core::int} #nonNullableInitializedFinalLocal = #t28 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t27{core::int};
 }
 static get uninitializedNonFinalTopLevelField() → core::int
-  return let final core::int? #t29 = self::_#uninitializedNonFinalTopLevelField in #t29.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField") : #t29{core::int};
+  return let final core::int? #t29 = self::_#uninitializedNonFinalTopLevelField in #t29 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField") : #t29{core::int};
 static set uninitializedNonFinalTopLevelField(core::int #t30) → void
   self::_#uninitializedNonFinalTopLevelField = #t30;
 static get uninitializedFinalTopLevelField() → core::int
-  return let final core::int? #t31 = self::_#uninitializedFinalTopLevelField in #t31.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalTopLevelField") : #t31{core::int};
+  return let final core::int? #t31 = self::_#uninitializedFinalTopLevelField in #t31 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalTopLevelField") : #t31{core::int};
 static set uninitializedFinalTopLevelField(core::int #t32) → void
-  if(self::_#uninitializedFinalTopLevelField.==(null))
+  if(self::_#uninitializedFinalTopLevelField == null)
     self::_#uninitializedFinalTopLevelField = #t32;
   else
     throw new _in::LateError::fieldAI("uninitializedFinalTopLevelField");
 static get initializedNonFinalTopLevelField() → core::int
-  return let final core::int? #t33 = self::_#initializedNonFinalTopLevelField in #t33.==(null) ?{core::int} self::_#initializedNonFinalTopLevelField = 0 : #t33{core::int};
+  return let final core::int? #t33 = self::_#initializedNonFinalTopLevelField in #t33 == null ?{core::int} self::_#initializedNonFinalTopLevelField = 0 : #t33{core::int};
 static set initializedNonFinalTopLevelField(core::int #t34) → void
   self::_#initializedNonFinalTopLevelField = #t34;
 static get initializedFinalTopLevelField() → core::int
-  return let final core::int? #t35 = self::_#initializedFinalTopLevelField in #t35.==(null) ?{core::int} let final core::int #t36 = 0 in self::_#initializedFinalTopLevelField.==(null) ?{core::int} self::_#initializedFinalTopLevelField = #t36 : throw new _in::LateError::fieldADI("initializedFinalTopLevelField") : #t35{core::int};
+  return let final core::int? #t35 = self::_#initializedFinalTopLevelField in #t35 == null ?{core::int} let final core::int #t36 = 0 in self::_#initializedFinalTopLevelField == null ?{core::int} self::_#initializedFinalTopLevelField = #t36 : throw new _in::LateError::fieldADI("initializedFinalTopLevelField") : #t35{core::int};
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.transformed.expect
index dd059f5..f35b5d9 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.transformed.expect
@@ -16,39 +16,39 @@
     : super core::Object::•()
     ;
   static get uninitializedNonFinalStaticField() → core::int
-    return let final core::int? #t1 = self::Class::_#uninitializedNonFinalStaticField in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalStaticField") : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#uninitializedNonFinalStaticField in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalStaticField") : #t1{core::int};
   static set uninitializedNonFinalStaticField(core::int #t2) → void
     self::Class::_#uninitializedNonFinalStaticField = #t2;
   static get uninitializedFinalStaticField() → core::int
-    return let final core::int? #t3 = self::Class::_#uninitializedFinalStaticField in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalStaticField") : #t3{core::int};
+    return let final core::int? #t3 = self::Class::_#uninitializedFinalStaticField in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalStaticField") : #t3{core::int};
   static set uninitializedFinalStaticField(core::int #t4) → void
-    if(self::Class::_#uninitializedFinalStaticField.==(null))
+    if(self::Class::_#uninitializedFinalStaticField == null)
       self::Class::_#uninitializedFinalStaticField = #t4;
     else
       throw new _in::LateError::fieldAI("uninitializedFinalStaticField");
   static get initializedNonFinalStaticField() → core::int
-    return let final core::int? #t5 = self::Class::_#initializedNonFinalStaticField in #t5.==(null) ?{core::int} self::Class::_#initializedNonFinalStaticField = 0 : #t5{core::int};
+    return let final core::int? #t5 = self::Class::_#initializedNonFinalStaticField in #t5 == null ?{core::int} self::Class::_#initializedNonFinalStaticField = 0 : #t5{core::int};
   static set initializedNonFinalStaticField(core::int #t6) → void
     self::Class::_#initializedNonFinalStaticField = #t6;
   static get initializedFinalStaticField() → core::int
-    return let final core::int? #t7 = self::Class::_#initializedFinalStaticField in #t7.==(null) ?{core::int} let final core::int #t8 = 0 in self::Class::_#initializedFinalStaticField.==(null) ?{core::int} self::Class::_#initializedFinalStaticField = #t8 : throw new _in::LateError::fieldADI("initializedFinalStaticField") : #t7{core::int};
+    return let final core::int? #t7 = self::Class::_#initializedFinalStaticField in #t7 == null ?{core::int} let final core::int #t8 = 0 in self::Class::_#initializedFinalStaticField == null ?{core::int} self::Class::_#initializedFinalStaticField = #t8 : throw new _in::LateError::fieldADI("initializedFinalStaticField") : #t7{core::int};
   get uninitializedNonFinalInstanceField() → core::int
-    return let final core::int? #t9 = this.{self::Class::_#Class#uninitializedNonFinalInstanceField} in #t9.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalInstanceField") : #t9{core::int};
+    return let final core::int? #t9 = this.{self::Class::_#Class#uninitializedNonFinalInstanceField}{core::int?} in #t9 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalInstanceField") : #t9{core::int};
   set uninitializedNonFinalInstanceField(core::int #t10) → void
     this.{self::Class::_#Class#uninitializedNonFinalInstanceField} = #t10;
   get uninitializedFinalInstanceField() → core::int
-    return let final core::int? #t11 = this.{self::Class::_#Class#uninitializedFinalInstanceField} in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalInstanceField") : #t11{core::int};
+    return let final core::int? #t11 = this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalInstanceField") : #t11{core::int};
   set uninitializedFinalInstanceField(core::int #t12) → void
-    if(this.{self::Class::_#Class#uninitializedFinalInstanceField}.==(null))
+    if(this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} == null)
       this.{self::Class::_#Class#uninitializedFinalInstanceField} = #t12;
     else
       throw new _in::LateError::fieldAI("uninitializedFinalInstanceField");
   get initializedNonFinalInstanceField() → core::int
-    return let final core::int? #t13 = this.{self::Class::_#Class#initializedNonFinalInstanceField} in #t13.==(null) ?{core::int} this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0 : #t13{core::int};
+    return let final core::int? #t13 = this.{self::Class::_#Class#initializedNonFinalInstanceField}{core::int?} in #t13 == null ?{core::int} this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0 : #t13{core::int};
   set initializedNonFinalInstanceField(core::int #t14) → void
     this.{self::Class::_#Class#initializedNonFinalInstanceField} = #t14;
   get initializedFinalInstanceField() → core::int
-    return let final core::int? #t15 = this.{self::Class::_#Class#initializedFinalInstanceField} in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in this.{self::Class::_#Class#initializedFinalInstanceField}.==(null) ?{core::int} this.{self::Class::_#Class#initializedFinalInstanceField} = #t16 : throw new _in::LateError::fieldADI("initializedFinalInstanceField") : #t15{core::int};
+    return let final core::int? #t15 = this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} in #t15 == null ?{core::int} let final core::int #t16 = 0 in this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#initializedFinalInstanceField} = #t16 : throw new _in::LateError::fieldADI("initializedFinalInstanceField") : #t15{core::int};
 }
 static field core::int? _#uninitializedNonFinalTopLevelField = null;
 static field core::int? _#uninitializedFinalTopLevelField = null;
@@ -66,7 +66,7 @@
   }
   lowered core::int? #nonNullableUninitializedNonFinalLocal;
   function #nonNullableUninitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t18 = #nonNullableUninitializedNonFinalLocal in #t18.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t18{core::int};
+    return let final core::int? #t18 = #nonNullableUninitializedNonFinalLocal in #t18 == null ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t18{core::int};
   function #nonNullableUninitializedNonFinalLocal#set(core::int #t19) → dynamic
     return #nonNullableUninitializedNonFinalLocal = #t19;
   lowered final core::int? #nullableUninitializedFinalLocal;
@@ -82,9 +82,9 @@
     }
   lowered final core::int? #nonNullableUninitializedFinalLocal;
   function #nonNullableUninitializedFinalLocal#get() → core::int
-    return let final core::int? #t21 = #nonNullableUninitializedFinalLocal in #t21.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t21{core::int};
+    return let final core::int? #t21 = #nonNullableUninitializedFinalLocal in #t21 == null ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t21{core::int};
   function #nonNullableUninitializedFinalLocal#set(core::int #t22) → dynamic
-    if(#nonNullableUninitializedFinalLocal.==(null))
+    if(#nonNullableUninitializedFinalLocal == null)
       return #nonNullableUninitializedFinalLocal = #t22;
     else
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
@@ -103,7 +103,7 @@
   }
   lowered core::int? #nonNullableInitializedNonFinalLocal;
   function #nonNullableInitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t24 = #nonNullableInitializedNonFinalLocal in #t24.==(null) ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t24{core::int};
+    return let final core::int? #t24 = #nonNullableInitializedNonFinalLocal in #t24 == null ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t24{core::int};
   function #nonNullableInitializedNonFinalLocal#set(core::int #t25) → dynamic
     return #nonNullableInitializedNonFinalLocal = #t25;
   lowered final core::int? #nullableInitializedFinalLocal;
@@ -120,25 +120,25 @@
   }
   lowered final core::int? #nonNullableInitializedFinalLocal;
   function #nonNullableInitializedFinalLocal#get() → core::int
-    return let final core::int? #t27 = #nonNullableInitializedFinalLocal in #t27.==(null) ?{core::int} let final core::int #t28 = 0 in #nonNullableInitializedFinalLocal.==(null) ?{core::int} #nonNullableInitializedFinalLocal = #t28 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t27{core::int};
+    return let final core::int? #t27 = #nonNullableInitializedFinalLocal in #t27 == null ?{core::int} let final core::int #t28 = 0 in #nonNullableInitializedFinalLocal == null ?{core::int} #nonNullableInitializedFinalLocal = #t28 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t27{core::int};
 }
 static get uninitializedNonFinalTopLevelField() → core::int
-  return let final core::int? #t29 = self::_#uninitializedNonFinalTopLevelField in #t29.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField") : #t29{core::int};
+  return let final core::int? #t29 = self::_#uninitializedNonFinalTopLevelField in #t29 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField") : #t29{core::int};
 static set uninitializedNonFinalTopLevelField(core::int #t30) → void
   self::_#uninitializedNonFinalTopLevelField = #t30;
 static get uninitializedFinalTopLevelField() → core::int
-  return let final core::int? #t31 = self::_#uninitializedFinalTopLevelField in #t31.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalTopLevelField") : #t31{core::int};
+  return let final core::int? #t31 = self::_#uninitializedFinalTopLevelField in #t31 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalTopLevelField") : #t31{core::int};
 static set uninitializedFinalTopLevelField(core::int #t32) → void
-  if(self::_#uninitializedFinalTopLevelField.==(null))
+  if(self::_#uninitializedFinalTopLevelField == null)
     self::_#uninitializedFinalTopLevelField = #t32;
   else
     throw new _in::LateError::fieldAI("uninitializedFinalTopLevelField");
 static get initializedNonFinalTopLevelField() → core::int
-  return let final core::int? #t33 = self::_#initializedNonFinalTopLevelField in #t33.==(null) ?{core::int} self::_#initializedNonFinalTopLevelField = 0 : #t33{core::int};
+  return let final core::int? #t33 = self::_#initializedNonFinalTopLevelField in #t33 == null ?{core::int} self::_#initializedNonFinalTopLevelField = 0 : #t33{core::int};
 static set initializedNonFinalTopLevelField(core::int #t34) → void
   self::_#initializedNonFinalTopLevelField = #t34;
 static get initializedFinalTopLevelField() → core::int
-  return let final core::int? #t35 = self::_#initializedFinalTopLevelField in #t35.==(null) ?{core::int} let final core::int #t36 = 0 in self::_#initializedFinalTopLevelField.==(null) ?{core::int} self::_#initializedFinalTopLevelField = #t36 : throw new _in::LateError::fieldADI("initializedFinalTopLevelField") : #t35{core::int};
+  return let final core::int? #t35 = self::_#initializedFinalTopLevelField in #t35 == null ?{core::int} let final core::int #t36 = 0 in self::_#initializedFinalTopLevelField == null ?{core::int} self::_#initializedFinalTopLevelField = #t36 : throw new _in::LateError::fieldADI("initializedFinalTopLevelField") : #t35{core::int};
 
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.expect
index 46b8989..4c7909a 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.expect
@@ -60,40 +60,40 @@
     return let final core::int? #t8 = self::Class::_#initializedFinalStaticField in #t8{core::int};
   }
   get uninitializedNonFinalInstanceField() → core::int
-    return this.{self::Class::_#Class#uninitializedNonFinalInstanceField#isSet} ?{core::int} let final core::int? #t9 = this.{self::Class::_#Class#uninitializedNonFinalInstanceField} in #t9{core::int} : throw new _in::LateError::fieldNI("uninitializedNonFinalInstanceField");
+    return this.{self::Class::_#Class#uninitializedNonFinalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t9 = this.{self::Class::_#Class#uninitializedNonFinalInstanceField}{core::int?} in #t9{core::int} : throw new _in::LateError::fieldNI("uninitializedNonFinalInstanceField");
   set uninitializedNonFinalInstanceField(core::int #t10) → void {
     this.{self::Class::_#Class#uninitializedNonFinalInstanceField#isSet} = true;
     this.{self::Class::_#Class#uninitializedNonFinalInstanceField} = #t10;
   }
   get uninitializedFinalInstanceField() → core::int
-    return this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet} ?{core::int} let final core::int? #t11 = this.{self::Class::_#Class#uninitializedFinalInstanceField} in #t11{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalInstanceField");
+    return this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t11 = this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} in #t11{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalInstanceField");
   set uninitializedFinalInstanceField(core::int #t12) → void
-    if(this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet})
+    if(this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("uninitializedFinalInstanceField");
     else {
       this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet} = true;
       this.{self::Class::_#Class#uninitializedFinalInstanceField} = #t12;
     }
   get initializedNonFinalInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet}) {
+    if(!this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet}{core::bool}) {
       this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0;
       this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet} = true;
     }
-    return let final core::int? #t13 = this.{self::Class::_#Class#initializedNonFinalInstanceField} in #t13{core::int};
+    return let final core::int? #t13 = this.{self::Class::_#Class#initializedNonFinalInstanceField}{core::int?} in #t13{core::int};
   }
   set initializedNonFinalInstanceField(core::int #t14) → void {
     this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet} = true;
     this.{self::Class::_#Class#initializedNonFinalInstanceField} = #t14;
   }
   get initializedFinalInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#initializedFinalInstanceField#isSet}) {
+    if(!this.{self::Class::_#Class#initializedFinalInstanceField#isSet}{core::bool}) {
       final core::int #t15 = 0;
-      if(this.{self::Class::_#Class#initializedFinalInstanceField#isSet})
+      if(this.{self::Class::_#Class#initializedFinalInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("initializedFinalInstanceField");
       this.{self::Class::_#Class#initializedFinalInstanceField} = #t15;
       this.{self::Class::_#Class#initializedFinalInstanceField#isSet} = true;
     }
-    return let final core::int? #t16 = this.{self::Class::_#Class#initializedFinalInstanceField} in #t16{core::int};
+    return let final core::int? #t16 = this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} in #t16{core::int};
   }
 }
 static field core::int? _#uninitializedNonFinalTopLevelField = null;
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.transformed.expect
index 46b8989..4c7909a 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.transformed.expect
@@ -60,40 +60,40 @@
     return let final core::int? #t8 = self::Class::_#initializedFinalStaticField in #t8{core::int};
   }
   get uninitializedNonFinalInstanceField() → core::int
-    return this.{self::Class::_#Class#uninitializedNonFinalInstanceField#isSet} ?{core::int} let final core::int? #t9 = this.{self::Class::_#Class#uninitializedNonFinalInstanceField} in #t9{core::int} : throw new _in::LateError::fieldNI("uninitializedNonFinalInstanceField");
+    return this.{self::Class::_#Class#uninitializedNonFinalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t9 = this.{self::Class::_#Class#uninitializedNonFinalInstanceField}{core::int?} in #t9{core::int} : throw new _in::LateError::fieldNI("uninitializedNonFinalInstanceField");
   set uninitializedNonFinalInstanceField(core::int #t10) → void {
     this.{self::Class::_#Class#uninitializedNonFinalInstanceField#isSet} = true;
     this.{self::Class::_#Class#uninitializedNonFinalInstanceField} = #t10;
   }
   get uninitializedFinalInstanceField() → core::int
-    return this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet} ?{core::int} let final core::int? #t11 = this.{self::Class::_#Class#uninitializedFinalInstanceField} in #t11{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalInstanceField");
+    return this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t11 = this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} in #t11{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalInstanceField");
   set uninitializedFinalInstanceField(core::int #t12) → void
-    if(this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet})
+    if(this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("uninitializedFinalInstanceField");
     else {
       this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet} = true;
       this.{self::Class::_#Class#uninitializedFinalInstanceField} = #t12;
     }
   get initializedNonFinalInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet}) {
+    if(!this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet}{core::bool}) {
       this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0;
       this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet} = true;
     }
-    return let final core::int? #t13 = this.{self::Class::_#Class#initializedNonFinalInstanceField} in #t13{core::int};
+    return let final core::int? #t13 = this.{self::Class::_#Class#initializedNonFinalInstanceField}{core::int?} in #t13{core::int};
   }
   set initializedNonFinalInstanceField(core::int #t14) → void {
     this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet} = true;
     this.{self::Class::_#Class#initializedNonFinalInstanceField} = #t14;
   }
   get initializedFinalInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#initializedFinalInstanceField#isSet}) {
+    if(!this.{self::Class::_#Class#initializedFinalInstanceField#isSet}{core::bool}) {
       final core::int #t15 = 0;
-      if(this.{self::Class::_#Class#initializedFinalInstanceField#isSet})
+      if(this.{self::Class::_#Class#initializedFinalInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("initializedFinalInstanceField");
       this.{self::Class::_#Class#initializedFinalInstanceField} = #t15;
       this.{self::Class::_#Class#initializedFinalInstanceField#isSet} = true;
     }
-    return let final core::int? #t16 = this.{self::Class::_#Class#initializedFinalInstanceField} in #t16{core::int};
+    return let final core::int? #t16 = this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} in #t16{core::int};
   }
 }
 static field core::int? _#uninitializedNonFinalTopLevelField = null;
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.expect
index 36b9cb9..09301ad 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.expect
@@ -49,36 +49,36 @@
   method lateInstanceFieldInit() → core::int?
     return 16;
   get lateInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#lateInstanceField#isSet}) {
-      this.{self::Class::_#Class#lateInstanceField} = this.{self::Class::lateInstanceFieldInit}();
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateInstanceField} = this.{self::Class::lateInstanceFieldInit}(){() → core::int?};
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateInstanceField};
+    return this.{self::Class::_#Class#lateInstanceField}{core::int?};
   }
   set lateInstanceField(core::int? #t3) → void {
     this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateInstanceField} = #t3;
   }
   method lateGenericInstanceFieldInit() → self::Class::T?
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class::T?};
   get lateGenericInstanceField() → self::Class::T? {
-    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}) {
-      this.{self::Class::_#Class#lateGenericInstanceField} = this.{self::Class::lateGenericInstanceFieldInit}();
+    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericInstanceField} = this.{self::Class::lateGenericInstanceFieldInit}(){() → self::Class::T?};
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateGenericInstanceField};
+    return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
   }
   set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
   method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
     this.{self::Class::lateInstanceField} = 17;
-    self::expect(17, this.{self::Class::lateInstanceField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericInstanceField});
+    self::expect(17, this.{self::Class::lateInstanceField}{core::int?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -152,16 +152,16 @@
   self::Class::lateStaticField1 = 88;
   self::expect(88, self::Class::lateStaticField1);
   self::Class::staticMethod();
-  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int>(null).{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(null);
+  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int>(null).{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(null){(core::int?) → dynamic};
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|lateExtensionField1 = 88;
   self::expect(88, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.transformed.expect
index 36b9cb9..09301ad 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.transformed.expect
@@ -49,36 +49,36 @@
   method lateInstanceFieldInit() → core::int?
     return 16;
   get lateInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#lateInstanceField#isSet}) {
-      this.{self::Class::_#Class#lateInstanceField} = this.{self::Class::lateInstanceFieldInit}();
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateInstanceField} = this.{self::Class::lateInstanceFieldInit}(){() → core::int?};
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateInstanceField};
+    return this.{self::Class::_#Class#lateInstanceField}{core::int?};
   }
   set lateInstanceField(core::int? #t3) → void {
     this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateInstanceField} = #t3;
   }
   method lateGenericInstanceFieldInit() → self::Class::T?
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class::T?};
   get lateGenericInstanceField() → self::Class::T? {
-    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}) {
-      this.{self::Class::_#Class#lateGenericInstanceField} = this.{self::Class::lateGenericInstanceFieldInit}();
+    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericInstanceField} = this.{self::Class::lateGenericInstanceFieldInit}(){() → self::Class::T?};
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateGenericInstanceField};
+    return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
   }
   set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
   method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
     this.{self::Class::lateInstanceField} = 17;
-    self::expect(17, this.{self::Class::lateInstanceField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericInstanceField});
+    self::expect(17, this.{self::Class::lateInstanceField}{core::int?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -152,16 +152,16 @@
   self::Class::lateStaticField1 = 88;
   self::expect(88, self::Class::lateStaticField1);
   self::Class::staticMethod();
-  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int>(null).{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(null);
+  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int>(null).{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(null){(core::int?) → dynamic};
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|lateExtensionField1 = 88;
   self::expect(88, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.expect
index 36b9cb9..09301ad 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.expect
@@ -49,36 +49,36 @@
   method lateInstanceFieldInit() → core::int?
     return 16;
   get lateInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#lateInstanceField#isSet}) {
-      this.{self::Class::_#Class#lateInstanceField} = this.{self::Class::lateInstanceFieldInit}();
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateInstanceField} = this.{self::Class::lateInstanceFieldInit}(){() → core::int?};
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateInstanceField};
+    return this.{self::Class::_#Class#lateInstanceField}{core::int?};
   }
   set lateInstanceField(core::int? #t3) → void {
     this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateInstanceField} = #t3;
   }
   method lateGenericInstanceFieldInit() → self::Class::T?
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class::T?};
   get lateGenericInstanceField() → self::Class::T? {
-    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}) {
-      this.{self::Class::_#Class#lateGenericInstanceField} = this.{self::Class::lateGenericInstanceFieldInit}();
+    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericInstanceField} = this.{self::Class::lateGenericInstanceFieldInit}(){() → self::Class::T?};
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateGenericInstanceField};
+    return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
   }
   set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
   method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
     this.{self::Class::lateInstanceField} = 17;
-    self::expect(17, this.{self::Class::lateInstanceField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericInstanceField});
+    self::expect(17, this.{self::Class::lateInstanceField}{core::int?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -152,16 +152,16 @@
   self::Class::lateStaticField1 = 88;
   self::expect(88, self::Class::lateStaticField1);
   self::Class::staticMethod();
-  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int>(null).{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(null);
+  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int>(null).{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(null){(core::int?) → dynamic};
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|lateExtensionField1 = 88;
   self::expect(88, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.transformed.expect
index 36b9cb9..09301ad 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.transformed.expect
@@ -49,36 +49,36 @@
   method lateInstanceFieldInit() → core::int?
     return 16;
   get lateInstanceField() → core::int? {
-    if(!this.{self::Class::_#Class#lateInstanceField#isSet}) {
-      this.{self::Class::_#Class#lateInstanceField} = this.{self::Class::lateInstanceFieldInit}();
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateInstanceField} = this.{self::Class::lateInstanceFieldInit}(){() → core::int?};
       this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateInstanceField};
+    return this.{self::Class::_#Class#lateInstanceField}{core::int?};
   }
   set lateInstanceField(core::int? #t3) → void {
     this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateInstanceField} = #t3;
   }
   method lateGenericInstanceFieldInit() → self::Class::T?
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class::T?};
   get lateGenericInstanceField() → self::Class::T? {
-    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}) {
-      this.{self::Class::_#Class#lateGenericInstanceField} = this.{self::Class::lateGenericInstanceFieldInit}();
+    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericInstanceField} = this.{self::Class::lateGenericInstanceFieldInit}(){() → self::Class::T?};
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     }
-    return this.{self::Class::_#Class#lateGenericInstanceField};
+    return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
   }
   set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
   method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
-    self::expect(16, this.{self::Class::lateInstanceField});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
     this.{self::Class::lateInstanceField} = 17;
-    self::expect(17, this.{self::Class::lateInstanceField});
-    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericInstanceField});
+    self::expect(17, this.{self::Class::lateInstanceField}{core::int?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -152,16 +152,16 @@
   self::Class::lateStaticField1 = 88;
   self::expect(88, self::Class::lateStaticField1);
   self::Class::staticMethod();
-  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int>(null).{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(null);
+  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int>(null).{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(null){(core::int?) → dynamic};
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|lateExtensionField1 = 88;
   self::expect(88, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.expect
index d01d771..b129514 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.expect
@@ -33,24 +33,24 @@
     self::expect(42, self::Class::lateStaticField2);
   }
   get lateInstanceField() → core::int?
-    return this.{self::Class::_#Class#lateInstanceField#isSet} ?{core::int?} this.{self::Class::_#Class#lateInstanceField} : throw new _in::LateError::fieldNI("lateInstanceField");
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#lateInstanceField}{core::int?} : throw new _in::LateError::fieldNI("lateInstanceField");
   set lateInstanceField(core::int? #t3) → void {
     this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateInstanceField} = #t3;
   }
   get lateGenericInstanceField() → self::Class::T?
-    return this.{self::Class::_#Class#lateGenericInstanceField#isSet} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
   set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
   method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
-    self::throws(() → core::int? => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
+    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}{self::Class::T?}, "Read value from uninitialized Class.lateGenericInstanceField");
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -105,19 +105,19 @@
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(0);
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.transformed.expect
index d01d771..b129514 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.transformed.expect
@@ -33,24 +33,24 @@
     self::expect(42, self::Class::lateStaticField2);
   }
   get lateInstanceField() → core::int?
-    return this.{self::Class::_#Class#lateInstanceField#isSet} ?{core::int?} this.{self::Class::_#Class#lateInstanceField} : throw new _in::LateError::fieldNI("lateInstanceField");
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#lateInstanceField}{core::int?} : throw new _in::LateError::fieldNI("lateInstanceField");
   set lateInstanceField(core::int? #t3) → void {
     this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateInstanceField} = #t3;
   }
   get lateGenericInstanceField() → self::Class::T?
-    return this.{self::Class::_#Class#lateGenericInstanceField#isSet} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
   set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
   method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
-    self::throws(() → core::int? => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
+    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}{self::Class::T?}, "Read value from uninitialized Class.lateGenericInstanceField");
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -105,19 +105,19 @@
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(0);
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.expect
index d01d771..b129514 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.expect
@@ -33,24 +33,24 @@
     self::expect(42, self::Class::lateStaticField2);
   }
   get lateInstanceField() → core::int?
-    return this.{self::Class::_#Class#lateInstanceField#isSet} ?{core::int?} this.{self::Class::_#Class#lateInstanceField} : throw new _in::LateError::fieldNI("lateInstanceField");
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#lateInstanceField}{core::int?} : throw new _in::LateError::fieldNI("lateInstanceField");
   set lateInstanceField(core::int? #t3) → void {
     this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateInstanceField} = #t3;
   }
   get lateGenericInstanceField() → self::Class::T?
-    return this.{self::Class::_#Class#lateGenericInstanceField#isSet} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
   set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
   method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
-    self::throws(() → core::int? => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
+    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}{self::Class::T?}, "Read value from uninitialized Class.lateGenericInstanceField");
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -105,19 +105,19 @@
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(0);
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.transformed.expect
index d01d771..b129514 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.transformed.expect
@@ -33,24 +33,24 @@
     self::expect(42, self::Class::lateStaticField2);
   }
   get lateInstanceField() → core::int?
-    return this.{self::Class::_#Class#lateInstanceField#isSet} ?{core::int?} this.{self::Class::_#Class#lateInstanceField} : throw new _in::LateError::fieldNI("lateInstanceField");
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#lateInstanceField}{core::int?} : throw new _in::LateError::fieldNI("lateInstanceField");
   set lateInstanceField(core::int? #t3) → void {
     this.{self::Class::_#Class#lateInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateInstanceField} = #t3;
   }
   get lateGenericInstanceField() → self::Class::T?
-    return this.{self::Class::_#Class#lateGenericInstanceField#isSet} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
   set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
   method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
-    self::throws(() → core::int? => this.{self::Class::lateInstanceField}, "Read value from uninitialized Class.lateInstanceField");
+    self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
-    self::expect(16, this.{self::Class::lateInstanceField});
-    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}, "Read value from uninitialized Class.lateGenericInstanceField");
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
+    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}{self::Class::T?}, "Read value from uninitialized Class.lateGenericInstanceField");
     this.{self::Class::lateGenericInstanceField} = value;
-    self::expect(value, this.{self::Class::lateGenericInstanceField});
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
   }
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
@@ -105,19 +105,19 @@
   self::Extension|lateExtensionField1 = 87;
   self::expect(87, self::Extension|lateExtensionField1);
   self::Extension|staticMethod();
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0);
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(null);
-  new self::Class::•<core::int>().{self::Class::instanceMethod}(0);
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.expect
index 12dcc96..a150002 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.expect
@@ -18,9 +18,9 @@
     #lateLocal#isSet = true;
     return #lateLocal = #t1;
   }
-  self::expect(123, #lateLocal#get.call());
-  self::expect(124, #lateLocal#set.call(124));
-  self::expect(124, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int?});
+  self::expect(124, #lateLocal#set(124){(core::int?) → dynamic});
+  self::expect(124, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -35,16 +35,16 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t2;
     }
-    self::expect(value1, #lateGenericLocal#get.call());
-    self::expect(value2, #lateGenericLocal#set.call(value2));
-    self::expect(value2, #lateGenericLocal#get.call());
+    self::expect(value1, #lateGenericLocal#get(){() → T?});
+    self::expect(value2, #lateGenericLocal#set(value2){(T?) → dynamic});
+    self::expect(value2, #lateGenericLocal#get(){() → T?});
   }
-  local.call<core::int?>(null, 0);
-  local.call<core::int?>(0, null);
-  local.call<core::int>(null, 0);
-  local.call<core::int>(0, null);
+  local<core::int?>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int?>(0, null){(core::int?, core::int?) → Null};
+  local<core::int>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int>(0, null){(core::int?, core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.transformed.expect
index 12dcc96..a150002 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.transformed.expect
@@ -18,9 +18,9 @@
     #lateLocal#isSet = true;
     return #lateLocal = #t1;
   }
-  self::expect(123, #lateLocal#get.call());
-  self::expect(124, #lateLocal#set.call(124));
-  self::expect(124, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int?});
+  self::expect(124, #lateLocal#set(124){(core::int?) → dynamic});
+  self::expect(124, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -35,16 +35,16 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t2;
     }
-    self::expect(value1, #lateGenericLocal#get.call());
-    self::expect(value2, #lateGenericLocal#set.call(value2));
-    self::expect(value2, #lateGenericLocal#get.call());
+    self::expect(value1, #lateGenericLocal#get(){() → T?});
+    self::expect(value2, #lateGenericLocal#set(value2){(T?) → dynamic});
+    self::expect(value2, #lateGenericLocal#get(){() → T?});
   }
-  local.call<core::int?>(null, 0);
-  local.call<core::int?>(0, null);
-  local.call<core::int>(null, 0);
-  local.call<core::int>(0, null);
+  local<core::int?>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int?>(0, null){(core::int?, core::int?) → Null};
+  local<core::int>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int>(0, null){(core::int?, core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.expect
index 12dcc96..a150002 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.expect
@@ -18,9 +18,9 @@
     #lateLocal#isSet = true;
     return #lateLocal = #t1;
   }
-  self::expect(123, #lateLocal#get.call());
-  self::expect(124, #lateLocal#set.call(124));
-  self::expect(124, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int?});
+  self::expect(124, #lateLocal#set(124){(core::int?) → dynamic});
+  self::expect(124, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -35,16 +35,16 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t2;
     }
-    self::expect(value1, #lateGenericLocal#get.call());
-    self::expect(value2, #lateGenericLocal#set.call(value2));
-    self::expect(value2, #lateGenericLocal#get.call());
+    self::expect(value1, #lateGenericLocal#get(){() → T?});
+    self::expect(value2, #lateGenericLocal#set(value2){(T?) → dynamic});
+    self::expect(value2, #lateGenericLocal#get(){() → T?});
   }
-  local.call<core::int?>(null, 0);
-  local.call<core::int?>(0, null);
-  local.call<core::int>(null, 0);
-  local.call<core::int>(0, null);
+  local<core::int?>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int?>(0, null){(core::int?, core::int?) → Null};
+  local<core::int>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int>(0, null){(core::int?, core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.transformed.expect
index 12dcc96..a150002 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.transformed.expect
@@ -18,9 +18,9 @@
     #lateLocal#isSet = true;
     return #lateLocal = #t1;
   }
-  self::expect(123, #lateLocal#get.call());
-  self::expect(124, #lateLocal#set.call(124));
-  self::expect(124, #lateLocal#get.call());
+  self::expect(123, #lateLocal#get(){() → core::int?});
+  self::expect(124, #lateLocal#set(124){(core::int?) → dynamic});
+  self::expect(124, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -35,16 +35,16 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t2;
     }
-    self::expect(value1, #lateGenericLocal#get.call());
-    self::expect(value2, #lateGenericLocal#set.call(value2));
-    self::expect(value2, #lateGenericLocal#get.call());
+    self::expect(value1, #lateGenericLocal#get(){() → T?});
+    self::expect(value2, #lateGenericLocal#set(value2){(T?) → dynamic});
+    self::expect(value2, #lateGenericLocal#get(){() → T?});
   }
-  local.call<core::int?>(null, 0);
-  local.call<core::int?>(0, null);
-  local.call<core::int>(null, 0);
-  local.call<core::int>(0, null);
+  local<core::int?>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int?>(0, null){(core::int?, core::int?) → Null};
+  local<core::int>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int>(0, null){(core::int?, core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.expect
index 7fa4edc..133710a 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.expect
@@ -12,9 +12,9 @@
     #lateLocal#isSet = true;
     return #lateLocal = #t1;
   }
-  self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  self::expect(123, #lateLocal#set.call(123));
-  self::expect(123, #lateLocal#get.call());
+  self::throws(() → core::int? => #lateLocal#get(){() → core::int?}, "Read value from uninitialized lateLocal");
+  self::expect(123, #lateLocal#set(123){(core::int?) → dynamic});
+  self::expect(123, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -24,23 +24,23 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t2;
     }
-    self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    self::expect(value, #lateGenericLocal#set.call(value));
-    self::expect(value, #lateGenericLocal#get.call());
+    self::throws(() → T? => #lateGenericLocal#get(){() → T?}, "Read value from uninitialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#set(value){(T?) → dynamic});
+    self::expect(value, #lateGenericLocal#get(){() → T?});
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(0);
-  local.call<core::int>(null);
-  local.call<core::int>(0);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(null){(core::int?) → Null};
+  local<core::int>(0){(core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.transformed.expect
index 7fa4edc..133710a 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.strong.transformed.expect
@@ -12,9 +12,9 @@
     #lateLocal#isSet = true;
     return #lateLocal = #t1;
   }
-  self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  self::expect(123, #lateLocal#set.call(123));
-  self::expect(123, #lateLocal#get.call());
+  self::throws(() → core::int? => #lateLocal#get(){() → core::int?}, "Read value from uninitialized lateLocal");
+  self::expect(123, #lateLocal#set(123){(core::int?) → dynamic});
+  self::expect(123, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -24,23 +24,23 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t2;
     }
-    self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    self::expect(value, #lateGenericLocal#set.call(value));
-    self::expect(value, #lateGenericLocal#get.call());
+    self::throws(() → T? => #lateGenericLocal#get(){() → T?}, "Read value from uninitialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#set(value){(T?) → dynamic});
+    self::expect(value, #lateGenericLocal#get(){() → T?});
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(0);
-  local.call<core::int>(null);
-  local.call<core::int>(0);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(null){(core::int?) → Null};
+  local<core::int>(0){(core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.expect
index 7fa4edc..133710a 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.expect
@@ -12,9 +12,9 @@
     #lateLocal#isSet = true;
     return #lateLocal = #t1;
   }
-  self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  self::expect(123, #lateLocal#set.call(123));
-  self::expect(123, #lateLocal#get.call());
+  self::throws(() → core::int? => #lateLocal#get(){() → core::int?}, "Read value from uninitialized lateLocal");
+  self::expect(123, #lateLocal#set(123){(core::int?) → dynamic});
+  self::expect(123, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -24,23 +24,23 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t2;
     }
-    self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    self::expect(value, #lateGenericLocal#set.call(value));
-    self::expect(value, #lateGenericLocal#get.call());
+    self::throws(() → T? => #lateGenericLocal#get(){() → T?}, "Read value from uninitialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#set(value){(T?) → dynamic});
+    self::expect(value, #lateGenericLocal#get(){() → T?});
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(0);
-  local.call<core::int>(null);
-  local.call<core::int>(0);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(null){(core::int?) → Null};
+  local<core::int>(0){(core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.transformed.expect
index 7fa4edc..133710a 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.transformed.expect
@@ -12,9 +12,9 @@
     #lateLocal#isSet = true;
     return #lateLocal = #t1;
   }
-  self::throws(() → core::int? => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  self::expect(123, #lateLocal#set.call(123));
-  self::expect(123, #lateLocal#get.call());
+  self::throws(() → core::int? => #lateLocal#get(){() → core::int?}, "Read value from uninitialized lateLocal");
+  self::expect(123, #lateLocal#set(123){(core::int?) → dynamic});
+  self::expect(123, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value) → Null {
     lowered T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
@@ -24,23 +24,23 @@
       #lateGenericLocal#isSet = true;
       return #lateGenericLocal = #t2;
     }
-    self::throws(() → T? => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    self::expect(value, #lateGenericLocal#set.call(value));
-    self::expect(value, #lateGenericLocal#get.call());
+    self::throws(() → T? => #lateGenericLocal#get(){() → T?}, "Read value from uninitialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#set(value){(T?) → dynamic});
+    self::expect(value, #lateGenericLocal#get(){() → T?});
   }
-  local.call<core::int?>(null);
-  local.call<core::int?>(0);
-  local.call<core::int>(null);
-  local.call<core::int>(0);
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(null){(core::int?) → Null};
+  local<core::int>(0){(core::int?) → Null};
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_override.dart.strong.expect
index 0dffea5..cc41c15 100644
--- a/pkg/front_end/testcases/late_lowering/late_override.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart.strong.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
   get implementedLateFieldDeclaredGetterSetter() → core::int
-    return let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter") : #t1{core::int};
   set implementedLateFieldDeclaredGetterSetter(core::int #t2) → void
     this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} = #t2;
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_override.dart.strong.transformed.expect
index 0dffea5..cc41c15 100644
--- a/pkg/front_end/testcases/late_lowering/late_override.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart.strong.transformed.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
   get implementedLateFieldDeclaredGetterSetter() → core::int
-    return let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter") : #t1{core::int};
   set implementedLateFieldDeclaredGetterSetter(core::int #t2) → void
     this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} = #t2;
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_override.dart.weak.expect
index 3f8b983..bb99080 100644
--- a/pkg/front_end/testcases/late_lowering/late_override.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart.weak.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   get implementedLateFieldDeclaredGetterSetter() → core::int
-    return this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter#isSet} ?{core::int} let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} in #t1{core::int} : throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter");
+    return this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter");
   set implementedLateFieldDeclaredGetterSetter(core::int #t2) → void {
     this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter#isSet} = true;
     this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} = #t2;
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_override.dart.weak.transformed.expect
index 3f8b983..bb99080 100644
--- a/pkg/front_end/testcases/late_lowering/late_override.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   get implementedLateFieldDeclaredGetterSetter() → core::int
-    return this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter#isSet} ?{core::int} let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} in #t1{core::int} : throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter");
+    return this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter");
   set implementedLateFieldDeclaredGetterSetter(core::int #t2) → void {
     this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter#isSet} = true;
     this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} = #t2;
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
index 0b84933..956e810 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
@@ -74,7 +74,7 @@
     : super core::Object::•()
     ;
   get b() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#b} in #t1.==(null) ?{core::int} this.{self::A::_#A#b} = this.{self::A::a}.{core::num::*}(2).{core::int::>>}(1) : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#b}{core::int?} in #t1 == null ?{core::int} this.{self::A::_#A#b} = this.{self::A::a}{core::int}.{core::num::*}(2){(core::num) → core::int}.{core::int::>>}(1){(core::int) → core::int} : #t1{core::int};
   set b(core::int #t2) → void
     this.{self::A::_#A#b} = #t2;
   method foo(core::int x) → dynamic {}
@@ -85,7 +85,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t3 = this.{self::B::_#B#x} in #t3.==(null) ?{core::int} let final core::int #t4 = 42 in this.{self::B::_#B#x}.==(null) ?{core::int} this.{self::B::_#B#x} = #t4 : throw new _in::LateError::fieldADI("x") : #t3{core::int};
+    return let final core::int? #t3 = this.{self::B::_#B#x}{core::int?} in #t3 == null ?{core::int} let final core::int #t4 = 42 in this.{self::B::_#B#x}{core::int?} == null ?{core::int} this.{self::B::_#B#x} = #t4 : throw new _in::LateError::fieldADI("x") : #t3{core::int};
 }
 class C extends core::Object {
   field core::int? _#C#x = null;
@@ -93,9 +93,9 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t5 = this.{self::C::_#C#x} in #t5.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t5{core::int};
+    return let final core::int? #t5 = this.{self::C::_#C#x}{core::int?} in #t5 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t5{core::int};
   set x(core::int #t6) → void
-    if(this.{self::C::_#C#x}.==(null))
+    if(this.{self::C::_#C#x}{core::int?} == null)
       this.{self::C::_#C#x} = #t6;
     else
       throw new _in::LateError::fieldAI("x");
@@ -118,7 +118,7 @@
     on dynamic catch(final dynamic late, final core::StackTrace e) {
     }
   }
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print("baz");
   }
   for (core::String s in <core::String>["baz"]) {
@@ -126,8 +126,8 @@
   }
   block {
     final core::List<core::int> #t7 = <core::int>[];
-    for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1))
-      #t7.{core::List::add}{Invariant}(i);
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t7.{core::List::add}(i){(core::int) → void};
   } =>#t7;
 }
 static method hest() → dynamic async {
@@ -139,21 +139,21 @@
 static method fisk() → dynamic async {
   lowered core::String? #s1;
   function #s1#get() → core::String
-    return let final core::String? #t8 = #s1 in #t8.==(null) ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+    return let final core::String? #t8 = #s1 in #t8 == null ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
                    ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String : #t8{core::String};
   function #s1#set(core::String #t9) → dynamic
     return #s1 = #t9;
   lowered core::String? #s2;
   function #s2#get() → core::String
-    return let final core::String? #t10 = #s2 in #t10.==(null) ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+    return let final core::String? #t10 = #s2 in #t10 == null ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
                              ^^^^^"}${#C1}" : #t10{core::String};
   function #s2#set(core::String #t11) → dynamic
     return #s2 = #t11;
   lowered core::Function? #f;
   function #f#get() → core::Function
-    return let final core::Function? #t12 = #f in #t12.==(null) ?{core::Function} #f = () → asy::Future<dynamic> async => await self::hest() : #t12{core::Function};
+    return let final core::Function? #t12 = #f in #t12 == null ?{core::Function} #f = () → asy::Future<dynamic> async => await self::hest() : #t12{core::Function};
   function #f#set(core::Function #t13) → dynamic
     return #f = #t13;
 }
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
index 12f0ed3..d99c70a 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
@@ -74,7 +74,7 @@
     : super core::Object::•()
     ;
   get b() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#b} in #t1.==(null) ?{core::int} this.{self::A::_#A#b} = this.{self::A::a}.{core::num::*}(2).{core::int::>>}(1) : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#b}{core::int?} in #t1 == null ?{core::int} this.{self::A::_#A#b} = this.{self::A::a}{core::int}.{core::num::*}(2){(core::num) → core::int}.{core::int::>>}(1){(core::int) → core::int} : #t1{core::int};
   set b(core::int #t2) → void
     this.{self::A::_#A#b} = #t2;
   method foo(core::int x) → dynamic {}
@@ -85,7 +85,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t3 = this.{self::B::_#B#x} in #t3.==(null) ?{core::int} let final core::int #t4 = 42 in this.{self::B::_#B#x}.==(null) ?{core::int} this.{self::B::_#B#x} = #t4 : throw new _in::LateError::fieldADI("x") : #t3{core::int};
+    return let final core::int? #t3 = this.{self::B::_#B#x}{core::int?} in #t3 == null ?{core::int} let final core::int #t4 = 42 in this.{self::B::_#B#x}{core::int?} == null ?{core::int} this.{self::B::_#B#x} = #t4 : throw new _in::LateError::fieldADI("x") : #t3{core::int};
 }
 class C extends core::Object {
   field core::int? _#C#x = null;
@@ -93,9 +93,9 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t5 = this.{self::C::_#C#x} in #t5.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t5{core::int};
+    return let final core::int? #t5 = this.{self::C::_#C#x}{core::int?} in #t5 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t5{core::int};
   set x(core::int #t6) → void
-    if(this.{self::C::_#C#x}.==(null))
+    if(this.{self::C::_#C#x}{core::int?} == null)
       this.{self::C::_#C#x} = #t6;
     else
       throw new _in::LateError::fieldAI("x");
@@ -118,7 +118,7 @@
     on dynamic catch(final dynamic late, final core::StackTrace e) {
     }
   }
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print("baz");
   }
   {
@@ -132,8 +132,8 @@
   }
   block {
     final core::List<core::int> #t7 = core::_GrowableList::•<core::int>(0);
-    for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1))
-      #t7.{core::List::add}{Invariant}(i);
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t7.{core::List::add}(i){(core::int) → void};
   } =>#t7;
 }
 static method hest() → dynamic /* originally async */ {
@@ -204,21 +204,21 @@
       {
         lowered core::String? #s1;
         function #s1#get() → core::String
-          return let final core::String? #t11 = #s1 in #t11.==(null) ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+          return let final core::String? #t11 = #s1 in #t11 == null ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
                    ^^^^^" : #t11{core::String};
         function #s1#set(core::String #t12) → dynamic
           return #s1 = #t12;
         lowered core::String? #s2;
         function #s2#get() → core::String
-          return let final core::String? #t13 = #s2 in #t13.==(null) ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+          return let final core::String? #t13 = #s2 in #t13 == null ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
                              ^^^^^"}${#C1}" : #t13{core::String};
         function #s2#set(core::String #t14) → dynamic
           return #s2 = #t14;
         lowered core::Function? #f;
         function #f#get() → core::Function
-          return let final core::Function? #t15 = #f in #t15.==(null) ?{core::Function} #f = () → asy::Future<dynamic> /* originally async */ {
+          return let final core::Function? #t15 = #f in #t15 == null ?{core::Function} #f = () → asy::Future<dynamic> /* originally async */ {
             final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
             core::bool* :is_sync = false;
             FutureOr<dynamic>? :return_value;
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
index 7123dd80..4ce79cc 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
@@ -75,11 +75,11 @@
     : super core::Object::•()
     ;
   get b() → core::int {
-    if(!this.{self::A::_#A#b#isSet}) {
-      this.{self::A::_#A#b} = this.{self::A::a}.{core::num::*}(2).{core::int::>>}(1);
+    if(!this.{self::A::_#A#b#isSet}{core::bool}) {
+      this.{self::A::_#A#b} = this.{self::A::a}{core::int}.{core::num::*}(2){(core::num) → core::int}.{core::int::>>}(1){(core::int) → core::int};
       this.{self::A::_#A#b#isSet} = true;
     }
-    return let final core::int? #t1 = this.{self::A::_#A#b} in #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#b}{core::int?} in #t1{core::int};
   }
   set b(core::int #t2) → void {
     this.{self::A::_#A#b#isSet} = true;
@@ -94,14 +94,14 @@
     : super core::Object::•()
     ;
   get x() → core::int {
-    if(!this.{self::B::_#B#x#isSet}) {
+    if(!this.{self::B::_#B#x#isSet}{core::bool}) {
       final core::int #t3 = 42;
-      if(this.{self::B::_#B#x#isSet})
+      if(this.{self::B::_#B#x#isSet}{core::bool})
         throw new _in::LateError::fieldADI("x");
       this.{self::B::_#B#x} = #t3;
       this.{self::B::_#B#x#isSet} = true;
     }
-    return let final core::int? #t4 = this.{self::B::_#B#x} in #t4{core::int};
+    return let final core::int? #t4 = this.{self::B::_#B#x}{core::int?} in #t4{core::int};
   }
 }
 class C extends core::Object {
@@ -111,9 +111,9 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{self::C::_#C#x#isSet} ?{core::int} let final core::int? #t5 = this.{self::C::_#C#x} in #t5{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{self::C::_#C#x#isSet}{core::bool} ?{core::int} let final core::int? #t5 = this.{self::C::_#C#x}{core::int?} in #t5{core::int} : throw new _in::LateError::fieldNI("x");
   set x(core::int #t6) → void
-    if(this.{self::C::_#C#x#isSet})
+    if(this.{self::C::_#C#x#isSet}{core::bool})
       throw new _in::LateError::fieldAI("x");
     else {
       this.{self::C::_#C#x#isSet} = true;
@@ -138,7 +138,7 @@
     on dynamic catch(final dynamic late, final core::StackTrace e) {
     }
   }
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print("baz");
   }
   for (core::String s in <core::String>["baz"]) {
@@ -146,8 +146,8 @@
   }
   block {
     final core::List<core::int> #t7 = <core::int>[];
-    for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1))
-      #t7.{core::List::add}{Invariant}(i);
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t7.{core::List::add}(i){(core::int) → void};
   } =>#t7;
 }
 static method hest() → dynamic async {
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.outline.expect
index 478f783..0c2d04f 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.outline.expect
@@ -34,14 +34,14 @@
     : super core::Object::•()
     ;
   get x() → core::int {
-    if(!this.{self::B::_#B#x#isSet}) {
+    if(!this.{self::B::_#B#x#isSet}{core::bool}) {
       final core::int #t2 = 42;
-      if(this.{self::B::_#B#x#isSet})
+      if(this.{self::B::_#B#x#isSet}{core::bool})
         throw new _in::LateError::fieldADI("x");
       this.{self::B::_#B#x} = #t2;
       this.{self::B::_#B#x#isSet} = true;
     }
-    return let final core::int? #t3 = this.{self::B::_#B#x} in #t3{core::int};
+    return let final core::int? #t3 = this.{self::B::_#B#x}{core::int?} in #t3{core::int};
   }
 }
 class C extends core::Object {
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
index 3bcf2b7..daa7970 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
@@ -75,11 +75,11 @@
     : super core::Object::•()
     ;
   get b() → core::int {
-    if(!this.{self::A::_#A#b#isSet}) {
-      this.{self::A::_#A#b} = this.{self::A::a}.{core::num::*}(2).{core::int::>>}(1);
+    if(!this.{self::A::_#A#b#isSet}{core::bool}) {
+      this.{self::A::_#A#b} = this.{self::A::a}{core::int}.{core::num::*}(2){(core::num) → core::int}.{core::int::>>}(1){(core::int) → core::int};
       this.{self::A::_#A#b#isSet} = true;
     }
-    return let final core::int? #t1 = this.{self::A::_#A#b} in #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#b}{core::int?} in #t1{core::int};
   }
   set b(core::int #t2) → void {
     this.{self::A::_#A#b#isSet} = true;
@@ -94,14 +94,14 @@
     : super core::Object::•()
     ;
   get x() → core::int {
-    if(!this.{self::B::_#B#x#isSet}) {
+    if(!this.{self::B::_#B#x#isSet}{core::bool}) {
       final core::int #t3 = 42;
-      if(this.{self::B::_#B#x#isSet})
+      if(this.{self::B::_#B#x#isSet}{core::bool})
         throw new _in::LateError::fieldADI("x");
       this.{self::B::_#B#x} = #t3;
       this.{self::B::_#B#x#isSet} = true;
     }
-    return let final core::int? #t4 = this.{self::B::_#B#x} in #t4{core::int};
+    return let final core::int? #t4 = this.{self::B::_#B#x}{core::int?} in #t4{core::int};
   }
 }
 class C extends core::Object {
@@ -111,9 +111,9 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{self::C::_#C#x#isSet} ?{core::int} let final core::int? #t5 = this.{self::C::_#C#x} in #t5{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{self::C::_#C#x#isSet}{core::bool} ?{core::int} let final core::int? #t5 = this.{self::C::_#C#x}{core::int?} in #t5{core::int} : throw new _in::LateError::fieldNI("x");
   set x(core::int #t6) → void
-    if(this.{self::C::_#C#x#isSet})
+    if(this.{self::C::_#C#x#isSet}{core::bool})
       throw new _in::LateError::fieldAI("x");
     else {
       this.{self::C::_#C#x#isSet} = true;
@@ -138,7 +138,7 @@
     on dynamic catch(final dynamic late, final core::StackTrace e) {
     }
   }
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print("baz");
   }
   {
@@ -152,8 +152,8 @@
   }
   block {
     final core::List<core::int> #t7 = core::_GrowableList::•<core::int>(0);
-    for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1))
-      #t7.{core::List::add}{Invariant}(i);
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t7.{core::List::add}(i){(core::int) → void};
   } =>#t7;
 }
 static method hest() → dynamic /* originally async */ {
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.expect
index 9e954be..83082ba 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.expect
@@ -24,10 +24,10 @@
   non::Class::staticFinalField = null;
   non::expect(null, non::topLevelField);
   non::expect(null, non::finalTopLevelField);
-  non::expect(null, c.{non::Class::instanceField});
-  non::expect(null, c.{non::Class::finalInstanceField});
-  non::expect(null, c.{non::Class::instanceTypeVariable});
-  non::expect(null, c.{non::Class::finalInstanceTypeVariable});
+  non::expect(null, c.{non::Class::instanceField}{core::int*});
+  non::expect(null, c.{non::Class::finalInstanceField}{dynamic});
+  non::expect(null, c.{non::Class::instanceTypeVariable}{core::int*});
+  non::expect(null, c.{non::Class::finalInstanceTypeVariable}{core::int*});
   non::expect(null, non::Class::staticField);
   non::expect(null, non::Class::staticFinalField);
   non::throws(() → Null => non::finalTopLevelField = null);
@@ -55,31 +55,31 @@
     : super core::Object::•()
     ;
   get instanceField() → core::int
-    return let final core::int? #t1 = this.{non::Class::_#Class#instanceField} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("instanceField") : #t1{core::int};
+    return let final core::int? #t1 = this.{non::Class::_#Class#instanceField}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("instanceField") : #t1{core::int};
   set instanceField(core::int #t2) → void
     this.{non::Class::_#Class#instanceField} = #t2;
   get finalInstanceField() → dynamic
-    return this.{non::Class::_#Class#finalInstanceField#isSet} ?{dynamic} this.{non::Class::_#Class#finalInstanceField} : throw new _in::LateError::fieldNI("finalInstanceField");
+    return this.{non::Class::_#Class#finalInstanceField#isSet}{core::bool} ?{dynamic} this.{non::Class::_#Class#finalInstanceField}{dynamic} : throw new _in::LateError::fieldNI("finalInstanceField");
   set finalInstanceField(dynamic #t3) → void
-    if(this.{non::Class::_#Class#finalInstanceField#isSet})
+    if(this.{non::Class::_#Class#finalInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("finalInstanceField");
     else {
       this.{non::Class::_#Class#finalInstanceField#isSet} = true;
       this.{non::Class::_#Class#finalInstanceField} = #t3;
     }
   get instanceTypeVariable() → non::Class::T
-    return let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable} in #t4.==(null) ?{non::Class::T} throw new _in::LateError::fieldNI("instanceTypeVariable") : #t4{non::Class::T};
+    return let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable}{non::Class::T?} in #t4 == null ?{non::Class::T} throw new _in::LateError::fieldNI("instanceTypeVariable") : #t4{non::Class::T};
   set instanceTypeVariable(generic-covariant-impl non::Class::T #t5) → void
     this.{non::Class::_#Class#instanceTypeVariable} = #t5;
   get finalInstanceTypeVariable() → non::Class::T
-    return let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable} in #t6.==(null) ?{non::Class::T} throw new _in::LateError::fieldNI("finalInstanceTypeVariable") : #t6{non::Class::T};
+    return let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable}{non::Class::T?} in #t6 == null ?{non::Class::T} throw new _in::LateError::fieldNI("finalInstanceTypeVariable") : #t6{non::Class::T};
   set finalInstanceTypeVariable(non::Class::T #t7) → void
-    if(this.{non::Class::_#Class#finalInstanceTypeVariable}.==(null))
+    if(this.{non::Class::_#Class#finalInstanceTypeVariable}{non::Class::T?} == null)
       this.{non::Class::_#Class#finalInstanceTypeVariable} = #t7;
     else
       throw new _in::LateError::fieldAI("finalInstanceTypeVariable");
   static get staticField() → core::int
-    return let final core::int? #t8 = non::Class::_#staticField in #t8.==(null) ?{core::int} throw new _in::LateError::fieldNI("staticField") : #t8{core::int};
+    return let final core::int? #t8 = non::Class::_#staticField in #t8 == null ?{core::int} throw new _in::LateError::fieldNI("staticField") : #t8{core::int};
   static set staticField(core::int #t9) → void
     non::Class::_#staticField = #t9;
   static get staticFinalField() → dynamic
@@ -96,7 +96,7 @@
 static field dynamic _#finalTopLevelField = null;
 static field core::bool _#finalTopLevelField#isSet = false;
 static get topLevelField() → core::int
-  return let final core::int? #t11 = non::_#topLevelField in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("topLevelField") : #t11{core::int};
+  return let final core::int? #t11 = non::_#topLevelField in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("topLevelField") : #t11{core::int};
 static set topLevelField(core::int #t12) → void
   non::_#topLevelField = #t12;
 static get finalTopLevelField() → dynamic
@@ -111,7 +111,7 @@
 static method method<T extends core::Object>(core::bool b, core::int i, non::method::T t) → dynamic {
   lowered core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t14 = #local in #t14.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t14{core::int};
+    return let final core::int? #t14 = #local in #t14 == null ?{core::int} throw new _in::LateError::localNI("local") : #t14{core::int};
   function #local#set(core::int #t15) → dynamic
     return #local = #t15;
   lowered final dynamic #finalLocal;
@@ -127,37 +127,37 @@
     }
   lowered non::method::T? #localTypeVariable;
   function #localTypeVariable#get() → non::method::T
-    return let final non::method::T? #t17 = #localTypeVariable in #t17.==(null) ?{non::method::T} throw new _in::LateError::localNI("localTypeVariable") : #t17{non::method::T};
+    return let final non::method::T? #t17 = #localTypeVariable in #t17 == null ?{non::method::T} throw new _in::LateError::localNI("localTypeVariable") : #t17{non::method::T};
   function #localTypeVariable#set(non::method::T #t18) → dynamic
     return #localTypeVariable = #t18;
   lowered final non::method::T? #finalLocalTypeVariable;
   function #finalLocalTypeVariable#get() → non::method::T
-    return let final non::method::T? #t19 = #finalLocalTypeVariable in #t19.==(null) ?{non::method::T} throw new _in::LateError::localNI("finalLocalTypeVariable") : #t19{non::method::T};
+    return let final non::method::T? #t19 = #finalLocalTypeVariable in #t19 == null ?{non::method::T} throw new _in::LateError::localNI("finalLocalTypeVariable") : #t19{non::method::T};
   function #finalLocalTypeVariable#set(non::method::T #t20) → dynamic
-    if(#finalLocalTypeVariable.==(null))
+    if(#finalLocalTypeVariable == null)
       return #finalLocalTypeVariable = #t20;
     else
       throw new _in::LateError::localAI("finalLocalTypeVariable");
   if(b) {
-    #local#set.call(i);
-    #finalLocal#set.call(i);
-    #localTypeVariable#set.call(t);
-    #finalLocalTypeVariable#set.call(t);
-    non::expect(i, #local#get.call());
-    non::expect(i, #finalLocal#get.call());
-    non::expect(t, #localTypeVariable#get.call());
-    non::expect(t, #finalLocalTypeVariable#get.call());
+    #local#set(i){(core::int) → dynamic};
+    #finalLocal#set(i){(dynamic) → dynamic};
+    #localTypeVariable#set(t){(non::method::T) → dynamic};
+    #finalLocalTypeVariable#set(t){(non::method::T) → dynamic};
+    non::expect(i, #local#get(){() → core::int});
+    non::expect(i, #finalLocal#get(){() → dynamic});
+    non::expect(t, #localTypeVariable#get(){() → non::method::T});
+    non::expect(t, #finalLocalTypeVariable#get(){() → non::method::T});
   }
-  non::throws(() → void => #finalLocal#set.call(i));
-  non::throws(() → void => #finalLocalTypeVariable#set.call(t));
+  non::throws(() → void => #finalLocal#set(i){(dynamic) → dynamic});
+  non::throws(() → void => #finalLocalTypeVariable#set(t){(non::method::T) → dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.transformed.expect
index 9e954be..83082ba 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.transformed.expect
@@ -24,10 +24,10 @@
   non::Class::staticFinalField = null;
   non::expect(null, non::topLevelField);
   non::expect(null, non::finalTopLevelField);
-  non::expect(null, c.{non::Class::instanceField});
-  non::expect(null, c.{non::Class::finalInstanceField});
-  non::expect(null, c.{non::Class::instanceTypeVariable});
-  non::expect(null, c.{non::Class::finalInstanceTypeVariable});
+  non::expect(null, c.{non::Class::instanceField}{core::int*});
+  non::expect(null, c.{non::Class::finalInstanceField}{dynamic});
+  non::expect(null, c.{non::Class::instanceTypeVariable}{core::int*});
+  non::expect(null, c.{non::Class::finalInstanceTypeVariable}{core::int*});
   non::expect(null, non::Class::staticField);
   non::expect(null, non::Class::staticFinalField);
   non::throws(() → Null => non::finalTopLevelField = null);
@@ -55,31 +55,31 @@
     : super core::Object::•()
     ;
   get instanceField() → core::int
-    return let final core::int? #t1 = this.{non::Class::_#Class#instanceField} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("instanceField") : #t1{core::int};
+    return let final core::int? #t1 = this.{non::Class::_#Class#instanceField}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("instanceField") : #t1{core::int};
   set instanceField(core::int #t2) → void
     this.{non::Class::_#Class#instanceField} = #t2;
   get finalInstanceField() → dynamic
-    return this.{non::Class::_#Class#finalInstanceField#isSet} ?{dynamic} this.{non::Class::_#Class#finalInstanceField} : throw new _in::LateError::fieldNI("finalInstanceField");
+    return this.{non::Class::_#Class#finalInstanceField#isSet}{core::bool} ?{dynamic} this.{non::Class::_#Class#finalInstanceField}{dynamic} : throw new _in::LateError::fieldNI("finalInstanceField");
   set finalInstanceField(dynamic #t3) → void
-    if(this.{non::Class::_#Class#finalInstanceField#isSet})
+    if(this.{non::Class::_#Class#finalInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("finalInstanceField");
     else {
       this.{non::Class::_#Class#finalInstanceField#isSet} = true;
       this.{non::Class::_#Class#finalInstanceField} = #t3;
     }
   get instanceTypeVariable() → non::Class::T
-    return let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable} in #t4.==(null) ?{non::Class::T} throw new _in::LateError::fieldNI("instanceTypeVariable") : #t4{non::Class::T};
+    return let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable}{non::Class::T?} in #t4 == null ?{non::Class::T} throw new _in::LateError::fieldNI("instanceTypeVariable") : #t4{non::Class::T};
   set instanceTypeVariable(generic-covariant-impl non::Class::T #t5) → void
     this.{non::Class::_#Class#instanceTypeVariable} = #t5;
   get finalInstanceTypeVariable() → non::Class::T
-    return let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable} in #t6.==(null) ?{non::Class::T} throw new _in::LateError::fieldNI("finalInstanceTypeVariable") : #t6{non::Class::T};
+    return let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable}{non::Class::T?} in #t6 == null ?{non::Class::T} throw new _in::LateError::fieldNI("finalInstanceTypeVariable") : #t6{non::Class::T};
   set finalInstanceTypeVariable(non::Class::T #t7) → void
-    if(this.{non::Class::_#Class#finalInstanceTypeVariable}.==(null))
+    if(this.{non::Class::_#Class#finalInstanceTypeVariable}{non::Class::T?} == null)
       this.{non::Class::_#Class#finalInstanceTypeVariable} = #t7;
     else
       throw new _in::LateError::fieldAI("finalInstanceTypeVariable");
   static get staticField() → core::int
-    return let final core::int? #t8 = non::Class::_#staticField in #t8.==(null) ?{core::int} throw new _in::LateError::fieldNI("staticField") : #t8{core::int};
+    return let final core::int? #t8 = non::Class::_#staticField in #t8 == null ?{core::int} throw new _in::LateError::fieldNI("staticField") : #t8{core::int};
   static set staticField(core::int #t9) → void
     non::Class::_#staticField = #t9;
   static get staticFinalField() → dynamic
@@ -96,7 +96,7 @@
 static field dynamic _#finalTopLevelField = null;
 static field core::bool _#finalTopLevelField#isSet = false;
 static get topLevelField() → core::int
-  return let final core::int? #t11 = non::_#topLevelField in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("topLevelField") : #t11{core::int};
+  return let final core::int? #t11 = non::_#topLevelField in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("topLevelField") : #t11{core::int};
 static set topLevelField(core::int #t12) → void
   non::_#topLevelField = #t12;
 static get finalTopLevelField() → dynamic
@@ -111,7 +111,7 @@
 static method method<T extends core::Object>(core::bool b, core::int i, non::method::T t) → dynamic {
   lowered core::int? #local;
   function #local#get() → core::int
-    return let final core::int? #t14 = #local in #t14.==(null) ?{core::int} throw new _in::LateError::localNI("local") : #t14{core::int};
+    return let final core::int? #t14 = #local in #t14 == null ?{core::int} throw new _in::LateError::localNI("local") : #t14{core::int};
   function #local#set(core::int #t15) → dynamic
     return #local = #t15;
   lowered final dynamic #finalLocal;
@@ -127,37 +127,37 @@
     }
   lowered non::method::T? #localTypeVariable;
   function #localTypeVariable#get() → non::method::T
-    return let final non::method::T? #t17 = #localTypeVariable in #t17.==(null) ?{non::method::T} throw new _in::LateError::localNI("localTypeVariable") : #t17{non::method::T};
+    return let final non::method::T? #t17 = #localTypeVariable in #t17 == null ?{non::method::T} throw new _in::LateError::localNI("localTypeVariable") : #t17{non::method::T};
   function #localTypeVariable#set(non::method::T #t18) → dynamic
     return #localTypeVariable = #t18;
   lowered final non::method::T? #finalLocalTypeVariable;
   function #finalLocalTypeVariable#get() → non::method::T
-    return let final non::method::T? #t19 = #finalLocalTypeVariable in #t19.==(null) ?{non::method::T} throw new _in::LateError::localNI("finalLocalTypeVariable") : #t19{non::method::T};
+    return let final non::method::T? #t19 = #finalLocalTypeVariable in #t19 == null ?{non::method::T} throw new _in::LateError::localNI("finalLocalTypeVariable") : #t19{non::method::T};
   function #finalLocalTypeVariable#set(non::method::T #t20) → dynamic
-    if(#finalLocalTypeVariable.==(null))
+    if(#finalLocalTypeVariable == null)
       return #finalLocalTypeVariable = #t20;
     else
       throw new _in::LateError::localAI("finalLocalTypeVariable");
   if(b) {
-    #local#set.call(i);
-    #finalLocal#set.call(i);
-    #localTypeVariable#set.call(t);
-    #finalLocalTypeVariable#set.call(t);
-    non::expect(i, #local#get.call());
-    non::expect(i, #finalLocal#get.call());
-    non::expect(t, #localTypeVariable#get.call());
-    non::expect(t, #finalLocalTypeVariable#get.call());
+    #local#set(i){(core::int) → dynamic};
+    #finalLocal#set(i){(dynamic) → dynamic};
+    #localTypeVariable#set(t){(non::method::T) → dynamic};
+    #finalLocalTypeVariable#set(t){(non::method::T) → dynamic};
+    non::expect(i, #local#get(){() → core::int});
+    non::expect(i, #finalLocal#get(){() → dynamic});
+    non::expect(t, #localTypeVariable#get(){() → non::method::T});
+    non::expect(t, #finalLocalTypeVariable#get(){() → non::method::T});
   }
-  non::throws(() → void => #finalLocal#set.call(i));
-  non::throws(() → void => #finalLocalTypeVariable#set.call(t));
+  non::throws(() → void => #finalLocal#set(i){(dynamic) → dynamic});
+  non::throws(() → void => #finalLocalTypeVariable#set(t){(non::method::T) → dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.expect
index f6a85c7..18d4aaa 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.expect
@@ -17,10 +17,10 @@
   non::Class::staticFinalField = null;
   non::expect(null, non::topLevelField);
   non::expect(null, non::finalTopLevelField);
-  non::expect(null, c.{non::Class::instanceField});
-  non::expect(null, c.{non::Class::finalInstanceField});
-  non::expect(null, c.{non::Class::instanceTypeVariable});
-  non::expect(null, c.{non::Class::finalInstanceTypeVariable});
+  non::expect(null, c.{non::Class::instanceField}{core::int*});
+  non::expect(null, c.{non::Class::finalInstanceField}{dynamic});
+  non::expect(null, c.{non::Class::instanceTypeVariable}{core::int*});
+  non::expect(null, c.{non::Class::finalInstanceTypeVariable}{core::int*});
   non::expect(null, non::Class::staticField);
   non::expect(null, non::Class::staticFinalField);
   non::throws(() → Null => non::finalTopLevelField = null);
@@ -52,30 +52,30 @@
     : super core::Object::•()
     ;
   get instanceField() → core::int
-    return this.{non::Class::_#Class#instanceField#isSet} ?{core::int} let final core::int? #t1 = this.{non::Class::_#Class#instanceField} in #t1{core::int} : throw new _in::LateError::fieldNI("instanceField");
+    return this.{non::Class::_#Class#instanceField#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{non::Class::_#Class#instanceField}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("instanceField");
   set instanceField(core::int #t2) → void {
     this.{non::Class::_#Class#instanceField#isSet} = true;
     this.{non::Class::_#Class#instanceField} = #t2;
   }
   get finalInstanceField() → dynamic
-    return this.{non::Class::_#Class#finalInstanceField#isSet} ?{dynamic} this.{non::Class::_#Class#finalInstanceField} : throw new _in::LateError::fieldNI("finalInstanceField");
+    return this.{non::Class::_#Class#finalInstanceField#isSet}{core::bool} ?{dynamic} this.{non::Class::_#Class#finalInstanceField}{dynamic} : throw new _in::LateError::fieldNI("finalInstanceField");
   set finalInstanceField(dynamic #t3) → void
-    if(this.{non::Class::_#Class#finalInstanceField#isSet})
+    if(this.{non::Class::_#Class#finalInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("finalInstanceField");
     else {
       this.{non::Class::_#Class#finalInstanceField#isSet} = true;
       this.{non::Class::_#Class#finalInstanceField} = #t3;
     }
   get instanceTypeVariable() → non::Class::T
-    return this.{non::Class::_#Class#instanceTypeVariable#isSet} ?{non::Class::T} let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable} in #t4{non::Class::T} : throw new _in::LateError::fieldNI("instanceTypeVariable");
+    return this.{non::Class::_#Class#instanceTypeVariable#isSet}{core::bool} ?{non::Class::T} let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable}{non::Class::T?} in #t4{non::Class::T} : throw new _in::LateError::fieldNI("instanceTypeVariable");
   set instanceTypeVariable(generic-covariant-impl non::Class::T #t5) → void {
     this.{non::Class::_#Class#instanceTypeVariable#isSet} = true;
     this.{non::Class::_#Class#instanceTypeVariable} = #t5;
   }
   get finalInstanceTypeVariable() → non::Class::T
-    return this.{non::Class::_#Class#finalInstanceTypeVariable#isSet} ?{non::Class::T} let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable} in #t6{non::Class::T} : throw new _in::LateError::fieldNI("finalInstanceTypeVariable");
+    return this.{non::Class::_#Class#finalInstanceTypeVariable#isSet}{core::bool} ?{non::Class::T} let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable}{non::Class::T?} in #t6{non::Class::T} : throw new _in::LateError::fieldNI("finalInstanceTypeVariable");
   set finalInstanceTypeVariable(non::Class::T #t7) → void
-    if(this.{non::Class::_#Class#finalInstanceTypeVariable#isSet})
+    if(this.{non::Class::_#Class#finalInstanceTypeVariable#isSet}{core::bool})
       throw new _in::LateError::fieldAI("finalInstanceTypeVariable");
     else {
       this.{non::Class::_#Class#finalInstanceTypeVariable#isSet} = true;
@@ -156,25 +156,25 @@
       return #finalLocalTypeVariable = #t17;
     }
   if(b) {
-    #local#set.call(i);
-    #finalLocal#set.call(i);
-    #localTypeVariable#set.call(t);
-    #finalLocalTypeVariable#set.call(t);
-    non::expect(i, #local#get.call());
-    non::expect(i, #finalLocal#get.call());
-    non::expect(t, #localTypeVariable#get.call());
-    non::expect(t, #finalLocalTypeVariable#get.call());
+    #local#set(i){(core::int) → dynamic};
+    #finalLocal#set(i){(dynamic) → dynamic};
+    #localTypeVariable#set(t){(non::method::T) → dynamic};
+    #finalLocalTypeVariable#set(t){(non::method::T) → dynamic};
+    non::expect(i, #local#get(){() → core::int});
+    non::expect(i, #finalLocal#get(){() → dynamic});
+    non::expect(t, #localTypeVariable#get(){() → non::method::T});
+    non::expect(t, #finalLocalTypeVariable#get(){() → non::method::T});
   }
-  non::throws(() → void => #finalLocal#set.call(i));
-  non::throws(() → void => #finalLocalTypeVariable#set.call(t));
+  non::throws(() → void => #finalLocal#set(i){(dynamic) → dynamic});
+  non::throws(() → void => #finalLocalTypeVariable#set(t){(non::method::T) → dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.transformed.expect
index f6a85c7..18d4aaa 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.transformed.expect
@@ -17,10 +17,10 @@
   non::Class::staticFinalField = null;
   non::expect(null, non::topLevelField);
   non::expect(null, non::finalTopLevelField);
-  non::expect(null, c.{non::Class::instanceField});
-  non::expect(null, c.{non::Class::finalInstanceField});
-  non::expect(null, c.{non::Class::instanceTypeVariable});
-  non::expect(null, c.{non::Class::finalInstanceTypeVariable});
+  non::expect(null, c.{non::Class::instanceField}{core::int*});
+  non::expect(null, c.{non::Class::finalInstanceField}{dynamic});
+  non::expect(null, c.{non::Class::instanceTypeVariable}{core::int*});
+  non::expect(null, c.{non::Class::finalInstanceTypeVariable}{core::int*});
   non::expect(null, non::Class::staticField);
   non::expect(null, non::Class::staticFinalField);
   non::throws(() → Null => non::finalTopLevelField = null);
@@ -52,30 +52,30 @@
     : super core::Object::•()
     ;
   get instanceField() → core::int
-    return this.{non::Class::_#Class#instanceField#isSet} ?{core::int} let final core::int? #t1 = this.{non::Class::_#Class#instanceField} in #t1{core::int} : throw new _in::LateError::fieldNI("instanceField");
+    return this.{non::Class::_#Class#instanceField#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{non::Class::_#Class#instanceField}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("instanceField");
   set instanceField(core::int #t2) → void {
     this.{non::Class::_#Class#instanceField#isSet} = true;
     this.{non::Class::_#Class#instanceField} = #t2;
   }
   get finalInstanceField() → dynamic
-    return this.{non::Class::_#Class#finalInstanceField#isSet} ?{dynamic} this.{non::Class::_#Class#finalInstanceField} : throw new _in::LateError::fieldNI("finalInstanceField");
+    return this.{non::Class::_#Class#finalInstanceField#isSet}{core::bool} ?{dynamic} this.{non::Class::_#Class#finalInstanceField}{dynamic} : throw new _in::LateError::fieldNI("finalInstanceField");
   set finalInstanceField(dynamic #t3) → void
-    if(this.{non::Class::_#Class#finalInstanceField#isSet})
+    if(this.{non::Class::_#Class#finalInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("finalInstanceField");
     else {
       this.{non::Class::_#Class#finalInstanceField#isSet} = true;
       this.{non::Class::_#Class#finalInstanceField} = #t3;
     }
   get instanceTypeVariable() → non::Class::T
-    return this.{non::Class::_#Class#instanceTypeVariable#isSet} ?{non::Class::T} let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable} in #t4{non::Class::T} : throw new _in::LateError::fieldNI("instanceTypeVariable");
+    return this.{non::Class::_#Class#instanceTypeVariable#isSet}{core::bool} ?{non::Class::T} let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable}{non::Class::T?} in #t4{non::Class::T} : throw new _in::LateError::fieldNI("instanceTypeVariable");
   set instanceTypeVariable(generic-covariant-impl non::Class::T #t5) → void {
     this.{non::Class::_#Class#instanceTypeVariable#isSet} = true;
     this.{non::Class::_#Class#instanceTypeVariable} = #t5;
   }
   get finalInstanceTypeVariable() → non::Class::T
-    return this.{non::Class::_#Class#finalInstanceTypeVariable#isSet} ?{non::Class::T} let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable} in #t6{non::Class::T} : throw new _in::LateError::fieldNI("finalInstanceTypeVariable");
+    return this.{non::Class::_#Class#finalInstanceTypeVariable#isSet}{core::bool} ?{non::Class::T} let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable}{non::Class::T?} in #t6{non::Class::T} : throw new _in::LateError::fieldNI("finalInstanceTypeVariable");
   set finalInstanceTypeVariable(non::Class::T #t7) → void
-    if(this.{non::Class::_#Class#finalInstanceTypeVariable#isSet})
+    if(this.{non::Class::_#Class#finalInstanceTypeVariable#isSet}{core::bool})
       throw new _in::LateError::fieldAI("finalInstanceTypeVariable");
     else {
       this.{non::Class::_#Class#finalInstanceTypeVariable#isSet} = true;
@@ -156,25 +156,25 @@
       return #finalLocalTypeVariable = #t17;
     }
   if(b) {
-    #local#set.call(i);
-    #finalLocal#set.call(i);
-    #localTypeVariable#set.call(t);
-    #finalLocalTypeVariable#set.call(t);
-    non::expect(i, #local#get.call());
-    non::expect(i, #finalLocal#get.call());
-    non::expect(t, #localTypeVariable#get.call());
-    non::expect(t, #finalLocalTypeVariable#get.call());
+    #local#set(i){(core::int) → dynamic};
+    #finalLocal#set(i){(dynamic) → dynamic};
+    #localTypeVariable#set(t){(non::method::T) → dynamic};
+    #finalLocalTypeVariable#set(t){(non::method::T) → dynamic};
+    non::expect(i, #local#get(){() → core::int});
+    non::expect(i, #finalLocal#get(){() → dynamic});
+    non::expect(t, #localTypeVariable#get(){() → non::method::T});
+    non::expect(t, #finalLocalTypeVariable#get(){() → non::method::T});
   }
-  non::throws(() → void => #finalLocal#set.call(i));
-  non::throws(() → void => #finalLocalTypeVariable#set.call(t));
+  non::throws(() → void => #finalLocal#set(i){(dynamic) → dynamic});
+  non::throws(() → void => #finalLocalTypeVariable#set(t){(non::method::T) → dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/late_lowering/override.dart.strong.expect b/pkg/front_end/testcases/late_lowering/override.dart.strong.expect
index 6fa984a..ce5f3a8 100644
--- a/pkg/front_end/testcases/late_lowering/override.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/override.dart.strong.expect
@@ -12,24 +12,24 @@
     : super core::Object::•()
     ;
   get field1() → core::int
-    return let final core::int? #t1 = this.{self::Class::_#Class#field1} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("field1") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::Class::_#Class#field1}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("field1") : #t1{core::int};
   set field1(core::int #t2) → void
     this.{self::Class::_#Class#field1} = #t2;
   get field2() → core::int
-    return let final core::int? #t3 = this.{self::Class::_#Class#field2} in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("field2") : #t3{core::int};
+    return let final core::int? #t3 = this.{self::Class::_#Class#field2}{core::int?} in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("field2") : #t3{core::int};
   set field2(core::int #t4) → void
     this.{self::Class::_#Class#field2} = #t4;
   get field3() → core::int
-    return let final core::int? #t5 = this.{self::Class::_#Class#field3} in #t5.==(null) ?{core::int} throw new _in::LateError::fieldNI("field3") : #t5{core::int};
+    return let final core::int? #t5 = this.{self::Class::_#Class#field3}{core::int?} in #t5 == null ?{core::int} throw new _in::LateError::fieldNI("field3") : #t5{core::int};
   set field3(core::int #t6) → void
-    if(this.{self::Class::_#Class#field3}.==(null))
+    if(this.{self::Class::_#Class#field3}{core::int?} == null)
       this.{self::Class::_#Class#field3} = #t6;
     else
       throw new _in::LateError::fieldAI("field3");
   get field4() → core::int
-    return let final core::int? #t7 = this.{self::Class::_#Class#field4} in #t7.==(null) ?{core::int} throw new _in::LateError::fieldNI("field4") : #t7{core::int};
+    return let final core::int? #t7 = this.{self::Class::_#Class#field4}{core::int?} in #t7 == null ?{core::int} throw new _in::LateError::fieldNI("field4") : #t7{core::int};
   set field4(core::int #t8) → void
-    if(this.{self::Class::_#Class#field4}.==(null))
+    if(this.{self::Class::_#Class#field4}{core::int?} == null)
       this.{self::Class::_#Class#field4} = #t8;
     else
       throw new _in::LateError::fieldAI("field4");
@@ -43,22 +43,22 @@
     : super self::Class::•()
     ;
   get field1() → core::int
-    return let final core::int? #t9 = this.{self::SubClass::_#SubClass#field1} in #t9.==(null) ?{core::int} throw new _in::LateError::fieldNI("field1") : #t9{core::int};
+    return let final core::int? #t9 = this.{self::SubClass::_#SubClass#field1}{core::int?} in #t9 == null ?{core::int} throw new _in::LateError::fieldNI("field1") : #t9{core::int};
   set field1(core::int #t10) → void
     this.{self::SubClass::_#SubClass#field1} = #t10;
   get field2() → core::int
-    return let final core::int? #t11 = this.{self::SubClass::_#SubClass#field2} in #t11.==(null) ?{core::int} this.{self::SubClass::_#SubClass#field2} = 0 : #t11{core::int};
+    return let final core::int? #t11 = this.{self::SubClass::_#SubClass#field2}{core::int?} in #t11 == null ?{core::int} this.{self::SubClass::_#SubClass#field2} = 0 : #t11{core::int};
   set field2(core::int #t12) → void
     this.{self::SubClass::_#SubClass#field2} = #t12;
   get field3() → core::int
-    return let final core::int? #t13 = this.{self::SubClass::_#SubClass#field3} in #t13.==(null) ?{core::int} throw new _in::LateError::fieldNI("field3") : #t13{core::int};
+    return let final core::int? #t13 = this.{self::SubClass::_#SubClass#field3}{core::int?} in #t13 == null ?{core::int} throw new _in::LateError::fieldNI("field3") : #t13{core::int};
   set field3(core::int #t14) → void
-    if(this.{self::SubClass::_#SubClass#field3}.==(null))
+    if(this.{self::SubClass::_#SubClass#field3}{core::int?} == null)
       this.{self::SubClass::_#SubClass#field3} = #t14;
     else
       throw new _in::LateError::fieldAI("field3");
   get field4() → core::int
-    return let final core::int? #t15 = this.{self::SubClass::_#SubClass#field4} in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in this.{self::SubClass::_#SubClass#field4}.==(null) ?{core::int} this.{self::SubClass::_#SubClass#field4} = #t16 : throw new _in::LateError::fieldADI("field4") : #t15{core::int};
+    return let final core::int? #t15 = this.{self::SubClass::_#SubClass#field4}{core::int?} in #t15 == null ?{core::int} let final core::int #t16 = 0 in this.{self::SubClass::_#SubClass#field4}{core::int?} == null ?{core::int} this.{self::SubClass::_#SubClass#field4} = #t16 : throw new _in::LateError::fieldADI("field4") : #t15{core::int};
   get directField1() → core::int
     return super.{self::Class::field1};
   set directField1(core::int value) → void {
@@ -77,41 +77,41 @@
 static method main() → dynamic {
   self::SubClass sc = new self::SubClass::•();
   self::Class c = sc;
-  self::throws(() → core::int => c.{self::Class::field1}, "Read value from uninitialized SubClass.field1");
-  self::throws(() → core::int => sc.{self::SubClass::directField1}, "Read value from uninitialized Class.field1");
+  self::throws(() → core::int => c.{self::Class::field1}{core::int}, "Read value from uninitialized SubClass.field1");
+  self::throws(() → core::int => sc.{self::SubClass::directField1}{core::int}, "Read value from uninitialized Class.field1");
   self::expect(42, c.{self::Class::field1} = 42);
-  self::expect(42, c.{self::Class::field1});
-  self::throws(() → core::int => sc.{self::SubClass::directField1}, "Read value from uninitialized Class.field1");
+  self::expect(42, c.{self::Class::field1}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField1}{core::int}, "Read value from uninitialized Class.field1");
   self::expect(87, sc.{self::SubClass::directField1} = 87);
-  self::expect(87, sc.{self::SubClass::directField1});
-  self::expect(0, c.{self::Class::field2});
-  self::throws(() → core::int => sc.{self::SubClass::directField2}, "Read value from uninitialized Class.field2");
+  self::expect(87, sc.{self::SubClass::directField1}{core::int});
+  self::expect(0, c.{self::Class::field2}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField2}{core::int}, "Read value from uninitialized Class.field2");
   self::expect(42, c.{self::Class::field2} = 42);
-  self::expect(42, c.{self::Class::field2});
-  self::throws(() → core::int => sc.{self::SubClass::directField2}, "Read value from uninitialized Class.field2");
+  self::expect(42, c.{self::Class::field2}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField2}{core::int}, "Read value from uninitialized Class.field2");
   self::expect(87, sc.{self::SubClass::directField2} = 87);
-  self::expect(87, sc.{self::SubClass::directField2});
-  self::throws(() → core::int => c.{self::Class::field3}, "Read value from uninitialized SubClass.field3");
-  self::throws(() → core::int => sc.{self::SubClass::directField3}, "Read value from uninitialized Class.field3");
+  self::expect(87, sc.{self::SubClass::directField2}{core::int});
+  self::throws(() → core::int => c.{self::Class::field3}{core::int}, "Read value from uninitialized SubClass.field3");
+  self::throws(() → core::int => sc.{self::SubClass::directField3}{core::int}, "Read value from uninitialized Class.field3");
   self::expect(42, c.{self::Class::field3} = 42);
-  self::expect(42, c.{self::Class::field3});
-  self::throws(() → core::int => sc.{self::SubClass::directField3}, "Read value from uninitialized Class.field3");
+  self::expect(42, c.{self::Class::field3}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField3}{core::int}, "Read value from uninitialized Class.field3");
   self::throws(() → core::int => c.{self::Class::field3} = 87, "Write value to initialized SubClass.field3");
-  self::expect(0, c.{self::Class::field4});
-  self::throws(() → core::int => sc.{self::SubClass::directField4}, "Read value from uninitialized Class.field4");
+  self::expect(0, c.{self::Class::field4}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField4}{core::int}, "Read value from uninitialized Class.field4");
   self::expect(42, c.{self::Class::field4} = 42);
-  self::expect(0, c.{self::Class::field4});
-  self::expect(42, sc.{self::SubClass::directField4});
+  self::expect(0, c.{self::Class::field4}{core::int});
+  self::expect(42, sc.{self::SubClass::directField4}{core::int});
   self::throws(() → core::int => c.{self::Class::field4} = 87, "Write value to initialized SubClass.field4");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}.";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/override.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/override.dart.strong.transformed.expect
index 31e4f1c..f1ed5f3 100644
--- a/pkg/front_end/testcases/late_lowering/override.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/override.dart.strong.transformed.expect
@@ -12,24 +12,24 @@
     : super core::Object::•()
     ;
   get field1() → core::int
-    return let final core::int? #t1 = this.{self::Class::_#Class#field1} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("field1") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::Class::_#Class#field1}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("field1") : #t1{core::int};
   set field1(core::int #t2) → void
     this.{self::Class::_#Class#field1} = #t2;
   get field2() → core::int
-    return let final core::int? #t3 = this.{self::Class::_#Class#field2} in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("field2") : #t3{core::int};
+    return let final core::int? #t3 = this.{self::Class::_#Class#field2}{core::int?} in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("field2") : #t3{core::int};
   set field2(core::int #t4) → void
     this.{self::Class::_#Class#field2} = #t4;
   get field3() → core::int
-    return let final core::int? #t5 = this.{self::Class::_#Class#field3} in #t5.==(null) ?{core::int} throw new _in::LateError::fieldNI("field3") : #t5{core::int};
+    return let final core::int? #t5 = this.{self::Class::_#Class#field3}{core::int?} in #t5 == null ?{core::int} throw new _in::LateError::fieldNI("field3") : #t5{core::int};
   set field3(core::int #t6) → void
-    if(this.{self::Class::_#Class#field3}.==(null))
+    if(this.{self::Class::_#Class#field3}{core::int?} == null)
       this.{self::Class::_#Class#field3} = #t6;
     else
       throw new _in::LateError::fieldAI("field3");
   get field4() → core::int
-    return let final core::int? #t7 = this.{self::Class::_#Class#field4} in #t7.==(null) ?{core::int} throw new _in::LateError::fieldNI("field4") : #t7{core::int};
+    return let final core::int? #t7 = this.{self::Class::_#Class#field4}{core::int?} in #t7 == null ?{core::int} throw new _in::LateError::fieldNI("field4") : #t7{core::int};
   set field4(core::int #t8) → void
-    if(this.{self::Class::_#Class#field4}.==(null))
+    if(this.{self::Class::_#Class#field4}{core::int?} == null)
       this.{self::Class::_#Class#field4} = #t8;
     else
       throw new _in::LateError::fieldAI("field4");
@@ -43,22 +43,22 @@
     : super self::Class::•()
     ;
   get field1() → core::int
-    return let final core::int? #t9 = this.{self::SubClass::_#SubClass#field1} in #t9.==(null) ?{core::int} throw new _in::LateError::fieldNI("field1") : #t9{core::int};
+    return let final core::int? #t9 = this.{self::SubClass::_#SubClass#field1}{core::int?} in #t9 == null ?{core::int} throw new _in::LateError::fieldNI("field1") : #t9{core::int};
   set field1(core::int #t10) → void
     this.{self::SubClass::_#SubClass#field1} = #t10;
   get field2() → core::int
-    return let final core::int? #t11 = this.{self::SubClass::_#SubClass#field2} in #t11.==(null) ?{core::int} this.{self::SubClass::_#SubClass#field2} = 0 : #t11{core::int};
+    return let final core::int? #t11 = this.{self::SubClass::_#SubClass#field2}{core::int?} in #t11 == null ?{core::int} this.{self::SubClass::_#SubClass#field2} = 0 : #t11{core::int};
   set field2(core::int #t12) → void
     this.{self::SubClass::_#SubClass#field2} = #t12;
   get field3() → core::int
-    return let final core::int? #t13 = this.{self::SubClass::_#SubClass#field3} in #t13.==(null) ?{core::int} throw new _in::LateError::fieldNI("field3") : #t13{core::int};
+    return let final core::int? #t13 = this.{self::SubClass::_#SubClass#field3}{core::int?} in #t13 == null ?{core::int} throw new _in::LateError::fieldNI("field3") : #t13{core::int};
   set field3(core::int #t14) → void
-    if(this.{self::SubClass::_#SubClass#field3}.==(null))
+    if(this.{self::SubClass::_#SubClass#field3}{core::int?} == null)
       this.{self::SubClass::_#SubClass#field3} = #t14;
     else
       throw new _in::LateError::fieldAI("field3");
   get field4() → core::int
-    return let final core::int? #t15 = this.{self::SubClass::_#SubClass#field4} in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in this.{self::SubClass::_#SubClass#field4}.==(null) ?{core::int} this.{self::SubClass::_#SubClass#field4} = #t16 : throw new _in::LateError::fieldADI("field4") : #t15{core::int};
+    return let final core::int? #t15 = this.{self::SubClass::_#SubClass#field4}{core::int?} in #t15 == null ?{core::int} let final core::int #t16 = 0 in this.{self::SubClass::_#SubClass#field4}{core::int?} == null ?{core::int} this.{self::SubClass::_#SubClass#field4} = #t16 : throw new _in::LateError::fieldADI("field4") : #t15{core::int};
   get directField1() → core::int
     return super.{self::Class::field1};
   set directField1(core::int value) → void {
@@ -77,41 +77,41 @@
 static method main() → dynamic {
   self::SubClass sc = new self::SubClass::•();
   self::Class c = sc;
-  self::throws(() → core::int => c.{self::Class::field1}, "Read value from uninitialized SubClass.field1");
-  self::throws(() → core::int => sc.{self::SubClass::directField1}, "Read value from uninitialized Class.field1");
+  self::throws(() → core::int => c.{self::Class::field1}{core::int}, "Read value from uninitialized SubClass.field1");
+  self::throws(() → core::int => sc.{self::SubClass::directField1}{core::int}, "Read value from uninitialized Class.field1");
   self::expect(42, c.{self::Class::field1} = 42);
-  self::expect(42, c.{self::Class::field1});
-  self::throws(() → core::int => sc.{self::SubClass::directField1}, "Read value from uninitialized Class.field1");
+  self::expect(42, c.{self::Class::field1}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField1}{core::int}, "Read value from uninitialized Class.field1");
   self::expect(87, sc.{self::SubClass::directField1} = 87);
-  self::expect(87, sc.{self::SubClass::directField1});
-  self::expect(0, c.{self::Class::field2});
-  self::throws(() → core::int => sc.{self::SubClass::directField2}, "Read value from uninitialized Class.field2");
+  self::expect(87, sc.{self::SubClass::directField1}{core::int});
+  self::expect(0, c.{self::Class::field2}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField2}{core::int}, "Read value from uninitialized Class.field2");
   self::expect(42, c.{self::Class::field2} = 42);
-  self::expect(42, c.{self::Class::field2});
-  self::throws(() → core::int => sc.{self::SubClass::directField2}, "Read value from uninitialized Class.field2");
+  self::expect(42, c.{self::Class::field2}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField2}{core::int}, "Read value from uninitialized Class.field2");
   self::expect(87, sc.{self::SubClass::directField2} = 87);
-  self::expect(87, sc.{self::SubClass::directField2});
-  self::throws(() → core::int => c.{self::Class::field3}, "Read value from uninitialized SubClass.field3");
-  self::throws(() → core::int => sc.{self::SubClass::directField3}, "Read value from uninitialized Class.field3");
+  self::expect(87, sc.{self::SubClass::directField2}{core::int});
+  self::throws(() → core::int => c.{self::Class::field3}{core::int}, "Read value from uninitialized SubClass.field3");
+  self::throws(() → core::int => sc.{self::SubClass::directField3}{core::int}, "Read value from uninitialized Class.field3");
   self::expect(42, c.{self::Class::field3} = 42);
-  self::expect(42, c.{self::Class::field3});
-  self::throws(() → core::int => sc.{self::SubClass::directField3}, "Read value from uninitialized Class.field3");
+  self::expect(42, c.{self::Class::field3}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField3}{core::int}, "Read value from uninitialized Class.field3");
   self::throws(() → core::int => c.{self::Class::field3} = 87, "Write value to initialized SubClass.field3");
-  self::expect(0, c.{self::Class::field4});
-  self::throws(() → core::int => sc.{self::SubClass::directField4}, "Read value from uninitialized Class.field4");
+  self::expect(0, c.{self::Class::field4}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField4}{core::int}, "Read value from uninitialized Class.field4");
   self::expect(42, c.{self::Class::field4} = 42);
-  self::expect(0, c.{self::Class::field4});
-  self::expect(42, sc.{self::SubClass::directField4});
+  self::expect(0, c.{self::Class::field4}{core::int});
+  self::expect(42, sc.{self::SubClass::directField4}{core::int});
   self::throws(() → core::int => c.{self::Class::field4} = 87, "Write value to initialized SubClass.field4");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}.";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/override.dart.weak.expect b/pkg/front_end/testcases/late_lowering/override.dart.weak.expect
index 9b3ba60..d89b35a 100644
--- a/pkg/front_end/testcases/late_lowering/override.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/override.dart.weak.expect
@@ -16,30 +16,30 @@
     : super core::Object::•()
     ;
   get field1() → core::int
-    return this.{self::Class::_#Class#field1#isSet} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field1} in #t1{core::int} : throw new _in::LateError::fieldNI("field1");
+    return this.{self::Class::_#Class#field1#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field1}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("field1");
   set field1(core::int #t2) → void {
     this.{self::Class::_#Class#field1#isSet} = true;
     this.{self::Class::_#Class#field1} = #t2;
   }
   get field2() → core::int
-    return this.{self::Class::_#Class#field2#isSet} ?{core::int} let final core::int? #t3 = this.{self::Class::_#Class#field2} in #t3{core::int} : throw new _in::LateError::fieldNI("field2");
+    return this.{self::Class::_#Class#field2#isSet}{core::bool} ?{core::int} let final core::int? #t3 = this.{self::Class::_#Class#field2}{core::int?} in #t3{core::int} : throw new _in::LateError::fieldNI("field2");
   set field2(core::int #t4) → void {
     this.{self::Class::_#Class#field2#isSet} = true;
     this.{self::Class::_#Class#field2} = #t4;
   }
   get field3() → core::int
-    return this.{self::Class::_#Class#field3#isSet} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#field3} in #t5{core::int} : throw new _in::LateError::fieldNI("field3");
+    return this.{self::Class::_#Class#field3#isSet}{core::bool} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#field3}{core::int?} in #t5{core::int} : throw new _in::LateError::fieldNI("field3");
   set field3(core::int #t6) → void
-    if(this.{self::Class::_#Class#field3#isSet})
+    if(this.{self::Class::_#Class#field3#isSet}{core::bool})
       throw new _in::LateError::fieldAI("field3");
     else {
       this.{self::Class::_#Class#field3#isSet} = true;
       this.{self::Class::_#Class#field3} = #t6;
     }
   get field4() → core::int
-    return this.{self::Class::_#Class#field4#isSet} ?{core::int} let final core::int? #t7 = this.{self::Class::_#Class#field4} in #t7{core::int} : throw new _in::LateError::fieldNI("field4");
+    return this.{self::Class::_#Class#field4#isSet}{core::bool} ?{core::int} let final core::int? #t7 = this.{self::Class::_#Class#field4}{core::int?} in #t7{core::int} : throw new _in::LateError::fieldNI("field4");
   set field4(core::int #t8) → void
-    if(this.{self::Class::_#Class#field4#isSet})
+    if(this.{self::Class::_#Class#field4#isSet}{core::bool})
       throw new _in::LateError::fieldAI("field4");
     else {
       this.{self::Class::_#Class#field4#isSet} = true;
@@ -59,40 +59,40 @@
     : super self::Class::•()
     ;
   get field1() → core::int
-    return this.{self::SubClass::_#SubClass#field1#isSet} ?{core::int} let final core::int? #t9 = this.{self::SubClass::_#SubClass#field1} in #t9{core::int} : throw new _in::LateError::fieldNI("field1");
+    return this.{self::SubClass::_#SubClass#field1#isSet}{core::bool} ?{core::int} let final core::int? #t9 = this.{self::SubClass::_#SubClass#field1}{core::int?} in #t9{core::int} : throw new _in::LateError::fieldNI("field1");
   set field1(core::int #t10) → void {
     this.{self::SubClass::_#SubClass#field1#isSet} = true;
     this.{self::SubClass::_#SubClass#field1} = #t10;
   }
   get field2() → core::int {
-    if(!this.{self::SubClass::_#SubClass#field2#isSet}) {
+    if(!this.{self::SubClass::_#SubClass#field2#isSet}{core::bool}) {
       this.{self::SubClass::_#SubClass#field2} = 0;
       this.{self::SubClass::_#SubClass#field2#isSet} = true;
     }
-    return let final core::int? #t11 = this.{self::SubClass::_#SubClass#field2} in #t11{core::int};
+    return let final core::int? #t11 = this.{self::SubClass::_#SubClass#field2}{core::int?} in #t11{core::int};
   }
   set field2(core::int #t12) → void {
     this.{self::SubClass::_#SubClass#field2#isSet} = true;
     this.{self::SubClass::_#SubClass#field2} = #t12;
   }
   get field3() → core::int
-    return this.{self::SubClass::_#SubClass#field3#isSet} ?{core::int} let final core::int? #t13 = this.{self::SubClass::_#SubClass#field3} in #t13{core::int} : throw new _in::LateError::fieldNI("field3");
+    return this.{self::SubClass::_#SubClass#field3#isSet}{core::bool} ?{core::int} let final core::int? #t13 = this.{self::SubClass::_#SubClass#field3}{core::int?} in #t13{core::int} : throw new _in::LateError::fieldNI("field3");
   set field3(core::int #t14) → void
-    if(this.{self::SubClass::_#SubClass#field3#isSet})
+    if(this.{self::SubClass::_#SubClass#field3#isSet}{core::bool})
       throw new _in::LateError::fieldAI("field3");
     else {
       this.{self::SubClass::_#SubClass#field3#isSet} = true;
       this.{self::SubClass::_#SubClass#field3} = #t14;
     }
   get field4() → core::int {
-    if(!this.{self::SubClass::_#SubClass#field4#isSet}) {
+    if(!this.{self::SubClass::_#SubClass#field4#isSet}{core::bool}) {
       final core::int #t15 = 0;
-      if(this.{self::SubClass::_#SubClass#field4#isSet})
+      if(this.{self::SubClass::_#SubClass#field4#isSet}{core::bool})
         throw new _in::LateError::fieldADI("field4");
       this.{self::SubClass::_#SubClass#field4} = #t15;
       this.{self::SubClass::_#SubClass#field4#isSet} = true;
     }
-    return let final core::int? #t16 = this.{self::SubClass::_#SubClass#field4} in #t16{core::int};
+    return let final core::int? #t16 = this.{self::SubClass::_#SubClass#field4}{core::int?} in #t16{core::int};
   }
   get directField1() → core::int
     return super.{self::Class::field1};
@@ -112,41 +112,41 @@
 static method main() → dynamic {
   self::SubClass sc = new self::SubClass::•();
   self::Class c = sc;
-  self::throws(() → core::int => c.{self::Class::field1}, "Read value from uninitialized SubClass.field1");
-  self::throws(() → core::int => sc.{self::SubClass::directField1}, "Read value from uninitialized Class.field1");
+  self::throws(() → core::int => c.{self::Class::field1}{core::int}, "Read value from uninitialized SubClass.field1");
+  self::throws(() → core::int => sc.{self::SubClass::directField1}{core::int}, "Read value from uninitialized Class.field1");
   self::expect(42, c.{self::Class::field1} = 42);
-  self::expect(42, c.{self::Class::field1});
-  self::throws(() → core::int => sc.{self::SubClass::directField1}, "Read value from uninitialized Class.field1");
+  self::expect(42, c.{self::Class::field1}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField1}{core::int}, "Read value from uninitialized Class.field1");
   self::expect(87, sc.{self::SubClass::directField1} = 87);
-  self::expect(87, sc.{self::SubClass::directField1});
-  self::expect(0, c.{self::Class::field2});
-  self::throws(() → core::int => sc.{self::SubClass::directField2}, "Read value from uninitialized Class.field2");
+  self::expect(87, sc.{self::SubClass::directField1}{core::int});
+  self::expect(0, c.{self::Class::field2}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField2}{core::int}, "Read value from uninitialized Class.field2");
   self::expect(42, c.{self::Class::field2} = 42);
-  self::expect(42, c.{self::Class::field2});
-  self::throws(() → core::int => sc.{self::SubClass::directField2}, "Read value from uninitialized Class.field2");
+  self::expect(42, c.{self::Class::field2}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField2}{core::int}, "Read value from uninitialized Class.field2");
   self::expect(87, sc.{self::SubClass::directField2} = 87);
-  self::expect(87, sc.{self::SubClass::directField2});
-  self::throws(() → core::int => c.{self::Class::field3}, "Read value from uninitialized SubClass.field3");
-  self::throws(() → core::int => sc.{self::SubClass::directField3}, "Read value from uninitialized Class.field3");
+  self::expect(87, sc.{self::SubClass::directField2}{core::int});
+  self::throws(() → core::int => c.{self::Class::field3}{core::int}, "Read value from uninitialized SubClass.field3");
+  self::throws(() → core::int => sc.{self::SubClass::directField3}{core::int}, "Read value from uninitialized Class.field3");
   self::expect(42, c.{self::Class::field3} = 42);
-  self::expect(42, c.{self::Class::field3});
-  self::throws(() → core::int => sc.{self::SubClass::directField3}, "Read value from uninitialized Class.field3");
+  self::expect(42, c.{self::Class::field3}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField3}{core::int}, "Read value from uninitialized Class.field3");
   self::throws(() → core::int => c.{self::Class::field3} = 87, "Write value to initialized SubClass.field3");
-  self::expect(0, c.{self::Class::field4});
-  self::throws(() → core::int => sc.{self::SubClass::directField4}, "Read value from uninitialized Class.field4");
+  self::expect(0, c.{self::Class::field4}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField4}{core::int}, "Read value from uninitialized Class.field4");
   self::expect(42, c.{self::Class::field4} = 42);
-  self::expect(0, c.{self::Class::field4});
-  self::expect(42, sc.{self::SubClass::directField4});
+  self::expect(0, c.{self::Class::field4}{core::int});
+  self::expect(42, sc.{self::SubClass::directField4}{core::int});
   self::throws(() → core::int => c.{self::Class::field4} = 87, "Write value to initialized SubClass.field4");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}.";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/override.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/override.dart.weak.transformed.expect
index 9b3ba60..d89b35a 100644
--- a/pkg/front_end/testcases/late_lowering/override.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/override.dart.weak.transformed.expect
@@ -16,30 +16,30 @@
     : super core::Object::•()
     ;
   get field1() → core::int
-    return this.{self::Class::_#Class#field1#isSet} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field1} in #t1{core::int} : throw new _in::LateError::fieldNI("field1");
+    return this.{self::Class::_#Class#field1#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field1}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("field1");
   set field1(core::int #t2) → void {
     this.{self::Class::_#Class#field1#isSet} = true;
     this.{self::Class::_#Class#field1} = #t2;
   }
   get field2() → core::int
-    return this.{self::Class::_#Class#field2#isSet} ?{core::int} let final core::int? #t3 = this.{self::Class::_#Class#field2} in #t3{core::int} : throw new _in::LateError::fieldNI("field2");
+    return this.{self::Class::_#Class#field2#isSet}{core::bool} ?{core::int} let final core::int? #t3 = this.{self::Class::_#Class#field2}{core::int?} in #t3{core::int} : throw new _in::LateError::fieldNI("field2");
   set field2(core::int #t4) → void {
     this.{self::Class::_#Class#field2#isSet} = true;
     this.{self::Class::_#Class#field2} = #t4;
   }
   get field3() → core::int
-    return this.{self::Class::_#Class#field3#isSet} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#field3} in #t5{core::int} : throw new _in::LateError::fieldNI("field3");
+    return this.{self::Class::_#Class#field3#isSet}{core::bool} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#field3}{core::int?} in #t5{core::int} : throw new _in::LateError::fieldNI("field3");
   set field3(core::int #t6) → void
-    if(this.{self::Class::_#Class#field3#isSet})
+    if(this.{self::Class::_#Class#field3#isSet}{core::bool})
       throw new _in::LateError::fieldAI("field3");
     else {
       this.{self::Class::_#Class#field3#isSet} = true;
       this.{self::Class::_#Class#field3} = #t6;
     }
   get field4() → core::int
-    return this.{self::Class::_#Class#field4#isSet} ?{core::int} let final core::int? #t7 = this.{self::Class::_#Class#field4} in #t7{core::int} : throw new _in::LateError::fieldNI("field4");
+    return this.{self::Class::_#Class#field4#isSet}{core::bool} ?{core::int} let final core::int? #t7 = this.{self::Class::_#Class#field4}{core::int?} in #t7{core::int} : throw new _in::LateError::fieldNI("field4");
   set field4(core::int #t8) → void
-    if(this.{self::Class::_#Class#field4#isSet})
+    if(this.{self::Class::_#Class#field4#isSet}{core::bool})
       throw new _in::LateError::fieldAI("field4");
     else {
       this.{self::Class::_#Class#field4#isSet} = true;
@@ -59,40 +59,40 @@
     : super self::Class::•()
     ;
   get field1() → core::int
-    return this.{self::SubClass::_#SubClass#field1#isSet} ?{core::int} let final core::int? #t9 = this.{self::SubClass::_#SubClass#field1} in #t9{core::int} : throw new _in::LateError::fieldNI("field1");
+    return this.{self::SubClass::_#SubClass#field1#isSet}{core::bool} ?{core::int} let final core::int? #t9 = this.{self::SubClass::_#SubClass#field1}{core::int?} in #t9{core::int} : throw new _in::LateError::fieldNI("field1");
   set field1(core::int #t10) → void {
     this.{self::SubClass::_#SubClass#field1#isSet} = true;
     this.{self::SubClass::_#SubClass#field1} = #t10;
   }
   get field2() → core::int {
-    if(!this.{self::SubClass::_#SubClass#field2#isSet}) {
+    if(!this.{self::SubClass::_#SubClass#field2#isSet}{core::bool}) {
       this.{self::SubClass::_#SubClass#field2} = 0;
       this.{self::SubClass::_#SubClass#field2#isSet} = true;
     }
-    return let final core::int? #t11 = this.{self::SubClass::_#SubClass#field2} in #t11{core::int};
+    return let final core::int? #t11 = this.{self::SubClass::_#SubClass#field2}{core::int?} in #t11{core::int};
   }
   set field2(core::int #t12) → void {
     this.{self::SubClass::_#SubClass#field2#isSet} = true;
     this.{self::SubClass::_#SubClass#field2} = #t12;
   }
   get field3() → core::int
-    return this.{self::SubClass::_#SubClass#field3#isSet} ?{core::int} let final core::int? #t13 = this.{self::SubClass::_#SubClass#field3} in #t13{core::int} : throw new _in::LateError::fieldNI("field3");
+    return this.{self::SubClass::_#SubClass#field3#isSet}{core::bool} ?{core::int} let final core::int? #t13 = this.{self::SubClass::_#SubClass#field3}{core::int?} in #t13{core::int} : throw new _in::LateError::fieldNI("field3");
   set field3(core::int #t14) → void
-    if(this.{self::SubClass::_#SubClass#field3#isSet})
+    if(this.{self::SubClass::_#SubClass#field3#isSet}{core::bool})
       throw new _in::LateError::fieldAI("field3");
     else {
       this.{self::SubClass::_#SubClass#field3#isSet} = true;
       this.{self::SubClass::_#SubClass#field3} = #t14;
     }
   get field4() → core::int {
-    if(!this.{self::SubClass::_#SubClass#field4#isSet}) {
+    if(!this.{self::SubClass::_#SubClass#field4#isSet}{core::bool}) {
       final core::int #t15 = 0;
-      if(this.{self::SubClass::_#SubClass#field4#isSet})
+      if(this.{self::SubClass::_#SubClass#field4#isSet}{core::bool})
         throw new _in::LateError::fieldADI("field4");
       this.{self::SubClass::_#SubClass#field4} = #t15;
       this.{self::SubClass::_#SubClass#field4#isSet} = true;
     }
-    return let final core::int? #t16 = this.{self::SubClass::_#SubClass#field4} in #t16{core::int};
+    return let final core::int? #t16 = this.{self::SubClass::_#SubClass#field4}{core::int?} in #t16{core::int};
   }
   get directField1() → core::int
     return super.{self::Class::field1};
@@ -112,41 +112,41 @@
 static method main() → dynamic {
   self::SubClass sc = new self::SubClass::•();
   self::Class c = sc;
-  self::throws(() → core::int => c.{self::Class::field1}, "Read value from uninitialized SubClass.field1");
-  self::throws(() → core::int => sc.{self::SubClass::directField1}, "Read value from uninitialized Class.field1");
+  self::throws(() → core::int => c.{self::Class::field1}{core::int}, "Read value from uninitialized SubClass.field1");
+  self::throws(() → core::int => sc.{self::SubClass::directField1}{core::int}, "Read value from uninitialized Class.field1");
   self::expect(42, c.{self::Class::field1} = 42);
-  self::expect(42, c.{self::Class::field1});
-  self::throws(() → core::int => sc.{self::SubClass::directField1}, "Read value from uninitialized Class.field1");
+  self::expect(42, c.{self::Class::field1}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField1}{core::int}, "Read value from uninitialized Class.field1");
   self::expect(87, sc.{self::SubClass::directField1} = 87);
-  self::expect(87, sc.{self::SubClass::directField1});
-  self::expect(0, c.{self::Class::field2});
-  self::throws(() → core::int => sc.{self::SubClass::directField2}, "Read value from uninitialized Class.field2");
+  self::expect(87, sc.{self::SubClass::directField1}{core::int});
+  self::expect(0, c.{self::Class::field2}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField2}{core::int}, "Read value from uninitialized Class.field2");
   self::expect(42, c.{self::Class::field2} = 42);
-  self::expect(42, c.{self::Class::field2});
-  self::throws(() → core::int => sc.{self::SubClass::directField2}, "Read value from uninitialized Class.field2");
+  self::expect(42, c.{self::Class::field2}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField2}{core::int}, "Read value from uninitialized Class.field2");
   self::expect(87, sc.{self::SubClass::directField2} = 87);
-  self::expect(87, sc.{self::SubClass::directField2});
-  self::throws(() → core::int => c.{self::Class::field3}, "Read value from uninitialized SubClass.field3");
-  self::throws(() → core::int => sc.{self::SubClass::directField3}, "Read value from uninitialized Class.field3");
+  self::expect(87, sc.{self::SubClass::directField2}{core::int});
+  self::throws(() → core::int => c.{self::Class::field3}{core::int}, "Read value from uninitialized SubClass.field3");
+  self::throws(() → core::int => sc.{self::SubClass::directField3}{core::int}, "Read value from uninitialized Class.field3");
   self::expect(42, c.{self::Class::field3} = 42);
-  self::expect(42, c.{self::Class::field3});
-  self::throws(() → core::int => sc.{self::SubClass::directField3}, "Read value from uninitialized Class.field3");
+  self::expect(42, c.{self::Class::field3}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField3}{core::int}, "Read value from uninitialized Class.field3");
   self::throws(() → core::int => c.{self::Class::field3} = 87, "Write value to initialized SubClass.field3");
-  self::expect(0, c.{self::Class::field4});
-  self::throws(() → core::int => sc.{self::SubClass::directField4}, "Read value from uninitialized Class.field4");
+  self::expect(0, c.{self::Class::field4}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField4}{core::int}, "Read value from uninitialized Class.field4");
   self::expect(42, c.{self::Class::field4} = 42);
-  self::expect(0, c.{self::Class::field4});
-  self::expect(42, sc.{self::SubClass::directField4});
+  self::expect(0, c.{self::Class::field4}{core::int});
+  self::expect(42, sc.{self::SubClass::directField4}{core::int});
   self::throws(() → core::int => c.{self::Class::field4} = 87, "Write value to initialized SubClass.field4");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}.";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.strong.expect b/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.strong.expect
index 600c0c9..179f6d8 100644
--- a/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.strong.expect
@@ -11,16 +11,16 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#x} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
   set x(core::int #t2) → void
-    if(this.{self::A::_#A#x}.==(null))
+    if(this.{self::A::_#A#x}{core::int?} == null)
       this.{self::A::_#A#x} = #t2;
     else
       throw new _in::LateError::fieldAI("x");
   get y() → core::int?
-    return this.{self::A::_#A#y#isSet} ?{core::int?} this.{self::A::_#A#y} : throw new _in::LateError::fieldNI("y");
+    return this.{self::A::_#A#y#isSet}{core::bool} ?{core::int?} this.{self::A::_#A#y}{core::int?} : throw new _in::LateError::fieldNI("y");
   set y(core::int? #t3) → void
-    if(this.{self::A::_#A#y#isSet})
+    if(this.{self::A::_#A#y#isSet}{core::bool})
       throw new _in::LateError::fieldAI("y");
     else {
       this.{self::A::_#A#y#isSet} = true;
@@ -44,16 +44,16 @@
     : super self::A::•()
     ;
   get x() → core::int
-    return let final core::int? #t4 = this.{self::C::_#C#x} in #t4.==(null) ?{core::int} let final core::int #t5 = 2 in this.{self::C::_#C#x}.==(null) ?{core::int} this.{self::C::_#C#x} = #t5 : throw new _in::LateError::fieldADI("x") : #t4{core::int};
+    return let final core::int? #t4 = this.{self::C::_#C#x}{core::int?} in #t4 == null ?{core::int} let final core::int #t5 = 2 in this.{self::C::_#C#x}{core::int?} == null ?{core::int} this.{self::C::_#C#x} = #t5 : throw new _in::LateError::fieldADI("x") : #t4{core::int};
   get y() → core::int? {
-    if(!this.{self::C::_#C#y#isSet}) {
+    if(!this.{self::C::_#C#y#isSet}{core::bool}) {
       final core::int? #t6 = 2;
-      if(this.{self::C::_#C#y#isSet})
+      if(this.{self::C::_#C#y#isSet}{core::bool})
         throw new _in::LateError::fieldADI("y");
       this.{self::C::_#C#y} = #t6;
       this.{self::C::_#C#y#isSet} = true;
     }
-    return this.{self::C::_#C#y};
+    return this.{self::C::_#C#y}{core::int?};
   }
 }
 static method main() → dynamic {
@@ -63,23 +63,23 @@
   self::throws(() → core::int => b.{self::A::x} = 14, "Write to B.x");
   c.{self::A::x} = 3;
   self::throws(() → core::int => c.{self::A::x} = 14, "Write to C.x");
-  self::expect(1, b.{self::B::x});
-  self::expect(2, c.{self::C::x});
+  self::expect(1, b.{self::B::x}{core::int});
+  self::expect(2, c.{self::C::x}{core::int});
   b.{self::A::y} = 3;
   self::throws(() → core::int => b.{self::A::y} = 14, "Write to B.y");
   c.{self::A::y} = 3;
   self::throws(() → core::int => c.{self::A::y} = 14, "Write to C.y");
-  self::expect(1, b.{self::B::y});
-  self::expect(2, c.{self::C::y});
+  self::expect(1, b.{self::B::y}{core::int?});
+  self::expect(2, c.{self::C::y}{core::int?});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.strong.transformed.expect
index 474f90a..f2492f7 100644
--- a/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.strong.transformed.expect
@@ -11,16 +11,16 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#x} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
   set x(core::int #t2) → void
-    if(this.{self::A::_#A#x}.==(null))
+    if(this.{self::A::_#A#x}{core::int?} == null)
       this.{self::A::_#A#x} = #t2;
     else
       throw new _in::LateError::fieldAI("x");
   get y() → core::int?
-    return this.{self::A::_#A#y#isSet} ?{core::int?} this.{self::A::_#A#y} : throw new _in::LateError::fieldNI("y");
+    return this.{self::A::_#A#y#isSet}{core::bool} ?{core::int?} this.{self::A::_#A#y}{core::int?} : throw new _in::LateError::fieldNI("y");
   set y(core::int? #t3) → void
-    if(this.{self::A::_#A#y#isSet})
+    if(this.{self::A::_#A#y#isSet}{core::bool})
       throw new _in::LateError::fieldAI("y");
     else {
       this.{self::A::_#A#y#isSet} = true;
@@ -44,16 +44,16 @@
     : super self::A::•()
     ;
   get x() → core::int
-    return let final core::int? #t4 = this.{self::C::_#C#x} in #t4.==(null) ?{core::int} let final core::int #t5 = 2 in this.{self::C::_#C#x}.==(null) ?{core::int} this.{self::C::_#C#x} = #t5 : throw new _in::LateError::fieldADI("x") : #t4{core::int};
+    return let final core::int? #t4 = this.{self::C::_#C#x}{core::int?} in #t4 == null ?{core::int} let final core::int #t5 = 2 in this.{self::C::_#C#x}{core::int?} == null ?{core::int} this.{self::C::_#C#x} = #t5 : throw new _in::LateError::fieldADI("x") : #t4{core::int};
   get y() → core::int? {
-    if(!this.{self::C::_#C#y#isSet}) {
+    if(!this.{self::C::_#C#y#isSet}{core::bool}) {
       final core::int? #t6 = 2;
-      if(this.{self::C::_#C#y#isSet})
+      if(this.{self::C::_#C#y#isSet}{core::bool})
         throw new _in::LateError::fieldADI("y");
       this.{self::C::_#C#y} = #t6;
       this.{self::C::_#C#y#isSet} = true;
     }
-    return this.{self::C::_#C#y};
+    return this.{self::C::_#C#y}{core::int?};
   }
 }
 static method main() → dynamic {
@@ -63,23 +63,23 @@
   self::throws(() → core::int => b.{self::A::x} = 14, "Write to B.x");
   c.{self::A::x} = 3;
   self::throws(() → core::int => c.{self::A::x} = 14, "Write to C.x");
-  self::expect(1, b.{self::B::x});
-  self::expect(2, c.{self::C::x});
+  self::expect(1, b.{self::B::x}{core::int});
+  self::expect(2, c.{self::C::x}{core::int});
   b.{self::A::y} = 3;
   self::throws(() → core::int => b.{self::A::y} = 14, "Write to B.y");
   c.{self::A::y} = 3;
   self::throws(() → core::int => c.{self::A::y} = 14, "Write to C.y");
-  self::expect(1, b.{self::B::y});
-  self::expect(2, c.{self::C::y});
+  self::expect(1, b.{self::B::y}{core::int?});
+  self::expect(2, c.{self::C::y}{core::int?});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.weak.expect b/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.weak.expect
index 1cb53d8..e46b981 100644
--- a/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.weak.expect
@@ -12,18 +12,18 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{self::A::_#A#x#isSet} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
   set x(core::int #t2) → void
-    if(this.{self::A::_#A#x#isSet})
+    if(this.{self::A::_#A#x#isSet}{core::bool})
       throw new _in::LateError::fieldAI("x");
     else {
       this.{self::A::_#A#x#isSet} = true;
       this.{self::A::_#A#x} = #t2;
     }
   get y() → core::int?
-    return this.{self::A::_#A#y#isSet} ?{core::int?} this.{self::A::_#A#y} : throw new _in::LateError::fieldNI("y");
+    return this.{self::A::_#A#y#isSet}{core::bool} ?{core::int?} this.{self::A::_#A#y}{core::int?} : throw new _in::LateError::fieldNI("y");
   set y(core::int? #t3) → void
-    if(this.{self::A::_#A#y#isSet})
+    if(this.{self::A::_#A#y#isSet}{core::bool})
       throw new _in::LateError::fieldAI("y");
     else {
       this.{self::A::_#A#y#isSet} = true;
@@ -48,24 +48,24 @@
     : super self::A::•()
     ;
   get x() → core::int {
-    if(!this.{self::C::_#C#x#isSet}) {
+    if(!this.{self::C::_#C#x#isSet}{core::bool}) {
       final core::int #t4 = 2;
-      if(this.{self::C::_#C#x#isSet})
+      if(this.{self::C::_#C#x#isSet}{core::bool})
         throw new _in::LateError::fieldADI("x");
       this.{self::C::_#C#x} = #t4;
       this.{self::C::_#C#x#isSet} = true;
     }
-    return let final core::int? #t5 = this.{self::C::_#C#x} in #t5{core::int};
+    return let final core::int? #t5 = this.{self::C::_#C#x}{core::int?} in #t5{core::int};
   }
   get y() → core::int? {
-    if(!this.{self::C::_#C#y#isSet}) {
+    if(!this.{self::C::_#C#y#isSet}{core::bool}) {
       final core::int? #t6 = 2;
-      if(this.{self::C::_#C#y#isSet})
+      if(this.{self::C::_#C#y#isSet}{core::bool})
         throw new _in::LateError::fieldADI("y");
       this.{self::C::_#C#y} = #t6;
       this.{self::C::_#C#y#isSet} = true;
     }
-    return this.{self::C::_#C#y};
+    return this.{self::C::_#C#y}{core::int?};
   }
 }
 static method main() → dynamic {
@@ -75,23 +75,23 @@
   self::throws(() → core::int => b.{self::A::x} = 14, "Write to B.x");
   c.{self::A::x} = 3;
   self::throws(() → core::int => c.{self::A::x} = 14, "Write to C.x");
-  self::expect(1, b.{self::B::x});
-  self::expect(2, c.{self::C::x});
+  self::expect(1, b.{self::B::x}{core::int});
+  self::expect(2, c.{self::C::x}{core::int});
   b.{self::A::y} = 3;
   self::throws(() → core::int => b.{self::A::y} = 14, "Write to B.y");
   c.{self::A::y} = 3;
   self::throws(() → core::int => c.{self::A::y} = 14, "Write to C.y");
-  self::expect(1, b.{self::B::y});
-  self::expect(2, c.{self::C::y});
+  self::expect(1, b.{self::B::y}{core::int?});
+  self::expect(2, c.{self::C::y}{core::int?});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.weak.transformed.expect
index 1cb53d8..e46b981 100644
--- a/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.weak.transformed.expect
@@ -12,18 +12,18 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{self::A::_#A#x#isSet} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
   set x(core::int #t2) → void
-    if(this.{self::A::_#A#x#isSet})
+    if(this.{self::A::_#A#x#isSet}{core::bool})
       throw new _in::LateError::fieldAI("x");
     else {
       this.{self::A::_#A#x#isSet} = true;
       this.{self::A::_#A#x} = #t2;
     }
   get y() → core::int?
-    return this.{self::A::_#A#y#isSet} ?{core::int?} this.{self::A::_#A#y} : throw new _in::LateError::fieldNI("y");
+    return this.{self::A::_#A#y#isSet}{core::bool} ?{core::int?} this.{self::A::_#A#y}{core::int?} : throw new _in::LateError::fieldNI("y");
   set y(core::int? #t3) → void
-    if(this.{self::A::_#A#y#isSet})
+    if(this.{self::A::_#A#y#isSet}{core::bool})
       throw new _in::LateError::fieldAI("y");
     else {
       this.{self::A::_#A#y#isSet} = true;
@@ -48,24 +48,24 @@
     : super self::A::•()
     ;
   get x() → core::int {
-    if(!this.{self::C::_#C#x#isSet}) {
+    if(!this.{self::C::_#C#x#isSet}{core::bool}) {
       final core::int #t4 = 2;
-      if(this.{self::C::_#C#x#isSet})
+      if(this.{self::C::_#C#x#isSet}{core::bool})
         throw new _in::LateError::fieldADI("x");
       this.{self::C::_#C#x} = #t4;
       this.{self::C::_#C#x#isSet} = true;
     }
-    return let final core::int? #t5 = this.{self::C::_#C#x} in #t5{core::int};
+    return let final core::int? #t5 = this.{self::C::_#C#x}{core::int?} in #t5{core::int};
   }
   get y() → core::int? {
-    if(!this.{self::C::_#C#y#isSet}) {
+    if(!this.{self::C::_#C#y#isSet}{core::bool}) {
       final core::int? #t6 = 2;
-      if(this.{self::C::_#C#y#isSet})
+      if(this.{self::C::_#C#y#isSet}{core::bool})
         throw new _in::LateError::fieldADI("y");
       this.{self::C::_#C#y} = #t6;
       this.{self::C::_#C#y#isSet} = true;
     }
-    return this.{self::C::_#C#y};
+    return this.{self::C::_#C#y}{core::int?};
   }
 }
 static method main() → dynamic {
@@ -75,23 +75,23 @@
   self::throws(() → core::int => b.{self::A::x} = 14, "Write to B.x");
   c.{self::A::x} = 3;
   self::throws(() → core::int => c.{self::A::x} = 14, "Write to C.x");
-  self::expect(1, b.{self::B::x});
-  self::expect(2, c.{self::C::x});
+  self::expect(1, b.{self::B::x}{core::int});
+  self::expect(2, c.{self::C::x}{core::int});
   b.{self::A::y} = 3;
   self::throws(() → core::int => b.{self::A::y} = 14, "Write to B.y");
   c.{self::A::y} = 3;
   self::throws(() → core::int => c.{self::A::y} = 14, "Write to C.y");
-  self::expect(1, b.{self::B::y});
-  self::expect(2, c.{self::C::y});
+  self::expect(1, b.{self::B::y}{core::int?});
+  self::expect(2, c.{self::C::y}{core::int?});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/late_lowering/private_members.dart.strong.expect b/pkg/front_end/testcases/late_lowering/private_members.dart.strong.expect
index af828fe..7b44b11 100644
--- a/pkg/front_end/testcases/late_lowering/private_members.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/private_members.dart.strong.expect
@@ -14,30 +14,30 @@
     : super core::Object::•()
     ;
   get _privateField1() → core::int
-    return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1} in #t1.==(null) ?{core::int} this.{self::_Class::_#_Class#_privateField1} = 1 : #t1{core::int};
+    return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1}{core::int?} in #t1 == null ?{core::int} this.{self::_Class::_#_Class#_privateField1} = 1 : #t1{core::int};
   set _privateField1(core::int #t2) → void
     this.{self::_Class::_#_Class#_privateField1} = #t2;
   get _privateField2() → core::int? {
-    if(!this.{self::_Class::_#_Class#_privateField2#isSet}) {
+    if(!this.{self::_Class::_#_Class#_privateField2#isSet}{core::bool}) {
       this.{self::_Class::_#_Class#_privateField2} = 1;
       this.{self::_Class::_#_Class#_privateField2#isSet} = true;
     }
-    return this.{self::_Class::_#_Class#_privateField2};
+    return this.{self::_Class::_#_Class#_privateField2}{core::int?};
   }
   set _privateField2(core::int? #t3) → void {
     this.{self::_Class::_#_Class#_privateField2#isSet} = true;
     this.{self::_Class::_#_Class#_privateField2} = #t3;
   }
   get _privateFinalField1() → core::int
-    return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1} in #t4.==(null) ?{core::int} this.{self::_Class::_#_Class#_privateFinalField1} = 1 : #t4{core::int};
+    return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1}{core::int?} in #t4 == null ?{core::int} this.{self::_Class::_#_Class#_privateFinalField1} = 1 : #t4{core::int};
   set _privateFinalField1(core::int #t5) → void
     this.{self::_Class::_#_Class#_privateFinalField1} = #t5;
   get _privateFinalField2() → core::int? {
-    if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}) {
+    if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}{core::bool}) {
       this.{self::_Class::_#_Class#_privateFinalField2} = 1;
       this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
     }
-    return this.{self::_Class::_#_Class#_privateFinalField2};
+    return this.{self::_Class::_#_Class#_privateFinalField2}{core::int?};
   }
   set _privateFinalField2(core::int? #t6) → void {
     this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
@@ -68,17 +68,17 @@
 static field core::bool _#_Extension|_privateFinalField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
 static method main() → dynamic {
   self::_Class c = new self::_Class::•();
-  c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1};
-  c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2};
-  c.{self::_Class::_privateFinalField1};
-  c.{self::_Class::_privateFinalField2};
+  c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1}{core::int};
+  c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2}{core::int?};
+  c.{self::_Class::_privateFinalField1}{core::int};
+  c.{self::_Class::_privateFinalField2}{core::int?};
   self::_Extension|_privateField1 = self::_Extension|_privateField1;
   self::_Extension|_privateField2 = self::_Extension|_privateField2;
   self::_Extension|_privateFinalField1;
   self::_Extension|_privateFinalField2;
 }
 static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1() → core::int
-  return let final core::int? #t7 = self::_#_Extension|_privateField1 in #t7.==(null) ?{core::int} self::_#_Extension|_privateField1 = 1 : #t7{core::int};
+  return let final core::int? #t7 = self::_#_Extension|_privateField1 in #t7 == null ?{core::int} self::_#_Extension|_privateField1 = 1 : #t7{core::int};
 static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1(core::int #t8) → void
   self::_#_Extension|_privateField1 = #t8;
 static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2() → core::int? {
@@ -93,7 +93,7 @@
   self::_#_Extension|_privateField2 = #t9;
 }
 static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1() → core::int
-  return let final core::int? #t10 = self::_#_Extension|_privateFinalField1 in #t10.==(null) ?{core::int} self::_#_Extension|_privateFinalField1 = 1 : #t10{core::int};
+  return let final core::int? #t10 = self::_#_Extension|_privateFinalField1 in #t10 == null ?{core::int} self::_#_Extension|_privateFinalField1 = 1 : #t10{core::int};
 static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1(core::int #t11) → void
   self::_#_Extension|_privateFinalField1 = #t11;
 static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2() → core::int? {
diff --git a/pkg/front_end/testcases/late_lowering/private_members.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/private_members.dart.strong.transformed.expect
index af828fe..7b44b11 100644
--- a/pkg/front_end/testcases/late_lowering/private_members.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/private_members.dart.strong.transformed.expect
@@ -14,30 +14,30 @@
     : super core::Object::•()
     ;
   get _privateField1() → core::int
-    return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1} in #t1.==(null) ?{core::int} this.{self::_Class::_#_Class#_privateField1} = 1 : #t1{core::int};
+    return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1}{core::int?} in #t1 == null ?{core::int} this.{self::_Class::_#_Class#_privateField1} = 1 : #t1{core::int};
   set _privateField1(core::int #t2) → void
     this.{self::_Class::_#_Class#_privateField1} = #t2;
   get _privateField2() → core::int? {
-    if(!this.{self::_Class::_#_Class#_privateField2#isSet}) {
+    if(!this.{self::_Class::_#_Class#_privateField2#isSet}{core::bool}) {
       this.{self::_Class::_#_Class#_privateField2} = 1;
       this.{self::_Class::_#_Class#_privateField2#isSet} = true;
     }
-    return this.{self::_Class::_#_Class#_privateField2};
+    return this.{self::_Class::_#_Class#_privateField2}{core::int?};
   }
   set _privateField2(core::int? #t3) → void {
     this.{self::_Class::_#_Class#_privateField2#isSet} = true;
     this.{self::_Class::_#_Class#_privateField2} = #t3;
   }
   get _privateFinalField1() → core::int
-    return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1} in #t4.==(null) ?{core::int} this.{self::_Class::_#_Class#_privateFinalField1} = 1 : #t4{core::int};
+    return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1}{core::int?} in #t4 == null ?{core::int} this.{self::_Class::_#_Class#_privateFinalField1} = 1 : #t4{core::int};
   set _privateFinalField1(core::int #t5) → void
     this.{self::_Class::_#_Class#_privateFinalField1} = #t5;
   get _privateFinalField2() → core::int? {
-    if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}) {
+    if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}{core::bool}) {
       this.{self::_Class::_#_Class#_privateFinalField2} = 1;
       this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
     }
-    return this.{self::_Class::_#_Class#_privateFinalField2};
+    return this.{self::_Class::_#_Class#_privateFinalField2}{core::int?};
   }
   set _privateFinalField2(core::int? #t6) → void {
     this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
@@ -68,17 +68,17 @@
 static field core::bool _#_Extension|_privateFinalField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
 static method main() → dynamic {
   self::_Class c = new self::_Class::•();
-  c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1};
-  c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2};
-  c.{self::_Class::_privateFinalField1};
-  c.{self::_Class::_privateFinalField2};
+  c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1}{core::int};
+  c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2}{core::int?};
+  c.{self::_Class::_privateFinalField1}{core::int};
+  c.{self::_Class::_privateFinalField2}{core::int?};
   self::_Extension|_privateField1 = self::_Extension|_privateField1;
   self::_Extension|_privateField2 = self::_Extension|_privateField2;
   self::_Extension|_privateFinalField1;
   self::_Extension|_privateFinalField2;
 }
 static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1() → core::int
-  return let final core::int? #t7 = self::_#_Extension|_privateField1 in #t7.==(null) ?{core::int} self::_#_Extension|_privateField1 = 1 : #t7{core::int};
+  return let final core::int? #t7 = self::_#_Extension|_privateField1 in #t7 == null ?{core::int} self::_#_Extension|_privateField1 = 1 : #t7{core::int};
 static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1(core::int #t8) → void
   self::_#_Extension|_privateField1 = #t8;
 static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2() → core::int? {
@@ -93,7 +93,7 @@
   self::_#_Extension|_privateField2 = #t9;
 }
 static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1() → core::int
-  return let final core::int? #t10 = self::_#_Extension|_privateFinalField1 in #t10.==(null) ?{core::int} self::_#_Extension|_privateFinalField1 = 1 : #t10{core::int};
+  return let final core::int? #t10 = self::_#_Extension|_privateFinalField1 in #t10 == null ?{core::int} self::_#_Extension|_privateFinalField1 = 1 : #t10{core::int};
 static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1(core::int #t11) → void
   self::_#_Extension|_privateFinalField1 = #t11;
 static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2() → core::int? {
diff --git a/pkg/front_end/testcases/late_lowering/private_members.dart.weak.expect b/pkg/front_end/testcases/late_lowering/private_members.dart.weak.expect
index 91b12c0..10fbd90 100644
--- a/pkg/front_end/testcases/late_lowering/private_members.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/private_members.dart.weak.expect
@@ -16,44 +16,44 @@
     : super core::Object::•()
     ;
   get _privateField1() → core::int {
-    if(!this.{self::_Class::_#_Class#_privateField1#isSet}) {
+    if(!this.{self::_Class::_#_Class#_privateField1#isSet}{core::bool}) {
       this.{self::_Class::_#_Class#_privateField1} = 1;
       this.{self::_Class::_#_Class#_privateField1#isSet} = true;
     }
-    return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1} in #t1{core::int};
+    return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1}{core::int?} in #t1{core::int};
   }
   set _privateField1(core::int #t2) → void {
     this.{self::_Class::_#_Class#_privateField1#isSet} = true;
     this.{self::_Class::_#_Class#_privateField1} = #t2;
   }
   get _privateField2() → core::int? {
-    if(!this.{self::_Class::_#_Class#_privateField2#isSet}) {
+    if(!this.{self::_Class::_#_Class#_privateField2#isSet}{core::bool}) {
       this.{self::_Class::_#_Class#_privateField2} = 1;
       this.{self::_Class::_#_Class#_privateField2#isSet} = true;
     }
-    return this.{self::_Class::_#_Class#_privateField2};
+    return this.{self::_Class::_#_Class#_privateField2}{core::int?};
   }
   set _privateField2(core::int? #t3) → void {
     this.{self::_Class::_#_Class#_privateField2#isSet} = true;
     this.{self::_Class::_#_Class#_privateField2} = #t3;
   }
   get _privateFinalField1() → core::int {
-    if(!this.{self::_Class::_#_Class#_privateFinalField1#isSet}) {
+    if(!this.{self::_Class::_#_Class#_privateFinalField1#isSet}{core::bool}) {
       this.{self::_Class::_#_Class#_privateFinalField1} = 1;
       this.{self::_Class::_#_Class#_privateFinalField1#isSet} = true;
     }
-    return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1} in #t4{core::int};
+    return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1}{core::int?} in #t4{core::int};
   }
   set _privateFinalField1(core::int #t5) → void {
     this.{self::_Class::_#_Class#_privateFinalField1#isSet} = true;
     this.{self::_Class::_#_Class#_privateFinalField1} = #t5;
   }
   get _privateFinalField2() → core::int? {
-    if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}) {
+    if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}{core::bool}) {
       this.{self::_Class::_#_Class#_privateFinalField2} = 1;
       this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
     }
-    return this.{self::_Class::_#_Class#_privateFinalField2};
+    return this.{self::_Class::_#_Class#_privateFinalField2}{core::int?};
   }
   set _privateFinalField2(core::int? #t6) → void {
     this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
@@ -88,10 +88,10 @@
 static field core::bool _#_Extension|_privateFinalField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
 static method main() → dynamic {
   self::_Class c = new self::_Class::•();
-  c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1};
-  c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2};
-  c.{self::_Class::_privateFinalField1};
-  c.{self::_Class::_privateFinalField2};
+  c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1}{core::int};
+  c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2}{core::int?};
+  c.{self::_Class::_privateFinalField1}{core::int};
+  c.{self::_Class::_privateFinalField2}{core::int?};
   self::_Extension|_privateField1 = self::_Extension|_privateField1;
   self::_Extension|_privateField2 = self::_Extension|_privateField2;
   self::_Extension|_privateFinalField1;
diff --git a/pkg/front_end/testcases/late_lowering/private_members.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/private_members.dart.weak.transformed.expect
index 91b12c0..10fbd90 100644
--- a/pkg/front_end/testcases/late_lowering/private_members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/private_members.dart.weak.transformed.expect
@@ -16,44 +16,44 @@
     : super core::Object::•()
     ;
   get _privateField1() → core::int {
-    if(!this.{self::_Class::_#_Class#_privateField1#isSet}) {
+    if(!this.{self::_Class::_#_Class#_privateField1#isSet}{core::bool}) {
       this.{self::_Class::_#_Class#_privateField1} = 1;
       this.{self::_Class::_#_Class#_privateField1#isSet} = true;
     }
-    return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1} in #t1{core::int};
+    return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1}{core::int?} in #t1{core::int};
   }
   set _privateField1(core::int #t2) → void {
     this.{self::_Class::_#_Class#_privateField1#isSet} = true;
     this.{self::_Class::_#_Class#_privateField1} = #t2;
   }
   get _privateField2() → core::int? {
-    if(!this.{self::_Class::_#_Class#_privateField2#isSet}) {
+    if(!this.{self::_Class::_#_Class#_privateField2#isSet}{core::bool}) {
       this.{self::_Class::_#_Class#_privateField2} = 1;
       this.{self::_Class::_#_Class#_privateField2#isSet} = true;
     }
-    return this.{self::_Class::_#_Class#_privateField2};
+    return this.{self::_Class::_#_Class#_privateField2}{core::int?};
   }
   set _privateField2(core::int? #t3) → void {
     this.{self::_Class::_#_Class#_privateField2#isSet} = true;
     this.{self::_Class::_#_Class#_privateField2} = #t3;
   }
   get _privateFinalField1() → core::int {
-    if(!this.{self::_Class::_#_Class#_privateFinalField1#isSet}) {
+    if(!this.{self::_Class::_#_Class#_privateFinalField1#isSet}{core::bool}) {
       this.{self::_Class::_#_Class#_privateFinalField1} = 1;
       this.{self::_Class::_#_Class#_privateFinalField1#isSet} = true;
     }
-    return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1} in #t4{core::int};
+    return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1}{core::int?} in #t4{core::int};
   }
   set _privateFinalField1(core::int #t5) → void {
     this.{self::_Class::_#_Class#_privateFinalField1#isSet} = true;
     this.{self::_Class::_#_Class#_privateFinalField1} = #t5;
   }
   get _privateFinalField2() → core::int? {
-    if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}) {
+    if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}{core::bool}) {
       this.{self::_Class::_#_Class#_privateFinalField2} = 1;
       this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
     }
-    return this.{self::_Class::_#_Class#_privateFinalField2};
+    return this.{self::_Class::_#_Class#_privateFinalField2}{core::int?};
   }
   set _privateFinalField2(core::int? #t6) → void {
     this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
@@ -88,10 +88,10 @@
 static field core::bool _#_Extension|_privateFinalField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
 static method main() → dynamic {
   self::_Class c = new self::_Class::•();
-  c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1};
-  c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2};
-  c.{self::_Class::_privateFinalField1};
-  c.{self::_Class::_privateFinalField2};
+  c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1}{core::int};
+  c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2}{core::int?};
+  c.{self::_Class::_privateFinalField1}{core::int};
+  c.{self::_Class::_privateFinalField2}{core::int?};
   self::_Extension|_privateField1 = self::_Extension|_privateField1;
   self::_Extension|_privateField2 = self::_Extension|_privateField2;
   self::_Extension|_privateFinalField1;
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.strong.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.strong.expect
index 2ad5eb6..8b9bf40 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.strong.expect
@@ -12,7 +12,7 @@
     lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
-        #result = this.{self::Class::field};
+        #result = this.{self::Class::field}{self::Class::E%};
         #result#isSet = true;
       }
       return #result{self::Class::E%};
@@ -21,16 +21,16 @@
       #result#isSet = true;
       return #result = #t1;
     }
-    return #result#get.call();
+    return #result#get(){() → self::Class::E%};
   }
 }
 static method returnNonNullable(core::int value) → core::int {
   lowered core::int? #result;
   function #result#get() → core::int
-    return let final core::int? #t2 = #result in #t2.==(null) ?{core::int} #result = value : #t2{core::int};
+    return let final core::int? #t2 = #result in #t2 == null ?{core::int} #result = value : #t2{core::int};
   function #result#set(core::int #t3) → dynamic
     return #result = #t3;
-  return #result#get.call();
+  return #result#get(){() → core::int};
 }
 static method returnNullable(core::int? value) → core::int? {
   lowered core::int? #result;
@@ -46,17 +46,17 @@
     #result#isSet = true;
     return #result = #t4;
   }
-  return #result#get.call();
+  return #result#get(){() → core::int?};
 }
 static method main() → dynamic {
-  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}());
-  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}());
-  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}());
+  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}(){() → core::int});
+  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}(){() → core::int?});
+  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}(){() → core::int?});
   self::expect(42, self::returnNonNullable(42));
   self::expect(87, self::returnNullable(87));
   self::expect(null, self::returnNullable(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.strong.transformed.expect
index 2ad5eb6..8b9bf40 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
     lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
-        #result = this.{self::Class::field};
+        #result = this.{self::Class::field}{self::Class::E%};
         #result#isSet = true;
       }
       return #result{self::Class::E%};
@@ -21,16 +21,16 @@
       #result#isSet = true;
       return #result = #t1;
     }
-    return #result#get.call();
+    return #result#get(){() → self::Class::E%};
   }
 }
 static method returnNonNullable(core::int value) → core::int {
   lowered core::int? #result;
   function #result#get() → core::int
-    return let final core::int? #t2 = #result in #t2.==(null) ?{core::int} #result = value : #t2{core::int};
+    return let final core::int? #t2 = #result in #t2 == null ?{core::int} #result = value : #t2{core::int};
   function #result#set(core::int #t3) → dynamic
     return #result = #t3;
-  return #result#get.call();
+  return #result#get(){() → core::int};
 }
 static method returnNullable(core::int? value) → core::int? {
   lowered core::int? #result;
@@ -46,17 +46,17 @@
     #result#isSet = true;
     return #result = #t4;
   }
-  return #result#get.call();
+  return #result#get(){() → core::int?};
 }
 static method main() → dynamic {
-  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}());
-  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}());
-  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}());
+  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}(){() → core::int});
+  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}(){() → core::int?});
+  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}(){() → core::int?});
   self::expect(42, self::returnNonNullable(42));
   self::expect(87, self::returnNullable(87));
   self::expect(null, self::returnNullable(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.expect
index 3270539..3733586 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.expect
@@ -12,7 +12,7 @@
     lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
-        #result = this.{self::Class::field};
+        #result = this.{self::Class::field}{self::Class::E%};
         #result#isSet = true;
       }
       return #result{self::Class::E%};
@@ -21,7 +21,7 @@
       #result#isSet = true;
       return #result = #t1;
     }
-    return #result#get.call();
+    return #result#get(){() → self::Class::E%};
   }
 }
 static method returnNonNullable(core::int value) → core::int {
@@ -38,7 +38,7 @@
     #result#isSet = true;
     return #result = #t2;
   }
-  return #result#get.call();
+  return #result#get(){() → core::int};
 }
 static method returnNullable(core::int? value) → core::int? {
   lowered core::int? #result;
@@ -54,17 +54,17 @@
     #result#isSet = true;
     return #result = #t3;
   }
-  return #result#get.call();
+  return #result#get(){() → core::int?};
 }
 static method main() → dynamic {
-  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}());
-  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}());
-  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}());
+  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}(){() → core::int});
+  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}(){() → core::int?});
+  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}(){() → core::int?});
   self::expect(42, self::returnNonNullable(42));
   self::expect(87, self::returnNullable(87));
   self::expect(null, self::returnNullable(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.transformed.expect
index 3270539..3733586 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
     lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
-        #result = this.{self::Class::field};
+        #result = this.{self::Class::field}{self::Class::E%};
         #result#isSet = true;
       }
       return #result{self::Class::E%};
@@ -21,7 +21,7 @@
       #result#isSet = true;
       return #result = #t1;
     }
-    return #result#get.call();
+    return #result#get(){() → self::Class::E%};
   }
 }
 static method returnNonNullable(core::int value) → core::int {
@@ -38,7 +38,7 @@
     #result#isSet = true;
     return #result = #t2;
   }
-  return #result#get.call();
+  return #result#get(){() → core::int};
 }
 static method returnNullable(core::int? value) → core::int? {
   lowered core::int? #result;
@@ -54,17 +54,17 @@
     #result#isSet = true;
     return #result = #t3;
   }
-  return #result#get.call();
+  return #result#get(){() → core::int?};
 }
 static method main() → dynamic {
-  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}());
-  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}());
-  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}());
+  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}(){() → core::int});
+  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}(){() → core::int?});
+  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}(){() → core::int?});
   self::expect(42, self::returnNonNullable(42));
   self::expect(87, self::returnNullable(87));
   self::expect(null, self::returnNullable(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.expect
index 74bb4fc..6d6de22 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.expect
@@ -16,35 +16,35 @@
     : super core::Object::•()
     ;
   static get uninitializedNonFinalStaticField() → core::int
-    return let final core::int? #t1 = self::Class::_#uninitializedNonFinalStaticField in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalStaticField") : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#uninitializedNonFinalStaticField in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalStaticField") : #t1{core::int};
   static set uninitializedNonFinalStaticField(core::int #t2) → void
     self::Class::_#uninitializedNonFinalStaticField = #t2;
   static get uninitializedFinalStaticField() → core::int
-    return let final core::int? #t3 = self::Class::_#uninitializedFinalStaticField in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalStaticField") : #t3{core::int};
+    return let final core::int? #t3 = self::Class::_#uninitializedFinalStaticField in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalStaticField") : #t3{core::int};
   static set uninitializedFinalStaticField(core::int #t4) → void
-    if(self::Class::_#uninitializedFinalStaticField.==(null))
+    if(self::Class::_#uninitializedFinalStaticField == null)
       self::Class::_#uninitializedFinalStaticField = #t4;
     else
       throw new _in::LateError::fieldAI("uninitializedFinalStaticField");
   static get initializedNonFinalStaticField() → core::int
-    return let final core::int? #t5 = self::Class::_#initializedNonFinalStaticField in #t5.==(null) ?{core::int} self::Class::_#initializedNonFinalStaticField = 0 : #t5{core::int};
+    return let final core::int? #t5 = self::Class::_#initializedNonFinalStaticField in #t5 == null ?{core::int} self::Class::_#initializedNonFinalStaticField = 0 : #t5{core::int};
   static set initializedNonFinalStaticField(core::int #t6) → void
     self::Class::_#initializedNonFinalStaticField = #t6;
   static get initializedFinalStaticField() → core::int
-    return let final core::int? #t7 = self::Class::_#initializedFinalStaticField in #t7.==(null) ?{core::int} let final core::int #t8 = 0 in self::Class::_#initializedFinalStaticField.==(null) ?{core::int} self::Class::_#initializedFinalStaticField = #t8 : throw new _in::LateError::fieldADI("initializedFinalStaticField") : #t7{core::int};
+    return let final core::int? #t7 = self::Class::_#initializedFinalStaticField in #t7 == null ?{core::int} let final core::int #t8 = 0 in self::Class::_#initializedFinalStaticField == null ?{core::int} self::Class::_#initializedFinalStaticField = #t8 : throw new _in::LateError::fieldADI("initializedFinalStaticField") : #t7{core::int};
   get uninitializedFinalInstanceField() → core::int
-    return let final core::int? #t9 = this.{self::Class::_#Class#uninitializedFinalInstanceField} in #t9.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalInstanceField") : #t9{core::int};
+    return let final core::int? #t9 = this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} in #t9 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalInstanceField") : #t9{core::int};
   set uninitializedFinalInstanceField(core::int #t10) → void
-    if(this.{self::Class::_#Class#uninitializedFinalInstanceField}.==(null))
+    if(this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} == null)
       this.{self::Class::_#Class#uninitializedFinalInstanceField} = #t10;
     else
       throw new _in::LateError::fieldAI("uninitializedFinalInstanceField");
   get initializedNonFinalInstanceField() → core::int
-    return let final core::int? #t11 = this.{self::Class::_#Class#initializedNonFinalInstanceField} in #t11.==(null) ?{core::int} this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0 : #t11{core::int};
+    return let final core::int? #t11 = this.{self::Class::_#Class#initializedNonFinalInstanceField}{core::int?} in #t11 == null ?{core::int} this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0 : #t11{core::int};
   set initializedNonFinalInstanceField(core::int #t12) → void
     this.{self::Class::_#Class#initializedNonFinalInstanceField} = #t12;
   get initializedFinalInstanceField() → core::int
-    return let final core::int? #t13 = this.{self::Class::_#Class#initializedFinalInstanceField} in #t13.==(null) ?{core::int} let final core::int #t14 = 0 in this.{self::Class::_#Class#initializedFinalInstanceField}.==(null) ?{core::int} this.{self::Class::_#Class#initializedFinalInstanceField} = #t14 : throw new _in::LateError::fieldADI("initializedFinalInstanceField") : #t13{core::int};
+    return let final core::int? #t13 = this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} in #t13 == null ?{core::int} let final core::int #t14 = 0 in this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#initializedFinalInstanceField} = #t14 : throw new _in::LateError::fieldADI("initializedFinalInstanceField") : #t13{core::int};
 }
 static field core::int? _#uninitializedNonFinalTopLevelField = null;
 static field core::int? _#uninitializedFinalTopLevelField = null;
@@ -62,7 +62,7 @@
   }
   lowered core::int? #nonNullableUninitializedNonFinalLocal;
   function #nonNullableUninitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t16 = #nonNullableUninitializedNonFinalLocal in #t16.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t16{core::int};
+    return let final core::int? #t16 = #nonNullableUninitializedNonFinalLocal in #t16 == null ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t16{core::int};
   function #nonNullableUninitializedNonFinalLocal#set(core::int #t17) → dynamic
     return #nonNullableUninitializedNonFinalLocal = #t17;
   lowered final core::int? #nullableUninitializedFinalLocal;
@@ -78,9 +78,9 @@
     }
   lowered final core::int? #nonNullableUninitializedFinalLocal;
   function #nonNullableUninitializedFinalLocal#get() → core::int
-    return let final core::int? #t19 = #nonNullableUninitializedFinalLocal in #t19.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t19{core::int};
+    return let final core::int? #t19 = #nonNullableUninitializedFinalLocal in #t19 == null ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t19{core::int};
   function #nonNullableUninitializedFinalLocal#set(core::int #t20) → dynamic
-    if(#nonNullableUninitializedFinalLocal.==(null))
+    if(#nonNullableUninitializedFinalLocal == null)
       return #nonNullableUninitializedFinalLocal = #t20;
     else
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
@@ -99,7 +99,7 @@
   }
   lowered core::int? #nonNullableInitializedNonFinalLocal;
   function #nonNullableInitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t22 = #nonNullableInitializedNonFinalLocal in #t22.==(null) ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t22{core::int};
+    return let final core::int? #t22 = #nonNullableInitializedNonFinalLocal in #t22 == null ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t22{core::int};
   function #nonNullableInitializedNonFinalLocal#set(core::int #t23) → dynamic
     return #nonNullableInitializedNonFinalLocal = #t23;
   lowered final core::int? #nullableInitializedFinalLocal;
@@ -116,22 +116,22 @@
   }
   lowered final core::int? #nonNullableInitializedFinalLocal;
   function #nonNullableInitializedFinalLocal#get() → core::int
-    return let final core::int? #t25 = #nonNullableInitializedFinalLocal in #t25.==(null) ?{core::int} let final core::int #t26 = 0 in #nonNullableInitializedFinalLocal.==(null) ?{core::int} #nonNullableInitializedFinalLocal = #t26 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t25{core::int};
+    return let final core::int? #t25 = #nonNullableInitializedFinalLocal in #t25 == null ?{core::int} let final core::int #t26 = 0 in #nonNullableInitializedFinalLocal == null ?{core::int} #nonNullableInitializedFinalLocal = #t26 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t25{core::int};
 }
 static get uninitializedNonFinalTopLevelField() → core::int
-  return let final core::int? #t27 = self::_#uninitializedNonFinalTopLevelField in #t27.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField") : #t27{core::int};
+  return let final core::int? #t27 = self::_#uninitializedNonFinalTopLevelField in #t27 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField") : #t27{core::int};
 static set uninitializedNonFinalTopLevelField(core::int #t28) → void
   self::_#uninitializedNonFinalTopLevelField = #t28;
 static get uninitializedFinalTopLevelField() → core::int
-  return let final core::int? #t29 = self::_#uninitializedFinalTopLevelField in #t29.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalTopLevelField") : #t29{core::int};
+  return let final core::int? #t29 = self::_#uninitializedFinalTopLevelField in #t29 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalTopLevelField") : #t29{core::int};
 static set uninitializedFinalTopLevelField(core::int #t30) → void
-  if(self::_#uninitializedFinalTopLevelField.==(null))
+  if(self::_#uninitializedFinalTopLevelField == null)
     self::_#uninitializedFinalTopLevelField = #t30;
   else
     throw new _in::LateError::fieldAI("uninitializedFinalTopLevelField");
 static get initializedNonFinalTopLevelField() → core::int
-  return let final core::int? #t31 = self::_#initializedNonFinalTopLevelField in #t31.==(null) ?{core::int} self::_#initializedNonFinalTopLevelField = 0 : #t31{core::int};
+  return let final core::int? #t31 = self::_#initializedNonFinalTopLevelField in #t31 == null ?{core::int} self::_#initializedNonFinalTopLevelField = 0 : #t31{core::int};
 static set initializedNonFinalTopLevelField(core::int #t32) → void
   self::_#initializedNonFinalTopLevelField = #t32;
 static get initializedFinalTopLevelField() → core::int
-  return let final core::int? #t33 = self::_#initializedFinalTopLevelField in #t33.==(null) ?{core::int} let final core::int #t34 = 0 in self::_#initializedFinalTopLevelField.==(null) ?{core::int} self::_#initializedFinalTopLevelField = #t34 : throw new _in::LateError::fieldADI("initializedFinalTopLevelField") : #t33{core::int};
+  return let final core::int? #t33 = self::_#initializedFinalTopLevelField in #t33 == null ?{core::int} let final core::int #t34 = 0 in self::_#initializedFinalTopLevelField == null ?{core::int} self::_#initializedFinalTopLevelField = #t34 : throw new _in::LateError::fieldADI("initializedFinalTopLevelField") : #t33{core::int};
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.transformed.expect
index 64e9c55..1bc9058 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.transformed.expect
@@ -16,35 +16,35 @@
     : super core::Object::•()
     ;
   static get uninitializedNonFinalStaticField() → core::int
-    return let final core::int? #t1 = self::Class::_#uninitializedNonFinalStaticField in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalStaticField") : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#uninitializedNonFinalStaticField in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalStaticField") : #t1{core::int};
   static set uninitializedNonFinalStaticField(core::int #t2) → void
     self::Class::_#uninitializedNonFinalStaticField = #t2;
   static get uninitializedFinalStaticField() → core::int
-    return let final core::int? #t3 = self::Class::_#uninitializedFinalStaticField in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalStaticField") : #t3{core::int};
+    return let final core::int? #t3 = self::Class::_#uninitializedFinalStaticField in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalStaticField") : #t3{core::int};
   static set uninitializedFinalStaticField(core::int #t4) → void
-    if(self::Class::_#uninitializedFinalStaticField.==(null))
+    if(self::Class::_#uninitializedFinalStaticField == null)
       self::Class::_#uninitializedFinalStaticField = #t4;
     else
       throw new _in::LateError::fieldAI("uninitializedFinalStaticField");
   static get initializedNonFinalStaticField() → core::int
-    return let final core::int? #t5 = self::Class::_#initializedNonFinalStaticField in #t5.==(null) ?{core::int} self::Class::_#initializedNonFinalStaticField = 0 : #t5{core::int};
+    return let final core::int? #t5 = self::Class::_#initializedNonFinalStaticField in #t5 == null ?{core::int} self::Class::_#initializedNonFinalStaticField = 0 : #t5{core::int};
   static set initializedNonFinalStaticField(core::int #t6) → void
     self::Class::_#initializedNonFinalStaticField = #t6;
   static get initializedFinalStaticField() → core::int
-    return let final core::int? #t7 = self::Class::_#initializedFinalStaticField in #t7.==(null) ?{core::int} let final core::int #t8 = 0 in self::Class::_#initializedFinalStaticField.==(null) ?{core::int} self::Class::_#initializedFinalStaticField = #t8 : throw new _in::LateError::fieldADI("initializedFinalStaticField") : #t7{core::int};
+    return let final core::int? #t7 = self::Class::_#initializedFinalStaticField in #t7 == null ?{core::int} let final core::int #t8 = 0 in self::Class::_#initializedFinalStaticField == null ?{core::int} self::Class::_#initializedFinalStaticField = #t8 : throw new _in::LateError::fieldADI("initializedFinalStaticField") : #t7{core::int};
   get uninitializedFinalInstanceField() → core::int
-    return let final core::int? #t9 = this.{self::Class::_#Class#uninitializedFinalInstanceField} in #t9.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalInstanceField") : #t9{core::int};
+    return let final core::int? #t9 = this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} in #t9 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalInstanceField") : #t9{core::int};
   set uninitializedFinalInstanceField(core::int #t10) → void
-    if(this.{self::Class::_#Class#uninitializedFinalInstanceField}.==(null))
+    if(this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} == null)
       this.{self::Class::_#Class#uninitializedFinalInstanceField} = #t10;
     else
       throw new _in::LateError::fieldAI("uninitializedFinalInstanceField");
   get initializedNonFinalInstanceField() → core::int
-    return let final core::int? #t11 = this.{self::Class::_#Class#initializedNonFinalInstanceField} in #t11.==(null) ?{core::int} this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0 : #t11{core::int};
+    return let final core::int? #t11 = this.{self::Class::_#Class#initializedNonFinalInstanceField}{core::int?} in #t11 == null ?{core::int} this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0 : #t11{core::int};
   set initializedNonFinalInstanceField(core::int #t12) → void
     this.{self::Class::_#Class#initializedNonFinalInstanceField} = #t12;
   get initializedFinalInstanceField() → core::int
-    return let final core::int? #t13 = this.{self::Class::_#Class#initializedFinalInstanceField} in #t13.==(null) ?{core::int} let final core::int #t14 = 0 in this.{self::Class::_#Class#initializedFinalInstanceField}.==(null) ?{core::int} this.{self::Class::_#Class#initializedFinalInstanceField} = #t14 : throw new _in::LateError::fieldADI("initializedFinalInstanceField") : #t13{core::int};
+    return let final core::int? #t13 = this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} in #t13 == null ?{core::int} let final core::int #t14 = 0 in this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#initializedFinalInstanceField} = #t14 : throw new _in::LateError::fieldADI("initializedFinalInstanceField") : #t13{core::int};
 }
 static field core::int? _#uninitializedNonFinalTopLevelField = null;
 static field core::int? _#uninitializedFinalTopLevelField = null;
@@ -62,7 +62,7 @@
   }
   lowered core::int? #nonNullableUninitializedNonFinalLocal;
   function #nonNullableUninitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t16 = #nonNullableUninitializedNonFinalLocal in #t16.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t16{core::int};
+    return let final core::int? #t16 = #nonNullableUninitializedNonFinalLocal in #t16 == null ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal") : #t16{core::int};
   function #nonNullableUninitializedNonFinalLocal#set(core::int #t17) → dynamic
     return #nonNullableUninitializedNonFinalLocal = #t17;
   lowered final core::int? #nullableUninitializedFinalLocal;
@@ -78,9 +78,9 @@
     }
   lowered final core::int? #nonNullableUninitializedFinalLocal;
   function #nonNullableUninitializedFinalLocal#get() → core::int
-    return let final core::int? #t19 = #nonNullableUninitializedFinalLocal in #t19.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t19{core::int};
+    return let final core::int? #t19 = #nonNullableUninitializedFinalLocal in #t19 == null ?{core::int} throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal") : #t19{core::int};
   function #nonNullableUninitializedFinalLocal#set(core::int #t20) → dynamic
-    if(#nonNullableUninitializedFinalLocal.==(null))
+    if(#nonNullableUninitializedFinalLocal == null)
       return #nonNullableUninitializedFinalLocal = #t20;
     else
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
@@ -99,7 +99,7 @@
   }
   lowered core::int? #nonNullableInitializedNonFinalLocal;
   function #nonNullableInitializedNonFinalLocal#get() → core::int
-    return let final core::int? #t22 = #nonNullableInitializedNonFinalLocal in #t22.==(null) ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t22{core::int};
+    return let final core::int? #t22 = #nonNullableInitializedNonFinalLocal in #t22 == null ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t22{core::int};
   function #nonNullableInitializedNonFinalLocal#set(core::int #t23) → dynamic
     return #nonNullableInitializedNonFinalLocal = #t23;
   lowered final core::int? #nullableInitializedFinalLocal;
@@ -116,25 +116,25 @@
   }
   lowered final core::int? #nonNullableInitializedFinalLocal;
   function #nonNullableInitializedFinalLocal#get() → core::int
-    return let final core::int? #t25 = #nonNullableInitializedFinalLocal in #t25.==(null) ?{core::int} let final core::int #t26 = 0 in #nonNullableInitializedFinalLocal.==(null) ?{core::int} #nonNullableInitializedFinalLocal = #t26 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t25{core::int};
+    return let final core::int? #t25 = #nonNullableInitializedFinalLocal in #t25 == null ?{core::int} let final core::int #t26 = 0 in #nonNullableInitializedFinalLocal == null ?{core::int} #nonNullableInitializedFinalLocal = #t26 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t25{core::int};
 }
 static get uninitializedNonFinalTopLevelField() → core::int
-  return let final core::int? #t27 = self::_#uninitializedNonFinalTopLevelField in #t27.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField") : #t27{core::int};
+  return let final core::int? #t27 = self::_#uninitializedNonFinalTopLevelField in #t27 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField") : #t27{core::int};
 static set uninitializedNonFinalTopLevelField(core::int #t28) → void
   self::_#uninitializedNonFinalTopLevelField = #t28;
 static get uninitializedFinalTopLevelField() → core::int
-  return let final core::int? #t29 = self::_#uninitializedFinalTopLevelField in #t29.==(null) ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalTopLevelField") : #t29{core::int};
+  return let final core::int? #t29 = self::_#uninitializedFinalTopLevelField in #t29 == null ?{core::int} throw new _in::LateError::fieldNI("uninitializedFinalTopLevelField") : #t29{core::int};
 static set uninitializedFinalTopLevelField(core::int #t30) → void
-  if(self::_#uninitializedFinalTopLevelField.==(null))
+  if(self::_#uninitializedFinalTopLevelField == null)
     self::_#uninitializedFinalTopLevelField = #t30;
   else
     throw new _in::LateError::fieldAI("uninitializedFinalTopLevelField");
 static get initializedNonFinalTopLevelField() → core::int
-  return let final core::int? #t31 = self::_#initializedNonFinalTopLevelField in #t31.==(null) ?{core::int} self::_#initializedNonFinalTopLevelField = 0 : #t31{core::int};
+  return let final core::int? #t31 = self::_#initializedNonFinalTopLevelField in #t31 == null ?{core::int} self::_#initializedNonFinalTopLevelField = 0 : #t31{core::int};
 static set initializedNonFinalTopLevelField(core::int #t32) → void
   self::_#initializedNonFinalTopLevelField = #t32;
 static get initializedFinalTopLevelField() → core::int
-  return let final core::int? #t33 = self::_#initializedFinalTopLevelField in #t33.==(null) ?{core::int} let final core::int #t34 = 0 in self::_#initializedFinalTopLevelField.==(null) ?{core::int} self::_#initializedFinalTopLevelField = #t34 : throw new _in::LateError::fieldADI("initializedFinalTopLevelField") : #t33{core::int};
+  return let final core::int? #t33 = self::_#initializedFinalTopLevelField in #t33 == null ?{core::int} let final core::int #t34 = 0 in self::_#initializedFinalTopLevelField == null ?{core::int} self::_#initializedFinalTopLevelField = #t34 : throw new _in::LateError::fieldADI("initializedFinalTopLevelField") : #t33{core::int};
 
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.expect
index 079c847..bfdde61 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.expect
@@ -59,34 +59,34 @@
     return let final core::int? #t8 = self::Class::_#initializedFinalStaticField in #t8{core::int};
   }
   get uninitializedFinalInstanceField() → core::int
-    return this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet} ?{core::int} let final core::int? #t9 = this.{self::Class::_#Class#uninitializedFinalInstanceField} in #t9{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalInstanceField");
+    return this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t9 = this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} in #t9{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalInstanceField");
   set uninitializedFinalInstanceField(core::int #t10) → void
-    if(this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet})
+    if(this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("uninitializedFinalInstanceField");
     else {
       this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet} = true;
       this.{self::Class::_#Class#uninitializedFinalInstanceField} = #t10;
     }
   get initializedNonFinalInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet}) {
+    if(!this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet}{core::bool}) {
       this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0;
       this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet} = true;
     }
-    return let final core::int? #t11 = this.{self::Class::_#Class#initializedNonFinalInstanceField} in #t11{core::int};
+    return let final core::int? #t11 = this.{self::Class::_#Class#initializedNonFinalInstanceField}{core::int?} in #t11{core::int};
   }
   set initializedNonFinalInstanceField(core::int #t12) → void {
     this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet} = true;
     this.{self::Class::_#Class#initializedNonFinalInstanceField} = #t12;
   }
   get initializedFinalInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#initializedFinalInstanceField#isSet}) {
+    if(!this.{self::Class::_#Class#initializedFinalInstanceField#isSet}{core::bool}) {
       final core::int #t13 = 0;
-      if(this.{self::Class::_#Class#initializedFinalInstanceField#isSet})
+      if(this.{self::Class::_#Class#initializedFinalInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("initializedFinalInstanceField");
       this.{self::Class::_#Class#initializedFinalInstanceField} = #t13;
       this.{self::Class::_#Class#initializedFinalInstanceField#isSet} = true;
     }
-    return let final core::int? #t14 = this.{self::Class::_#Class#initializedFinalInstanceField} in #t14{core::int};
+    return let final core::int? #t14 = this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} in #t14{core::int};
   }
 }
 static field core::int? _#uninitializedNonFinalTopLevelField = null;
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.transformed.expect
index 079c847..bfdde61 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.transformed.expect
@@ -59,34 +59,34 @@
     return let final core::int? #t8 = self::Class::_#initializedFinalStaticField in #t8{core::int};
   }
   get uninitializedFinalInstanceField() → core::int
-    return this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet} ?{core::int} let final core::int? #t9 = this.{self::Class::_#Class#uninitializedFinalInstanceField} in #t9{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalInstanceField");
+    return this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t9 = this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} in #t9{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalInstanceField");
   set uninitializedFinalInstanceField(core::int #t10) → void
-    if(this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet})
+    if(this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet}{core::bool})
       throw new _in::LateError::fieldAI("uninitializedFinalInstanceField");
     else {
       this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet} = true;
       this.{self::Class::_#Class#uninitializedFinalInstanceField} = #t10;
     }
   get initializedNonFinalInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet}) {
+    if(!this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet}{core::bool}) {
       this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0;
       this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet} = true;
     }
-    return let final core::int? #t11 = this.{self::Class::_#Class#initializedNonFinalInstanceField} in #t11{core::int};
+    return let final core::int? #t11 = this.{self::Class::_#Class#initializedNonFinalInstanceField}{core::int?} in #t11{core::int};
   }
   set initializedNonFinalInstanceField(core::int #t12) → void {
     this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet} = true;
     this.{self::Class::_#Class#initializedNonFinalInstanceField} = #t12;
   }
   get initializedFinalInstanceField() → core::int {
-    if(!this.{self::Class::_#Class#initializedFinalInstanceField#isSet}) {
+    if(!this.{self::Class::_#Class#initializedFinalInstanceField#isSet}{core::bool}) {
       final core::int #t13 = 0;
-      if(this.{self::Class::_#Class#initializedFinalInstanceField#isSet})
+      if(this.{self::Class::_#Class#initializedFinalInstanceField#isSet}{core::bool})
         throw new _in::LateError::fieldADI("initializedFinalInstanceField");
       this.{self::Class::_#Class#initializedFinalInstanceField} = #t13;
       this.{self::Class::_#Class#initializedFinalInstanceField#isSet} = true;
     }
-    return let final core::int? #t14 = this.{self::Class::_#Class#initializedFinalInstanceField} in #t14{core::int};
+    return let final core::int? #t14 = this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} in #t14{core::int};
   }
 }
 static field core::int? _#uninitializedNonFinalTopLevelField = null;
diff --git a/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.strong.expect b/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.strong.expect
index 8297049..aaa46cf 100644
--- a/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.strong.expect
@@ -12,7 +12,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#x} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
   set x(core::int #t2) → void
     this.{self::A::_#A#x} = #t2;
 }
diff --git a/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.strong.transformed.expect
index 8297049..aaa46cf 100644
--- a/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return let final core::int? #t1 = this.{self::A::_#A#x} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
+    return let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
   set x(core::int #t2) → void
     this.{self::A::_#A#x} = #t2;
 }
diff --git a/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.weak.expect b/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.weak.expect
index 1f6e81c..13fee7d 100644
--- a/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.weak.expect
@@ -13,7 +13,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{self::A::_#A#x#isSet} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
   set x(core::int #t2) → void {
     this.{self::A::_#A#x#isSet} = true;
     this.{self::A::_#A#x} = #t2;
diff --git a/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.weak.transformed.expect
index 1f6e81c..13fee7d 100644
--- a/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
     : super core::Object::•()
     ;
   get x() → core::int
-    return this.{self::A::_#A#x#isSet} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
   set x(core::int #t2) → void {
     this.{self::A::_#A#x#isSet} = true;
     this.{self::A::_#A#x} = #t2;
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.expect
index 007c84a..1d4a7c3 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.expect
@@ -17,7 +17,7 @@
 static set nullableTopLevelField(core::int? #t2) → void
   self::_#nullableTopLevelField = #t2;
 static get nonNullableTopLevelField() → core::int
-  return let final core::int? #t3 = self::_#nonNullableTopLevelField in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("nonNullableTopLevelField") : #t3{core::int};
+  return let final core::int? #t3 = self::_#nonNullableTopLevelField in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("nonNullableTopLevelField") : #t3{core::int};
 static set nonNullableTopLevelField(core::int #t4) → void
   self::_#nonNullableTopLevelField = #t4;
 static get nullableTopLevelFieldWithInitializer() → core::int?
@@ -25,7 +25,7 @@
 static set nullableTopLevelFieldWithInitializer(core::int? #t6) → void
   self::_#nullableTopLevelFieldWithInitializer = #t6;
 static get nonNullableTopLevelFieldWithInitializer() → core::int
-  return let final core::int? #t7 = self::_#nonNullableTopLevelFieldWithInitializer in #t7.==(null) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer = 0 : #t7{core::int};
+  return let final core::int? #t7 = self::_#nonNullableTopLevelFieldWithInitializer in #t7 == null ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer = 0 : #t7{core::int};
 static set nonNullableTopLevelFieldWithInitializer(core::int #t8) → void
   self::_#nonNullableTopLevelFieldWithInitializer = #t8;
 static get nullableFinalTopLevelField() → core::int?
@@ -36,18 +36,18 @@
   else
     throw new _in::LateError::fieldAI("nullableFinalTopLevelField");
 static get nonNullableFinalTopLevelField() → core::int
-  return let final core::int? #t11 = self::_#nonNullableFinalTopLevelField in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("nonNullableFinalTopLevelField") : #t11{core::int};
+  return let final core::int? #t11 = self::_#nonNullableFinalTopLevelField in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("nonNullableFinalTopLevelField") : #t11{core::int};
 static set nonNullableFinalTopLevelField(core::int #t12) → void
-  if(self::_#nonNullableFinalTopLevelField.==(null))
+  if(self::_#nonNullableFinalTopLevelField == null)
     self::_#nonNullableFinalTopLevelField = #t12;
   else
     throw new _in::LateError::fieldAI("nonNullableFinalTopLevelField");
 static get nullableFinalTopLevelFieldWithInitializer() → core::int?
   return let final core::int? #t13 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t14 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t13;
 static get nonNullableFinalTopLevelFieldWithInitializer() → core::int
-  return let final core::int? #t15 = self::_#nonNullableFinalTopLevelFieldWithInitializer in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in self::_#nonNullableFinalTopLevelFieldWithInitializer.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t16 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer") : #t15{core::int};
+  return let final core::int? #t15 = self::_#nonNullableFinalTopLevelFieldWithInitializer in #t15 == null ?{core::int} let final core::int #t16 = 0 in self::_#nonNullableFinalTopLevelFieldWithInitializer == null ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t16 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer") : #t15{core::int};
 static get neverTopLevelField() → Never
-  return let final Never? #t17 = self::_#neverTopLevelField in #t17.==(null) ?{Never} throw new _in::LateError::fieldNI("neverTopLevelField") : #t17{Never};
+  return let final Never? #t17 = self::_#neverTopLevelField in #t17 == null ?{Never} throw new _in::LateError::fieldNI("neverTopLevelField") : #t17{Never};
 static set neverTopLevelField(Never #t18) → void
   self::_#neverTopLevelField = #t18;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.transformed.expect
index 6713a38..2f61bd0 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.transformed.expect
@@ -17,7 +17,7 @@
 static set nullableTopLevelField(core::int? #t2) → void
   self::_#nullableTopLevelField = #t2;
 static get nonNullableTopLevelField() → core::int
-  return let final core::int? #t3 = self::_#nonNullableTopLevelField in #t3.==(null) ?{core::int} throw new _in::LateError::fieldNI("nonNullableTopLevelField") : #t3{core::int};
+  return let final core::int? #t3 = self::_#nonNullableTopLevelField in #t3 == null ?{core::int} throw new _in::LateError::fieldNI("nonNullableTopLevelField") : #t3{core::int};
 static set nonNullableTopLevelField(core::int #t4) → void
   self::_#nonNullableTopLevelField = #t4;
 static get nullableTopLevelFieldWithInitializer() → core::int?
@@ -25,7 +25,7 @@
 static set nullableTopLevelFieldWithInitializer(core::int? #t6) → void
   self::_#nullableTopLevelFieldWithInitializer = #t6;
 static get nonNullableTopLevelFieldWithInitializer() → core::int
-  return let final core::int? #t7 = self::_#nonNullableTopLevelFieldWithInitializer in #t7.==(null) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer = 0 : #t7{core::int};
+  return let final core::int? #t7 = self::_#nonNullableTopLevelFieldWithInitializer in #t7 == null ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer = 0 : #t7{core::int};
 static set nonNullableTopLevelFieldWithInitializer(core::int #t8) → void
   self::_#nonNullableTopLevelFieldWithInitializer = #t8;
 static get nullableFinalTopLevelField() → core::int?
@@ -36,18 +36,18 @@
   else
     throw new _in::LateError::fieldAI("nullableFinalTopLevelField");
 static get nonNullableFinalTopLevelField() → core::int
-  return let final core::int? #t11 = self::_#nonNullableFinalTopLevelField in #t11.==(null) ?{core::int} throw new _in::LateError::fieldNI("nonNullableFinalTopLevelField") : #t11{core::int};
+  return let final core::int? #t11 = self::_#nonNullableFinalTopLevelField in #t11 == null ?{core::int} throw new _in::LateError::fieldNI("nonNullableFinalTopLevelField") : #t11{core::int};
 static set nonNullableFinalTopLevelField(core::int #t12) → void
-  if(self::_#nonNullableFinalTopLevelField.==(null))
+  if(self::_#nonNullableFinalTopLevelField == null)
     self::_#nonNullableFinalTopLevelField = #t12;
   else
     throw new _in::LateError::fieldAI("nonNullableFinalTopLevelField");
 static get nullableFinalTopLevelFieldWithInitializer() → core::int?
   return let final core::int? #t13 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t14 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t13;
 static get nonNullableFinalTopLevelFieldWithInitializer() → core::int
-  return let final core::int? #t15 = self::_#nonNullableFinalTopLevelFieldWithInitializer in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in self::_#nonNullableFinalTopLevelFieldWithInitializer.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t16 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer") : #t15{core::int};
+  return let final core::int? #t15 = self::_#nonNullableFinalTopLevelFieldWithInitializer in #t15 == null ?{core::int} let final core::int #t16 = 0 in self::_#nonNullableFinalTopLevelFieldWithInitializer == null ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t16 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer") : #t15{core::int};
 static get neverTopLevelField() → Never
-  return let final Never? #t17 = self::_#neverTopLevelField in #t17.==(null) ?{Never} throw new _in::LateError::fieldNI("neverTopLevelField") : #t17{Never};
+  return let final Never? #t17 = self::_#neverTopLevelField in #t17 == null ?{Never} throw new _in::LateError::fieldNI("neverTopLevelField") : #t17{Never};
 static set neverTopLevelField(Never #t18) → void
   self::_#neverTopLevelField = #t18;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.expect
index 729f30f..7b794cc 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.expect
@@ -11,7 +11,7 @@
     return #nullableTopLevelLocal = #t2;
   lowered core::int? #nonNullableTopLevelLocal;
   function #nonNullableTopLevelLocal#get() → core::int
-    return let final core::int? #t3 = #nonNullableTopLevelLocal in #t3.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
+    return let final core::int? #t3 = #nonNullableTopLevelLocal in #t3 == null ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
   function #nonNullableTopLevelLocal#set(core::int #t4) → dynamic
     return #nonNullableTopLevelLocal = #t4;
   lowered core::int? #nullableTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
@@ -21,7 +21,7 @@
     return #nullableTopLevelLocalWithInitializer = #t6;
   lowered core::int? #nonNullableTopLevelLocalWithInitializer;
   function #nonNullableTopLevelLocalWithInitializer#get() → core::int
-    return let final core::int? #t7 = #nonNullableTopLevelLocalWithInitializer in #t7.==(null) ?{core::int} #nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
+    return let final core::int? #t7 = #nonNullableTopLevelLocalWithInitializer in #t7 == null ?{core::int} #nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
   function #nonNullableTopLevelLocalWithInitializer#set(core::int #t8) → dynamic
     return #nonNullableTopLevelLocalWithInitializer = #t8;
   lowered final core::int? #nullableFinalTopLevelLocal = _in::createSentinel<core::int?>();
@@ -34,9 +34,9 @@
       throw new _in::LateError::localAI("nullableFinalTopLevelLocal");
   lowered final core::int? #nonNullableFinalTopLevelLocal;
   function #nonNullableFinalTopLevelLocal#get() → core::int
-    return let final core::int? #t11 = #nonNullableFinalTopLevelLocal in #t11.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
+    return let final core::int? #t11 = #nonNullableFinalTopLevelLocal in #t11 == null ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
   function #nonNullableFinalTopLevelLocal#set(core::int #t12) → dynamic
-    if(#nonNullableFinalTopLevelLocal.==(null))
+    if(#nonNullableFinalTopLevelLocal == null)
       return #nonNullableFinalTopLevelLocal = #t12;
     else
       throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
@@ -45,10 +45,10 @@
     return let final core::int? #t13 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t14 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t13;
   lowered final core::int? #nonNullableFinalTopLevelLocalWithInitializer;
   function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
-    return let final core::int? #t15 = #nonNullableFinalTopLevelLocalWithInitializer in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in #nonNullableFinalTopLevelLocalWithInitializer.==(null) ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15{core::int};
+    return let final core::int? #t15 = #nonNullableFinalTopLevelLocalWithInitializer in #t15 == null ?{core::int} let final core::int #t16 = 0 in #nonNullableFinalTopLevelLocalWithInitializer == null ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15{core::int};
   lowered Null #neverLocal;
   function #neverLocal#get() → Never
-    return let final Never? #t17 = #neverLocal in #t17.==(null) ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
+    return let final Never? #t17 = #neverLocal in #t17 == null ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
   function #neverLocal#set(Never #t18) → dynamic
     return #neverLocal = #t18;
 }
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.transformed.expect
index 28acc1d..c00b5b9 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
     return #nullableTopLevelLocal = #t2;
   lowered core::int? #nonNullableTopLevelLocal;
   function #nonNullableTopLevelLocal#get() → core::int
-    return let final core::int? #t3 = #nonNullableTopLevelLocal in #t3.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
+    return let final core::int? #t3 = #nonNullableTopLevelLocal in #t3 == null ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
   function #nonNullableTopLevelLocal#set(core::int #t4) → dynamic
     return #nonNullableTopLevelLocal = #t4;
   lowered core::int? #nullableTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
@@ -21,7 +21,7 @@
     return #nullableTopLevelLocalWithInitializer = #t6;
   lowered core::int? #nonNullableTopLevelLocalWithInitializer;
   function #nonNullableTopLevelLocalWithInitializer#get() → core::int
-    return let final core::int? #t7 = #nonNullableTopLevelLocalWithInitializer in #t7.==(null) ?{core::int} #nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
+    return let final core::int? #t7 = #nonNullableTopLevelLocalWithInitializer in #t7 == null ?{core::int} #nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
   function #nonNullableTopLevelLocalWithInitializer#set(core::int #t8) → dynamic
     return #nonNullableTopLevelLocalWithInitializer = #t8;
   lowered final core::int? #nullableFinalTopLevelLocal = _in::createSentinel<core::int?>();
@@ -34,9 +34,9 @@
       throw new _in::LateError::localAI("nullableFinalTopLevelLocal");
   lowered final core::int? #nonNullableFinalTopLevelLocal;
   function #nonNullableFinalTopLevelLocal#get() → core::int
-    return let final core::int? #t11 = #nonNullableFinalTopLevelLocal in #t11.==(null) ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
+    return let final core::int? #t11 = #nonNullableFinalTopLevelLocal in #t11 == null ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
   function #nonNullableFinalTopLevelLocal#set(core::int #t12) → dynamic
-    if(#nonNullableFinalTopLevelLocal.==(null))
+    if(#nonNullableFinalTopLevelLocal == null)
       return #nonNullableFinalTopLevelLocal = #t12;
     else
       throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
@@ -45,10 +45,10 @@
     return let final core::int? #t13 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t14 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t13;
   lowered final core::int? #nonNullableFinalTopLevelLocalWithInitializer;
   function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
-    return let final core::int? #t15 = #nonNullableFinalTopLevelLocalWithInitializer in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in #nonNullableFinalTopLevelLocalWithInitializer.==(null) ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15{core::int};
+    return let final core::int? #t15 = #nonNullableFinalTopLevelLocalWithInitializer in #t15 == null ?{core::int} let final core::int #t16 = 0 in #nonNullableFinalTopLevelLocalWithInitializer == null ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15{core::int};
   lowered Null #neverLocal;
   function #neverLocal#get() → Never
-    return let final Never? #t17 = #neverLocal in #t17.==(null) ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
+    return let final Never? #t17 = #neverLocal in #t17 == null ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
   function #neverLocal#set(Never #t18) → dynamic
     return #neverLocal = #t18;
 }
diff --git a/pkg/front_end/testcases/new_const_insertion/simple.dart.weak.expect b/pkg/front_end/testcases/new_const_insertion/simple.dart.weak.expect
index dd6eff2..47eae93 100644
--- a/pkg/front_end/testcases/new_const_insertion/simple.dart.weak.expect
+++ b/pkg/front_end/testcases/new_const_insertion/simple.dart.weak.expect
@@ -21,7 +21,7 @@
 static method main() → dynamic {
   core::int* foo = 42;
   new self::A::•(5);
-  new self::A::•(5.{core::num::+}(5));
+  new self::A::•(5.{core::num::+}(5){(core::num*) →* core::int*});
   new self::A::•(foo);
-  new self::A::•(5.{core::num::+}(foo));
+  new self::A::•(5.{core::num::+}(foo){(core::num*) →* core::int*});
 }
diff --git a/pkg/front_end/testcases/new_const_insertion/simple.dart.weak.transformed.expect b/pkg/front_end/testcases/new_const_insertion/simple.dart.weak.transformed.expect
index b2d7e74..ecf3e40 100644
--- a/pkg/front_end/testcases/new_const_insertion/simple.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/new_const_insertion/simple.dart.weak.transformed.expect
@@ -21,12 +21,12 @@
 static method main() → dynamic {
   core::int* foo = 42;
   new self::A::•(5);
-  new self::A::•(5.{core::num::+}(5));
+  new self::A::•(5.{core::num::+}(5){(core::num*) →* core::int*});
   new self::A::•(foo);
-  new self::A::•(5.{core::num::+}(foo));
+  new self::A::•(5.{core::num::+}(foo){(core::num*) →* core::int*});
 }
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///simple.dart:15:7 -> IntConstant(10)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///simple.dart:15:7 -> IntConstant(10)
 Extra constant evaluation: evaluated: 9, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.expect
index 88ac3ae..f8a2ab8 100644
--- a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.expect
@@ -9,7 +9,7 @@
   method method(generic-covariant-impl self::Class::E% e) → void {
     e = self::id<self::Class::E%>(e);
     e = self::id<self::Class::E%>(e);
-    if(!e.{core::Object::==}(null)) {
+    if(!(e == null)) {
       self::Class::E% e2 = e{self::Class::E% & core::Object /* '%' & '!' = '!' */};
       e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
       e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.transformed.expect
index 88ac3ae..f8a2ab8 100644
--- a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.transformed.expect
@@ -9,7 +9,7 @@
   method method(generic-covariant-impl self::Class::E% e) → void {
     e = self::id<self::Class::E%>(e);
     e = self::id<self::Class::E%>(e);
-    if(!e.{core::Object::==}(null)) {
+    if(!(e == null)) {
       self::Class::E% e2 = e{self::Class::E% & core::Object /* '%' & '!' = '!' */};
       e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
       e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.expect
index 88ac3ae..f8a2ab8 100644
--- a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.expect
@@ -9,7 +9,7 @@
   method method(generic-covariant-impl self::Class::E% e) → void {
     e = self::id<self::Class::E%>(e);
     e = self::id<self::Class::E%>(e);
-    if(!e.{core::Object::==}(null)) {
+    if(!(e == null)) {
       self::Class::E% e2 = e{self::Class::E% & core::Object /* '%' & '!' = '!' */};
       e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
       e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.transformed.expect
index 88ac3ae..f8a2ab8 100644
--- a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
   method method(generic-covariant-impl self::Class::E% e) → void {
     e = self::id<self::Class::E%>(e);
     e = self::id<self::Class::E%>(e);
-    if(!e.{core::Object::==}(null)) {
+    if(!(e == null)) {
       self::Class::E% e2 = e{self::Class::E% & core::Object /* '%' & '!' = '!' */};
       e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
       e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect b/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect
index 19d474e..6318674 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect
@@ -1014,10 +1014,10 @@
   core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
   functionVar = functionArg;
   functionVar = toVoidArg;
-  functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1.==(null) ?{() → void} null : #t1.{self::Tearoffable::call};
+  functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1 == null ?{() → void} null : #t1.{self::Tearoffable::call};
   () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidArg;
-  toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2.==(null) ?{() → void} null : #t2.{self::Tearoffable::call};
+  toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2 == null ?{() → void} null : #t2.{self::Tearoffable::call};
   self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableArg;
   self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect
index 0c62a44..1f47a4a 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect
@@ -1014,10 +1014,10 @@
   core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
   functionVar = functionArg;
   functionVar = toVoidArg;
-  functionVar = let final self::Tearoffable #t2 = tearoffableArg in #t2.==(null) ?{() → void} null : #t2.{self::Tearoffable::call};
+  functionVar = let final self::Tearoffable #t2 = tearoffableArg in #t2 == null ?{() → void} null : #t2.{self::Tearoffable::call};
   () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidArg;
-  toVoidVar = let final self::Tearoffable #t3 = tearoffableArg in #t3.==(null) ?{() → void} null : #t3.{self::Tearoffable::call};
+  toVoidVar = let final self::Tearoffable #t3 = tearoffableArg in #t3 == null ?{() → void} null : #t3.{self::Tearoffable::call};
   self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableArg;
   self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect b/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
index 19d474e..6318674 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
@@ -1014,10 +1014,10 @@
   core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
   functionVar = functionArg;
   functionVar = toVoidArg;
-  functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1.==(null) ?{() → void} null : #t1.{self::Tearoffable::call};
+  functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1 == null ?{() → void} null : #t1.{self::Tearoffable::call};
   () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidArg;
-  toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2.==(null) ?{() → void} null : #t2.{self::Tearoffable::call};
+  toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2 == null ?{() → void} null : #t2.{self::Tearoffable::call};
   self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableArg;
   self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
index 24484a9..e558c54 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
@@ -1014,10 +1014,10 @@
   core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
   functionVar = functionArg;
   functionVar = toVoidArg;
-  functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1.==(null) ?{() → void} null : #t1.{self::Tearoffable::call};
+  functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1 == null ?{() → void} null : #t1.{self::Tearoffable::call};
   () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidArg;
-  toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2.==(null) ?{() → void} null : #t2.{self::Tearoffable::call};
+  toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2 == null ?{() → void} null : #t2.{self::Tearoffable::call};
   self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableArg;
   self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
index e3efe03..4b9bd7e 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
@@ -333,7 +333,7 @@
 static method baz(self::C c) → void {
   self::bazContext(let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
   bazContext(c);
-             ^" in (let final self::C #t15 = c in #t15.==(null) ?{() → core::num?} null : #t15.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
+             ^" in (let final self::C #t15 = c in #t15 == null ?{() → core::num?} null : #t15.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
 }
 static method boz(Null x) → self::A {
   self::fooContext(let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
index bff0969..8d03a24 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
@@ -375,7 +375,7 @@
 static method baz(self::C c) → void {
   self::bazContext(let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
   bazContext(c);
-             ^" in (let final self::C #t21 = c in #t21.==(null) ?{() → core::num?} null : #t21.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
+             ^" in (let final self::C #t21 = c in #t21 == null ?{() → core::num?} null : #t21.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
 }
 static method boz(Null x) → self::A {
   self::fooContext(let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
index e3efe03..4b9bd7e 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
@@ -333,7 +333,7 @@
 static method baz(self::C c) → void {
   self::bazContext(let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
   bazContext(c);
-             ^" in (let final self::C #t15 = c in #t15.==(null) ?{() → core::num?} null : #t15.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
+             ^" in (let final self::C #t15 = c in #t15 == null ?{() → core::num?} null : #t15.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
 }
 static method boz(Null x) → self::A {
   self::fooContext(let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
index 0f21343..3f9fa94 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
@@ -375,7 +375,7 @@
 static method baz(self::C c) → void {
   self::bazContext(let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
   bazContext(c);
-             ^" in let final self::C #t15 = c in #t15.==(null) ?{() → core::num?} null : #t15.{self::C::call});
+             ^" in let final self::C #t15 = c in #t15 == null ?{() → core::num?} null : #t15.{self::C::call});
 }
 static method boz(Null x) → self::A {
   self::fooContext(let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.expect
index cf1774b..ab741a5 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.expect
@@ -86,6 +86,6 @@
 static method hest<T extends core::num>() → void {}
 static method fisk(self::Hest h) → dynamic {
   self::hest<core::num?>();
-  h.{self::Hest::hest}<core::num?>();
+  h.{self::Hest::hest}<core::num?>(){() → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.transformed.expect
index cf1774b..ab741a5 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.transformed.expect
@@ -86,6 +86,6 @@
 static method hest<T extends core::num>() → void {}
 static method fisk(self::Hest h) → dynamic {
   self::hest<core::num?>();
-  h.{self::Hest::hest}<core::num?>();
+  h.{self::Hest::hest}<core::num?>(){() → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.expect
index cf1774b..ab741a5 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.expect
@@ -86,6 +86,6 @@
 static method hest<T extends core::num>() → void {}
 static method fisk(self::Hest h) → dynamic {
   self::hest<core::num?>();
-  h.{self::Hest::hest}<core::num?>();
+  h.{self::Hest::hest}<core::num?>(){() → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.transformed.expect
index cf1774b..ab741a5 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.transformed.expect
@@ -86,6 +86,6 @@
 static method hest<T extends core::num>() → void {}
 static method fisk(self::Hest h) → dynamic {
   self::hest<core::num?>();
-  h.{self::Hest::hest}<core::num?>();
+  h.{self::Hest::hest}<core::num?>(){() → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/call.dart.strong.expect b/pkg/front_end/testcases/nnbd/call.dart.strong.expect
index 44a78ec..2984427 100644
--- a/pkg/front_end/testcases/nnbd/call.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/call.dart.strong.expect
@@ -38,19 +38,19 @@
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   f();
-   ^" in f.call();
+   ^" in f{<nullable>}.(){() →? void};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   f.call();
-    ^^^^" in f.call();
+    ^^^^" in f{<nullable>}.(){() →? void};
   self::Class c = new self::Class::•();
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.field();
-         ^" in c.{self::Class::field}.call();
+         ^" in c.{self::Class::field}{() →? void}{<nullable>}.(){() →? void};
   let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.getter();
-          ^" in c.{self::Class::getter}.call();
+          ^" in c.{self::Class::getter}{() →? void}{<nullable>}.(){() →? void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/call.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/call.dart.strong.transformed.expect
index 44a78ec..2984427 100644
--- a/pkg/front_end/testcases/nnbd/call.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/call.dart.strong.transformed.expect
@@ -38,19 +38,19 @@
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   f();
-   ^" in f.call();
+   ^" in f{<nullable>}.(){() →? void};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   f.call();
-    ^^^^" in f.call();
+    ^^^^" in f{<nullable>}.(){() →? void};
   self::Class c = new self::Class::•();
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.field();
-         ^" in c.{self::Class::field}.call();
+         ^" in c.{self::Class::field}{() →? void}{<nullable>}.(){() →? void};
   let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.getter();
-          ^" in c.{self::Class::getter}.call();
+          ^" in c.{self::Class::getter}{() →? void}{<nullable>}.(){() →? void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/call.dart.weak.expect b/pkg/front_end/testcases/nnbd/call.dart.weak.expect
index 44a78ec..2984427 100644
--- a/pkg/front_end/testcases/nnbd/call.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/call.dart.weak.expect
@@ -38,19 +38,19 @@
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   f();
-   ^" in f.call();
+   ^" in f{<nullable>}.(){() →? void};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   f.call();
-    ^^^^" in f.call();
+    ^^^^" in f{<nullable>}.(){() →? void};
   self::Class c = new self::Class::•();
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.field();
-         ^" in c.{self::Class::field}.call();
+         ^" in c.{self::Class::field}{() →? void}{<nullable>}.(){() →? void};
   let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.getter();
-          ^" in c.{self::Class::getter}.call();
+          ^" in c.{self::Class::getter}{() →? void}{<nullable>}.(){() →? void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/call.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/call.dart.weak.transformed.expect
index 44a78ec..2984427 100644
--- a/pkg/front_end/testcases/nnbd/call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/call.dart.weak.transformed.expect
@@ -38,19 +38,19 @@
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   f();
-   ^" in f.call();
+   ^" in f{<nullable>}.(){() →? void};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   f.call();
-    ^^^^" in f.call();
+    ^^^^" in f{<nullable>}.(){() →? void};
   self::Class c = new self::Class::•();
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.field();
-         ^" in c.{self::Class::field}.call();
+         ^" in c.{self::Class::field}{() →? void}{<nullable>}.(){() →? void};
   let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   c.getter();
-          ^" in c.{self::Class::getter}.call();
+          ^" in c.{self::Class::getter}{() →? void}{<nullable>}.(){() →? void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/const_canonical_type.dart.strong.expect b/pkg/front_end/testcases/nnbd/const_canonical_type.dart.strong.expect
index 1631d801..478af10 100644
--- a/pkg/front_end/testcases/nnbd/const_canonical_type.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/const_canonical_type.dart.strong.expect
@@ -11,7 +11,7 @@
 class Check extends core::Object /*hasConstConstructor*/  {
   final field dynamic _ignored;
   const constructor •(dynamic x, dynamic y) → self::Check
-    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0), super core::Object::•()
+    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0){(core::num) → core::int}, super core::Object::•()
     ;
 }
 class A<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
@@ -20,7 +20,7 @@
     ;
 }
 static method expectEqual(dynamic x, dynamic y) → void {
-  if(!x.{core::Object::==}(y)) {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
     throw "Arguments were supposed to be identical.";
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/const_canonical_type.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/const_canonical_type.dart.strong.transformed.expect
index 1631d801..478af10 100644
--- a/pkg/front_end/testcases/nnbd/const_canonical_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/const_canonical_type.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
 class Check extends core::Object /*hasConstConstructor*/  {
   final field dynamic _ignored;
   const constructor •(dynamic x, dynamic y) → self::Check
-    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0), super core::Object::•()
+    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0){(core::num) → core::int}, super core::Object::•()
     ;
 }
 class A<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
@@ -20,7 +20,7 @@
     ;
 }
 static method expectEqual(dynamic x, dynamic y) → void {
-  if(!x.{core::Object::==}(y)) {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
     throw "Arguments were supposed to be identical.";
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.expect b/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.expect
index 43eae4f..5e1af23 100644
--- a/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.expect
@@ -11,7 +11,7 @@
 class Check extends core::Object /*hasConstConstructor*/  {
   final field dynamic _ignored;
   const constructor •(dynamic x, dynamic y) → self::Check
-    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0), super core::Object::•()
+    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0){(core::num) → core::int}, super core::Object::•()
     ;
 }
 class A<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
@@ -20,7 +20,7 @@
     ;
 }
 static method expectEqual(dynamic x, dynamic y) → void {
-  if(!x.{core::Object::==}(y)) {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
     throw "Arguments were supposed to be identical.";
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.outline.expect
index 5239ad1..c94203e 100644
--- a/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.outline.expect
@@ -11,7 +11,7 @@
 class Check extends core::Object /*hasConstConstructor*/  {
   final field dynamic _ignored;
   const constructor •(dynamic x, dynamic y) → self::Check
-    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0), super core::Object::•()
+    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0){(core::num) → core::int}, super core::Object::•()
     ;
 }
 class A<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.transformed.expect
index 43eae4f..5e1af23 100644
--- a/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 class Check extends core::Object /*hasConstConstructor*/  {
   final field dynamic _ignored;
   const constructor •(dynamic x, dynamic y) → self::Check
-    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0), super core::Object::•()
+    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0){(core::num) → core::int}, super core::Object::•()
     ;
 }
 class A<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
@@ -20,7 +20,7 @@
     ;
 }
 static method expectEqual(dynamic x, dynamic y) → void {
-  if(!x.{core::Object::==}(y)) {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
     throw "Arguments were supposed to be identical.";
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/const_is.dart.strong.expect b/pkg/front_end/testcases/nnbd/const_is.dart.strong.expect
index ecdde5d..ee9ce9b 100644
--- a/pkg/front_end/testcases/nnbd/const_is.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/const_is.dart.strong.expect
@@ -49,10 +49,10 @@
 static const field core::bool f4_is_t1 = #C2;
 static const field core::bool f5_is_t1 = #C1;
 static method f({required core::int i = #C3}) → core::int {
-  return i.{core::num::+}(1);
+  return i.{core::num::+}(1){(core::num) → core::int};
 }
 static method g({core::int i = #C4}) → core::int {
-  return i.{core::num::+}(1);
+  return i.{core::num::+}(1){(core::num) → core::int};
 }
 static method f1(core::int i, self::B b, core::Map<core::int, core::num> m, dynamic x, {required dynamic extraParam = #C3, required core::bool obool = #C3, required dynamic ox = #C3, required self::D ob = #C3, required core::List<core::num>? ol = #C3}) → self::B
   return new self::B::•();
@@ -87,7 +87,7 @@
   self::expect((#C11) is{ForNonNullableByDefault} (core::int, self::B, core::Map<core::int, core::num>, dynamic, {required ob: self::B, required obool: core::bool, required ol: core::List<core::num>, required ox: dynamic}) → self::B, #C1);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/const_is.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/const_is.dart.strong.transformed.expect
index deac28e..2eda141 100644
--- a/pkg/front_end/testcases/nnbd/const_is.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/const_is.dart.strong.transformed.expect
@@ -49,10 +49,10 @@
 static const field core::bool f4_is_t1 = #C2;
 static const field core::bool f5_is_t1 = #C1;
 static method f({required core::int i = #C3}) → core::int {
-  return i.{core::num::+}(1);
+  return i.{core::num::+}(1){(core::num) → core::int};
 }
 static method g({core::int i = #C4}) → core::int {
-  return i.{core::num::+}(1);
+  return i.{core::num::+}(1){(core::num) → core::int};
 }
 static method f1(core::int i, self::B b, core::Map<core::int, core::num> m, dynamic x, {required dynamic extraParam = #C3, required core::bool obool = #C3, required dynamic ox = #C3, required self::D ob = #C3, required core::List<core::num>? ol = #C3}) → self::B
   return new self::B::•();
@@ -87,7 +87,7 @@
   self::expect((#C11) is{ForNonNullableByDefault} (core::int, self::B, core::Map<core::int, core::num>, dynamic, {required ob: self::B, required obool: core::bool, required ol: core::List<core::num>, required ox: dynamic}) → self::B, #C1);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/const_is.dart.weak.expect b/pkg/front_end/testcases/nnbd/const_is.dart.weak.expect
index f6c3bba..7da3b8f 100644
--- a/pkg/front_end/testcases/nnbd/const_is.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/const_is.dart.weak.expect
@@ -49,10 +49,10 @@
 static const field core::bool f4_is_t1 = #C1;
 static const field core::bool f5_is_t1 = #C1;
 static method f({required core::int i = #C3}) → core::int {
-  return i.{core::num::+}(1);
+  return i.{core::num::+}(1){(core::num) → core::int};
 }
 static method g({core::int i = #C4}) → core::int {
-  return i.{core::num::+}(1);
+  return i.{core::num::+}(1){(core::num) → core::int};
 }
 static method f1(core::int i, self::B b, core::Map<core::int, core::num> m, dynamic x, {required dynamic extraParam = #C3, required core::bool obool = #C3, required dynamic ox = #C3, required self::D ob = #C3, required core::List<core::num>? ol = #C3}) → self::B
   return new self::B::•();
@@ -87,7 +87,7 @@
   self::expect((#C11) is{ForNonNullableByDefault} (core::int, self::B, core::Map<core::int, core::num>, dynamic, {required ob: self::B, required obool: core::bool, required ol: core::List<core::num>, required ox: dynamic}) → self::B, #C1);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/const_is.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/const_is.dart.weak.transformed.expect
index 3817966..67362a6 100644
--- a/pkg/front_end/testcases/nnbd/const_is.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/const_is.dart.weak.transformed.expect
@@ -49,10 +49,10 @@
 static const field core::bool f4_is_t1 = #C1;
 static const field core::bool f5_is_t1 = #C1;
 static method f({required core::int i = #C3}) → core::int {
-  return i.{core::num::+}(1);
+  return i.{core::num::+}(1){(core::num) → core::int};
 }
 static method g({core::int i = #C4}) → core::int {
-  return i.{core::num::+}(1);
+  return i.{core::num::+}(1){(core::num) → core::int};
 }
 static method f1(core::int i, self::B b, core::Map<core::int, core::num> m, dynamic x, {required dynamic extraParam = #C3, required core::bool obool = #C3, required dynamic ox = #C3, required self::D ob = #C3, required core::List<core::num>? ol = #C3}) → self::B
   return new self::B::•();
@@ -87,7 +87,7 @@
   self::expect((#C11) is{ForNonNullableByDefault} (core::int, self::B, core::Map<core::int, core::num>, dynamic, {required ob: self::B, required obool: core::bool, required ol: core::List<core::num>, required ox: dynamic}) → self::B, #C1);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.expect b/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.expect
index a1b3d15..b3142fc 100644
--- a/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.expect
@@ -40,10 +40,10 @@
 static method main() → dynamic {
   self::expect(42, #C1);
   self::expect(42, #C1);
-  self::expect(42, (#C3).{self::Class::y});
+  self::expect(42, (#C3).{self::Class::y}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.transformed.expect
index a1b3d15..b3142fc 100644
--- a/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.transformed.expect
@@ -40,10 +40,10 @@
 static method main() → dynamic {
   self::expect(42, #C1);
   self::expect(42, #C1);
-  self::expect(42, (#C3).{self::Class::y});
+  self::expect(42, (#C3).{self::Class::y}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.expect b/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.expect
index a1b3d15..b3142fc 100644
--- a/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.expect
@@ -40,10 +40,10 @@
 static method main() → dynamic {
   self::expect(42, #C1);
   self::expect(42, #C1);
-  self::expect(42, (#C3).{self::Class::y});
+  self::expect(42, (#C3).{self::Class::y}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.transformed.expect
index a1b3d15..b3142fc 100644
--- a/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.transformed.expect
@@ -40,10 +40,10 @@
 static method main() → dynamic {
   self::expect(42, #C1);
   self::expect(42, #C1);
-  self::expect(42, (#C3).{self::Class::y});
+  self::expect(42, (#C3).{self::Class::y}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/constant_null_is.dart.strong.expect b/pkg/front_end/testcases/nnbd/constant_null_is.dart.strong.expect
index 6432e62..390e1a9 100644
--- a/pkg/front_end/testcases/nnbd/constant_null_is.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/constant_null_is.dart.strong.expect
@@ -59,24 +59,24 @@
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never>, #C3, "null is FutureOr<Never>");
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never?>, #C2, "null is FutureOr<Never?>");
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never>?, #C2, "null is FutureOr<Never>?");
-  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor1(null).field");
-  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor1(null).field");
-  self::expect(self::isWeakMode, (#C5).{self::Class::field}, "const Class<List<int>>.constructor1(<Null>[null]).field");
-  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor1(null).field");
-  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor2(null).field");
-  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor2(null).field");
-  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}, (#C8).{self::Class::field}, "Class<int?>.constructor2(null).field");
-  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor2(null).field");
-  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C9).{self::Class::field}, "Class<int?>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C9).{self::Class::field}, "Class<int?>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}, (#C10).{self::Class::field}, "Class<Null>.constructor3(null).field");
-  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor4(null).field");
-  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}, (#C8).{self::Class::field}, "Class<int?>.constructor4(null).field");
-  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor4(null).field");
+  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}{core::bool}, (#C4).{self::Class::field}{core::bool}, "Class<int>.constructor1(null).field");
+  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor1(null).field");
+  self::expect(self::isWeakMode, (#C5).{self::Class::field}{core::bool}, "const Class<List<int>>.constructor1(<Null>[null]).field");
+  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor1(null).field");
+  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}{core::bool}, (#C7).{self::Class::field}{core::bool}, "Class<int>.constructor2(null).field");
+  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, (#C8).{self::Class::field}{core::bool}, "Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor2(null).field");
+  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}{core::bool}, (#C4).{self::Class::field}{core::bool}, "Class<int>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, (#C9).{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, (#C9).{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}{core::bool}, (#C10).{self::Class::field}{core::bool}, "Class<Null>.constructor3(null).field");
+  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}{core::bool}, (#C7).{self::Class::field}{core::bool}, "Class<int>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}{core::bool}, (#C8).{self::Class::field}{core::bool}, "Class<int?>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor4(null).field");
 }
 static method expect(dynamic expected, dynamic actual, core::String message) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual} for ${message}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/constant_null_is.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/constant_null_is.dart.strong.transformed.expect
index 33c269a..d3fccea 100644
--- a/pkg/front_end/testcases/nnbd/constant_null_is.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/constant_null_is.dart.strong.transformed.expect
@@ -59,24 +59,24 @@
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never>, #C3, "null is FutureOr<Never>");
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never?>, #C2, "null is FutureOr<Never?>");
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never>?, #C2, "null is FutureOr<Never>?");
-  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor1(null).field");
-  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor1(null).field");
-  self::expect(self::isWeakMode, (#C5).{self::Class::field}, "const Class<List<int>>.constructor1(<Null>[null]).field");
-  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor1(null).field");
-  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor2(null).field");
-  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor2(null).field");
-  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}, (#C8).{self::Class::field}, "Class<int?>.constructor2(null).field");
-  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor2(null).field");
-  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C9).{self::Class::field}, "Class<int?>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C9).{self::Class::field}, "Class<int?>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}, (#C10).{self::Class::field}, "Class<Null>.constructor3(null).field");
-  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor4(null).field");
-  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}, (#C8).{self::Class::field}, "Class<int?>.constructor4(null).field");
-  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor4(null).field");
+  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}{core::bool}, (#C4).{self::Class::field}{core::bool}, "Class<int>.constructor1(null).field");
+  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor1(null).field");
+  self::expect(self::isWeakMode, (#C5).{self::Class::field}{core::bool}, "const Class<List<int>>.constructor1(<Null>[null]).field");
+  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor1(null).field");
+  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}{core::bool}, (#C7).{self::Class::field}{core::bool}, "Class<int>.constructor2(null).field");
+  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, (#C8).{self::Class::field}{core::bool}, "Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor2(null).field");
+  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}{core::bool}, (#C4).{self::Class::field}{core::bool}, "Class<int>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, (#C9).{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, (#C9).{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}{core::bool}, (#C10).{self::Class::field}{core::bool}, "Class<Null>.constructor3(null).field");
+  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}{core::bool}, (#C7).{self::Class::field}{core::bool}, "Class<int>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}{core::bool}, (#C8).{self::Class::field}{core::bool}, "Class<int?>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor4(null).field");
 }
 static method expect(dynamic expected, dynamic actual, core::String message) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual} for ${message}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/constant_null_is.dart.weak.expect b/pkg/front_end/testcases/nnbd/constant_null_is.dart.weak.expect
index d9f07b7..d14ab66 100644
--- a/pkg/front_end/testcases/nnbd/constant_null_is.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/constant_null_is.dart.weak.expect
@@ -59,24 +59,24 @@
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never>, #C3, "null is FutureOr<Never>");
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never?>, #C2, "null is FutureOr<Never?>");
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never>?, #C2, "null is FutureOr<Never>?");
-  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor1(null).field");
-  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor1(null).field");
-  self::expect(self::isWeakMode, (#C5).{self::Class::field}, "const Class<List<int>>.constructor1(<Null>[null]).field");
-  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor1(null).field");
-  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor2(null).field");
-  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor2(null).field");
-  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}, (#C8).{self::Class::field}, "Class<int?>.constructor2(null).field");
-  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor2(null).field");
-  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C9).{self::Class::field}, "Class<int?>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C9).{self::Class::field}, "Class<int?>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}, (#C10).{self::Class::field}, "Class<Null>.constructor3(null).field");
-  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor4(null).field");
-  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}, (#C8).{self::Class::field}, "Class<int?>.constructor4(null).field");
-  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor4(null).field");
+  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}{core::bool}, (#C4).{self::Class::field}{core::bool}, "Class<int>.constructor1(null).field");
+  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor1(null).field");
+  self::expect(self::isWeakMode, (#C5).{self::Class::field}{core::bool}, "const Class<List<int>>.constructor1(<Null>[null]).field");
+  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor1(null).field");
+  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}{core::bool}, (#C7).{self::Class::field}{core::bool}, "Class<int>.constructor2(null).field");
+  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, (#C8).{self::Class::field}{core::bool}, "Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor2(null).field");
+  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}{core::bool}, (#C4).{self::Class::field}{core::bool}, "Class<int>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, (#C9).{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, (#C9).{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}{core::bool}, (#C10).{self::Class::field}{core::bool}, "Class<Null>.constructor3(null).field");
+  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}{core::bool}, (#C7).{self::Class::field}{core::bool}, "Class<int>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}{core::bool}, (#C8).{self::Class::field}{core::bool}, "Class<int?>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor4(null).field");
 }
 static method expect(dynamic expected, dynamic actual, core::String message) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual} for ${message}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/constant_null_is.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/constant_null_is.dart.weak.transformed.expect
index 9710d1f..fc6a3ef 100644
--- a/pkg/front_end/testcases/nnbd/constant_null_is.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/constant_null_is.dart.weak.transformed.expect
@@ -59,24 +59,24 @@
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never>, #C3, "null is FutureOr<Never>");
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never?>, #C2, "null is FutureOr<Never?>");
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never>?, #C2, "null is FutureOr<Never>?");
-  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor1(null).field");
-  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor1(null).field");
-  self::expect(self::isWeakMode, (#C5).{self::Class::field}, "const Class<List<int>>.constructor1(<Null>[null]).field");
-  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor1(null).field");
-  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor2(null).field");
-  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor2(null).field");
-  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}, (#C8).{self::Class::field}, "Class<int?>.constructor2(null).field");
-  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor2(null).field");
-  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C9).{self::Class::field}, "Class<int?>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C9).{self::Class::field}, "Class<int?>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}, (#C10).{self::Class::field}, "Class<Null>.constructor3(null).field");
-  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor4(null).field");
-  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}, (#C8).{self::Class::field}, "Class<int?>.constructor4(null).field");
-  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor4(null).field");
+  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}{core::bool}, (#C4).{self::Class::field}{core::bool}, "Class<int>.constructor1(null).field");
+  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor1(null).field");
+  self::expect(self::isWeakMode, (#C5).{self::Class::field}{core::bool}, "const Class<List<int>>.constructor1(<Null>[null]).field");
+  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor1(null).field");
+  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}{core::bool}, (#C7).{self::Class::field}{core::bool}, "Class<int>.constructor2(null).field");
+  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, (#C8).{self::Class::field}{core::bool}, "Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor2(null).field");
+  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}{core::bool}, (#C4).{self::Class::field}{core::bool}, "Class<int>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, (#C9).{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, (#C9).{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}{core::bool}, (#C10).{self::Class::field}{core::bool}, "Class<Null>.constructor3(null).field");
+  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}{core::bool}, (#C7).{self::Class::field}{core::bool}, "Class<int>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}{core::bool}, (#C8).{self::Class::field}{core::bool}, "Class<int?>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor4(null).field");
 }
 static method expect(dynamic expected, dynamic actual, core::String message) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual} for ${message}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.outline.expect
index 846a242..b25d8c4 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.outline.expect
@@ -86,7 +86,7 @@
 Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:37:5 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:39:5 -> BoolConstant(true)
 Evaluated: TypeLiteral @ org-dartlang-testcase:///constants_lib.dart:16:27 -> TypeLiteralConstant(Object*)
-Evaluated: StaticGet @ org-dartlang-testcase:///constants_lib.dart:17:12 -> TearOffConstant(identical)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///constants_lib.dart:17:12 -> TearOffConstant(identical)
 Evaluated: Instantiation @ org-dartlang-testcase:///constants_lib.dart:18:48 -> PartialInstantiationConstant(id<int*>)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constants_lib.dart:19:24 -> InstanceConstant(const Class<int*>{Class.field: 0})
 Evaluated: TypeLiteral @ org-dartlang-testcase:///constants_lib.dart:20:29 -> TypeLiteralConstant(dynamic Function(dynamic)*)
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.expect
index f4bf705..ddfe4c9 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.expect
@@ -297,250 +297,250 @@
 }
 static method main() → dynamic {}
 static method testNonNullable(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
-  a.{self::A::==}(a);
-  a.{self::A::==}(b);
-  a.{self::A::==}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // error
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // error
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // error
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // error
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(a);
-  b.{self::B::==}(b);
-  b.{self::B::==}(let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // error
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // error
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // error
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // error
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic.{self::C::==}(let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // error
                ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // error
                ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(c_dynamic);
-  c_dynamic.{self::C::==}(c_int);
-  c_dynamic.{self::C::==}(c_string);
-  c_dynamic.{self::C::==}(d);
-  c_int.{self::C::==}(let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // error
            ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // error
            ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // error
            ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(c_int);
-  c_int.{self::C::==}(let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // error
            ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(d);
-  c_string.{self::C::==}(let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // error
               ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // error
               ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // error
               ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // error
               ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(c_string);
-  c_string.{self::C::==}(let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // error
               ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d.{self::C::==}(let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // error
        ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // error
        ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // error
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(c_int);
-  d.{self::C::==}(let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // error
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(d);
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
 static method testNullable(self::A? a, self::B? b, self::C<dynamic>? c_dynamic, self::C<core::int>? c_int, self::C<core::String>? c_string, self::D? d) → dynamic {
-  a.{self::A::==}(a);
-  a.{self::A::==}(b);
-  a.{self::A::==}(let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // ok or error ?
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // ok or error ?
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // ok or error ?
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // ok or error ?
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(a);
-  b.{self::B::==}(b);
-  b.{self::B::==}(let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // ok or error ?
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // ok or error ?
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // ok or error ?
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // ok or error ?
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic.{self::C::==}(let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // ok or error ?
                ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // ok or error ?
                ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(c_dynamic);
-  c_dynamic.{self::C::==}(c_int);
-  c_dynamic.{self::C::==}(c_string);
-  c_dynamic.{self::C::==}(d);
-  c_int.{self::C::==}(let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // ok or error ?
            ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // ok or error ?
            ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // ok or error ?
            ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(c_int);
-  c_int.{self::C::==}(let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // ok or error ?
            ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(d);
-  c_string.{self::C::==}(let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // ok or error ?
               ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // ok or error ?
               ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // ok or error ?
               ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // ok or error ?
               ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(c_string);
-  c_string.{self::C::==}(let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // ok or error ?
               ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d.{self::C::==}(let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // ok or error ?
        ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // ok or error ?
        ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // ok or error ?
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(c_int);
-  d.{self::C::==}(let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // ok or error ?
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(d);
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.transformed.expect
index f4bf705..ddfe4c9 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.transformed.expect
@@ -297,250 +297,250 @@
 }
 static method main() → dynamic {}
 static method testNonNullable(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
-  a.{self::A::==}(a);
-  a.{self::A::==}(b);
-  a.{self::A::==}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // error
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // error
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // error
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // error
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(a);
-  b.{self::B::==}(b);
-  b.{self::B::==}(let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // error
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // error
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // error
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // error
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic.{self::C::==}(let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // error
                ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // error
                ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(c_dynamic);
-  c_dynamic.{self::C::==}(c_int);
-  c_dynamic.{self::C::==}(c_string);
-  c_dynamic.{self::C::==}(d);
-  c_int.{self::C::==}(let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // error
            ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // error
            ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // error
            ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(c_int);
-  c_int.{self::C::==}(let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // error
            ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(d);
-  c_string.{self::C::==}(let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // error
               ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // error
               ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // error
               ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // error
               ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(c_string);
-  c_string.{self::C::==}(let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // error
               ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d.{self::C::==}(let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // error
        ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // error
        ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // error
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(c_int);
-  d.{self::C::==}(let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // error
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(d);
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
 static method testNullable(self::A? a, self::B? b, self::C<dynamic>? c_dynamic, self::C<core::int>? c_int, self::C<core::String>? c_string, self::D? d) → dynamic {
-  a.{self::A::==}(a);
-  a.{self::A::==}(b);
-  a.{self::A::==}(let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // ok or error ?
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // ok or error ?
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // ok or error ?
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // ok or error ?
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(a);
-  b.{self::B::==}(b);
-  b.{self::B::==}(let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // ok or error ?
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // ok or error ?
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // ok or error ?
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // ok or error ?
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic.{self::C::==}(let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // ok or error ?
                ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // ok or error ?
                ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(c_dynamic);
-  c_dynamic.{self::C::==}(c_int);
-  c_dynamic.{self::C::==}(c_string);
-  c_dynamic.{self::C::==}(d);
-  c_int.{self::C::==}(let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // ok or error ?
            ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // ok or error ?
            ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // ok or error ?
            ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(c_int);
-  c_int.{self::C::==}(let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // ok or error ?
            ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(d);
-  c_string.{self::C::==}(let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // ok or error ?
               ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // ok or error ?
               ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // ok or error ?
               ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // ok or error ?
               ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(c_string);
-  c_string.{self::C::==}(let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // ok or error ?
               ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d.{self::C::==}(let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // ok or error ?
        ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // ok or error ?
        ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // ok or error ?
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(c_int);
-  d.{self::C::==}(let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // ok or error ?
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(d);
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.expect
index f4bf705..ddfe4c9 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.expect
@@ -297,250 +297,250 @@
 }
 static method main() → dynamic {}
 static method testNonNullable(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
-  a.{self::A::==}(a);
-  a.{self::A::==}(b);
-  a.{self::A::==}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // error
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // error
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // error
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // error
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(a);
-  b.{self::B::==}(b);
-  b.{self::B::==}(let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // error
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // error
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // error
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // error
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic.{self::C::==}(let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // error
                ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // error
                ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(c_dynamic);
-  c_dynamic.{self::C::==}(c_int);
-  c_dynamic.{self::C::==}(c_string);
-  c_dynamic.{self::C::==}(d);
-  c_int.{self::C::==}(let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // error
            ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // error
            ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // error
            ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(c_int);
-  c_int.{self::C::==}(let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // error
            ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(d);
-  c_string.{self::C::==}(let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // error
               ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // error
               ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // error
               ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // error
               ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(c_string);
-  c_string.{self::C::==}(let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // error
               ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d.{self::C::==}(let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // error
        ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // error
        ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // error
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(c_int);
-  d.{self::C::==}(let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // error
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(d);
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
 static method testNullable(self::A? a, self::B? b, self::C<dynamic>? c_dynamic, self::C<core::int>? c_int, self::C<core::String>? c_string, self::D? d) → dynamic {
-  a.{self::A::==}(a);
-  a.{self::A::==}(b);
-  a.{self::A::==}(let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // ok or error ?
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // ok or error ?
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // ok or error ?
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // ok or error ?
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(a);
-  b.{self::B::==}(b);
-  b.{self::B::==}(let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // ok or error ?
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // ok or error ?
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // ok or error ?
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // ok or error ?
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic.{self::C::==}(let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // ok or error ?
                ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // ok or error ?
                ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(c_dynamic);
-  c_dynamic.{self::C::==}(c_int);
-  c_dynamic.{self::C::==}(c_string);
-  c_dynamic.{self::C::==}(d);
-  c_int.{self::C::==}(let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // ok or error ?
            ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // ok or error ?
            ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // ok or error ?
            ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(c_int);
-  c_int.{self::C::==}(let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // ok or error ?
            ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(d);
-  c_string.{self::C::==}(let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // ok or error ?
               ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // ok or error ?
               ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // ok or error ?
               ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // ok or error ?
               ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(c_string);
-  c_string.{self::C::==}(let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // ok or error ?
               ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d.{self::C::==}(let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // ok or error ?
        ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // ok or error ?
        ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // ok or error ?
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(c_int);
-  d.{self::C::==}(let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // ok or error ?
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(d);
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.transformed.expect
index f4bf705..ddfe4c9 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.transformed.expect
@@ -297,250 +297,250 @@
 }
 static method main() → dynamic {}
 static method testNonNullable(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
-  a.{self::A::==}(a);
-  a.{self::A::==}(b);
-  a.{self::A::==}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // error
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // error
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // error
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // error
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(a);
-  b.{self::B::==}(b);
-  b.{self::B::==}(let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // error
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // error
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // error
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // error
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic.{self::C::==}(let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // error
                ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // error
                ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(c_dynamic);
-  c_dynamic.{self::C::==}(c_int);
-  c_dynamic.{self::C::==}(c_string);
-  c_dynamic.{self::C::==}(d);
-  c_int.{self::C::==}(let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // error
            ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // error
            ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // error
            ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(c_int);
-  c_int.{self::C::==}(let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // error
            ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(d);
-  c_string.{self::C::==}(let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // error
               ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // error
               ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // error
               ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // error
               ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(c_string);
-  c_string.{self::C::==}(let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // error
               ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d.{self::C::==}(let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // error
        ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // error
        ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // error
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(c_int);
-  d.{self::C::==}(let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // error
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(d);
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
 static method testNullable(self::A? a, self::B? b, self::C<dynamic>? c_dynamic, self::C<core::int>? c_int, self::C<core::String>? c_string, self::D? d) → dynamic {
-  a.{self::A::==}(a);
-  a.{self::A::==}(b);
-  a.{self::A::==}(let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_dynamic; // ok or error ?
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_int; // ok or error ?
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == c_string; // ok or error ?
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  a.{self::A::==}(let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+  a =={self::A::==}{(self::A) → core::bool} (let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   a == d; // ok or error ?
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(a);
-  b.{self::B::==}(b);
-  b.{self::B::==}(let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_dynamic; // ok or error ?
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_int; // ok or error ?
        ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == c_string; // ok or error ?
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?);
-  b.{self::B::==}(let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+  b =={self::B::==}{(self::A) → core::bool} (let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   b == d; // ok or error ?
        ^" in d as{TypeError,ForNonNullableByDefault} self::A?);
-  c_dynamic.{self::C::==}(let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == a; // ok or error ?
                ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_dynamic == b; // ok or error ?
                ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?);
-  c_dynamic.{self::C::==}(c_dynamic);
-  c_dynamic.{self::C::==}(c_int);
-  c_dynamic.{self::C::==}(c_string);
-  c_dynamic.{self::C::==}(d);
-  c_int.{self::C::==}(let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == a; // ok or error ?
            ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == b; // ok or error ?
            ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_dynamic; // ok or error ?
            ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(c_int);
-  c_int.{self::C::==}(let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_int == c_string; // ok or error ?
            ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  c_int.{self::C::==}(d);
-  c_string.{self::C::==}(let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == a; // ok or error ?
               ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == b; // ok or error ?
               ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_dynamic; // ok or error ?
               ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == c_int; // ok or error ?
               ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  c_string.{self::C::==}(c_string);
-  c_string.{self::C::==}(let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} (let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   c_string == d; // ok or error ?
               ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?);
-  d.{self::C::==}(let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == a; // ok or error ?
        ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == b; // ok or error ?
        ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_dynamic; // ok or error ?
        ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(c_int);
-  d.{self::C::==}(let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} (let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
   d == c_string; // ok or error ?
        ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?);
-  d.{self::C::==}(d);
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.expect
index b63b878..b478d6b 100644
--- a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.expect
@@ -107,7 +107,7 @@
   local4 = 0;
   let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in local4 = local4.{core::num::+}(0);
+  ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   late final self::methodDirect::T% local2;
@@ -153,6 +153,6 @@
   local4 = 0;
   let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in local4 = local4.{core::num::+}(0);
+  ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.transformed.expect
index b63b878..b478d6b 100644
--- a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.transformed.expect
@@ -107,7 +107,7 @@
   local4 = 0;
   let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in local4 = local4.{core::num::+}(0);
+  ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   late final self::methodDirect::T% local2;
@@ -153,6 +153,6 @@
   local4 = 0;
   let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in local4 = local4.{core::num::+}(0);
+  ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.expect
index b63b878..b478d6b 100644
--- a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.expect
@@ -107,7 +107,7 @@
   local4 = 0;
   let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in local4 = local4.{core::num::+}(0);
+  ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   late final self::methodDirect::T% local2;
@@ -153,6 +153,6 @@
   local4 = 0;
   let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in local4 = local4.{core::num::+}(0);
+  ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.transformed.expect
index b63b878..b478d6b 100644
--- a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.transformed.expect
@@ -107,7 +107,7 @@
   local4 = 0;
   let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in local4 = local4.{core::num::+}(0);
+  ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   late final self::methodDirect::T% local2;
@@ -153,6 +153,6 @@
   local4 = 0;
   let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
   local4 += 0; // error
-  ^^^^^^" in local4 = local4.{core::num::+}(0);
+  ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.expect
index e50077d..50bf941 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.expect
@@ -159,10 +159,10 @@
   late core::int local4;
   local3 = (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
   local4 = (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0);
+  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -228,9 +228,9 @@
   late core::int local4;
   local3 = (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
   local4 = (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0);
+  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.transformed.expect
index e003c09..8295079 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.transformed.expect
@@ -163,10 +163,10 @@
   late core::int local4;
   local3 = (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
   local4 = (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0);
+  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -236,9 +236,9 @@
   late core::int local4;
   local3 = (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
   local4 = (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0);
+  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.expect
index e50077d..50bf941 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.expect
@@ -159,10 +159,10 @@
   late core::int local4;
   local3 = (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
   local4 = (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0);
+  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -228,9 +228,9 @@
   late core::int local4;
   local3 = (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
   local4 = (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0);
+  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.transformed.expect
index e003c09..8295079 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.transformed.expect
@@ -163,10 +163,10 @@
   late core::int local4;
   local3 = (let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
   local4 = (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0);
+  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
 };
 static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
   self::methodDirect::T% local1;
@@ -236,9 +236,9 @@
   late core::int local4;
   local3 = (let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
   local3 += 0; // error
-  ^^^^^^" in local3).{core::num::+}(0);
+  ^^^^^^" in local3).{core::num::+}(0){(core::num) → core::int};
   local4 = (let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
   local4 += 0; // error
-  ^^^^^^" in local4).{core::num::+}(0);
+  ^^^^^^" in local4).{core::num::+}(0){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect
index 0ba1c44..f47ac7f 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect
@@ -24,10 +24,10 @@
     late core::int intValue;
     this.{self::A::bar}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
     bar(value); // Error.
-        ^^^^^" in value);
+        ^^^^^" in value){(self::A::T%) → dynamic};
     this.{self::A::barInt}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
     barInt(intValue); // Error.
-           ^^^^^^^^" in intValue);
+           ^^^^^^^^" in intValue){(core::int) → dynamic};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect
index 0ba1c44..f47ac7f 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect
@@ -24,10 +24,10 @@
     late core::int intValue;
     this.{self::A::bar}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
     bar(value); // Error.
-        ^^^^^" in value);
+        ^^^^^" in value){(self::A::T%) → dynamic};
     this.{self::A::barInt}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
     barInt(intValue); // Error.
-           ^^^^^^^^" in intValue);
+           ^^^^^^^^" in intValue){(core::int) → dynamic};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect
index 0ba1c44..f47ac7f 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect
@@ -24,10 +24,10 @@
     late core::int intValue;
     this.{self::A::bar}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
     bar(value); // Error.
-        ^^^^^" in value);
+        ^^^^^" in value){(self::A::T%) → dynamic};
     this.{self::A::barInt}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
     barInt(intValue); // Error.
-           ^^^^^^^^" in intValue);
+           ^^^^^^^^" in intValue){(core::int) → dynamic};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect
index 0ba1c44..f47ac7f 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect
@@ -24,10 +24,10 @@
     late core::int intValue;
     this.{self::A::bar}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
     bar(value); // Error.
-        ^^^^^" in value);
+        ^^^^^" in value){(self::A::T%) → dynamic};
     this.{self::A::barInt}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
     barInt(intValue); // Error.
-           ^^^^^^^^" in intValue);
+           ^^^^^^^^" in intValue){(core::int) → dynamic};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.expect b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.expect
index 7210f8e..f003f8c 100644
--- a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.expect
@@ -14,7 +14,7 @@
     () → self::method::T% f = () → self::method::T% => a{self::method::T% & core::String /* '%' & '!' = '!' */};
     core::String s = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
-                ^" in f.call() as{TypeError,ForNonNullableByDefault} core::String;
+                ^" in f(){() → self::method::T%} as{TypeError,ForNonNullableByDefault} core::String;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.transformed.expect
index 7210f8e..f003f8c 100644
--- a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.strong.transformed.expect
@@ -14,7 +14,7 @@
     () → self::method::T% f = () → self::method::T% => a{self::method::T% & core::String /* '%' & '!' = '!' */};
     core::String s = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
-                ^" in f.call() as{TypeError,ForNonNullableByDefault} core::String;
+                ^" in f(){() → self::method::T%} as{TypeError,ForNonNullableByDefault} core::String;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.expect b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.expect
index 7210f8e..f003f8c 100644
--- a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.expect
@@ -14,7 +14,7 @@
     () → self::method::T% f = () → self::method::T% => a{self::method::T% & core::String /* '%' & '!' = '!' */};
     core::String s = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
-                ^" in f.call() as{TypeError,ForNonNullableByDefault} core::String;
+                ^" in f(){() → self::method::T%} as{TypeError,ForNonNullableByDefault} core::String;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.transformed.expect
index 7210f8e..f003f8c 100644
--- a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
     () → self::method::T% f = () → self::method::T% => a{self::method::T% & core::String /* '%' & '!' = '!' */};
     core::String s = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
-                ^" in f.call() as{TypeError,ForNonNullableByDefault} core::String;
+                ^" in f(){() → self::method::T%} as{TypeError,ForNonNullableByDefault} core::String;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect
index 383d3de..9c492c7 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect
@@ -258,7 +258,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^".call();
+     ^^^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
@@ -285,7 +285,7 @@
   c.instanceDuplicateFieldAndSetter;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
-  c.{self::Class::instanceFieldAndDuplicateSetter};
+  c.{self::Class::instanceFieldAndDuplicateSetter}{core::int};
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
@@ -306,35 +306,35 @@
   self::Class c = new self::Class::•();
   c.{self::Class::instanceFieldAndSetter1} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceFieldAndSetter1});
+  self::expect(0, c.{self::Class::instanceFieldAndSetter1}{core::int});
   self::result = null;
   c.{self::Class::instanceFieldAndSetter2} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceFieldAndSetter2});
+  self::expect(0, c.{self::Class::instanceFieldAndSetter2}{core::int});
   self::result = null;
   c.{self::Class::instanceLateFinalFieldAndSetter1} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter1});
+  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter1}{core::int});
   self::result = null;
   c.{self::Class::instanceLateFinalFieldAndSetter2} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2});
+  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2}{core::int});
   self::result = null;
-  self::expect(1, c.{self::Class::instanceMethodAndSetter1}());
+  self::expect(1, c.{self::Class::instanceMethodAndSetter1}(){() → core::int});
   c.{self::Class::instanceMethodAndSetter1} = 0;
   self::expect(2, self::result);
   self::result = null;
-  self::expect(1, c.{self::Class::instanceMethodAndSetter2}());
+  self::expect(1, c.{self::Class::instanceMethodAndSetter2}(){() → core::int});
   c.{self::Class::instanceMethodAndSetter2} = 0;
   self::expect(2, self::result);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect
index 383d3de..9c492c7 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect
@@ -258,7 +258,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^".call();
+     ^^^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
@@ -285,7 +285,7 @@
   c.instanceDuplicateFieldAndSetter;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
-  c.{self::Class::instanceFieldAndDuplicateSetter};
+  c.{self::Class::instanceFieldAndDuplicateSetter}{core::int};
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
@@ -306,35 +306,35 @@
   self::Class c = new self::Class::•();
   c.{self::Class::instanceFieldAndSetter1} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceFieldAndSetter1});
+  self::expect(0, c.{self::Class::instanceFieldAndSetter1}{core::int});
   self::result = null;
   c.{self::Class::instanceFieldAndSetter2} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceFieldAndSetter2});
+  self::expect(0, c.{self::Class::instanceFieldAndSetter2}{core::int});
   self::result = null;
   c.{self::Class::instanceLateFinalFieldAndSetter1} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter1});
+  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter1}{core::int});
   self::result = null;
   c.{self::Class::instanceLateFinalFieldAndSetter2} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2});
+  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2}{core::int});
   self::result = null;
-  self::expect(1, c.{self::Class::instanceMethodAndSetter1}());
+  self::expect(1, c.{self::Class::instanceMethodAndSetter1}(){() → core::int});
   c.{self::Class::instanceMethodAndSetter1} = 0;
   self::expect(2, self::result);
   self::result = null;
-  self::expect(1, c.{self::Class::instanceMethodAndSetter2}());
+  self::expect(1, c.{self::Class::instanceMethodAndSetter2}(){() → core::int});
   c.{self::Class::instanceMethodAndSetter2} = 0;
   self::expect(2, self::result);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect
index 383d3de..9c492c7 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect
@@ -258,7 +258,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^".call();
+     ^^^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
@@ -285,7 +285,7 @@
   c.instanceDuplicateFieldAndSetter;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
-  c.{self::Class::instanceFieldAndDuplicateSetter};
+  c.{self::Class::instanceFieldAndDuplicateSetter}{core::int};
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
@@ -306,35 +306,35 @@
   self::Class c = new self::Class::•();
   c.{self::Class::instanceFieldAndSetter1} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceFieldAndSetter1});
+  self::expect(0, c.{self::Class::instanceFieldAndSetter1}{core::int});
   self::result = null;
   c.{self::Class::instanceFieldAndSetter2} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceFieldAndSetter2});
+  self::expect(0, c.{self::Class::instanceFieldAndSetter2}{core::int});
   self::result = null;
   c.{self::Class::instanceLateFinalFieldAndSetter1} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter1});
+  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter1}{core::int});
   self::result = null;
   c.{self::Class::instanceLateFinalFieldAndSetter2} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2});
+  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2}{core::int});
   self::result = null;
-  self::expect(1, c.{self::Class::instanceMethodAndSetter1}());
+  self::expect(1, c.{self::Class::instanceMethodAndSetter1}(){() → core::int});
   c.{self::Class::instanceMethodAndSetter1} = 0;
   self::expect(2, self::result);
   self::result = null;
-  self::expect(1, c.{self::Class::instanceMethodAndSetter2}());
+  self::expect(1, c.{self::Class::instanceMethodAndSetter2}(){() → core::int});
   c.{self::Class::instanceMethodAndSetter2} = 0;
   self::expect(2, self::result);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect
index 383d3de..9c492c7 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect
@@ -258,7 +258,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^".call();
+     ^^^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
@@ -285,7 +285,7 @@
   c.instanceDuplicateFieldAndSetter;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
-  c.{self::Class::instanceFieldAndDuplicateSetter};
+  c.{self::Class::instanceFieldAndDuplicateSetter}{core::int};
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
@@ -306,35 +306,35 @@
   self::Class c = new self::Class::•();
   c.{self::Class::instanceFieldAndSetter1} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceFieldAndSetter1});
+  self::expect(0, c.{self::Class::instanceFieldAndSetter1}{core::int});
   self::result = null;
   c.{self::Class::instanceFieldAndSetter2} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceFieldAndSetter2});
+  self::expect(0, c.{self::Class::instanceFieldAndSetter2}{core::int});
   self::result = null;
   c.{self::Class::instanceLateFinalFieldAndSetter1} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter1});
+  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter1}{core::int});
   self::result = null;
   c.{self::Class::instanceLateFinalFieldAndSetter2} = 0;
   self::expect(null, self::result);
-  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2});
+  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2}{core::int});
   self::result = null;
-  self::expect(1, c.{self::Class::instanceMethodAndSetter1}());
+  self::expect(1, c.{self::Class::instanceMethodAndSetter1}(){() → core::int});
   c.{self::Class::instanceMethodAndSetter1} = 0;
   self::expect(2, self::result);
   self::result = null;
-  self::expect(1, c.{self::Class::instanceMethodAndSetter2}());
+  self::expect(1, c.{self::Class::instanceMethodAndSetter2}(){() → core::int});
   c.{self::Class::instanceMethodAndSetter2} = 0;
   self::expect(2, self::result);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.expect
index 6e1d27e..85f6043 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.expect
@@ -332,7 +332,7 @@
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:84:6: Error: The getter 'instanceMethod' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^".call();
+     ^^^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:85:5: Error: The getter 'instanceGetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
   c.instanceGetter;
@@ -417,12 +417,12 @@
   self::expect(2, self::result);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.transformed.expect
index 6e1d27e..85f6043 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.strong.transformed.expect
@@ -332,7 +332,7 @@
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:84:6: Error: The getter 'instanceMethod' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^".call();
+     ^^^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:85:5: Error: The getter 'instanceGetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
   c.instanceGetter;
@@ -417,12 +417,12 @@
   self::expect(2, self::result);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.expect
index 6e1d27e..85f6043 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.expect
@@ -332,7 +332,7 @@
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:84:6: Error: The getter 'instanceMethod' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^".call();
+     ^^^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:85:5: Error: The getter 'instanceGetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
   c.instanceGetter;
@@ -417,12 +417,12 @@
   self::expect(2, self::result);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.transformed.expect
index 6e1d27e..85f6043 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.transformed.expect
@@ -332,7 +332,7 @@
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:84:6: Error: The getter 'instanceMethod' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
   (c.instanceMethod)();
-     ^^^^^^^^^^^^^^".call();
+     ^^^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:85:5: Error: The getter 'instanceGetter' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
   c.instanceGetter;
@@ -417,12 +417,12 @@
   self::expect(2, self::result);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.expect
index 21e3973..d487082 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.expect
@@ -221,7 +221,7 @@
         ^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
   (Class.staticMethod)();
-         ^^^^^^^^^^^^".call();
+         ^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
   Class.staticGetter;
         ^^^^^^^^^^^^";
@@ -278,12 +278,12 @@
   self::expect(1, self::Class::staticMethodAndSetter2());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.transformed.expect
index 21e3973..d487082 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.transformed.expect
@@ -221,7 +221,7 @@
         ^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
   (Class.staticMethod)();
-         ^^^^^^^^^^^^".call();
+         ^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
   Class.staticGetter;
         ^^^^^^^^^^^^";
@@ -278,12 +278,12 @@
   self::expect(1, self::Class::staticMethodAndSetter2());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.expect
index 21e3973..d487082 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.expect
@@ -221,7 +221,7 @@
         ^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
   (Class.staticMethod)();
-         ^^^^^^^^^^^^".call();
+         ^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
   Class.staticGetter;
         ^^^^^^^^^^^^";
@@ -278,12 +278,12 @@
   self::expect(1, self::Class::staticMethodAndSetter2());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.transformed.expect
index 21e3973..d487082 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.transformed.expect
@@ -221,7 +221,7 @@
         ^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
   (Class.staticMethod)();
-         ^^^^^^^^^^^^".call();
+         ^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
   Class.staticGetter;
         ^^^^^^^^^^^^";
@@ -278,12 +278,12 @@
   self::expect(1, self::Class::staticMethodAndSetter2());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.expect
index 2f9b306..925247a 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.expect
@@ -238,7 +238,7 @@
             ^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
   (Extension.staticMethod)();
-             ^^^^^^^^^^^^".call();
+             ^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
   Extension.staticGetter;
             ^^^^^^^^^^^^";
@@ -295,12 +295,12 @@
   self::expect(1, self::Extension|staticMethodAndSetter2());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.transformed.expect
index 2f9b306..925247a 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.transformed.expect
@@ -238,7 +238,7 @@
             ^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
   (Extension.staticMethod)();
-             ^^^^^^^^^^^^".call();
+             ^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
   Extension.staticGetter;
             ^^^^^^^^^^^^";
@@ -295,12 +295,12 @@
   self::expect(1, self::Extension|staticMethodAndSetter2());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.expect
index 2f9b306..925247a 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.expect
@@ -238,7 +238,7 @@
             ^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
   (Extension.staticMethod)();
-             ^^^^^^^^^^^^".call();
+             ^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
   Extension.staticGetter;
             ^^^^^^^^^^^^";
@@ -295,12 +295,12 @@
   self::expect(1, self::Extension|staticMethodAndSetter2());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.transformed.expect
index 2f9b306..925247a 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.transformed.expect
@@ -238,7 +238,7 @@
             ^^^^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
   (Extension.staticMethod)();
-             ^^^^^^^^^^^^".call();
+             ^^^^^^^^^^^^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
   Extension.staticGetter;
             ^^^^^^^^^^^^";
@@ -295,12 +295,12 @@
   self::expect(1, self::Extension|staticMethodAndSetter2());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect
index 3f6e28a..ca55581 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect
@@ -206,10 +206,10 @@
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
   topLevelMethod();
-  ^".call();
+  ^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
   (topLevelMethod)();
-   ^".call();
+   ^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
   topLevelGetter;
   ^";
@@ -266,12 +266,12 @@
   self::expect(1, self::topLevelMethodAndSetter2());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect
index 3f6e28a..ca55581 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect
@@ -206,10 +206,10 @@
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
   topLevelMethod();
-  ^".call();
+  ^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
   (topLevelMethod)();
-   ^".call();
+   ^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
   topLevelGetter;
   ^";
@@ -266,12 +266,12 @@
   self::expect(1, self::topLevelMethodAndSetter2());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect
index 3f6e28a..ca55581 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect
@@ -206,10 +206,10 @@
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
   topLevelMethod();
-  ^".call();
+  ^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
   (topLevelMethod)();
-   ^".call();
+   ^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
   topLevelGetter;
   ^";
@@ -266,12 +266,12 @@
   self::expect(1, self::topLevelMethodAndSetter2());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect
index 3f6e28a..ca55581 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect
@@ -206,10 +206,10 @@
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
   topLevelMethod();
-  ^".call();
+  ^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
   (topLevelMethod)();
-   ^".call();
+   ^"{dynamic}.call();
   invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
   topLevelGetter;
   ^";
@@ -266,12 +266,12 @@
   self::expect(1, self::topLevelMethodAndSetter2());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f) → dynamic {
   try {
-    f.call();
+    f(){() → dynamic};
   }
   on core::Object catch(final core::Object e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.expect b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.expect
index e04e05f..db34931 100644
--- a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.expect
@@ -28,19 +28,19 @@
 static method main() → dynamic {}
 static method test() → dynamic {
   dynamic c = new self::Class::•();
-  core::String v1 = c.{core::Object::toString}();
-  dynamic v2 = c.toString(foo: 42);
-  () → core::String v3 = c.{core::Object::toString};
-  core::int v4 = c.{core::Object::hashCode};
+  core::String v1 = c.{core::Object::toString}(){() → core::String};
+  dynamic v2 = c{dynamic}.toString(foo: 42);
+  () → core::String v3 = c.{core::Object::toString}{() → core::String};
+  core::int v4 = c.{core::Object::hashCode}{core::int};
   dynamic v5 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:21:22: Error: 'hashCode' isn't a function or method and can't be invoked.
   var v5 = c.hashCode();
                      ^^^^...";
   dynamic v6 = c.{core::Object::noSuchMethod}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
  - 'Invocation' is from 'dart:core'.
   var v6 = c.noSuchMethod(\"foo\");
-                          ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation);
-  dynamic v7 = c.noSuchMethod("foo", foo: 42);
-  (core::Invocation) → dynamic v8 = c.{core::Object::noSuchMethod};
+                          ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation){(core::Invocation) → dynamic};
+  dynamic v7 = c{dynamic}.noSuchMethod("foo", foo: 42);
+  (core::Invocation) → dynamic v8 = c.{core::Object::noSuchMethod}{(core::Invocation) → dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.transformed.expect
index e04e05f..db34931 100644
--- a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.strong.transformed.expect
@@ -28,19 +28,19 @@
 static method main() → dynamic {}
 static method test() → dynamic {
   dynamic c = new self::Class::•();
-  core::String v1 = c.{core::Object::toString}();
-  dynamic v2 = c.toString(foo: 42);
-  () → core::String v3 = c.{core::Object::toString};
-  core::int v4 = c.{core::Object::hashCode};
+  core::String v1 = c.{core::Object::toString}(){() → core::String};
+  dynamic v2 = c{dynamic}.toString(foo: 42);
+  () → core::String v3 = c.{core::Object::toString}{() → core::String};
+  core::int v4 = c.{core::Object::hashCode}{core::int};
   dynamic v5 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:21:22: Error: 'hashCode' isn't a function or method and can't be invoked.
   var v5 = c.hashCode();
                      ^^^^...";
   dynamic v6 = c.{core::Object::noSuchMethod}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
  - 'Invocation' is from 'dart:core'.
   var v6 = c.noSuchMethod(\"foo\");
-                          ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation);
-  dynamic v7 = c.noSuchMethod("foo", foo: 42);
-  (core::Invocation) → dynamic v8 = c.{core::Object::noSuchMethod};
+                          ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation){(core::Invocation) → dynamic};
+  dynamic v7 = c{dynamic}.noSuchMethod("foo", foo: 42);
+  (core::Invocation) → dynamic v8 = c.{core::Object::noSuchMethod}{(core::Invocation) → dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.expect b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.expect
index e04e05f..db34931 100644
--- a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.expect
@@ -28,19 +28,19 @@
 static method main() → dynamic {}
 static method test() → dynamic {
   dynamic c = new self::Class::•();
-  core::String v1 = c.{core::Object::toString}();
-  dynamic v2 = c.toString(foo: 42);
-  () → core::String v3 = c.{core::Object::toString};
-  core::int v4 = c.{core::Object::hashCode};
+  core::String v1 = c.{core::Object::toString}(){() → core::String};
+  dynamic v2 = c{dynamic}.toString(foo: 42);
+  () → core::String v3 = c.{core::Object::toString}{() → core::String};
+  core::int v4 = c.{core::Object::hashCode}{core::int};
   dynamic v5 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:21:22: Error: 'hashCode' isn't a function or method and can't be invoked.
   var v5 = c.hashCode();
                      ^^^^...";
   dynamic v6 = c.{core::Object::noSuchMethod}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
  - 'Invocation' is from 'dart:core'.
   var v6 = c.noSuchMethod(\"foo\");
-                          ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation);
-  dynamic v7 = c.noSuchMethod("foo", foo: 42);
-  (core::Invocation) → dynamic v8 = c.{core::Object::noSuchMethod};
+                          ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation){(core::Invocation) → dynamic};
+  dynamic v7 = c{dynamic}.noSuchMethod("foo", foo: 42);
+  (core::Invocation) → dynamic v8 = c.{core::Object::noSuchMethod}{(core::Invocation) → dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.transformed.expect
index e04e05f..db34931 100644
--- a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.transformed.expect
@@ -28,19 +28,19 @@
 static method main() → dynamic {}
 static method test() → dynamic {
   dynamic c = new self::Class::•();
-  core::String v1 = c.{core::Object::toString}();
-  dynamic v2 = c.toString(foo: 42);
-  () → core::String v3 = c.{core::Object::toString};
-  core::int v4 = c.{core::Object::hashCode};
+  core::String v1 = c.{core::Object::toString}(){() → core::String};
+  dynamic v2 = c{dynamic}.toString(foo: 42);
+  () → core::String v3 = c.{core::Object::toString}{() → core::String};
+  core::int v4 = c.{core::Object::hashCode}{core::int};
   dynamic v5 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:21:22: Error: 'hashCode' isn't a function or method and can't be invoked.
   var v5 = c.hashCode();
                      ^^^^...";
   dynamic v6 = c.{core::Object::noSuchMethod}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
  - 'Invocation' is from 'dart:core'.
   var v6 = c.noSuchMethod(\"foo\");
-                          ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation);
-  dynamic v7 = c.noSuchMethod("foo", foo: 42);
-  (core::Invocation) → dynamic v8 = c.{core::Object::noSuchMethod};
+                          ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation){(core::Invocation) → dynamic};
+  dynamic v7 = c{dynamic}.noSuchMethod("foo", foo: 42);
+  (core::Invocation) → dynamic v8 = c.{core::Object::noSuchMethod}{(core::Invocation) → dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/extension_never.dart.strong.expect b/pkg/front_end/testcases/nnbd/extension_never.dart.strong.expect
index 0319a8a..86d0862 100644
--- a/pkg/front_end/testcases/nnbd/extension_never.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/extension_never.dart.strong.expect
@@ -9,8 +9,8 @@
 static method Extension|get#extensionMethod(lowered final Never #this) → () → dynamic
   return () → dynamic => self::Extension|extensionMethod(#this);
 static method implicitAccess(Never never) → dynamic {
-  never.extensionMethod();
-  never.missingMethod();
+  never{Never}.extensionMethod();
+  never{Never}.missingMethod();
 }
 static method explicitAccess(Never never) → dynamic {
   self::Extension|extensionMethod(never);
diff --git a/pkg/front_end/testcases/nnbd/extension_never.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/extension_never.dart.strong.transformed.expect
index 0319a8a..86d0862 100644
--- a/pkg/front_end/testcases/nnbd/extension_never.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/extension_never.dart.strong.transformed.expect
@@ -9,8 +9,8 @@
 static method Extension|get#extensionMethod(lowered final Never #this) → () → dynamic
   return () → dynamic => self::Extension|extensionMethod(#this);
 static method implicitAccess(Never never) → dynamic {
-  never.extensionMethod();
-  never.missingMethod();
+  never{Never}.extensionMethod();
+  never{Never}.missingMethod();
 }
 static method explicitAccess(Never never) → dynamic {
   self::Extension|extensionMethod(never);
diff --git a/pkg/front_end/testcases/nnbd/extension_never.dart.weak.expect b/pkg/front_end/testcases/nnbd/extension_never.dart.weak.expect
index b3068c2..16f18a0 100644
--- a/pkg/front_end/testcases/nnbd/extension_never.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/extension_never.dart.weak.expect
@@ -10,8 +10,8 @@
 static method Extension|get#extensionMethod(lowered final Never #this) → () → dynamic
   return () → dynamic => self::Extension|extensionMethod(#this);
 static method implicitAccess(Never never) → dynamic {
-  let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).extensionMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).missingMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.extensionMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.missingMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 }
 static method explicitAccess(Never never) → dynamic {
   self::Extension|extensionMethod(let final Never #t5 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
diff --git a/pkg/front_end/testcases/nnbd/extension_never.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/extension_never.dart.weak.transformed.expect
index b3068c2..16f18a0 100644
--- a/pkg/front_end/testcases/nnbd/extension_never.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/extension_never.dart.weak.transformed.expect
@@ -10,8 +10,8 @@
 static method Extension|get#extensionMethod(lowered final Never #this) → () → dynamic
   return () → dynamic => self::Extension|extensionMethod(#this);
 static method implicitAccess(Never never) → dynamic {
-  let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).extensionMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).missingMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.extensionMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.missingMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 }
 static method explicitAccess(Never never) → dynamic {
   self::Extension|extensionMethod(let final Never #t5 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.expect
index 9eabe2c..5390151 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.expect
@@ -57,7 +57,7 @@
   return new self::Class::•();
 }
 static method test2<T extends self::Class>(self::test2::T t2) → dynamic {
-  if(self::test2::T.{core::Type::==}(#C1)) {
+  if(self::test2::T =={core::Type::==}{(core::Object) → core::bool} (#C1)) {
     self::SubClass subClass = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
     SubClass subClass = t2.method2();
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.transformed.expect
index 3d46c4f..06d884d 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.strong.transformed.expect
@@ -57,7 +57,7 @@
   return new self::Class::•();
 }
 static method test2<T extends self::Class>(self::test2::T t2) → dynamic {
-  if(self::test2::T.{core::Type::==}(#C1)) {
+  if(self::test2::T =={core::Type::==}{(core::Object) → core::bool} (#C1)) {
     self::SubClass subClass = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
     SubClass subClass = t2.method2();
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.expect
index b1bfc74..566b27a 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.expect
@@ -57,7 +57,7 @@
   return new self::Class::•();
 }
 static method test2<T extends self::Class>(self::test2::T t2) → dynamic {
-  if(self::test2::T.{core::Type::==}(#C1)) {
+  if(self::test2::T =={core::Type::==}{(core::Object) → core::bool} (#C1)) {
     self::SubClass subClass = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
     SubClass subClass = t2.method2();
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.transformed.expect
index ae9d534..60b5e6c 100644
--- a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.transformed.expect
@@ -57,7 +57,7 @@
   return new self::Class::•();
 }
 static method test2<T extends self::Class>(self::test2::T t2) → dynamic {
-  if(self::test2::T.{core::Type::==}(#C1)) {
+  if(self::test2::T =={core::Type::==}{(core::Object) → core::bool} (#C1)) {
     self::SubClass subClass = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
     SubClass subClass = t2.method2();
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.expect
index b4d5461..7c27f0b 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.expect
@@ -17,10 +17,10 @@
 static method main() → dynamic {
   final ffi::Pointer<self::StructInlineArrayMultiDimensional> pointer = ffi::AllocatorAlloc|call<self::StructInlineArrayMultiDimensional>(#C4);
   final self::StructInlineArrayMultiDimensional struct = ffi::StructPointer|get#ref<self::StructInlineArrayMultiDimensional>(pointer);
-  final ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> array = struct.{self::StructInlineArrayMultiDimensional::a0};
+  final ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> array = struct.{self::StructInlineArrayMultiDimensional::a0}{ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>>};
   final ffi::Array<ffi::Array<ffi::Uint8>> subArray = ffi::ArrayArray|[]<ffi::Array<ffi::Uint8>>(array, 0);
   ffi::ArrayArray|[]=<ffi::Array<ffi::Uint8>>(array, 1, subArray);
-  (#C4).{ffi::Allocator::free}(pointer);
+  (#C4).{ffi::Allocator::free}(pointer){(ffi::Pointer<ffi::NativeType>) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.transformed.expect
index 9ba7eaf..1da473c 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.transformed.expect
@@ -32,7 +32,7 @@
 static method main() → dynamic {
   final ffi::Pointer<self::StructInlineArrayMultiDimensional> pointer = (#C17).{ffi::Allocator::allocate}<self::StructInlineArrayMultiDimensional>(self::StructInlineArrayMultiDimensional::#sizeOf);
   final self::StructInlineArrayMultiDimensional struct = new self::StructInlineArrayMultiDimensional::#fromTypedDataBase(pointer!);
-  final ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> array = struct.{self::StructInlineArrayMultiDimensional::a0};
+  final ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> array = struct.{self::StructInlineArrayMultiDimensional::a0}{ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>>};
   final ffi::Array<ffi::Array<ffi::Uint8>> subArray = block {
     ffi::Array<dynamic> #array = array!;
     core::int #index = 0!;
@@ -52,7 +52,7 @@
     core::int #elementSize = #singleElementSize.{core::num::*}(#array.{ffi::Array::_nestedDimensionsFlattened});
     core::int #offset = #elementSize.{core::num::*}(#index);
   } =>ffi::_memCopy(#array.{ffi::Array::_typedDataBase}, #offset, subArray.{ffi::Array::_typedDataBase}, #C11, #elementSize);
-  (#C17).{ffi::Allocator::free}(pointer);
+  (#C17).{ffi::Allocator::free}(pointer){(ffi::Pointer<ffi::NativeType>) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.expect
index 03a5224..7831122 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.expect
@@ -17,10 +17,10 @@
 static method main() → dynamic {
   final ffi::Pointer<self::StructInlineArrayMultiDimensional> pointer = ffi::AllocatorAlloc|call<self::StructInlineArrayMultiDimensional>(#C4);
   final self::StructInlineArrayMultiDimensional struct = ffi::StructPointer|get#ref<self::StructInlineArrayMultiDimensional>(pointer);
-  final ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> array = struct.{self::StructInlineArrayMultiDimensional::a0};
+  final ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> array = struct.{self::StructInlineArrayMultiDimensional::a0}{ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>>};
   final ffi::Array<ffi::Array<ffi::Uint8>> subArray = ffi::ArrayArray|[]<ffi::Array<ffi::Uint8>>(array, 0);
   ffi::ArrayArray|[]=<ffi::Array<ffi::Uint8>>(array, 1, subArray);
-  (#C4).{ffi::Allocator::free}(pointer);
+  (#C4).{ffi::Allocator::free}(pointer){(ffi::Pointer<ffi::NativeType>) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.transformed.expect
index 9df71b9..a77431f 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.transformed.expect
@@ -32,7 +32,7 @@
 static method main() → dynamic {
   final ffi::Pointer<self::StructInlineArrayMultiDimensional> pointer = (#C17).{ffi::Allocator::allocate}<self::StructInlineArrayMultiDimensional>(self::StructInlineArrayMultiDimensional::#sizeOf);
   final self::StructInlineArrayMultiDimensional struct = new self::StructInlineArrayMultiDimensional::#fromTypedDataBase(pointer!);
-  final ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> array = struct.{self::StructInlineArrayMultiDimensional::a0};
+  final ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> array = struct.{self::StructInlineArrayMultiDimensional::a0}{ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>>};
   final ffi::Array<ffi::Array<ffi::Uint8>> subArray = block {
     ffi::Array<dynamic> #array = array!;
     core::int #index = 0!;
@@ -52,7 +52,7 @@
     core::int #elementSize = #singleElementSize.{core::num::*}(#array.{ffi::Array::_nestedDimensionsFlattened});
     core::int #offset = #elementSize.{core::num::*}(#index);
   } =>ffi::_memCopy(#array.{ffi::Array::_typedDataBase}, #offset, subArray.{ffi::Array::_typedDataBase}, #C11, #elementSize);
-  (#C17).{ffi::Allocator::free}(pointer);
+  (#C17).{ffi::Allocator::free}(pointer){(ffi::Pointer<ffi::NativeType>) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
index 19a933b..17ad5ba 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
@@ -1156,10 +1156,10 @@
   duplicateTopLevelFieldAndSetter2 = duplicateTopLevelFieldAndSetter2;
                                    ^";
   self::Class c = new self::Class::•();
-  c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter};
-  c.{self::Class::instanceFieldAndDuplicateSetter} = c.{self::Class::instanceFieldAndDuplicateSetter};
-  c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter};
-  c.{self::Class::instanceLateFinalFieldAndDuplicateSetter} = c.{self::Class::instanceLateFinalFieldAndDuplicateSetter};
+  c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter}{core::int?};
+  c.{self::Class::instanceFieldAndDuplicateSetter} = c.{self::Class::instanceFieldAndDuplicateSetter}{core::int?};
+  c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter}{core::int?};
+  c.{self::Class::instanceLateFinalFieldAndDuplicateSetter} = c.{self::Class::instanceLateFinalFieldAndDuplicateSetter}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:188:5: Error: The setter 'duplicateInstanceFieldAndStaticSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter1'.
@@ -1195,11 +1195,11 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:209:9: Error: Setter not found: 'instanceFieldAndStaticSetter'.
   Class.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  c.{self::Class::instanceFieldAndStaticSetter} = c.{self::Class::instanceFieldAndStaticSetter};
+  c.{self::Class::instanceFieldAndStaticSetter} = c.{self::Class::instanceFieldAndStaticSetter}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:212:47: Error: Can't assign to this.
   Class.instanceFieldAndStaticDuplicateSetter =
                                               ^";
-  c.{self::Class::instanceFieldAndStaticDuplicateSetter} = c.{self::Class::instanceFieldAndStaticDuplicateSetter};
+  c.{self::Class::instanceFieldAndStaticDuplicateSetter} = c.{self::Class::instanceFieldAndStaticDuplicateSetter}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:217:5: Error: The setter 'duplicateStaticFieldAndInstanceSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter1'.
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
index 19a933b..17ad5ba 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
@@ -1156,10 +1156,10 @@
   duplicateTopLevelFieldAndSetter2 = duplicateTopLevelFieldAndSetter2;
                                    ^";
   self::Class c = new self::Class::•();
-  c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter};
-  c.{self::Class::instanceFieldAndDuplicateSetter} = c.{self::Class::instanceFieldAndDuplicateSetter};
-  c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter};
-  c.{self::Class::instanceLateFinalFieldAndDuplicateSetter} = c.{self::Class::instanceLateFinalFieldAndDuplicateSetter};
+  c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter}{core::int?};
+  c.{self::Class::instanceFieldAndDuplicateSetter} = c.{self::Class::instanceFieldAndDuplicateSetter}{core::int?};
+  c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter}{core::int?};
+  c.{self::Class::instanceLateFinalFieldAndDuplicateSetter} = c.{self::Class::instanceLateFinalFieldAndDuplicateSetter}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:188:5: Error: The setter 'duplicateInstanceFieldAndStaticSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter1'.
@@ -1195,11 +1195,11 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:209:9: Error: Setter not found: 'instanceFieldAndStaticSetter'.
   Class.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  c.{self::Class::instanceFieldAndStaticSetter} = c.{self::Class::instanceFieldAndStaticSetter};
+  c.{self::Class::instanceFieldAndStaticSetter} = c.{self::Class::instanceFieldAndStaticSetter}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:212:47: Error: Can't assign to this.
   Class.instanceFieldAndStaticDuplicateSetter =
                                               ^";
-  c.{self::Class::instanceFieldAndStaticDuplicateSetter} = c.{self::Class::instanceFieldAndStaticDuplicateSetter};
+  c.{self::Class::instanceFieldAndStaticDuplicateSetter} = c.{self::Class::instanceFieldAndStaticDuplicateSetter}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:217:5: Error: The setter 'duplicateStaticFieldAndInstanceSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter1'.
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
index 19a933b..17ad5ba 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
@@ -1156,10 +1156,10 @@
   duplicateTopLevelFieldAndSetter2 = duplicateTopLevelFieldAndSetter2;
                                    ^";
   self::Class c = new self::Class::•();
-  c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter};
-  c.{self::Class::instanceFieldAndDuplicateSetter} = c.{self::Class::instanceFieldAndDuplicateSetter};
-  c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter};
-  c.{self::Class::instanceLateFinalFieldAndDuplicateSetter} = c.{self::Class::instanceLateFinalFieldAndDuplicateSetter};
+  c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter}{core::int?};
+  c.{self::Class::instanceFieldAndDuplicateSetter} = c.{self::Class::instanceFieldAndDuplicateSetter}{core::int?};
+  c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter}{core::int?};
+  c.{self::Class::instanceLateFinalFieldAndDuplicateSetter} = c.{self::Class::instanceLateFinalFieldAndDuplicateSetter}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:188:5: Error: The setter 'duplicateInstanceFieldAndStaticSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter1'.
@@ -1195,11 +1195,11 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:209:9: Error: Setter not found: 'instanceFieldAndStaticSetter'.
   Class.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  c.{self::Class::instanceFieldAndStaticSetter} = c.{self::Class::instanceFieldAndStaticSetter};
+  c.{self::Class::instanceFieldAndStaticSetter} = c.{self::Class::instanceFieldAndStaticSetter}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:212:47: Error: Can't assign to this.
   Class.instanceFieldAndStaticDuplicateSetter =
                                               ^";
-  c.{self::Class::instanceFieldAndStaticDuplicateSetter} = c.{self::Class::instanceFieldAndStaticDuplicateSetter};
+  c.{self::Class::instanceFieldAndStaticDuplicateSetter} = c.{self::Class::instanceFieldAndStaticDuplicateSetter}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:217:5: Error: The setter 'duplicateStaticFieldAndInstanceSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter1'.
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
index 19a933b..17ad5ba 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
@@ -1156,10 +1156,10 @@
   duplicateTopLevelFieldAndSetter2 = duplicateTopLevelFieldAndSetter2;
                                    ^";
   self::Class c = new self::Class::•();
-  c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter};
-  c.{self::Class::instanceFieldAndDuplicateSetter} = c.{self::Class::instanceFieldAndDuplicateSetter};
-  c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter};
-  c.{self::Class::instanceLateFinalFieldAndDuplicateSetter} = c.{self::Class::instanceLateFinalFieldAndDuplicateSetter};
+  c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter}{core::int?};
+  c.{self::Class::instanceFieldAndDuplicateSetter} = c.{self::Class::instanceFieldAndDuplicateSetter}{core::int?};
+  c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter}{core::int?};
+  c.{self::Class::instanceLateFinalFieldAndDuplicateSetter} = c.{self::Class::instanceLateFinalFieldAndDuplicateSetter}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:188:5: Error: The setter 'duplicateInstanceFieldAndStaticSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter1'.
@@ -1195,11 +1195,11 @@
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:209:9: Error: Setter not found: 'instanceFieldAndStaticSetter'.
   Class.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  c.{self::Class::instanceFieldAndStaticSetter} = c.{self::Class::instanceFieldAndStaticSetter};
+  c.{self::Class::instanceFieldAndStaticSetter} = c.{self::Class::instanceFieldAndStaticSetter}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:212:47: Error: Can't assign to this.
   Class.instanceFieldAndStaticDuplicateSetter =
                                               ^";
-  c.{self::Class::instanceFieldAndStaticDuplicateSetter} = c.{self::Class::instanceFieldAndStaticDuplicateSetter};
+  c.{self::Class::instanceFieldAndStaticDuplicateSetter} = c.{self::Class::instanceFieldAndStaticDuplicateSetter}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:217:5: Error: The setter 'duplicateStaticFieldAndInstanceSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter1'.
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
index f39bdfbd..73b1e1c 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
@@ -8,11 +8,11 @@
     final self::TestMixin::R% response = await fetch;
     self::TestMixin::T% result;
     if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-      result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
+      result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
     }
     else
       if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-        result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}.{self::PagingResponseData::data} as{ForNonNullableByDefault} self::TestMixin::T%;
+        result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} self::TestMixin::T%;
       }
       else
         if(response is{ForNonNullableByDefault} self::TestMixin::T%) {
@@ -55,7 +55,7 @@
     ;
   method _test() → dynamic {
     final self::Response<core::String> response = new self::Response::•<core::String>("test");
-    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response));
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response)){(asy::Future<self::Response<core::String>>) → asy::Future<core::String>};
   }
 }
 abstract class _Class2&Object&TestMixin = core::Object with self::TestMixin<self::PagingResponse<core::String>, core::String> /*isAnonymousMixin,hasConstConstructor*/  {
@@ -71,7 +71,7 @@
     ;
   method _test() → dynamic {
     final self::PagingResponse<core::String> response = new self::PagingResponse::•<core::String>(new self::PagingResponseData::•<core::String>(<core::String>["test"]));
-    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response)){(asy::Future<self::PagingResponse<core::String>>) → asy::Future<core::String>};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
index 76b3473..51a1889 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
@@ -22,11 +22,11 @@
           final self::TestMixin::R% response = _in::unsafeCast<self::TestMixin::R%>(:result);
           self::TestMixin::T% result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-            result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
+            result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
           }
           else
             if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-              result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}.{self::PagingResponseData::data} as{ForNonNullableByDefault} self::TestMixin::T%;
+              result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} self::TestMixin::T%;
             }
             else
               if(response is{ForNonNullableByDefault} self::TestMixin::T%) {
@@ -90,11 +90,11 @@
           final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-            result = response{self::Response<core::String>}.{self::Response::data};
+            result = response{self::Response<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
           }
           else
             if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-              result = response{self::Response<core::String>}.{self::PagingResponse::data}.{self::PagingResponseData::data} as{ForNonNullableByDefault} core::String;
+              result = response{self::Response<core::String>}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} core::String;
             }
             else
               if(response is{ForNonNullableByDefault} core::String) {
@@ -125,7 +125,7 @@
     ;
   method _test() → dynamic {
     final self::Response<core::String> response = new self::Response::•<core::String>("test");
-    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response));
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response)){(asy::Future<self::Response<core::String>>) → asy::Future<core::String>};
   }
 }
 abstract class _Class2&Object&TestMixin extends core::Object implements self::TestMixin<self::PagingResponse<core::String>, core::String> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
@@ -149,11 +149,11 @@
           final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-            result = response{self::PagingResponse<core::String>}.{self::Response::data} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+            result = response{self::PagingResponse<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
           }
           else
             if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-              result = response{self::PagingResponse<core::String>}.{self::PagingResponse::data}.{self::PagingResponseData::data} as{ForNonNullableByDefault} core::String;
+              result = response{self::PagingResponse<core::String>}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} core::String;
             }
             else
               if(response is{ForNonNullableByDefault} core::String) {
@@ -184,7 +184,7 @@
     ;
   method _test() → dynamic {
     final self::PagingResponse<core::String> response = new self::PagingResponse::•<core::String>(new self::PagingResponseData::•<core::String>(core::_GrowableList::_literal1<core::String>("test")));
-    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response)){(asy::Future<self::PagingResponse<core::String>>) → asy::Future<core::String>};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
index f39bdfbd..73b1e1c 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
@@ -8,11 +8,11 @@
     final self::TestMixin::R% response = await fetch;
     self::TestMixin::T% result;
     if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-      result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
+      result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
     }
     else
       if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-        result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}.{self::PagingResponseData::data} as{ForNonNullableByDefault} self::TestMixin::T%;
+        result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} self::TestMixin::T%;
       }
       else
         if(response is{ForNonNullableByDefault} self::TestMixin::T%) {
@@ -55,7 +55,7 @@
     ;
   method _test() → dynamic {
     final self::Response<core::String> response = new self::Response::•<core::String>("test");
-    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response));
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response)){(asy::Future<self::Response<core::String>>) → asy::Future<core::String>};
   }
 }
 abstract class _Class2&Object&TestMixin = core::Object with self::TestMixin<self::PagingResponse<core::String>, core::String> /*isAnonymousMixin,hasConstConstructor*/  {
@@ -71,7 +71,7 @@
     ;
   method _test() → dynamic {
     final self::PagingResponse<core::String> response = new self::PagingResponse::•<core::String>(new self::PagingResponseData::•<core::String>(<core::String>["test"]));
-    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response)){(asy::Future<self::PagingResponse<core::String>>) → asy::Future<core::String>};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
index 76b3473..51a1889 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
@@ -22,11 +22,11 @@
           final self::TestMixin::R% response = _in::unsafeCast<self::TestMixin::R%>(:result);
           self::TestMixin::T% result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-            result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
+            result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
           }
           else
             if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-              result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}.{self::PagingResponseData::data} as{ForNonNullableByDefault} self::TestMixin::T%;
+              result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} self::TestMixin::T%;
             }
             else
               if(response is{ForNonNullableByDefault} self::TestMixin::T%) {
@@ -90,11 +90,11 @@
           final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-            result = response{self::Response<core::String>}.{self::Response::data};
+            result = response{self::Response<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
           }
           else
             if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-              result = response{self::Response<core::String>}.{self::PagingResponse::data}.{self::PagingResponseData::data} as{ForNonNullableByDefault} core::String;
+              result = response{self::Response<core::String>}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} core::String;
             }
             else
               if(response is{ForNonNullableByDefault} core::String) {
@@ -125,7 +125,7 @@
     ;
   method _test() → dynamic {
     final self::Response<core::String> response = new self::Response::•<core::String>("test");
-    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response));
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response)){(asy::Future<self::Response<core::String>>) → asy::Future<core::String>};
   }
 }
 abstract class _Class2&Object&TestMixin extends core::Object implements self::TestMixin<self::PagingResponse<core::String>, core::String> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
@@ -149,11 +149,11 @@
           final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
-            result = response{self::PagingResponse<core::String>}.{self::Response::data} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+            result = response{self::PagingResponse<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
           }
           else
             if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
-              result = response{self::PagingResponse<core::String>}.{self::PagingResponse::data}.{self::PagingResponseData::data} as{ForNonNullableByDefault} core::String;
+              result = response{self::PagingResponse<core::String>}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} core::String;
             }
             else
               if(response is{ForNonNullableByDefault} core::String) {
@@ -184,7 +184,7 @@
     ;
   method _test() → dynamic {
     final self::PagingResponse<core::String> response = new self::PagingResponse::•<core::String>(new self::PagingResponseData::•<core::String>(core::_GrowableList::_literal1<core::String>("test")));
-    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response)){(asy::Future<self::PagingResponse<core::String>>) → asy::Future<core::String>};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.strong.expect b/pkg/front_end/testcases/nnbd/forin.dart.strong.expect
index d8c55ad..a1bd97a 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.strong.expect
@@ -63,7 +63,7 @@
  - 'Iterable' is from 'dart:core'.
   [for (int x in i2) x];
                  ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
-      #t2.{core::List::add}{Invariant}(x);
+      #t2.{core::List::add}(x){(core::int) → void};
   } =>#t2;
   for (core::int x in let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'List' is from 'dart:core'.
@@ -78,7 +78,7 @@
  - 'Iterable' is from 'dart:core'.
   [for (int x in l2) x];
                  ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
-      #t5.{core::List::add}{Invariant}(x);
+      #t5.{core::List::add}(x){(core::int) → void};
   } =>#t5;
   for (final dynamic #t7 in let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
@@ -96,7 +96,7 @@
   [for (int x in o1) x];
                  ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
       core::int x = #t10 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t9.{core::List::add}{Invariant}(x);
+      #t9.{core::List::add}(x){(core::int) → void};
     }
   } =>#t9;
   for (final dynamic #t12 in let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
@@ -115,7 +115,7 @@
   [for (int x in o2) x];
                  ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
       core::int x = #t15 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t14.{core::List::add}{Invariant}(x);
+      #t14.{core::List::add}(x){(core::int) → void};
     }
   } =>#t14;
 }
@@ -125,14 +125,14 @@
   block {
     final core::List<core::int> #t17 = <core::int>[];
     for (core::int x in i1)
-      #t17.{core::List::add}{Invariant}(x);
+      #t17.{core::List::add}(x){(core::int) → void};
   } =>#t17;
   for (core::int x in l1)
     x;
   block {
     final core::List<core::int> #t18 = <core::int>[];
     for (core::int x in l1)
-      #t18.{core::List::add}{Invariant}(x);
+      #t18.{core::List::add}(x){(core::int) → void};
   } =>#t18;
   for (final dynamic #t19 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
     core::int x = #t19 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
@@ -142,7 +142,7 @@
     final core::List<core::int> #t20 = <core::int>[];
     for (final dynamic #t21 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       core::int x = #t21 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t20.{core::List::add}{Invariant}(x);
+      #t20.{core::List::add}(x){(core::int) → void};
     }
   } =>#t20;
 }
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect
index 8fdee86..06dc1da 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect
@@ -71,7 +71,7 @@
                  ^" in let core::Iterable<core::int>? #t5 = i2 in #t5.==(null) ?{core::Iterable<dynamic>} #t5 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic> : #t5{core::Iterable<dynamic>}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
-        #t3.{core::List::add}{Invariant}(x);
+        #t3.{core::List::add}(x){(core::int) → void};
       }
     }
   } =>#t3;
@@ -96,7 +96,7 @@
                  ^" in let core::List<core::int>? #t10 = l2 in #t10.==(null) ?{core::Iterable<dynamic>} #t10 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic> : #t10{core::Iterable<dynamic>}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
-        #t8.{core::List::add}{Invariant}(x);
+        #t8.{core::List::add}(x){(core::int) → void};
       }
     }
   } =>#t8;
@@ -126,7 +126,7 @@
         final dynamic #t15 = :sync-for-iterator.{core::Iterator::current};
         {
           core::int x = #t15 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t13.{core::List::add}{Invariant}(x);
+          #t13.{core::List::add}(x){(core::int) → void};
         }
       }
     }
@@ -157,7 +157,7 @@
         final dynamic #t20 = :sync-for-iterator.{core::Iterator::current};
         {
           core::int x = #t20 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t18.{core::List::add}{Invariant}(x);
+          #t18.{core::List::add}(x){(core::int) → void};
         }
       }
     }
@@ -177,7 +177,7 @@
       core::Iterator<core::int> :sync-for-iterator = i1.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
-        #t21.{core::List::add}{Invariant}(x);
+        #t21.{core::List::add}(x){(core::int) → void};
       }
     }
   } =>#t21;
@@ -194,7 +194,7 @@
       core::Iterator<core::int> :sync-for-iterator = l1.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
-        #t22.{core::List::add}{Invariant}(x);
+        #t22.{core::List::add}(x){(core::int) → void};
       }
     }
   } =>#t22;
@@ -216,7 +216,7 @@
         final dynamic #t25 = :sync-for-iterator.{core::Iterator::current};
         {
           core::int x = #t25 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t24.{core::List::add}{Invariant}(x);
+          #t24.{core::List::add}(x){(core::int) → void};
         }
       }
     }
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.weak.expect b/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
index d8c55ad..a1bd97a 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
@@ -63,7 +63,7 @@
  - 'Iterable' is from 'dart:core'.
   [for (int x in i2) x];
                  ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
-      #t2.{core::List::add}{Invariant}(x);
+      #t2.{core::List::add}(x){(core::int) → void};
   } =>#t2;
   for (core::int x in let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
  - 'List' is from 'dart:core'.
@@ -78,7 +78,7 @@
  - 'Iterable' is from 'dart:core'.
   [for (int x in l2) x];
                  ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
-      #t5.{core::List::add}{Invariant}(x);
+      #t5.{core::List::add}(x){(core::int) → void};
   } =>#t5;
   for (final dynamic #t7 in let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
@@ -96,7 +96,7 @@
   [for (int x in o1) x];
                  ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
       core::int x = #t10 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t9.{core::List::add}{Invariant}(x);
+      #t9.{core::List::add}(x){(core::int) → void};
     }
   } =>#t9;
   for (final dynamic #t12 in let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
@@ -115,7 +115,7 @@
   [for (int x in o2) x];
                  ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
       core::int x = #t15 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t14.{core::List::add}{Invariant}(x);
+      #t14.{core::List::add}(x){(core::int) → void};
     }
   } =>#t14;
 }
@@ -125,14 +125,14 @@
   block {
     final core::List<core::int> #t17 = <core::int>[];
     for (core::int x in i1)
-      #t17.{core::List::add}{Invariant}(x);
+      #t17.{core::List::add}(x){(core::int) → void};
   } =>#t17;
   for (core::int x in l1)
     x;
   block {
     final core::List<core::int> #t18 = <core::int>[];
     for (core::int x in l1)
-      #t18.{core::List::add}{Invariant}(x);
+      #t18.{core::List::add}(x){(core::int) → void};
   } =>#t18;
   for (final dynamic #t19 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
     core::int x = #t19 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
@@ -142,7 +142,7 @@
     final core::List<core::int> #t20 = <core::int>[];
     for (final dynamic #t21 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       core::int x = #t21 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t20.{core::List::add}{Invariant}(x);
+      #t20.{core::List::add}(x){(core::int) → void};
     }
   } =>#t20;
 }
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
index ed9bb5e..1d91444 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
@@ -71,7 +71,7 @@
                  ^" in i2).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
-        #t2.{core::List::add}{Invariant}(x);
+        #t2.{core::List::add}(x){(core::int) → void};
       }
     }
   } =>#t2;
@@ -96,7 +96,7 @@
                  ^" in l2).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
-        #t5.{core::List::add}{Invariant}(x);
+        #t5.{core::List::add}(x){(core::int) → void};
       }
     }
   } =>#t5;
@@ -126,7 +126,7 @@
         final dynamic #t11 = :sync-for-iterator.{core::Iterator::current};
         {
           core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t9.{core::List::add}{Invariant}(x);
+          #t9.{core::List::add}(x){(core::int) → void};
         }
       }
     }
@@ -157,7 +157,7 @@
         final dynamic #t16 = :sync-for-iterator.{core::Iterator::current};
         {
           core::int x = #t16 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t14.{core::List::add}{Invariant}(x);
+          #t14.{core::List::add}(x){(core::int) → void};
         }
       }
     }
@@ -177,7 +177,7 @@
       core::Iterator<core::int> :sync-for-iterator = i1.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
-        #t17.{core::List::add}{Invariant}(x);
+        #t17.{core::List::add}(x){(core::int) → void};
       }
     }
   } =>#t17;
@@ -194,7 +194,7 @@
       core::Iterator<core::int> :sync-for-iterator = l1.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
-        #t18.{core::List::add}{Invariant}(x);
+        #t18.{core::List::add}(x){(core::int) → void};
       }
     }
   } =>#t18;
@@ -216,7 +216,7 @@
         final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
         {
           core::int x = #t21 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t20.{core::List::add}{Invariant}(x);
+          #t20.{core::List::add}(x){(core::int) → void};
         }
       }
     }
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.expect
index 65650a7..fe4267a 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.expect
@@ -21,7 +21,7 @@
     : super self::A5::•()
     ;
   method test5() → dynamic {
-    core::String s = let final core::int #t1 = 0 in let final core::String? #t2 = super.{self::A5::[]}(#t1) in #t2.{core::String::==}(null) ?{core::String} let final core::String #t3 = "bar" in let final void #t4 = super.{self::A5::[]=}(#t1, #t3) in #t3 : #t2{core::String};
+    core::String s = let final core::int #t1 = 0 in let final core::String? #t2 = super.{self::A5::[]}(#t1) in #t2 == null ?{core::String} let final core::String #t3 = "bar" in let final void #t4 = super.{self::A5::[]=}(#t1, #t3) in #t3 : #t2{core::String};
   }
 }
 class A7 extends core::Object {
@@ -42,28 +42,28 @@
     return null;
   function bar() → core::String
     return "bar";
-  core::String s = let final core::String? #t5 = foo.call() in #t5.{core::String::==}(null) ?{core::String} bar.call() : #t5{core::String};
-  core::String s2 = let final core::String? #t6 = self::hest1<core::String?>() in #t6.{core::String::==}(null) ?{core::String} "fisk" : #t6{core::String};
+  core::String s = let final core::String? #t5 = foo(){() → core::String?} in #t5 == null ?{core::String} bar(){() → core::String} : #t5{core::String};
+  core::String s2 = let final core::String? #t6 = self::hest1<core::String?>() in #t6 == null ?{core::String} "fisk" : #t6{core::String};
 }
 static method test2(self::A2 a) → dynamic {
-  core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo} in #t8.{core::String::==}(null) ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
+  core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo}{core::String?} in #t8 == null ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
 }
 static method test3() → dynamic {
   core::String? s = null;
-  core::String s2 = let final core::String? #t9 = s in #t9.{core::String::==}(null) ?{core::String} s = "bar" : #t9{core::String};
+  core::String s2 = let final core::String? #t9 = s in #t9 == null ?{core::String} s = "bar" : #t9{core::String};
 }
 static method test4() → dynamic {
   core::List<core::String?> list = <core::String?>[null];
-  core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11) in #t12.{core::String::==}(null) ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13) in #t13 : #t12{core::String};
+  core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11){(core::int) → core::String?} in #t12 == null ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13){(core::int, core::String?) → void} in #t13 : #t12{core::String};
 }
 static method E6|[]=(lowered final core::double #this, core::int index, core::String? value) → void {}
 static method E6|[](lowered final core::double #this, core::int index) → core::String?
   return null;
 static method test6() → dynamic {
-  core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17.{core::String::==}(null) ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
+  core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17 == null ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
 }
 static method test7(self::A7? a) → dynamic {
-  core::String? s = let final self::A7? #t20 = a in #t20.{core::Object::==}(null) ?{core::String?} null : let final core::String #t21 = #t20.{self::A7::foo} in #t21.{core::String::==}(null) ?{core::String} #t20.{self::A7::foo} = "bar" : #t21;
-  core::String? s2 = let final self::A7? #t22 = a in #t22.{core::Object::==}(null) ?{core::String?} null : let final core::String? #t23 = #t22.{self::A7::bar} in #t23.{core::String::==}(null) ?{core::String} #t22.{self::A7::bar} = "bar" : #t23{core::String};
+  core::String? s = let final self::A7? #t20 = a in #t20 == null ?{core::String?} null : let final core::String #t21 = #t20.{self::A7::foo}{core::String} in #t21 == null ?{core::String} #t20.{self::A7::foo} = "bar" : #t21;
+  core::String? s2 = let final self::A7? #t22 = a in #t22 == null ?{core::String?} null : let final core::String? #t23 = #t22.{self::A7::bar}{core::String?} in #t23 == null ?{core::String} #t22.{self::A7::bar} = "bar" : #t23{core::String};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.transformed.expect
index 91b9c97..bdfc626 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.transformed.expect
@@ -21,7 +21,7 @@
     : super self::A5::•()
     ;
   method test5() → dynamic {
-    core::String s = let final core::int #t1 = 0 in let final core::String? #t2 = super.{self::A5::[]}(#t1) in #t2.{core::String::==}(null) ?{core::String} let final core::String #t3 = "bar" in let final void #t4 = super.{self::A5::[]=}(#t1, #t3) in #t3 : #t2{core::String};
+    core::String s = let final core::int #t1 = 0 in let final core::String? #t2 = super.{self::A5::[]}(#t1) in #t2 == null ?{core::String} let final core::String #t3 = "bar" in let final void #t4 = super.{self::A5::[]=}(#t1, #t3) in #t3 : #t2{core::String};
   }
 }
 class A7 extends core::Object {
@@ -42,29 +42,29 @@
     return null;
   function bar() → core::String
     return "bar";
-  core::String s = let final core::String? #t5 = foo.call() in #t5.{core::String::==}(null) ?{core::String} bar.call() : #t5{core::String};
-  core::String s2 = let final core::String? #t6 = self::hest1<core::String?>() in #t6.{core::String::==}(null) ?{core::String} "fisk" : #t6{core::String};
+  core::String s = let final core::String? #t5 = foo(){() → core::String?} in #t5 == null ?{core::String} bar(){() → core::String} : #t5{core::String};
+  core::String s2 = let final core::String? #t6 = self::hest1<core::String?>() in #t6 == null ?{core::String} "fisk" : #t6{core::String};
 }
 static method test2(self::A2 a) → dynamic {
-  core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo} in #t8.{core::String::==}(null) ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
+  core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo}{core::String?} in #t8 == null ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
 }
 static method test3() → dynamic {
   core::String? s = null;
-  core::String s2 = let final core::String? #t9 = s in #t9.{core::String::==}(null) ?{core::String} s = "bar" : #t9{core::String};
+  core::String s2 = let final core::String? #t9 = s in #t9 == null ?{core::String} s = "bar" : #t9{core::String};
 }
 static method test4() → dynamic {
   core::List<core::String?> list = core::_GrowableList::_literal1<core::String?>(null);
-  core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11) in #t12.{core::String::==}(null) ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13) in #t13 : #t12{core::String};
+  core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11){(core::int) → core::String?} in #t12 == null ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13){(core::int, core::String?) → void} in #t13 : #t12{core::String};
 }
 static method E6|[]=(lowered final core::double #this, core::int index, core::String? value) → void {}
 static method E6|[](lowered final core::double #this, core::int index) → core::String?
   return null;
 static method test6() → dynamic {
-  core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17.{core::String::==}(null) ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
+  core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17 == null ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
 }
 static method test7(self::A7? a) → dynamic {
-  core::String? s = let final self::A7? #t20 = a in #t20.{core::Object::==}(null) ?{core::String?} null : let final core::String #t21 = #t20.{self::A7::foo} in #t21.{core::String::==}(null) ?{core::String} #t20.{self::A7::foo} = "bar" : #t21;
-  core::String? s2 = let final self::A7? #t22 = a in #t22.{core::Object::==}(null) ?{core::String?} null : let final core::String? #t23 = #t22.{self::A7::bar} in #t23.{core::String::==}(null) ?{core::String} #t22.{self::A7::bar} = "bar" : #t23{core::String};
+  core::String? s = let final self::A7? #t20 = a in #t20 == null ?{core::String?} null : let final core::String #t21 = #t20.{self::A7::foo}{core::String} in #t21 == null ?{core::String} #t20.{self::A7::foo} = "bar" : #t21;
+  core::String? s2 = let final self::A7? #t22 = a in #t22 == null ?{core::String?} null : let final core::String? #t23 = #t22.{self::A7::bar}{core::String?} in #t23 == null ?{core::String} #t22.{self::A7::bar} = "bar" : #t23{core::String};
 }
 static method main() → dynamic {}
 
@@ -84,4 +84,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///infer_if_null.dart:60:21 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///infer_if_null.dart:60:28 -> StringConstant("bar")
 Evaluated: VariableGet @ org-dartlang-testcase:///infer_if_null.dart:60:28 -> StringConstant("bar")
-Extra constant evaluation: evaluated: 112, effectively constant: 14
+Extra constant evaluation: evaluated: 110, effectively constant: 14
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.expect
index 65650a7..fe4267a 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.expect
@@ -21,7 +21,7 @@
     : super self::A5::•()
     ;
   method test5() → dynamic {
-    core::String s = let final core::int #t1 = 0 in let final core::String? #t2 = super.{self::A5::[]}(#t1) in #t2.{core::String::==}(null) ?{core::String} let final core::String #t3 = "bar" in let final void #t4 = super.{self::A5::[]=}(#t1, #t3) in #t3 : #t2{core::String};
+    core::String s = let final core::int #t1 = 0 in let final core::String? #t2 = super.{self::A5::[]}(#t1) in #t2 == null ?{core::String} let final core::String #t3 = "bar" in let final void #t4 = super.{self::A5::[]=}(#t1, #t3) in #t3 : #t2{core::String};
   }
 }
 class A7 extends core::Object {
@@ -42,28 +42,28 @@
     return null;
   function bar() → core::String
     return "bar";
-  core::String s = let final core::String? #t5 = foo.call() in #t5.{core::String::==}(null) ?{core::String} bar.call() : #t5{core::String};
-  core::String s2 = let final core::String? #t6 = self::hest1<core::String?>() in #t6.{core::String::==}(null) ?{core::String} "fisk" : #t6{core::String};
+  core::String s = let final core::String? #t5 = foo(){() → core::String?} in #t5 == null ?{core::String} bar(){() → core::String} : #t5{core::String};
+  core::String s2 = let final core::String? #t6 = self::hest1<core::String?>() in #t6 == null ?{core::String} "fisk" : #t6{core::String};
 }
 static method test2(self::A2 a) → dynamic {
-  core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo} in #t8.{core::String::==}(null) ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
+  core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo}{core::String?} in #t8 == null ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
 }
 static method test3() → dynamic {
   core::String? s = null;
-  core::String s2 = let final core::String? #t9 = s in #t9.{core::String::==}(null) ?{core::String} s = "bar" : #t9{core::String};
+  core::String s2 = let final core::String? #t9 = s in #t9 == null ?{core::String} s = "bar" : #t9{core::String};
 }
 static method test4() → dynamic {
   core::List<core::String?> list = <core::String?>[null];
-  core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11) in #t12.{core::String::==}(null) ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13) in #t13 : #t12{core::String};
+  core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11){(core::int) → core::String?} in #t12 == null ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13){(core::int, core::String?) → void} in #t13 : #t12{core::String};
 }
 static method E6|[]=(lowered final core::double #this, core::int index, core::String? value) → void {}
 static method E6|[](lowered final core::double #this, core::int index) → core::String?
   return null;
 static method test6() → dynamic {
-  core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17.{core::String::==}(null) ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
+  core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17 == null ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
 }
 static method test7(self::A7? a) → dynamic {
-  core::String? s = let final self::A7? #t20 = a in #t20.{core::Object::==}(null) ?{core::String?} null : let final core::String #t21 = #t20.{self::A7::foo} in #t21.{core::String::==}(null) ?{core::String} #t20.{self::A7::foo} = "bar" : #t21;
-  core::String? s2 = let final self::A7? #t22 = a in #t22.{core::Object::==}(null) ?{core::String?} null : let final core::String? #t23 = #t22.{self::A7::bar} in #t23.{core::String::==}(null) ?{core::String} #t22.{self::A7::bar} = "bar" : #t23{core::String};
+  core::String? s = let final self::A7? #t20 = a in #t20 == null ?{core::String?} null : let final core::String #t21 = #t20.{self::A7::foo}{core::String} in #t21 == null ?{core::String} #t20.{self::A7::foo} = "bar" : #t21;
+  core::String? s2 = let final self::A7? #t22 = a in #t22 == null ?{core::String?} null : let final core::String? #t23 = #t22.{self::A7::bar}{core::String?} in #t23 == null ?{core::String} #t22.{self::A7::bar} = "bar" : #t23{core::String};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.transformed.expect
index 91b9c97..bdfc626 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
     : super self::A5::•()
     ;
   method test5() → dynamic {
-    core::String s = let final core::int #t1 = 0 in let final core::String? #t2 = super.{self::A5::[]}(#t1) in #t2.{core::String::==}(null) ?{core::String} let final core::String #t3 = "bar" in let final void #t4 = super.{self::A5::[]=}(#t1, #t3) in #t3 : #t2{core::String};
+    core::String s = let final core::int #t1 = 0 in let final core::String? #t2 = super.{self::A5::[]}(#t1) in #t2 == null ?{core::String} let final core::String #t3 = "bar" in let final void #t4 = super.{self::A5::[]=}(#t1, #t3) in #t3 : #t2{core::String};
   }
 }
 class A7 extends core::Object {
@@ -42,29 +42,29 @@
     return null;
   function bar() → core::String
     return "bar";
-  core::String s = let final core::String? #t5 = foo.call() in #t5.{core::String::==}(null) ?{core::String} bar.call() : #t5{core::String};
-  core::String s2 = let final core::String? #t6 = self::hest1<core::String?>() in #t6.{core::String::==}(null) ?{core::String} "fisk" : #t6{core::String};
+  core::String s = let final core::String? #t5 = foo(){() → core::String?} in #t5 == null ?{core::String} bar(){() → core::String} : #t5{core::String};
+  core::String s2 = let final core::String? #t6 = self::hest1<core::String?>() in #t6 == null ?{core::String} "fisk" : #t6{core::String};
 }
 static method test2(self::A2 a) → dynamic {
-  core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo} in #t8.{core::String::==}(null) ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
+  core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo}{core::String?} in #t8 == null ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
 }
 static method test3() → dynamic {
   core::String? s = null;
-  core::String s2 = let final core::String? #t9 = s in #t9.{core::String::==}(null) ?{core::String} s = "bar" : #t9{core::String};
+  core::String s2 = let final core::String? #t9 = s in #t9 == null ?{core::String} s = "bar" : #t9{core::String};
 }
 static method test4() → dynamic {
   core::List<core::String?> list = core::_GrowableList::_literal1<core::String?>(null);
-  core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11) in #t12.{core::String::==}(null) ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13) in #t13 : #t12{core::String};
+  core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11){(core::int) → core::String?} in #t12 == null ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13){(core::int, core::String?) → void} in #t13 : #t12{core::String};
 }
 static method E6|[]=(lowered final core::double #this, core::int index, core::String? value) → void {}
 static method E6|[](lowered final core::double #this, core::int index) → core::String?
   return null;
 static method test6() → dynamic {
-  core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17.{core::String::==}(null) ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
+  core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17 == null ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
 }
 static method test7(self::A7? a) → dynamic {
-  core::String? s = let final self::A7? #t20 = a in #t20.{core::Object::==}(null) ?{core::String?} null : let final core::String #t21 = #t20.{self::A7::foo} in #t21.{core::String::==}(null) ?{core::String} #t20.{self::A7::foo} = "bar" : #t21;
-  core::String? s2 = let final self::A7? #t22 = a in #t22.{core::Object::==}(null) ?{core::String?} null : let final core::String? #t23 = #t22.{self::A7::bar} in #t23.{core::String::==}(null) ?{core::String} #t22.{self::A7::bar} = "bar" : #t23{core::String};
+  core::String? s = let final self::A7? #t20 = a in #t20 == null ?{core::String?} null : let final core::String #t21 = #t20.{self::A7::foo}{core::String} in #t21 == null ?{core::String} #t20.{self::A7::foo} = "bar" : #t21;
+  core::String? s2 = let final self::A7? #t22 = a in #t22 == null ?{core::String?} null : let final core::String? #t23 = #t22.{self::A7::bar}{core::String?} in #t23 == null ?{core::String} #t22.{self::A7::bar} = "bar" : #t23{core::String};
 }
 static method main() → dynamic {}
 
@@ -84,4 +84,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///infer_if_null.dart:60:21 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///infer_if_null.dart:60:28 -> StringConstant("bar")
 Evaluated: VariableGet @ org-dartlang-testcase:///infer_if_null.dart:60:28 -> StringConstant("bar")
-Extra constant evaluation: evaluated: 112, effectively constant: 14
+Extra constant evaluation: evaluated: 110, effectively constant: 14
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect
index cc7de7a..9920c38 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect
@@ -600,10 +600,10 @@
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   c.{self::Class::methodAndSetter1} = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
   c.methodAndSetter1 = c.methodAndSetter1;
-                         ^" in c.{self::Class::methodAndSetter1} as{TypeError,ForNonNullableByDefault} core::int?;
-  c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2};
-  c.{self::Class::fieldAndSetter1} = c.{self::Class::fieldAndSetter1};
-  c.{self::Class::fieldAndSetter2} = c.{self::Class::fieldAndSetter2};
+                         ^" in c.{self::Class::methodAndSetter1}{() → core::int?} as{TypeError,ForNonNullableByDefault} core::int?;
+  c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2}{(core::int?) → void};
+  c.{self::Class::fieldAndSetter1} = c.{self::Class::fieldAndSetter1}{core::int?};
+  c.{self::Class::fieldAndSetter2} = c.{self::Class::fieldAndSetter2}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:5: Error: The setter 'fieldAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter1'.
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect
index ef8c8c1..68ff748 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect
@@ -600,10 +600,10 @@
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   c.{self::Class::methodAndSetter1} = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
   c.methodAndSetter1 = c.methodAndSetter1;
-                         ^" in c.{self::Class::methodAndSetter1} as{TypeError,ForNonNullableByDefault} core::int?;
-  c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2};
-  c.{self::Class::fieldAndSetter1} = c.{self::Class::fieldAndSetter1};
-  c.{self::Class::fieldAndSetter2} = c.{self::Class::fieldAndSetter2};
+                         ^" in c.{self::Class::methodAndSetter1}{() → core::int?} as{TypeError,ForNonNullableByDefault} core::int?;
+  c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2}{(core::int?) → void};
+  c.{self::Class::fieldAndSetter1} = c.{self::Class::fieldAndSetter1}{core::int?};
+  c.{self::Class::fieldAndSetter2} = c.{self::Class::fieldAndSetter2}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:5: Error: The setter 'fieldAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter1'.
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect
index cc7de7a..9920c38 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect
@@ -600,10 +600,10 @@
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
   c.{self::Class::methodAndSetter1} = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
   c.methodAndSetter1 = c.methodAndSetter1;
-                         ^" in c.{self::Class::methodAndSetter1} as{TypeError,ForNonNullableByDefault} core::int?;
-  c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2};
-  c.{self::Class::fieldAndSetter1} = c.{self::Class::fieldAndSetter1};
-  c.{self::Class::fieldAndSetter2} = c.{self::Class::fieldAndSetter2};
+                         ^" in c.{self::Class::methodAndSetter1}{() → core::int?} as{TypeError,ForNonNullableByDefault} core::int?;
+  c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2}{(core::int?) → void};
+  c.{self::Class::fieldAndSetter1} = c.{self::Class::fieldAndSetter1}{core::int?};
+  c.{self::Class::fieldAndSetter2} = c.{self::Class::fieldAndSetter2}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:5: Error: The setter 'fieldAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter1'.
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect
index ef8c8c1..68ff748 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect
@@ -600,10 +600,10 @@
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
   c.{self::Class::methodAndSetter1} = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
   c.methodAndSetter1 = c.methodAndSetter1;
-                         ^" in c.{self::Class::methodAndSetter1} as{TypeError,ForNonNullableByDefault} core::int?;
-  c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2};
-  c.{self::Class::fieldAndSetter1} = c.{self::Class::fieldAndSetter1};
-  c.{self::Class::fieldAndSetter2} = c.{self::Class::fieldAndSetter2};
+                         ^" in c.{self::Class::methodAndSetter1}{() → core::int?} as{TypeError,ForNonNullableByDefault} core::int?;
+  c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2}{(core::int?) → void};
+  c.{self::Class::fieldAndSetter1} = c.{self::Class::fieldAndSetter1}{core::int?};
+  c.{self::Class::fieldAndSetter2} = c.{self::Class::fieldAndSetter2}{core::int?};
   invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:5: Error: The setter 'fieldAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter1'.
diff --git a/pkg/front_end/testcases/nnbd/issue40093.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue40093.dart.strong.expect
index 44e9546..f083d82 100644
--- a/pkg/front_end/testcases/nnbd/issue40093.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue40093.dart.strong.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 static method error() → dynamic {
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print(i);
   }
   for (core::int i in <core::int>[]) {
diff --git a/pkg/front_end/testcases/nnbd/issue40093.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue40093.dart.strong.transformed.expect
index c7299a7..b44b839 100644
--- a/pkg/front_end/testcases/nnbd/issue40093.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40093.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 static method error() → dynamic {
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print(i);
   }
   {
diff --git a/pkg/front_end/testcases/nnbd/issue40093.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue40093.dart.weak.expect
index 44e9546..f083d82 100644
--- a/pkg/front_end/testcases/nnbd/issue40093.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue40093.dart.weak.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 static method error() → dynamic {
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print(i);
   }
   for (core::int i in <core::int>[]) {
diff --git a/pkg/front_end/testcases/nnbd/issue40093.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue40093.dart.weak.transformed.expect
index c7299a7..b44b839 100644
--- a/pkg/front_end/testcases/nnbd/issue40093.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40093.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 static method error() → dynamic {
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print(i);
   }
   {
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.strong.expect
index ff89535..bcbb04c 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.strong.expect
@@ -18,7 +18,7 @@
     ;
   method foo([generic-covariant-impl FutureOr<self::A::X%>? x = #C1]) → dynamic {
     if(x is{ForNonNullableByDefault} asy::Future<self::A::X%>) {
-      this.{self::A::b}.{self::B::bar}(x{asy::Future<self::A::X%>} as{ForNonNullableByDefault} FutureOr<self::A::X%>);
+      this.{self::A::b}{self::B<self::A::X%>}.{self::B::bar}(x{asy::Future<self::A::X%>} as{ForNonNullableByDefault} FutureOr<self::A::X%>){(FutureOr<self::A::X%>) → dynamic};
     }
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.strong.transformed.expect
index 15445a8..c9d1a5a 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.strong.transformed.expect
@@ -18,7 +18,7 @@
     ;
   method foo([generic-covariant-impl FutureOr<self::A::X%>? x = #C1]) → dynamic {
     if(x is{ForNonNullableByDefault} asy::Future<self::A::X%>) {
-      this.{self::A::b}.{self::B::bar}(x{asy::Future<self::A::X%>});
+      this.{self::A::b}{self::B<self::A::X%>}.{self::B::bar}(x{asy::Future<self::A::X%>}){(FutureOr<self::A::X%>) → dynamic};
     }
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.expect
index ff89535..bcbb04c 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.expect
@@ -18,7 +18,7 @@
     ;
   method foo([generic-covariant-impl FutureOr<self::A::X%>? x = #C1]) → dynamic {
     if(x is{ForNonNullableByDefault} asy::Future<self::A::X%>) {
-      this.{self::A::b}.{self::B::bar}(x{asy::Future<self::A::X%>} as{ForNonNullableByDefault} FutureOr<self::A::X%>);
+      this.{self::A::b}{self::B<self::A::X%>}.{self::B::bar}(x{asy::Future<self::A::X%>} as{ForNonNullableByDefault} FutureOr<self::A::X%>){(FutureOr<self::A::X%>) → dynamic};
     }
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.transformed.expect
index 15445a8..c9d1a5a 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
     ;
   method foo([generic-covariant-impl FutureOr<self::A::X%>? x = #C1]) → dynamic {
     if(x is{ForNonNullableByDefault} asy::Future<self::A::X%>) {
-      this.{self::A::b}.{self::B::bar}(x{asy::Future<self::A::X%>});
+      this.{self::A::b}{self::B<self::A::X%>}.{self::B::bar}(x{asy::Future<self::A::X%>}){(FutureOr<self::A::X%>) → dynamic};
     }
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.strong.expect
index 412e12d..5a7fa88 100644
--- a/pkg/front_end/testcases/nnbd/issue40601.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.strong.expect
@@ -10,10 +10,10 @@
   method bar(generic-covariant-impl self::A::T% value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
-    () → dynamic result = () → dynamic => this.{self::A::bar}(value);
+    () → dynamic result = () → dynamic => this.{self::A::bar}(value){(self::A::T%) → dynamic};
     (() → Null {
-      value = this.{self::A::baz}();
-    }).call();
+      value = this.{self::A::baz}(){() → self::A::T%};
+    })(){() → Null};
     return result;
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.strong.transformed.expect
index 412e12d..5a7fa88 100644
--- a/pkg/front_end/testcases/nnbd/issue40601.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.strong.transformed.expect
@@ -10,10 +10,10 @@
   method bar(generic-covariant-impl self::A::T% value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
-    () → dynamic result = () → dynamic => this.{self::A::bar}(value);
+    () → dynamic result = () → dynamic => this.{self::A::bar}(value){(self::A::T%) → dynamic};
     (() → Null {
-      value = this.{self::A::baz}();
-    }).call();
+      value = this.{self::A::baz}(){() → self::A::T%};
+    })(){() → Null};
     return result;
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.expect
index 412e12d..5a7fa88 100644
--- a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.expect
@@ -10,10 +10,10 @@
   method bar(generic-covariant-impl self::A::T% value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
-    () → dynamic result = () → dynamic => this.{self::A::bar}(value);
+    () → dynamic result = () → dynamic => this.{self::A::bar}(value){(self::A::T%) → dynamic};
     (() → Null {
-      value = this.{self::A::baz}();
-    }).call();
+      value = this.{self::A::baz}(){() → self::A::T%};
+    })(){() → Null};
     return result;
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.transformed.expect
index 412e12d..5a7fa88 100644
--- a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.transformed.expect
@@ -10,10 +10,10 @@
   method bar(generic-covariant-impl self::A::T% value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
-    () → dynamic result = () → dynamic => this.{self::A::bar}(value);
+    () → dynamic result = () → dynamic => this.{self::A::bar}(value){(self::A::T%) → dynamic};
     (() → Null {
-      value = this.{self::A::baz}();
-    }).call();
+      value = this.{self::A::baz}(){() → self::A::T%};
+    })(){() → Null};
     return result;
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue40805.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue40805.dart.strong.expect
index 12e6ed1..e876287 100644
--- a/pkg/front_end/testcases/nnbd/issue40805.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue40805.dart.strong.expect
@@ -13,7 +13,7 @@
     : super self::C::•()
     ;
   set x(covariant core::num value) → void {
-    super.{self::C::x} = value.{core::num::toInt}();
+    super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue40805.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue40805.dart.strong.transformed.expect
index 12e6ed1..e876287 100644
--- a/pkg/front_end/testcases/nnbd/issue40805.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40805.dart.strong.transformed.expect
@@ -13,7 +13,7 @@
     : super self::C::•()
     ;
   set x(covariant core::num value) → void {
-    super.{self::C::x} = value.{core::num::toInt}();
+    super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue40805.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue40805.dart.weak.expect
index 12e6ed1..e876287 100644
--- a/pkg/front_end/testcases/nnbd/issue40805.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue40805.dart.weak.expect
@@ -13,7 +13,7 @@
     : super self::C::•()
     ;
   set x(covariant core::num value) → void {
-    super.{self::C::x} = value.{core::num::toInt}();
+    super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue40805.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue40805.dart.weak.transformed.expect
index 12e6ed1..e876287 100644
--- a/pkg/front_end/testcases/nnbd/issue40805.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40805.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
     : super self::C::•()
     ;
   set x(covariant core::num value) → void {
-    super.{self::C::x} = value.{core::num::toInt}();
+    super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue40945.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue40945.dart.strong.expect
index b38f082d..f441fd5 100644
--- a/pkg/front_end/testcases/nnbd/issue40945.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue40945.dart.strong.expect
@@ -23,6 +23,6 @@
 static method test() → dynamic {
   self::C c = new self::C::•();
   c.{self::C::test} = 1;
-  c.{self::C::test};
+  c.{self::C::test}{dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40945.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue40945.dart.strong.transformed.expect
index b38f082d..f441fd5 100644
--- a/pkg/front_end/testcases/nnbd/issue40945.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40945.dart.strong.transformed.expect
@@ -23,6 +23,6 @@
 static method test() → dynamic {
   self::C c = new self::C::•();
   c.{self::C::test} = 1;
-  c.{self::C::test};
+  c.{self::C::test}{dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40945.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue40945.dart.weak.expect
index b38f082d..f441fd5 100644
--- a/pkg/front_end/testcases/nnbd/issue40945.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue40945.dart.weak.expect
@@ -23,6 +23,6 @@
 static method test() → dynamic {
   self::C c = new self::C::•();
   c.{self::C::test} = 1;
-  c.{self::C::test};
+  c.{self::C::test}{dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40945.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue40945.dart.weak.transformed.expect
index b38f082d..f441fd5 100644
--- a/pkg/front_end/testcases/nnbd/issue40945.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40945.dart.weak.transformed.expect
@@ -23,6 +23,6 @@
 static method test() → dynamic {
   self::C c = new self::C::•();
   c.{self::C::test} = 1;
-  c.{self::C::test};
+  c.{self::C::test}{dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.strong.expect
index 9c7c798..76d99bf 100644
--- a/pkg/front_end/testcases/nnbd/issue41102.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.strong.expect
@@ -67,9 +67,9 @@
 
 import "dart:async";
 
-static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
 static final field core::List<dynamic> s1 = <dynamic>[];
-static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1.{core::List::==}(null) ?{core::int?} null : #t1.{core::List::length};
+static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1 == null ?{core::int?} null : #t1.{core::List::length}{core::int};
 static final field core::List<core::int> s3 = core::List::filled<core::int>(2, let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
 final s3 = new List<int>.filled(2, null);
                                    ^" in null as{TypeError,ForNonNullableByDefault} core::int);
@@ -86,38 +86,38 @@
     case #C3:
       {}
   }
-}).call();
+})(){() → Null};
 static field core::int? s5;
 static final field core::num s6 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 final s6 = s5 + 0;
-              ^" in self::s5.{core::num::+}(0);
+              ^" in self::s5.{core::num::+}(0){(core::num) → core::num};
 static field core::List<dynamic>? s7;
 static final field dynamic s8 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s8 = s7[0];
-             ^" in self::s7.{core::List::[]}(0);
+             ^" in self::s7.{core::List::[]}{<nullable>}.(0){(core::int) → dynamic};
 static final field core::int s9 = let final core::List<dynamic>? #t5 = self::s7 in let final core::int #t6 = 0 in let final core::int #t7 = 0 in let final void #t8 = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s9 = s7[0] = 0;
-             ^" in #t5.{core::List::[]=}(#t6, #t7) in #t7;
+             ^" in #t5.{core::List::[]=}{<nullable>}.(#t6, #t7){(core::int, dynamic) → void} in #t7;
 static final field core::int s10 = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s10 = s7.length;
-               ^^^^^^" in self::s7.{core::List::length};
+               ^^^^^^" in self::s7.{core::List::length}{<nullable>}.{core::int};
 static final field core::int s11 = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s11 = s7.length = 0;
-               ^^^^^^" in self::s7.{core::List::length} = 0;
+               ^^^^^^" in self::s7.{core::List::length}{<nullable>}. = 0;
 static final field core::int s12 = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 final s12 = -s5;
-            ^" in self::s5.{core::int::unary-}();
+            ^" in self::s5.{core::int::unary-}(){() → core::int};
 static field () →? core::int s13;
 static final field core::int s14 = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
 final s14 = (s13)();
-                 ^" in self::s13.call();
+                 ^" in self::s13{<nullable>}.(){() →? core::int};
 static final field Never s15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null' since it is neither dynamic nor non-nullable.
 final s15 = throw null;
                   ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never;
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.strong.transformed.expect
index fa0069f..2cbfb9d 100644
--- a/pkg/front_end/testcases/nnbd/issue41102.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.strong.transformed.expect
@@ -67,9 +67,9 @@
 
 import "dart:async";
 
-static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
 static final field core::List<dynamic> s1 = core::_GrowableList::•<dynamic>(0);
-static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1.{core::List::==}(null) ?{core::int?} null : #t1.{core::List::length};
+static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1 == null ?{core::int?} null : #t1.{core::List::length}{core::int};
 static final field core::List<core::int> s3 = core::_List::filled<core::int>(2, let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
 final s3 = new List<int>.filled(2, null);
                                    ^" in let Null #t3 = null in #t3.==(null) ?{core::int} #t3 as{TypeError,ForNonNullableByDefault} core::int : #t3{core::int});
@@ -86,38 +86,38 @@
     case #C3:
       {}
   }
-}).call();
+})(){() → Null};
 static field core::int? s5;
 static final field core::num s6 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 final s6 = s5 + 0;
-              ^" in self::s5.{core::num::+}(0);
+              ^" in self::s5.{core::num::+}(0){(core::num) → core::num};
 static field core::List<dynamic>? s7;
 static final field dynamic s8 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s8 = s7[0];
-             ^" in self::s7.{core::List::[]}(0);
+             ^" in self::s7.{core::List::[]}{<nullable>}.(0){(core::int) → dynamic};
 static final field core::int s9 = let final core::List<dynamic>? #t6 = self::s7 in let final core::int #t7 = 0 in let final core::int #t8 = 0 in let final void #t9 = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s9 = s7[0] = 0;
-             ^" in #t6.{core::List::[]=}(#t7, #t8) in #t8;
+             ^" in #t6.{core::List::[]=}{<nullable>}.(#t7, #t8){(core::int, dynamic) → void} in #t8;
 static final field core::int s10 = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s10 = s7.length;
-               ^^^^^^" in self::s7.{core::List::length};
+               ^^^^^^" in self::s7.{core::List::length}{<nullable>}.{core::int};
 static final field core::int s11 = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s11 = s7.length = 0;
-               ^^^^^^" in self::s7.{core::List::length} = 0;
+               ^^^^^^" in self::s7.{core::List::length}{<nullable>}. = 0;
 static final field core::int s12 = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 final s12 = -s5;
-            ^" in self::s5.{core::int::unary-}();
+            ^" in self::s5.{core::int::unary-}(){() → core::int};
 static field () →? core::int s13;
 static final field core::int s14 = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
 final s14 = (s13)();
-                 ^" in self::s13.call();
+                 ^" in self::s13{<nullable>}.(){() →? core::int};
 static final field Never s15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null' since it is neither dynamic nor non-nullable.
 final s15 = throw null;
                   ^";
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.expect
index 9c7c798..76d99bf 100644
--- a/pkg/front_end/testcases/nnbd/issue41102.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.expect
@@ -67,9 +67,9 @@
 
 import "dart:async";
 
-static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
 static final field core::List<dynamic> s1 = <dynamic>[];
-static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1.{core::List::==}(null) ?{core::int?} null : #t1.{core::List::length};
+static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1 == null ?{core::int?} null : #t1.{core::List::length}{core::int};
 static final field core::List<core::int> s3 = core::List::filled<core::int>(2, let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
 final s3 = new List<int>.filled(2, null);
                                    ^" in null as{TypeError,ForNonNullableByDefault} core::int);
@@ -86,38 +86,38 @@
     case #C3:
       {}
   }
-}).call();
+})(){() → Null};
 static field core::int? s5;
 static final field core::num s6 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 final s6 = s5 + 0;
-              ^" in self::s5.{core::num::+}(0);
+              ^" in self::s5.{core::num::+}(0){(core::num) → core::num};
 static field core::List<dynamic>? s7;
 static final field dynamic s8 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s8 = s7[0];
-             ^" in self::s7.{core::List::[]}(0);
+             ^" in self::s7.{core::List::[]}{<nullable>}.(0){(core::int) → dynamic};
 static final field core::int s9 = let final core::List<dynamic>? #t5 = self::s7 in let final core::int #t6 = 0 in let final core::int #t7 = 0 in let final void #t8 = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s9 = s7[0] = 0;
-             ^" in #t5.{core::List::[]=}(#t6, #t7) in #t7;
+             ^" in #t5.{core::List::[]=}{<nullable>}.(#t6, #t7){(core::int, dynamic) → void} in #t7;
 static final field core::int s10 = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s10 = s7.length;
-               ^^^^^^" in self::s7.{core::List::length};
+               ^^^^^^" in self::s7.{core::List::length}{<nullable>}.{core::int};
 static final field core::int s11 = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s11 = s7.length = 0;
-               ^^^^^^" in self::s7.{core::List::length} = 0;
+               ^^^^^^" in self::s7.{core::List::length}{<nullable>}. = 0;
 static final field core::int s12 = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 final s12 = -s5;
-            ^" in self::s5.{core::int::unary-}();
+            ^" in self::s5.{core::int::unary-}(){() → core::int};
 static field () →? core::int s13;
 static final field core::int s14 = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
 final s14 = (s13)();
-                 ^" in self::s13.call();
+                 ^" in self::s13{<nullable>}.(){() →? core::int};
 static final field Never s15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null' since it is neither dynamic nor non-nullable.
 final s15 = throw null;
                   ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never;
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.transformed.expect
index 8bcc4d3..9cdfa657 100644
--- a/pkg/front_end/testcases/nnbd/issue41102.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.transformed.expect
@@ -67,9 +67,9 @@
 
 import "dart:async";
 
-static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
 static final field core::List<dynamic> s1 = core::_GrowableList::•<dynamic>(0);
-static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1.{core::List::==}(null) ?{core::int?} null : #t1.{core::List::length};
+static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1 == null ?{core::int?} null : #t1.{core::List::length}{core::int};
 static final field core::List<core::int> s3 = core::_List::filled<core::int>(2, let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
 final s3 = new List<int>.filled(2, null);
                                    ^" in null);
@@ -86,38 +86,38 @@
     case #C3:
       {}
   }
-}).call();
+})(){() → Null};
 static field core::int? s5;
 static final field core::num s6 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 final s6 = s5 + 0;
-              ^" in self::s5.{core::num::+}(0);
+              ^" in self::s5.{core::num::+}(0){(core::num) → core::num};
 static field core::List<dynamic>? s7;
 static final field dynamic s8 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s8 = s7[0];
-             ^" in self::s7.{core::List::[]}(0);
+             ^" in self::s7.{core::List::[]}{<nullable>}.(0){(core::int) → dynamic};
 static final field core::int s9 = let final core::List<dynamic>? #t5 = self::s7 in let final core::int #t6 = 0 in let final core::int #t7 = 0 in let final void #t8 = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 final s9 = s7[0] = 0;
-             ^" in #t5.{core::List::[]=}(#t6, #t7) in #t7;
+             ^" in #t5.{core::List::[]=}{<nullable>}.(#t6, #t7){(core::int, dynamic) → void} in #t7;
 static final field core::int s10 = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s10 = s7.length;
-               ^^^^^^" in self::s7.{core::List::length};
+               ^^^^^^" in self::s7.{core::List::length}{<nullable>}.{core::int};
 static final field core::int s11 = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
  - 'List' is from 'dart:core'.
 Try accessing using ?. instead.
 final s11 = s7.length = 0;
-               ^^^^^^" in self::s7.{core::List::length} = 0;
+               ^^^^^^" in self::s7.{core::List::length}{<nullable>}. = 0;
 static final field core::int s12 = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 final s12 = -s5;
-            ^" in self::s5.{core::int::unary-}();
+            ^" in self::s5.{core::int::unary-}(){() → core::int};
 static field () →? core::int s13;
 static final field core::int s14 = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
 final s14 = (s13)();
-                 ^" in self::s13.call();
+                 ^" in self::s13{<nullable>}.(){() →? core::int};
 static final field Never s15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null' since it is neither dynamic nor non-nullable.
 final s15 = throw null;
                   ^";
diff --git a/pkg/front_end/testcases/nnbd/issue41103.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41103.dart.strong.expect
index 4b85f1c..d5d245a 100644
--- a/pkg/front_end/testcases/nnbd/issue41103.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41103.dart.strong.expect
@@ -5,5 +5,5 @@
 
 import "dart:async";
 
-static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41103.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41103.dart.strong.transformed.expect
index 4b85f1c..d5d245a 100644
--- a/pkg/front_end/testcases/nnbd/issue41103.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41103.dart.strong.transformed.expect
@@ -5,5 +5,5 @@
 
 import "dart:async";
 
-static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41103.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41103.dart.weak.expect
index 4b85f1c..d5d245a 100644
--- a/pkg/front_end/testcases/nnbd/issue41103.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41103.dart.weak.expect
@@ -5,5 +5,5 @@
 
 import "dart:async";
 
-static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41103.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41103.dart.weak.transformed.expect
index 4b85f1c..d5d245a 100644
--- a/pkg/front_end/testcases/nnbd/issue41103.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41103.dart.weak.transformed.expect
@@ -5,5 +5,5 @@
 
 import "dart:async";
 
-static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.expect
index 6fb76f5..467d91a 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method main() → dynamic async {
   core::List<core::String>? a = <core::String>[] as{ForNonNullableByDefault} core::List<core::String>?;
-  core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1.{core::List::==}(null) ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e);
-  core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2.{core::Object::==}(null) ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
+  core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1 == null ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e){((core::String) → core::String) → core::Iterable<core::String>};
+  core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2 == null ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
   core::print(i);
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
index c611839..a58c8e8 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
@@ -16,8 +16,8 @@
       #L1:
       {
         core::List<core::String>? a = core::_GrowableList::•<core::String>(0);
-        core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1.{core::List::==}(null) ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e);
-        core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2.{core::Object::==}(null) ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
+        core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1 == null ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e){((core::String) → core::String) → core::Iterable<core::String>};
+        core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2 == null ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
         core::print(i);
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.expect
index 6fb76f5..467d91a 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method main() → dynamic async {
   core::List<core::String>? a = <core::String>[] as{ForNonNullableByDefault} core::List<core::String>?;
-  core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1.{core::List::==}(null) ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e);
-  core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2.{core::Object::==}(null) ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
+  core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1 == null ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e){((core::String) → core::String) → core::Iterable<core::String>};
+  core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2 == null ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
   core::print(i);
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
index c611839..a58c8e8 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
@@ -16,8 +16,8 @@
       #L1:
       {
         core::List<core::String>? a = core::_GrowableList::•<core::String>(0);
-        core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1.{core::List::==}(null) ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e);
-        core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2.{core::Object::==}(null) ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
+        core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1 == null ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e){((core::String) → core::String) → core::Iterable<core::String>};
+        core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2 == null ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
         core::print(i);
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/issue41273.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41273.dart.strong.expect
index 6eef4f6..dcb1f5b 100644
--- a/pkg/front_end/testcases/nnbd/issue41273.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41273.dart.strong.expect
@@ -4,26 +4,26 @@
 
 static method test(dynamic x) → void {
   if(x is{ForNonNullableByDefault} Never) {
-    Never n1 = x{Never}.toString();
-    Never n2 = x{Never}.runtimeType;
-    Never n3 = x{Never}.someGetter;
-    Never n4 = x{Never}.someMethod();
-    Never n5 = x{Never}.+(x{Never});
-    Never n6 = x{Never}.[](x{Never});
-    Never n7 = x{Never}.call();
-    Never n8 = x{Never}.runtimeType();
-    Never n9 = x{Never}.toString;
-    x{Never}.runtimeType = #C1;
-    x{Never}.toString = () → core::String => "";
-    Never v1 = x{Never}.toString();
-    Never v2 = x{Never}.runtimeType;
-    Never v3 = x{Never}.someGetter;
-    Never v4 = x{Never}.someMethod();
-    Never v5 = x{Never}.+(x{Never});
-    Never v6 = x{Never}.[](x{Never});
-    Never v7 = x{Never}.call();
-    Never v8 = x{Never}.runtimeType();
-    Never v9 = x{Never}.toString;
+    Never n1 = x{Never}{Never}.toString();
+    Never n2 = x{Never}{Never}.runtimeType;
+    Never n3 = x{Never}{Never}.someGetter;
+    Never n4 = x{Never}{Never}.someMethod();
+    Never n5 = x{Never}{Never}.+(x{Never});
+    Never n6 = x{Never}{Never}.[](x{Never});
+    Never n7 = x{Never}{Never}.call();
+    Never n8 = x{Never}{Never}.runtimeType();
+    Never n9 = x{Never}{Never}.toString;
+    x{Never}{Never}.runtimeType = #C1;
+    x{Never}{Never}.toString = () → core::String => "";
+    Never v1 = x{Never}{Never}.toString();
+    Never v2 = x{Never}{Never}.runtimeType;
+    Never v3 = x{Never}{Never}.someGetter;
+    Never v4 = x{Never}{Never}.someMethod();
+    Never v5 = x{Never}{Never}.+(x{Never});
+    Never v6 = x{Never}{Never}.[](x{Never});
+    Never v7 = x{Never}{Never}.call();
+    Never v8 = x{Never}{Never}.runtimeType();
+    Never v9 = x{Never}{Never}.toString;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue41273.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41273.dart.strong.transformed.expect
index 6eef4f6..dcb1f5b 100644
--- a/pkg/front_end/testcases/nnbd/issue41273.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41273.dart.strong.transformed.expect
@@ -4,26 +4,26 @@
 
 static method test(dynamic x) → void {
   if(x is{ForNonNullableByDefault} Never) {
-    Never n1 = x{Never}.toString();
-    Never n2 = x{Never}.runtimeType;
-    Never n3 = x{Never}.someGetter;
-    Never n4 = x{Never}.someMethod();
-    Never n5 = x{Never}.+(x{Never});
-    Never n6 = x{Never}.[](x{Never});
-    Never n7 = x{Never}.call();
-    Never n8 = x{Never}.runtimeType();
-    Never n9 = x{Never}.toString;
-    x{Never}.runtimeType = #C1;
-    x{Never}.toString = () → core::String => "";
-    Never v1 = x{Never}.toString();
-    Never v2 = x{Never}.runtimeType;
-    Never v3 = x{Never}.someGetter;
-    Never v4 = x{Never}.someMethod();
-    Never v5 = x{Never}.+(x{Never});
-    Never v6 = x{Never}.[](x{Never});
-    Never v7 = x{Never}.call();
-    Never v8 = x{Never}.runtimeType();
-    Never v9 = x{Never}.toString;
+    Never n1 = x{Never}{Never}.toString();
+    Never n2 = x{Never}{Never}.runtimeType;
+    Never n3 = x{Never}{Never}.someGetter;
+    Never n4 = x{Never}{Never}.someMethod();
+    Never n5 = x{Never}{Never}.+(x{Never});
+    Never n6 = x{Never}{Never}.[](x{Never});
+    Never n7 = x{Never}{Never}.call();
+    Never n8 = x{Never}{Never}.runtimeType();
+    Never n9 = x{Never}{Never}.toString;
+    x{Never}{Never}.runtimeType = #C1;
+    x{Never}{Never}.toString = () → core::String => "";
+    Never v1 = x{Never}{Never}.toString();
+    Never v2 = x{Never}{Never}.runtimeType;
+    Never v3 = x{Never}{Never}.someGetter;
+    Never v4 = x{Never}{Never}.someMethod();
+    Never v5 = x{Never}{Never}.+(x{Never});
+    Never v6 = x{Never}{Never}.[](x{Never});
+    Never v7 = x{Never}{Never}.call();
+    Never v8 = x{Never}{Never}.runtimeType();
+    Never v9 = x{Never}{Never}.toString;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue41273.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41273.dart.weak.expect
index e220d05..0bdfe20 100644
--- a/pkg/front_end/testcases/nnbd/issue41273.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41273.dart.weak.expect
@@ -5,26 +5,26 @@
 
 static method test(dynamic x) → void {
   if(x is{ForNonNullableByDefault} Never) {
-    Never n1 = let final Never #t1 = (let final Never #t2 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n2 = let final Never #t3 = (let final Never #t4 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n3 = let final Never #t5 = (let final Never #t6 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).someGetter in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n4 = let final Never #t7 = (let final Never #t8 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).someMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n5 = let final Never #t9 = (let final Never #t10 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).+(let final Never #t11 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n6 = let final Never #t12 = (let final Never #t13 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[](let final Never #t14 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n7 = let final Never #t15 = (let final Never #t16 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n8 = let final Never #t17 = (let final Never #t18 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n9 = let final Never #t19 = (let final Never #t20 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    (let final Never #t21 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType = #C1;
-    (let final Never #t22 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString = () → core::String => "";
-    Never v1 = let final Never #t23 = (let final Never #t24 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v2 = let final Never #t25 = (let final Never #t26 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v3 = let final Never #t27 = (let final Never #t28 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).someGetter in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v4 = let final Never #t29 = (let final Never #t30 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).someMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v5 = let final Never #t31 = (let final Never #t32 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).+(let final Never #t33 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v6 = let final Never #t34 = (let final Never #t35 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[](let final Never #t36 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v7 = let final Never #t37 = (let final Never #t38 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v8 = let final Never #t39 = (let final Never #t40 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v9 = let final Never #t41 = (let final Never #t42 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n1 = let final Never #t1 = (let final Never #t2 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n2 = let final Never #t3 = (let final Never #t4 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n3 = let final Never #t5 = (let final Never #t6 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.someGetter in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n4 = let final Never #t7 = (let final Never #t8 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.someMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n5 = let final Never #t9 = (let final Never #t10 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(let final Never #t11 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n6 = let final Never #t12 = (let final Never #t13 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](let final Never #t14 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n7 = let final Never #t15 = (let final Never #t16 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n8 = let final Never #t17 = (let final Never #t18 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n9 = let final Never #t19 = (let final Never #t20 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    (let final Never #t21 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType = #C1;
+    (let final Never #t22 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString = () → core::String => "";
+    Never v1 = let final Never #t23 = (let final Never #t24 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v2 = let final Never #t25 = (let final Never #t26 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v3 = let final Never #t27 = (let final Never #t28 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.someGetter in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v4 = let final Never #t29 = (let final Never #t30 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.someMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v5 = let final Never #t31 = (let final Never #t32 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(let final Never #t33 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v6 = let final Never #t34 = (let final Never #t35 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](let final Never #t36 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v7 = let final Never #t37 = (let final Never #t38 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v8 = let final Never #t39 = (let final Never #t40 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v9 = let final Never #t41 = (let final Never #t42 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue41273.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41273.dart.weak.transformed.expect
index e220d05..0bdfe20 100644
--- a/pkg/front_end/testcases/nnbd/issue41273.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41273.dart.weak.transformed.expect
@@ -5,26 +5,26 @@
 
 static method test(dynamic x) → void {
   if(x is{ForNonNullableByDefault} Never) {
-    Never n1 = let final Never #t1 = (let final Never #t2 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n2 = let final Never #t3 = (let final Never #t4 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n3 = let final Never #t5 = (let final Never #t6 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).someGetter in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n4 = let final Never #t7 = (let final Never #t8 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).someMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n5 = let final Never #t9 = (let final Never #t10 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).+(let final Never #t11 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n6 = let final Never #t12 = (let final Never #t13 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[](let final Never #t14 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n7 = let final Never #t15 = (let final Never #t16 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n8 = let final Never #t17 = (let final Never #t18 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never n9 = let final Never #t19 = (let final Never #t20 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    (let final Never #t21 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType = #C1;
-    (let final Never #t22 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString = () → core::String => "";
-    Never v1 = let final Never #t23 = (let final Never #t24 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v2 = let final Never #t25 = (let final Never #t26 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v3 = let final Never #t27 = (let final Never #t28 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).someGetter in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v4 = let final Never #t29 = (let final Never #t30 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).someMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v5 = let final Never #t31 = (let final Never #t32 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).+(let final Never #t33 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v6 = let final Never #t34 = (let final Never #t35 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[](let final Never #t36 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v7 = let final Never #t37 = (let final Never #t38 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v8 = let final Never #t39 = (let final Never #t40 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    Never v9 = let final Never #t41 = (let final Never #t42 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n1 = let final Never #t1 = (let final Never #t2 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n2 = let final Never #t3 = (let final Never #t4 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n3 = let final Never #t5 = (let final Never #t6 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.someGetter in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n4 = let final Never #t7 = (let final Never #t8 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.someMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n5 = let final Never #t9 = (let final Never #t10 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(let final Never #t11 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n6 = let final Never #t12 = (let final Never #t13 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](let final Never #t14 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n7 = let final Never #t15 = (let final Never #t16 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n8 = let final Never #t17 = (let final Never #t18 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n9 = let final Never #t19 = (let final Never #t20 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    (let final Never #t21 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType = #C1;
+    (let final Never #t22 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString = () → core::String => "";
+    Never v1 = let final Never #t23 = (let final Never #t24 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v2 = let final Never #t25 = (let final Never #t26 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v3 = let final Never #t27 = (let final Never #t28 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.someGetter in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v4 = let final Never #t29 = (let final Never #t30 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.someMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v5 = let final Never #t31 = (let final Never #t32 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(let final Never #t33 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v6 = let final Never #t34 = (let final Never #t35 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](let final Never #t36 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v7 = let final Never #t37 = (let final Never #t38 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v8 = let final Never #t39 = (let final Never #t40 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v9 = let final Never #t41 = (let final Never #t42 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue41349.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41349.dart.strong.expect
index e517198..16cf6c9 100644
--- a/pkg/front_end/testcases/nnbd/issue41349.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41349.dart.strong.expect
@@ -44,16 +44,16 @@
   self::testFunction(() → core::int => 53);
 }
 static method testA(self::A? a) → dynamic {
-  self::expect(23, let final self::A? #t1 = a in #t1.{core::Object::==}(null) ?{dynamic} null : #t1{self::A}.{self::A::foo}());
+  self::expect(23, let final self::A? #t1 = a in #t1 == null ?{dynamic} null : #t1{self::A}.{self::A::foo}(){() → dynamic});
   self::expect(42, self::B|foo(a));
-  self::expect(123, let final self::A? #t2 = a in #t2.{core::Object::==}(null) ?{dynamic} null : self::C|bar(#t2{self::A}));
+  self::expect(123, let final self::A? #t2 = a in #t2 == null ?{dynamic} null : self::C|bar(#t2{self::A}));
   self::expect(87, self::B|bar(a));
 }
 static method testFunction(() →? core::int f) → dynamic {
-  self::expect(53, let final () →? core::int #t3 = f in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{() → core::int}.call());
+  self::expect(53, let final () →? core::int #t3 = f in #t3 == null ?{core::int?} null : #t3{() → core::int}(){() → core::int});
   self::expect(76, self::D|call(f));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41349.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41349.dart.strong.transformed.expect
index e517198..16cf6c9 100644
--- a/pkg/front_end/testcases/nnbd/issue41349.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41349.dart.strong.transformed.expect
@@ -44,16 +44,16 @@
   self::testFunction(() → core::int => 53);
 }
 static method testA(self::A? a) → dynamic {
-  self::expect(23, let final self::A? #t1 = a in #t1.{core::Object::==}(null) ?{dynamic} null : #t1{self::A}.{self::A::foo}());
+  self::expect(23, let final self::A? #t1 = a in #t1 == null ?{dynamic} null : #t1{self::A}.{self::A::foo}(){() → dynamic});
   self::expect(42, self::B|foo(a));
-  self::expect(123, let final self::A? #t2 = a in #t2.{core::Object::==}(null) ?{dynamic} null : self::C|bar(#t2{self::A}));
+  self::expect(123, let final self::A? #t2 = a in #t2 == null ?{dynamic} null : self::C|bar(#t2{self::A}));
   self::expect(87, self::B|bar(a));
 }
 static method testFunction(() →? core::int f) → dynamic {
-  self::expect(53, let final () →? core::int #t3 = f in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{() → core::int}.call());
+  self::expect(53, let final () →? core::int #t3 = f in #t3 == null ?{core::int?} null : #t3{() → core::int}(){() → core::int});
   self::expect(76, self::D|call(f));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41349.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41349.dart.weak.expect
index e517198..16cf6c9 100644
--- a/pkg/front_end/testcases/nnbd/issue41349.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41349.dart.weak.expect
@@ -44,16 +44,16 @@
   self::testFunction(() → core::int => 53);
 }
 static method testA(self::A? a) → dynamic {
-  self::expect(23, let final self::A? #t1 = a in #t1.{core::Object::==}(null) ?{dynamic} null : #t1{self::A}.{self::A::foo}());
+  self::expect(23, let final self::A? #t1 = a in #t1 == null ?{dynamic} null : #t1{self::A}.{self::A::foo}(){() → dynamic});
   self::expect(42, self::B|foo(a));
-  self::expect(123, let final self::A? #t2 = a in #t2.{core::Object::==}(null) ?{dynamic} null : self::C|bar(#t2{self::A}));
+  self::expect(123, let final self::A? #t2 = a in #t2 == null ?{dynamic} null : self::C|bar(#t2{self::A}));
   self::expect(87, self::B|bar(a));
 }
 static method testFunction(() →? core::int f) → dynamic {
-  self::expect(53, let final () →? core::int #t3 = f in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{() → core::int}.call());
+  self::expect(53, let final () →? core::int #t3 = f in #t3 == null ?{core::int?} null : #t3{() → core::int}(){() → core::int});
   self::expect(76, self::D|call(f));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41349.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41349.dart.weak.transformed.expect
index e517198..16cf6c9 100644
--- a/pkg/front_end/testcases/nnbd/issue41349.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41349.dart.weak.transformed.expect
@@ -44,16 +44,16 @@
   self::testFunction(() → core::int => 53);
 }
 static method testA(self::A? a) → dynamic {
-  self::expect(23, let final self::A? #t1 = a in #t1.{core::Object::==}(null) ?{dynamic} null : #t1{self::A}.{self::A::foo}());
+  self::expect(23, let final self::A? #t1 = a in #t1 == null ?{dynamic} null : #t1{self::A}.{self::A::foo}(){() → dynamic});
   self::expect(42, self::B|foo(a));
-  self::expect(123, let final self::A? #t2 = a in #t2.{core::Object::==}(null) ?{dynamic} null : self::C|bar(#t2{self::A}));
+  self::expect(123, let final self::A? #t2 = a in #t2 == null ?{dynamic} null : self::C|bar(#t2{self::A}));
   self::expect(87, self::B|bar(a));
 }
 static method testFunction(() →? core::int f) → dynamic {
-  self::expect(53, let final () →? core::int #t3 = f in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{() → core::int}.call());
+  self::expect(53, let final () →? core::int #t3 = f in #t3 == null ?{core::int?} null : #t3{() → core::int}(){() → core::int});
   self::expect(76, self::D|call(f));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41386.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41386.dart.strong.expect
index 6f63736..b356950 100644
--- a/pkg/front_end/testcases/nnbd/issue41386.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41386.dart.strong.expect
@@ -12,12 +12,12 @@
 import "dart:core" as core;
 
 static method predicate<T extends core::Object? = dynamic>((self::predicate::T%) → core::bool fn) → (self::predicate::T%) → core::bool
-  return (self::predicate::T% val) → core::bool => fn.call(val);
+  return (self::predicate::T% val) → core::bool => fn(val){(self::predicate::T%) → core::bool};
 static method test() → void {
   core::print(self::predicate<core::Object?>((core::Object? v) → core::bool => invalid-expression "pkg/front_end/testcases/nnbd/issue41386.dart:8:28: Error: The operator '%' isn't defined for the class 'Object?'.
  - 'Object' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '%' operator.
   print(predicate((v) => v % 2 == 1)(3));
-                           ^".{core::Object::==}(1)).call(3));
+                           ^" =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41386.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41386.dart.strong.transformed.expect
index 6f63736..b356950 100644
--- a/pkg/front_end/testcases/nnbd/issue41386.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41386.dart.strong.transformed.expect
@@ -12,12 +12,12 @@
 import "dart:core" as core;
 
 static method predicate<T extends core::Object? = dynamic>((self::predicate::T%) → core::bool fn) → (self::predicate::T%) → core::bool
-  return (self::predicate::T% val) → core::bool => fn.call(val);
+  return (self::predicate::T% val) → core::bool => fn(val){(self::predicate::T%) → core::bool};
 static method test() → void {
   core::print(self::predicate<core::Object?>((core::Object? v) → core::bool => invalid-expression "pkg/front_end/testcases/nnbd/issue41386.dart:8:28: Error: The operator '%' isn't defined for the class 'Object?'.
  - 'Object' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '%' operator.
   print(predicate((v) => v % 2 == 1)(3));
-                           ^".{core::Object::==}(1)).call(3));
+                           ^" =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41386.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41386.dart.weak.expect
index 6f63736..b356950 100644
--- a/pkg/front_end/testcases/nnbd/issue41386.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41386.dart.weak.expect
@@ -12,12 +12,12 @@
 import "dart:core" as core;
 
 static method predicate<T extends core::Object? = dynamic>((self::predicate::T%) → core::bool fn) → (self::predicate::T%) → core::bool
-  return (self::predicate::T% val) → core::bool => fn.call(val);
+  return (self::predicate::T% val) → core::bool => fn(val){(self::predicate::T%) → core::bool};
 static method test() → void {
   core::print(self::predicate<core::Object?>((core::Object? v) → core::bool => invalid-expression "pkg/front_end/testcases/nnbd/issue41386.dart:8:28: Error: The operator '%' isn't defined for the class 'Object?'.
  - 'Object' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '%' operator.
   print(predicate((v) => v % 2 == 1)(3));
-                           ^".{core::Object::==}(1)).call(3));
+                           ^" =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41386.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41386.dart.weak.transformed.expect
index 6f63736..b356950 100644
--- a/pkg/front_end/testcases/nnbd/issue41386.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41386.dart.weak.transformed.expect
@@ -12,12 +12,12 @@
 import "dart:core" as core;
 
 static method predicate<T extends core::Object? = dynamic>((self::predicate::T%) → core::bool fn) → (self::predicate::T%) → core::bool
-  return (self::predicate::T% val) → core::bool => fn.call(val);
+  return (self::predicate::T% val) → core::bool => fn(val){(self::predicate::T%) → core::bool};
 static method test() → void {
   core::print(self::predicate<core::Object?>((core::Object? v) → core::bool => invalid-expression "pkg/front_end/testcases/nnbd/issue41386.dart:8:28: Error: The operator '%' isn't defined for the class 'Object?'.
  - 'Object' is from 'dart:core'.
 Try correcting the operator to an existing operator, or defining a '%' operator.
   print(predicate((v) => v % 2 == 1)(3));
-                           ^".{core::Object::==}(1)).call(3));
+                           ^" =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41386b.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41386b.dart.strong.expect
index 5e52bce..7223846 100644
--- a/pkg/front_end/testcases/nnbd/issue41386b.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41386b.dart.strong.expect
@@ -4,9 +4,9 @@
 
 static method test() → void {
   core::Map<dynamic, dynamic> map = <dynamic, dynamic>{};
-  map.{core::Map::[]}(0).foo;
+  map.{core::Map::[]}(0){(core::Object?) → dynamic}{dynamic}.foo;
   core::Iterable<core::String> elements = <core::String>[];
   core::List<dynamic> list = core::List::from<dynamic>(elements);
-  core::List::from<dynamic>(elements).{core::Iterable::forEach}((dynamic element) → void => element.foo);
+  core::List::from<dynamic>(elements).{core::Iterable::forEach}((dynamic element) → void => element{dynamic}.foo){((dynamic) → void) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41386b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41386b.dart.strong.transformed.expect
index 240cc0d..3db24ca 100644
--- a/pkg/front_end/testcases/nnbd/issue41386b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41386b.dart.strong.transformed.expect
@@ -4,9 +4,9 @@
 
 static method test() → void {
   core::Map<dynamic, dynamic> map = <dynamic, dynamic>{};
-  map.{core::Map::[]}(0).foo;
+  map.{core::Map::[]}(0){(core::Object?) → dynamic}{dynamic}.foo;
   core::Iterable<core::String> elements = core::_GrowableList::•<core::String>(0);
   core::List<dynamic> list = core::List::from<dynamic>(elements);
-  core::List::from<dynamic>(elements).{core::Iterable::forEach}((dynamic element) → void => element.foo);
+  core::List::from<dynamic>(elements).{core::Iterable::forEach}((dynamic element) → void => element{dynamic}.foo){((dynamic) → void) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41386b.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41386b.dart.weak.expect
index 5e52bce..7223846 100644
--- a/pkg/front_end/testcases/nnbd/issue41386b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41386b.dart.weak.expect
@@ -4,9 +4,9 @@
 
 static method test() → void {
   core::Map<dynamic, dynamic> map = <dynamic, dynamic>{};
-  map.{core::Map::[]}(0).foo;
+  map.{core::Map::[]}(0){(core::Object?) → dynamic}{dynamic}.foo;
   core::Iterable<core::String> elements = <core::String>[];
   core::List<dynamic> list = core::List::from<dynamic>(elements);
-  core::List::from<dynamic>(elements).{core::Iterable::forEach}((dynamic element) → void => element.foo);
+  core::List::from<dynamic>(elements).{core::Iterable::forEach}((dynamic element) → void => element{dynamic}.foo){((dynamic) → void) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41386b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41386b.dart.weak.transformed.expect
index 240cc0d..3db24ca 100644
--- a/pkg/front_end/testcases/nnbd/issue41386b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41386b.dart.weak.transformed.expect
@@ -4,9 +4,9 @@
 
 static method test() → void {
   core::Map<dynamic, dynamic> map = <dynamic, dynamic>{};
-  map.{core::Map::[]}(0).foo;
+  map.{core::Map::[]}(0){(core::Object?) → dynamic}{dynamic}.foo;
   core::Iterable<core::String> elements = core::_GrowableList::•<core::String>(0);
   core::List<dynamic> list = core::List::from<dynamic>(elements);
-  core::List::from<dynamic>(elements).{core::Iterable::forEach}((dynamic element) → void => element.foo);
+  core::List::from<dynamic>(elements).{core::Iterable::forEach}((dynamic element) → void => element{dynamic}.foo){((dynamic) → void) → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
index 7c85531..f683f0e 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
@@ -77,18 +77,18 @@
   asy::Future<core::bool> var1 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
-                                                   ^" in (() → asy::Future<dynamic> async => await self::getNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-  asy::Future<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
-  core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+                                                   ^" in (() → asy::Future<dynamic> async => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   asy::Future<core::bool> var4 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
-                                                         ^" in (() → asy::Future<dynamic> async => await self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+                                                         ^" in (() → asy::Future<dynamic> async => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var5 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
-                                             ^" in (() → asy::Future<dynamic> => self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-  asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool()).call();
-  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => self::getFutureBool()).call();
+                                             ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
+  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => self::getFutureBool())(){() → asy::Future<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
index 3ffc279..320f6e7 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
@@ -322,9 +322,9 @@
           :async_op.call();
           :is_sync = true;
           return :async_future;
-        }).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
-        core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+        })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+        asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
+        core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
         asy::Future<core::bool> var4 = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
@@ -356,12 +356,12 @@
           :async_op.call();
           :is_sync = true;
           return :async_future;
-        }).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+        })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
         asy::Future<core::bool> var5 = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
-                                             ^" in (() → asy::Future<dynamic> => self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool()).call();
+                                             ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+        asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
         asy::Future<core::bool> var7 = (() → asy::Future<core::bool> /* originally async */ {
           final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
           core::bool* :is_sync = false;
@@ -388,7 +388,7 @@
           :async_op.call();
           :is_sync = true;
           return :async_future;
-        }).call();
+        })(){() → asy::Future<core::bool>};
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
index 7c85531..f683f0e 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
@@ -77,18 +77,18 @@
   asy::Future<core::bool> var1 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
-                                                   ^" in (() → asy::Future<dynamic> async => await self::getNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-  asy::Future<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
-  core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+                                                   ^" in (() → asy::Future<dynamic> async => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   asy::Future<core::bool> var4 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
-                                                         ^" in (() → asy::Future<dynamic> async => await self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+                                                         ^" in (() → asy::Future<dynamic> async => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var5 = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
-                                             ^" in (() → asy::Future<dynamic> => self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-  asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool()).call();
-  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => self::getFutureBool()).call();
+                                             ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
+  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => self::getFutureBool())(){() → asy::Future<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
index 3ffc279..320f6e7 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
@@ -322,9 +322,9 @@
           :async_op.call();
           :is_sync = true;
           return :async_future;
-        }).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
-        core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+        })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+        asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
+        core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
         asy::Future<core::bool> var4 = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
@@ -356,12 +356,12 @@
           :async_op.call();
           :is_sync = true;
           return :async_future;
-        }).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+        })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
         asy::Future<core::bool> var5 = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
-                                             ^" in (() → asy::Future<dynamic> => self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool()).call();
+                                             ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+        asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
         asy::Future<core::bool> var7 = (() → asy::Future<core::bool> /* originally async */ {
           final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
           core::bool* :is_sync = false;
@@ -388,7 +388,7 @@
           :async_op.call();
           :is_sync = true;
           return :async_future;
-        }).call();
+        })(){() → asy::Future<core::bool>};
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.expect
index fb11d34..7231fd2 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.expect
@@ -100,22 +100,22 @@
   })(); // error
     ^" in (() → core::Iterable<dynamic> sync* {
     yield self::getNull();
-  }).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-  core::Iterable<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
-  core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   core::Iterable<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> sync* {
     yield* self::getIterableNull();
-  }).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
   core::Iterable<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> var5 = (() => getIterableNull())(); // error
-                                                 ^" in (() → core::Iterable<dynamic> => self::getIterableNull()).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-  core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool()).call();
+                                                 ^" in (() → core::Iterable<dynamic> => self::getIterableNull())(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool())(){() → core::Iterable<core::bool>};
   core::Iterable<core::bool> var7 = (() → core::Iterable<core::bool> sync* {
     yield* self::getIterableBool();
-  }).call();
+  })(){() → core::Iterable<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
index fa110f4..99e8151 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
@@ -238,9 +238,9 @@
             return :sync_op;
           }
           return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
-        }).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::Iterable<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+        })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+        core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
+        core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
         core::Iterable<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
@@ -260,12 +260,12 @@
             return :sync_op;
           }
           return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
-        }).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+        })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
         core::Iterable<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> var5 = (() => getIterableNull())(); // error
-                                                 ^" in (() → core::Iterable<dynamic> => self::getIterableNull()).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool()).call();
+                                                 ^" in (() → core::Iterable<dynamic> => self::getIterableNull())(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+        core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool())(){() → core::Iterable<core::bool>};
         core::Iterable<core::bool> var7 = (() → core::Iterable<core::bool> /* originally sync* */ {
           function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
             core::int :await_jump_var = 0;
@@ -282,7 +282,7 @@
             return :sync_op;
           }
           return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
-        }).call();
+        })(){() → core::Iterable<core::bool>};
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.expect
index fb11d34..7231fd2 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.expect
@@ -100,22 +100,22 @@
   })(); // error
     ^" in (() → core::Iterable<dynamic> sync* {
     yield self::getNull();
-  }).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-  core::Iterable<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
-  core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   core::Iterable<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
     ^" in (() → core::Iterable<dynamic> sync* {
     yield* self::getIterableNull();
-  }).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
   core::Iterable<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> var5 = (() => getIterableNull())(); // error
-                                                 ^" in (() → core::Iterable<dynamic> => self::getIterableNull()).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-  core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool()).call();
+                                                 ^" in (() → core::Iterable<dynamic> => self::getIterableNull())(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool())(){() → core::Iterable<core::bool>};
   core::Iterable<core::bool> var7 = (() → core::Iterable<core::bool> sync* {
     yield* self::getIterableBool();
-  }).call();
+  })(){() → core::Iterable<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
index fa110f4..99e8151 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
@@ -238,9 +238,9 @@
             return :sync_op;
           }
           return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
-        }).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::Iterable<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+        })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+        core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
+        core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
         core::Iterable<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   })(); // error
@@ -260,12 +260,12 @@
             return :sync_op;
           }
           return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
-        }).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+        })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
         core::Iterable<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
  - 'Iterable' is from 'dart:core'.
   Iterable<bool> var5 = (() => getIterableNull())(); // error
-                                                 ^" in (() → core::Iterable<dynamic> => self::getIterableNull()).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
-        core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool()).call();
+                                                 ^" in (() → core::Iterable<dynamic> => self::getIterableNull())(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+        core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool())(){() → core::Iterable<core::bool>};
         core::Iterable<core::bool> var7 = (() → core::Iterable<core::bool> /* originally sync* */ {
           function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
             core::int :await_jump_var = 0;
@@ -282,7 +282,7 @@
             return :sync_op;
           }
           return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
-        }).call();
+        })(){() → core::Iterable<core::bool>};
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.expect
index 1a6f68b..71acc8c 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.expect
@@ -101,22 +101,22 @@
   })(); // error
     ^" in (() → asy::Stream<dynamic> async* {
     yield self::getNull();
-  }).call() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-  asy::Stream<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
-  core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   asy::Stream<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
     ^" in (() → asy::Stream<dynamic> async* {
     yield* self::getStreamNull();
-  }).call() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
   asy::Stream<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> var5 = (() => getStreamNull())(); // error
-                                             ^" in (() → asy::Stream<dynamic> => self::getStreamNull()).call() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-  asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool()).call();
+                                             ^" in (() → asy::Stream<dynamic> => self::getStreamNull())(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool())(){() → asy::Stream<core::bool>};
   asy::Stream<core::bool> var7 = (() → asy::Stream<core::bool> async* {
     yield* self::getStreamBool();
-  }).call();
+  })(){() → asy::Stream<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
index 8aef3f8..b3f22ba 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
@@ -382,9 +382,9 @@
           :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
           :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
           return :controller_stream;
-        }).call() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        asy::Stream<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
-        core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+        })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+        asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
+        core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
         asy::Stream<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
@@ -420,12 +420,12 @@
           :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
           :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
           return :controller_stream;
-        }).call() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+        })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
         asy::Stream<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> var5 = (() => getStreamNull())(); // error
-                                             ^" in (() → asy::Stream<dynamic> => self::getStreamNull()).call() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool()).call();
+                                             ^" in (() → asy::Stream<dynamic> => self::getStreamNull())(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+        asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool())(){() → asy::Stream<core::bool>};
         asy::Stream<core::bool> var7 = (() → asy::Stream<core::bool> /* originally async* */ {
           asy::_AsyncStarStreamController<core::bool>? :controller;
           dynamic :controller_stream;
@@ -458,7 +458,7 @@
           :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
           :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
           return :controller_stream;
-        }).call();
+        })(){() → asy::Stream<core::bool>};
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.expect
index 1a6f68b..71acc8c 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.expect
@@ -101,22 +101,22 @@
   })(); // error
     ^" in (() → asy::Stream<dynamic> async* {
     yield self::getNull();
-  }).call() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-  asy::Stream<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
-  core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   asy::Stream<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
     ^" in (() → asy::Stream<dynamic> async* {
     yield* self::getStreamNull();
-  }).call() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
   asy::Stream<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> var5 = (() => getStreamNull())(); // error
-                                             ^" in (() → asy::Stream<dynamic> => self::getStreamNull()).call() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-  asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool()).call();
+                                             ^" in (() → asy::Stream<dynamic> => self::getStreamNull())(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool())(){() → asy::Stream<core::bool>};
   asy::Stream<core::bool> var7 = (() → asy::Stream<core::bool> async* {
     yield* self::getStreamBool();
-  }).call();
+  })(){() → asy::Stream<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
index 8aef3f8..b3f22ba 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
@@ -382,9 +382,9 @@
           :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
           :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
           return :controller_stream;
-        }).call() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        asy::Stream<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
-        core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+        })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+        asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
+        core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
         asy::Stream<core::bool> var4 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   })(); // error
@@ -420,12 +420,12 @@
           :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
           :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
           return :controller_stream;
-        }).call() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+        })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
         asy::Stream<core::bool> var5 = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
  - 'Stream' is from 'dart:async'.
   Stream<bool> var5 = (() => getStreamNull())(); // error
-                                             ^" in (() → asy::Stream<dynamic> => self::getStreamNull()).call() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
-        asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool()).call();
+                                             ^" in (() → asy::Stream<dynamic> => self::getStreamNull())(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+        asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool())(){() → asy::Stream<core::bool>};
         asy::Stream<core::bool> var7 = (() → asy::Stream<core::bool> /* originally async* */ {
           asy::_AsyncStarStreamController<core::bool>? :controller;
           dynamic :controller_stream;
@@ -458,7 +458,7 @@
           :controller = new asy::_AsyncStarStreamController::•<core::bool>(:async_op);
           :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
           return :controller_stream;
-        }).call();
+        })(){() → asy::Stream<core::bool>};
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
diff --git a/pkg/front_end/testcases/nnbd/issue41495.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41495.dart.strong.expect
index 2191477..0341432 100644
--- a/pkg/front_end/testcases/nnbd/issue41495.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41495.dart.strong.expect
@@ -32,10 +32,10 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.c1;
-     ^^" in a1.{self::A::c1};
+     ^^" in a1.{self::A::c1}{<nullable>}.{core::int};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.test;
-     ^^^^" in a1.{self::A::test};
+     ^^^^" in a1.{self::A::test}{<nullable>}.{() → core::int};
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41495.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41495.dart.strong.transformed.expect
index 64e62d6..0ed1268 100644
--- a/pkg/front_end/testcases/nnbd/issue41495.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41495.dart.strong.transformed.expect
@@ -32,10 +32,10 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.c1;
-     ^^" in a1.{self::A::c1};
+     ^^" in a1.{self::A::c1}{<nullable>}.{core::int};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.test;
-     ^^^^" in a1.{self::A::test};
+     ^^^^" in a1.{self::A::test}{<nullable>}.{() → core::int};
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41495.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41495.dart.weak.expect
index 2191477..0341432 100644
--- a/pkg/front_end/testcases/nnbd/issue41495.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41495.dart.weak.expect
@@ -32,10 +32,10 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.c1;
-     ^^" in a1.{self::A::c1};
+     ^^" in a1.{self::A::c1}{<nullable>}.{core::int};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.test;
-     ^^^^" in a1.{self::A::test};
+     ^^^^" in a1.{self::A::test}{<nullable>}.{() → core::int};
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41495.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41495.dart.weak.transformed.expect
index 64e62d6..0ed1268 100644
--- a/pkg/front_end/testcases/nnbd/issue41495.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41495.dart.weak.transformed.expect
@@ -32,10 +32,10 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.c1;
-     ^^" in a1.{self::A::c1};
+     ^^" in a1.{self::A::c1}{<nullable>}.{core::int};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
 Try accessing using ?. instead.
   a1.test;
-     ^^^^" in a1.{self::A::test};
+     ^^^^" in a1.{self::A::test}{<nullable>}.{() → core::int};
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41657.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41657.dart.strong.expect
index b2b28aa..5ff7987 100644
--- a/pkg/front_end/testcases/nnbd/issue41657.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41657.dart.strong.expect
@@ -40,7 +40,7 @@
   self::expect(self::isLegacySubtyping2a, #C1);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/issue41657.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41657.dart.strong.transformed.expect
index 0099f42..0dd695c 100644
--- a/pkg/front_end/testcases/nnbd/issue41657.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41657.dart.strong.transformed.expect
@@ -40,7 +40,7 @@
   self::expect(self::isLegacySubtyping2a, #C1);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/issue41657.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41657.dart.weak.expect
index 574dddd..d4bfe7f 100644
--- a/pkg/front_end/testcases/nnbd/issue41657.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41657.dart.weak.expect
@@ -13,7 +13,7 @@
   self::expect(self::isLegacySubtyping2a, #C1);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/issue41657.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41657.dart.weak.transformed.expect
index c5fa19e..cd01d76 100644
--- a/pkg/front_end/testcases/nnbd/issue41657.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41657.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
   self::expect(self::isLegacySubtyping2a, #C1);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
index f04b2c9..c36ec72 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
@@ -31,26 +31,26 @@
 }
 static method test1(self::C<core::num> c) → dynamic {
   <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
-    return s.{core::num::+}(1);
+    return s.{core::num::+}(1){(core::num) → core::num};
   };
   <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async {
-    return (await t).{core::num::+}(1);
+    return (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
 static method test2(self::C<core::num?> c) → dynamic {
   <S extends core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num?>(S% s) → core::num {
     return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
     return s + 1; // error
-             ^" in s.{core::num::+}(1);
+             ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
   <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async {
     return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
-                     ^" in (await t).{core::num::+}(1);
+                     ^" in (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
 static method test3<S extends core::num?>(self::test3::S% s) → dynamic
   return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
 test3<S extends num?>(S s) => s + 1; // error
-                                ^" in s.{core::num::+}(1);
+                                ^" in s.{core::num::+}(1){(core::num) → core::num};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
index 7d2ec63..aef590c 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
@@ -32,7 +32,7 @@
 }
 static method test1(self::C<core::num> c) → dynamic {
   <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
-    return s.{core::num::+}(1);
+    return s.{core::num::+}(1){(core::num) → core::num};
   };
   <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> /* originally async */ {
     final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
@@ -48,7 +48,7 @@
         #L1:
         {
           [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::num>(:result).{core::num::+}(1);
+          :return_value = _in::unsafeCast<core::num>(:result).{core::num::+}(1){(core::num) → core::num};
           break #L1;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -68,7 +68,7 @@
   <S extends core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num?>(S% s) → core::num {
     return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
     return s + 1; // error
-             ^" in s.{core::num::+}(1);
+             ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
   <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> /* originally async */ {
     final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
@@ -87,7 +87,7 @@
     return (await t) + 1; // error
                      ^";
           [yield] let dynamic #t4 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::num?>(:result).{core::num::+}(1);
+          :return_value = _in::unsafeCast<core::num?>(:result).{core::num::+}(1){(core::num) → core::num};
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -106,5 +106,5 @@
 static method test3<S extends core::num?>(self::test3::S% s) → dynamic
   return let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
 test3<S extends num?>(S s) => s + 1; // error
-                                ^" in s.{core::num::+}(1);
+                                ^" in s.{core::num::+}(1){(core::num) → core::num};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
index f04b2c9..c36ec72 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
@@ -31,26 +31,26 @@
 }
 static method test1(self::C<core::num> c) → dynamic {
   <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
-    return s.{core::num::+}(1);
+    return s.{core::num::+}(1){(core::num) → core::num};
   };
   <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async {
-    return (await t).{core::num::+}(1);
+    return (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
 static method test2(self::C<core::num?> c) → dynamic {
   <S extends core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num?>(S% s) → core::num {
     return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
     return s + 1; // error
-             ^" in s.{core::num::+}(1);
+             ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
   <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async {
     return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
-                     ^" in (await t).{core::num::+}(1);
+                     ^" in (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
 static method test3<S extends core::num?>(self::test3::S% s) → dynamic
   return let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
 test3<S extends num?>(S s) => s + 1; // error
-                                ^" in s.{core::num::+}(1);
+                                ^" in s.{core::num::+}(1){(core::num) → core::num};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
index 7d2ec63..aef590c 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
@@ -32,7 +32,7 @@
 }
 static method test1(self::C<core::num> c) → dynamic {
   <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
-    return s.{core::num::+}(1);
+    return s.{core::num::+}(1){(core::num) → core::num};
   };
   <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> /* originally async */ {
     final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
@@ -48,7 +48,7 @@
         #L1:
         {
           [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::num>(:result).{core::num::+}(1);
+          :return_value = _in::unsafeCast<core::num>(:result).{core::num::+}(1){(core::num) → core::num};
           break #L1;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -68,7 +68,7 @@
   <S extends core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num?>(S% s) → core::num {
     return let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
     return s + 1; // error
-             ^" in s.{core::num::+}(1);
+             ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
   <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> /* originally async */ {
     final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
@@ -87,7 +87,7 @@
     return (await t) + 1; // error
                      ^";
           [yield] let dynamic #t4 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::num?>(:result).{core::num::+}(1);
+          :return_value = _in::unsafeCast<core::num?>(:result).{core::num::+}(1){(core::num) → core::num};
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -106,5 +106,5 @@
 static method test3<S extends core::num?>(self::test3::S% s) → dynamic
   return let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
 test3<S extends num?>(S s) => s + 1; // error
-                                ^" in s.{core::num::+}(1);
+                                ^" in s.{core::num::+}(1){(core::num) → core::num};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.expect
index 588916e..62b372d 100644
--- a/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.expect
@@ -14,19 +14,19 @@
 import "dart:core" as core;
 
 static method test1<S extends core::num>(self::test1::S s) → dynamic {
-  core::num t = s.{core::num::+}(1);
+  core::num t = s.{core::num::+}(1){(core::num) → core::num};
 }
 static method test2<S extends core::num?>(self::test2::S% s) → dynamic {
   core::num t = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
-            ^" in s.{core::num::+}(1);
+            ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
 static method test3<S extends core::int>(self::test3::S s) → dynamic {
-  core::int t = s.{core::num::+}(1);
+  core::int t = s.{core::num::+}(1){(core::num) → core::int};
 }
 static method test4<S extends core::int?>(self::test4::S% s) → dynamic {
   core::num t = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
-            ^" in s.{core::num::+}(1);
+            ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.transformed.expect
index 588916e..62b372d 100644
--- a/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697b.dart.strong.transformed.expect
@@ -14,19 +14,19 @@
 import "dart:core" as core;
 
 static method test1<S extends core::num>(self::test1::S s) → dynamic {
-  core::num t = s.{core::num::+}(1);
+  core::num t = s.{core::num::+}(1){(core::num) → core::num};
 }
 static method test2<S extends core::num?>(self::test2::S% s) → dynamic {
   core::num t = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
-            ^" in s.{core::num::+}(1);
+            ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
 static method test3<S extends core::int>(self::test3::S s) → dynamic {
-  core::int t = s.{core::num::+}(1);
+  core::int t = s.{core::num::+}(1){(core::num) → core::int};
 }
 static method test4<S extends core::int?>(self::test4::S% s) → dynamic {
   core::num t = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
-            ^" in s.{core::num::+}(1);
+            ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.expect
index 588916e..62b372d 100644
--- a/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.expect
@@ -14,19 +14,19 @@
 import "dart:core" as core;
 
 static method test1<S extends core::num>(self::test1::S s) → dynamic {
-  core::num t = s.{core::num::+}(1);
+  core::num t = s.{core::num::+}(1){(core::num) → core::num};
 }
 static method test2<S extends core::num?>(self::test2::S% s) → dynamic {
   core::num t = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
-            ^" in s.{core::num::+}(1);
+            ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
 static method test3<S extends core::int>(self::test3::S s) → dynamic {
-  core::int t = s.{core::num::+}(1);
+  core::int t = s.{core::num::+}(1){(core::num) → core::int};
 }
 static method test4<S extends core::int?>(self::test4::S% s) → dynamic {
   core::num t = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
-            ^" in s.{core::num::+}(1);
+            ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.transformed.expect
index 588916e..62b372d 100644
--- a/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.transformed.expect
@@ -14,19 +14,19 @@
 import "dart:core" as core;
 
 static method test1<S extends core::num>(self::test1::S s) → dynamic {
-  core::num t = s.{core::num::+}(1);
+  core::num t = s.{core::num::+}(1){(core::num) → core::num};
 }
 static method test2<S extends core::num?>(self::test2::S% s) → dynamic {
   core::num t = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
-            ^" in s.{core::num::+}(1);
+            ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
 static method test3<S extends core::int>(self::test3::S s) → dynamic {
-  core::int t = s.{core::num::+}(1);
+  core::int t = s.{core::num::+}(1){(core::num) → core::int};
 }
 static method test4<S extends core::int?>(self::test4::S% s) → dynamic {
   core::num t = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
   var t = s + 1; // error
-            ^" in s.{core::num::+}(1);
+            ^" in s.{core::num::+}(1){(core::num) → core::num};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42504.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42504.dart.strong.expect
index 8c4ad4f..62138bc 100644
--- a/pkg/front_end/testcases/nnbd/issue42504.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42504.dart.strong.expect
@@ -18,20 +18,20 @@
     ;
   abstract get _pendingImages() → dynamic;
   method putIfAbsent(core::Object key, () → self::ImageStreamCompleter loader) → self::ImageStreamCompleter? {
-    assert(!key.{core::Object::==}(null));
-    assert(!loader.{core::Object::==}(null));
-    self::ImageStreamCompleter? result = (let final dynamic #t1 = this.{self::Foo::_pendingImages}.[](key) in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.completer) as{TypeError,ForDynamic,ForNonNullableByDefault} self::ImageStreamCompleter?;
-    if(!result.{core::Object::==}(null)) {
+    assert(!(key == null));
+    assert(!(loader == null));
+    self::ImageStreamCompleter? result = (let final dynamic #t1 = this.{self::Foo::_pendingImages}{dynamic}{dynamic}.[](key) in #t1 == null ?{dynamic} null : #t1{dynamic}.completer) as{TypeError,ForDynamic,ForNonNullableByDefault} self::ImageStreamCompleter?;
+    if(!(result == null)) {
       return result{self::ImageStreamCompleter};
     }
     try {
-      result = loader.call();
+      result = loader(){() → self::ImageStreamCompleter};
       self::_LiveImage::•(result{self::ImageStreamCompleter});
     }
     on core::Object catch(final core::Object error) {
       return null;
     }
-    result{self::ImageStreamCompleter}.{self::ImageStreamCompleter::addListener}();
+    result{self::ImageStreamCompleter}.{self::ImageStreamCompleter::addListener}(){() → void};
     return result{self::ImageStreamCompleter};
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42504.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42504.dart.strong.transformed.expect
index 8c4ad4f..62138bc 100644
--- a/pkg/front_end/testcases/nnbd/issue42504.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42504.dart.strong.transformed.expect
@@ -18,20 +18,20 @@
     ;
   abstract get _pendingImages() → dynamic;
   method putIfAbsent(core::Object key, () → self::ImageStreamCompleter loader) → self::ImageStreamCompleter? {
-    assert(!key.{core::Object::==}(null));
-    assert(!loader.{core::Object::==}(null));
-    self::ImageStreamCompleter? result = (let final dynamic #t1 = this.{self::Foo::_pendingImages}.[](key) in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.completer) as{TypeError,ForDynamic,ForNonNullableByDefault} self::ImageStreamCompleter?;
-    if(!result.{core::Object::==}(null)) {
+    assert(!(key == null));
+    assert(!(loader == null));
+    self::ImageStreamCompleter? result = (let final dynamic #t1 = this.{self::Foo::_pendingImages}{dynamic}{dynamic}.[](key) in #t1 == null ?{dynamic} null : #t1{dynamic}.completer) as{TypeError,ForDynamic,ForNonNullableByDefault} self::ImageStreamCompleter?;
+    if(!(result == null)) {
       return result{self::ImageStreamCompleter};
     }
     try {
-      result = loader.call();
+      result = loader(){() → self::ImageStreamCompleter};
       self::_LiveImage::•(result{self::ImageStreamCompleter});
     }
     on core::Object catch(final core::Object error) {
       return null;
     }
-    result{self::ImageStreamCompleter}.{self::ImageStreamCompleter::addListener}();
+    result{self::ImageStreamCompleter}.{self::ImageStreamCompleter::addListener}(){() → void};
     return result{self::ImageStreamCompleter};
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42504.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42504.dart.weak.expect
index 8c4ad4f..62138bc 100644
--- a/pkg/front_end/testcases/nnbd/issue42504.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42504.dart.weak.expect
@@ -18,20 +18,20 @@
     ;
   abstract get _pendingImages() → dynamic;
   method putIfAbsent(core::Object key, () → self::ImageStreamCompleter loader) → self::ImageStreamCompleter? {
-    assert(!key.{core::Object::==}(null));
-    assert(!loader.{core::Object::==}(null));
-    self::ImageStreamCompleter? result = (let final dynamic #t1 = this.{self::Foo::_pendingImages}.[](key) in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.completer) as{TypeError,ForDynamic,ForNonNullableByDefault} self::ImageStreamCompleter?;
-    if(!result.{core::Object::==}(null)) {
+    assert(!(key == null));
+    assert(!(loader == null));
+    self::ImageStreamCompleter? result = (let final dynamic #t1 = this.{self::Foo::_pendingImages}{dynamic}{dynamic}.[](key) in #t1 == null ?{dynamic} null : #t1{dynamic}.completer) as{TypeError,ForDynamic,ForNonNullableByDefault} self::ImageStreamCompleter?;
+    if(!(result == null)) {
       return result{self::ImageStreamCompleter};
     }
     try {
-      result = loader.call();
+      result = loader(){() → self::ImageStreamCompleter};
       self::_LiveImage::•(result{self::ImageStreamCompleter});
     }
     on core::Object catch(final core::Object error) {
       return null;
     }
-    result{self::ImageStreamCompleter}.{self::ImageStreamCompleter::addListener}();
+    result{self::ImageStreamCompleter}.{self::ImageStreamCompleter::addListener}(){() → void};
     return result{self::ImageStreamCompleter};
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42504.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42504.dart.weak.transformed.expect
index 8c4ad4f..62138bc 100644
--- a/pkg/front_end/testcases/nnbd/issue42504.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42504.dart.weak.transformed.expect
@@ -18,20 +18,20 @@
     ;
   abstract get _pendingImages() → dynamic;
   method putIfAbsent(core::Object key, () → self::ImageStreamCompleter loader) → self::ImageStreamCompleter? {
-    assert(!key.{core::Object::==}(null));
-    assert(!loader.{core::Object::==}(null));
-    self::ImageStreamCompleter? result = (let final dynamic #t1 = this.{self::Foo::_pendingImages}.[](key) in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.completer) as{TypeError,ForDynamic,ForNonNullableByDefault} self::ImageStreamCompleter?;
-    if(!result.{core::Object::==}(null)) {
+    assert(!(key == null));
+    assert(!(loader == null));
+    self::ImageStreamCompleter? result = (let final dynamic #t1 = this.{self::Foo::_pendingImages}{dynamic}{dynamic}.[](key) in #t1 == null ?{dynamic} null : #t1{dynamic}.completer) as{TypeError,ForDynamic,ForNonNullableByDefault} self::ImageStreamCompleter?;
+    if(!(result == null)) {
       return result{self::ImageStreamCompleter};
     }
     try {
-      result = loader.call();
+      result = loader(){() → self::ImageStreamCompleter};
       self::_LiveImage::•(result{self::ImageStreamCompleter});
     }
     on core::Object catch(final core::Object error) {
       return null;
     }
-    result{self::ImageStreamCompleter}.{self::ImageStreamCompleter::addListener}();
+    result{self::ImageStreamCompleter}.{self::ImageStreamCompleter::addListener}(){() → void};
     return result{self::ImageStreamCompleter};
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
index 54202ea..cb4208d 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
@@ -27,15 +27,15 @@
   method noSuchMethod(core::Invocation invocation) → dynamic
     return super.{core::Object::noSuchMethod}(invocation);
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
 static method test() → dynamic async {
   asy::Future<self::Divergent<self::Divergent<core::int>>> x = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
@@ -46,7 +46,7 @@
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
  - 'Future' is from 'dart:async'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
+                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>)(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
index 54202ea..cb4208d 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
@@ -27,15 +27,15 @@
   method noSuchMethod(core::Invocation invocation) → dynamic
     return super.{core::Object::noSuchMethod}(invocation);
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
 static method test() → dynamic async {
   asy::Future<self::Divergent<self::Divergent<core::int>>> x = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
@@ -46,7 +46,7 @@
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
  - 'Future' is from 'dart:async'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
+                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>)(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
index 819fad7..dd671d9 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
@@ -11,15 +11,15 @@
   method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError}) → asy::Future<self::Divergent::then::R%>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#then, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onError: onError}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#then, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onError: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
 static method test() → dynamic async 
   ;
diff --git a/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.expect
index 922a2af..175a246 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.expect
@@ -23,13 +23,13 @@
 static method wrap<R extends core::Object? = dynamic>(() → self::wrap::R% f) → dynamic {}
 static method wrap2<R extends core::Object? = dynamic>(() → self::A<self::wrap2::R%> f) → dynamic {}
 static method bar() → dynamic {
-  new self::A::•<dynamic>().{self::A::property}.unknown();
-  self::foo<dynamic>().unknown();
+  new self::A::•<dynamic>().{self::A::property}{dynamic}{dynamic}.unknown();
+  self::foo<dynamic>(){dynamic}.unknown();
   self::wrap<dynamic>(() → dynamic => let final dynamic #t1 = self::foo<dynamic>() in block {
-    #t1.unknown();
+    #t1{dynamic}.unknown();
   } =>#t1);
   self::wrap2<core::Object?>(() → self::A<core::Object?> => let final self::A<core::Object?> #t2 = self::foo<self::A<core::Object?>>() in block {
-    let final core::Object? #t3 = #t2.{self::A::property} in #t3.{core::Object::==}(null) ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_2.dart:19:32: Error: The method 'unknown' isn't defined for the class 'Object'.
+    let final core::Object? #t3 = #t2.{self::A::property}{core::Object?} in #t3 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_2.dart:19:32: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   wrap2(() => foo()..property?.unknown());
diff --git a/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.transformed.expect
index 922a2af..175a246 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_2.dart.strong.transformed.expect
@@ -23,13 +23,13 @@
 static method wrap<R extends core::Object? = dynamic>(() → self::wrap::R% f) → dynamic {}
 static method wrap2<R extends core::Object? = dynamic>(() → self::A<self::wrap2::R%> f) → dynamic {}
 static method bar() → dynamic {
-  new self::A::•<dynamic>().{self::A::property}.unknown();
-  self::foo<dynamic>().unknown();
+  new self::A::•<dynamic>().{self::A::property}{dynamic}{dynamic}.unknown();
+  self::foo<dynamic>(){dynamic}.unknown();
   self::wrap<dynamic>(() → dynamic => let final dynamic #t1 = self::foo<dynamic>() in block {
-    #t1.unknown();
+    #t1{dynamic}.unknown();
   } =>#t1);
   self::wrap2<core::Object?>(() → self::A<core::Object?> => let final self::A<core::Object?> #t2 = self::foo<self::A<core::Object?>>() in block {
-    let final core::Object? #t3 = #t2.{self::A::property} in #t3.{core::Object::==}(null) ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_2.dart:19:32: Error: The method 'unknown' isn't defined for the class 'Object'.
+    let final core::Object? #t3 = #t2.{self::A::property}{core::Object?} in #t3 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_2.dart:19:32: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   wrap2(() => foo()..property?.unknown());
diff --git a/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.expect
index 922a2af..175a246 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.expect
@@ -23,13 +23,13 @@
 static method wrap<R extends core::Object? = dynamic>(() → self::wrap::R% f) → dynamic {}
 static method wrap2<R extends core::Object? = dynamic>(() → self::A<self::wrap2::R%> f) → dynamic {}
 static method bar() → dynamic {
-  new self::A::•<dynamic>().{self::A::property}.unknown();
-  self::foo<dynamic>().unknown();
+  new self::A::•<dynamic>().{self::A::property}{dynamic}{dynamic}.unknown();
+  self::foo<dynamic>(){dynamic}.unknown();
   self::wrap<dynamic>(() → dynamic => let final dynamic #t1 = self::foo<dynamic>() in block {
-    #t1.unknown();
+    #t1{dynamic}.unknown();
   } =>#t1);
   self::wrap2<core::Object?>(() → self::A<core::Object?> => let final self::A<core::Object?> #t2 = self::foo<self::A<core::Object?>>() in block {
-    let final core::Object? #t3 = #t2.{self::A::property} in #t3.{core::Object::==}(null) ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_2.dart:19:32: Error: The method 'unknown' isn't defined for the class 'Object'.
+    let final core::Object? #t3 = #t2.{self::A::property}{core::Object?} in #t3 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_2.dart:19:32: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   wrap2(() => foo()..property?.unknown());
diff --git a/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.transformed.expect
index 922a2af..175a246 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.transformed.expect
@@ -23,13 +23,13 @@
 static method wrap<R extends core::Object? = dynamic>(() → self::wrap::R% f) → dynamic {}
 static method wrap2<R extends core::Object? = dynamic>(() → self::A<self::wrap2::R%> f) → dynamic {}
 static method bar() → dynamic {
-  new self::A::•<dynamic>().{self::A::property}.unknown();
-  self::foo<dynamic>().unknown();
+  new self::A::•<dynamic>().{self::A::property}{dynamic}{dynamic}.unknown();
+  self::foo<dynamic>(){dynamic}.unknown();
   self::wrap<dynamic>(() → dynamic => let final dynamic #t1 = self::foo<dynamic>() in block {
-    #t1.unknown();
+    #t1{dynamic}.unknown();
   } =>#t1);
   self::wrap2<core::Object?>(() → self::A<core::Object?> => let final self::A<core::Object?> #t2 = self::foo<self::A<core::Object?>>() in block {
-    let final core::Object? #t3 = #t2.{self::A::property} in #t3.{core::Object::==}(null) ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_2.dart:19:32: Error: The method 'unknown' isn't defined for the class 'Object'.
+    let final core::Object? #t3 = #t2.{self::A::property}{core::Object?} in #t3 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_2.dart:19:32: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   wrap2(() => foo()..property?.unknown());
diff --git a/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.expect
index 9c59159..ecf7395 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.expect
@@ -36,21 +36,21 @@
 static method foo<Z extends core::Object? = dynamic>(() → self::A<core::List<self::foo::Z%>> f) → dynamic {}
 static method bar() → dynamic {
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t1 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
-    let final core::Object? #t2 = #t1.{self::B::y1}.{core::List::[]}(0) in #t2.{core::Object::==}(null) ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:16:25: Error: The method 'unknown' isn't defined for the class 'Object'.
+    let final core::Object? #t2 = #t1.{self::B::y1}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t2 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:16:25: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y1[0]?.unknown());
                         ^^^^^^^";
   } =>#t1);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t3 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
-    let final core::Object? #t4 = #t3.{self::B::y2}.{core::List::[]}(0) in #t4.{core::Object::==}(null) ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
+    let final core::Object? #t4 = #t3.{self::B::y2}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t4 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y2[0]?.unknown());
                         ^^^^^^^";
   } =>#t3);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t5 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
-    let final dynamic #t6 = #t5.{self::B::y3} in #t6.{core::Object::==}(null) ?{dynamic} null : #t6.unknown();
+    let final dynamic #t6 = #t5.{self::B::y3}{dynamic} in #t6 == null ?{dynamic} null : #t6{dynamic}.unknown();
   } =>#t5);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.transformed.expect
index 9c59159..ecf7395 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_3.dart.strong.transformed.expect
@@ -36,21 +36,21 @@
 static method foo<Z extends core::Object? = dynamic>(() → self::A<core::List<self::foo::Z%>> f) → dynamic {}
 static method bar() → dynamic {
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t1 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
-    let final core::Object? #t2 = #t1.{self::B::y1}.{core::List::[]}(0) in #t2.{core::Object::==}(null) ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:16:25: Error: The method 'unknown' isn't defined for the class 'Object'.
+    let final core::Object? #t2 = #t1.{self::B::y1}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t2 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:16:25: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y1[0]?.unknown());
                         ^^^^^^^";
   } =>#t1);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t3 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
-    let final core::Object? #t4 = #t3.{self::B::y2}.{core::List::[]}(0) in #t4.{core::Object::==}(null) ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
+    let final core::Object? #t4 = #t3.{self::B::y2}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t4 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y2[0]?.unknown());
                         ^^^^^^^";
   } =>#t3);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t5 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
-    let final dynamic #t6 = #t5.{self::B::y3} in #t6.{core::Object::==}(null) ?{dynamic} null : #t6.unknown();
+    let final dynamic #t6 = #t5.{self::B::y3}{dynamic} in #t6 == null ?{dynamic} null : #t6{dynamic}.unknown();
   } =>#t5);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.expect
index 9c59159..ecf7395 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.expect
@@ -36,21 +36,21 @@
 static method foo<Z extends core::Object? = dynamic>(() → self::A<core::List<self::foo::Z%>> f) → dynamic {}
 static method bar() → dynamic {
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t1 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
-    let final core::Object? #t2 = #t1.{self::B::y1}.{core::List::[]}(0) in #t2.{core::Object::==}(null) ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:16:25: Error: The method 'unknown' isn't defined for the class 'Object'.
+    let final core::Object? #t2 = #t1.{self::B::y1}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t2 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:16:25: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y1[0]?.unknown());
                         ^^^^^^^";
   } =>#t1);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t3 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
-    let final core::Object? #t4 = #t3.{self::B::y2}.{core::List::[]}(0) in #t4.{core::Object::==}(null) ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
+    let final core::Object? #t4 = #t3.{self::B::y2}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t4 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y2[0]?.unknown());
                         ^^^^^^^";
   } =>#t3);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t5 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
-    let final dynamic #t6 = #t5.{self::B::y3} in #t6.{core::Object::==}(null) ?{dynamic} null : #t6.unknown();
+    let final dynamic #t6 = #t5.{self::B::y3}{dynamic} in #t6 == null ?{dynamic} null : #t6{dynamic}.unknown();
   } =>#t5);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.transformed.expect
index 9c59159..ecf7395 100644
--- a/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.transformed.expect
@@ -36,21 +36,21 @@
 static method foo<Z extends core::Object? = dynamic>(() → self::A<core::List<self::foo::Z%>> f) → dynamic {}
 static method bar() → dynamic {
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t1 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
-    let final core::Object? #t2 = #t1.{self::B::y1}.{core::List::[]}(0) in #t2.{core::Object::==}(null) ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:16:25: Error: The method 'unknown' isn't defined for the class 'Object'.
+    let final core::Object? #t2 = #t1.{self::B::y1}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t2 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:16:25: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y1[0]?.unknown());
                         ^^^^^^^";
   } =>#t1);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t3 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
-    let final core::Object? #t4 = #t3.{self::B::y2}.{core::List::[]}(0) in #t4.{core::Object::==}(null) ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
+    let final core::Object? #t4 = #t3.{self::B::y2}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t4 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
   foo(() => B()..y2[0]?.unknown());
                         ^^^^^^^";
   } =>#t3);
   self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t5 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
-    let final dynamic #t6 = #t5.{self::B::y3} in #t6.{core::Object::==}(null) ?{dynamic} null : #t6.unknown();
+    let final dynamic #t6 = #t5.{self::B::y3}{dynamic} in #t6 == null ?{dynamic} null : #t6{dynamic}.unknown();
   } =>#t5);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect
index 734823f..06403e2 100644
--- a/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect
@@ -64,11 +64,11 @@
                                            ^" in super.{self::E::==}(other);
 }
 static method main() → dynamic {
-  self::expect(true, new self::D::•().{self::D::==}(new self::D::•()));
-  self::expect(false, new self::D::•().{self::D::method1}(null));
-  self::expect(false, new self::D::•().{self::D::method2}(null));
+  self::expect(true, new self::D::•() =={self::D::==}{(core::Object?) → core::bool} new self::D::•());
+  self::expect(false, new self::D::•().{self::D::method1}(null){(dynamic) → core::bool});
+  self::expect(false, new self::D::•().{self::D::method2}(null){(Null) → core::bool});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect
index 734823f..06403e2 100644
--- a/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect
@@ -64,11 +64,11 @@
                                            ^" in super.{self::E::==}(other);
 }
 static method main() → dynamic {
-  self::expect(true, new self::D::•().{self::D::==}(new self::D::•()));
-  self::expect(false, new self::D::•().{self::D::method1}(null));
-  self::expect(false, new self::D::•().{self::D::method2}(null));
+  self::expect(true, new self::D::•() =={self::D::==}{(core::Object?) → core::bool} new self::D::•());
+  self::expect(false, new self::D::•().{self::D::method1}(null){(dynamic) → core::bool});
+  self::expect(false, new self::D::•().{self::D::method2}(null){(Null) → core::bool});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42607.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42607.dart.strong.expect
index f1a2bdd..bedfed7 100644
--- a/pkg/front_end/testcases/nnbd/issue42607.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42607.dart.strong.expect
@@ -11,7 +11,7 @@
 
 static method test() → dynamic {
   core::int* x = 3;
-  let final core::int* #t1 = x in #t1.{core::num::==}(null) ?{core::bool*} null : #t1.{core::int::isEven};
+  let final core::int* #t1 = x in #t1 == null ?{core::bool*} null : #t1.{core::int::isEven}{core::bool*};
   x = null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42607.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42607.dart.strong.transformed.expect
index f1a2bdd..bedfed7 100644
--- a/pkg/front_end/testcases/nnbd/issue42607.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42607.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
 
 static method test() → dynamic {
   core::int* x = 3;
-  let final core::int* #t1 = x in #t1.{core::num::==}(null) ?{core::bool*} null : #t1.{core::int::isEven};
+  let final core::int* #t1 = x in #t1 == null ?{core::bool*} null : #t1.{core::int::isEven}{core::bool*};
   x = null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42607.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42607.dart.weak.expect
index 2678d44..47b797f 100644
--- a/pkg/front_end/testcases/nnbd/issue42607.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42607.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method test() → dynamic {
   core::int* x = 3;
-  let final core::int* #t1 = x in #t1.{core::num::==}(null) ?{core::bool*} null : #t1.{core::int::isEven};
+  let final core::int* #t1 = x in #t1 == null ?{core::bool*} null : #t1.{core::int::isEven}{core::bool*};
   x = null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42607.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42607.dart.weak.transformed.expect
index 2678d44..47b797f 100644
--- a/pkg/front_end/testcases/nnbd/issue42607.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42607.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method test() → dynamic {
   core::int* x = 3;
-  let final core::int* #t1 = x in #t1.{core::num::==}(null) ?{core::bool*} null : #t1.{core::int::isEven};
+  let final core::int* #t1 = x in #t1 == null ?{core::bool*} null : #t1.{core::int::isEven}{core::bool*};
   x = null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
index 1d21b07..3e6d749 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 static method main() → dynamic async {
-  core::bool b = (() → core::bool => true).call();
+  core::bool b = (() → core::bool => true)(){() → core::bool};
   (dynamic _) → core::int? {
     if(b)
       return 42;
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
index 0ab4a75..69395db 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
     try {
       #L1:
       {
-        core::bool b = (() → core::bool => true).call();
+        core::bool b = (() → core::bool => true)(){() → core::bool};
         (dynamic _) → core::int? {
           if(b)
             return 42;
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect
index 1d21b07..3e6d749 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 static method main() → dynamic async {
-  core::bool b = (() → core::bool => true).call();
+  core::bool b = (() → core::bool => true)(){() → core::bool};
   (dynamic _) → core::int? {
     if(b)
       return 42;
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
index 0ab4a75..69395db 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
     try {
       #L1:
       {
-        core::bool b = (() → core::bool => true).call();
+        core::bool b = (() → core::bool => true)(){() → core::bool};
         (dynamic _) → core::int? {
           if(b)
             return 42;
diff --git a/pkg/front_end/testcases/nnbd/issue42758.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42758.dart.strong.expect
index d04548d..074a1a0 100644
--- a/pkg/front_end/testcases/nnbd/issue42758.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42758.dart.strong.expect
@@ -85,8 +85,8 @@
   core::List<Never> l2 = block {
     final core::List<Never> #t2 = <Never>[];
     final core::Iterable<Never>? #t3 = n1;
-    if(!#t3.{core::Object::==}(null))
-      #t2.{core::List::addAll}{Invariant}(#t3{core::Iterable<Never>});
+    if(!(#t3 == null))
+      #t2.{core::List::addAll}(#t3{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t2;
   core::List<dynamic> l3 = <dynamic>[invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:8:16: Error: Can't spread a value with static type 'Never?'.
   var l3 = [...n2];
@@ -94,8 +94,8 @@
   core::List<Never> l4 = block {
     final core::List<Never> #t4 = <Never>[];
     final core::Iterable<Never>? #t5 = n2;
-    if(!#t5.{core::Object::==}(null))
-      #t4.{core::List::addAll}{Invariant}(#t5{core::Iterable<Never>});
+    if(!(#t5 == null))
+      #t4.{core::List::addAll}(#t5{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t4;
   core::List<dynamic> l5 = <dynamic>[invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:10:16: Error: Can't spread a value with static type 'Null'.
   var l5 = [...n3];
@@ -103,61 +103,61 @@
   core::List<Never> l6 = block {
     final core::List<Never> #t6 = <Never>[];
     final core::Iterable<Never>? #t7 = n3;
-    if(!#t7.{core::Object::==}(null))
-      #t6.{core::List::addAll}{Invariant}(#t7{core::Iterable<Never>});
+    if(!(#t7 == null))
+      #t6.{core::List::addAll}(#t7{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t6;
   core::Set<Never> s1 = block {
     final core::Set<Never> #t8 = col::LinkedHashSet::of<Never>(n1);
-    #t8.{core::Set::add}{Invariant}(n1);
+    #t8.{core::Set::add}(n1){(Never) → core::bool};
   } =>#t8;
   core::Set<Never> s2 = block {
     final core::Set<Never> #t9 = col::LinkedHashSet::•<Never>();
     final core::Iterable<Never>? #t10 = n1;
-    if(!#t10.{core::Object::==}(null))
-      #t9.{core::Set::addAll}{Invariant}(#t10{core::Iterable<Never>});
-    #t9.{core::Set::add}{Invariant}(n1);
+    if(!(#t10 == null))
+      #t9.{core::Set::addAll}(#t10{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t9.{core::Set::add}(n1){(Never) → core::bool};
   } =>#t9;
   core::Set<dynamic> s3 = block {
     final core::Set<dynamic> #t11 = col::LinkedHashSet::•<dynamic>();
-    #t11.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:14:16: Error: Can't spread a value with static type 'Never?'.
+    #t11.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:14:16: Error: Can't spread a value with static type 'Never?'.
   var s3 = {...n2, n1};
-               ^");
-    #t11.{core::Set::add}{Invariant}(n1);
+               ^"){(dynamic) → core::bool};
+    #t11.{core::Set::add}(n1){(dynamic) → core::bool};
   } =>#t11;
   core::Set<Never> s4 = block {
     final core::Set<Never> #t12 = col::LinkedHashSet::•<Never>();
     final core::Iterable<Never>? #t13 = n2;
-    if(!#t13.{core::Object::==}(null))
-      #t12.{core::Set::addAll}{Invariant}(#t13{core::Iterable<Never>});
-    #t12.{core::Set::add}{Invariant}(n1);
+    if(!(#t13 == null))
+      #t12.{core::Set::addAll}(#t13{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t12.{core::Set::add}(n1){(Never) → core::bool};
   } =>#t12;
   core::Set<dynamic> s5 = block {
     final core::Set<dynamic> #t14 = col::LinkedHashSet::•<dynamic>();
-    #t14.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:16:16: Error: Can't spread a value with static type 'Null'.
+    #t14.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:16:16: Error: Can't spread a value with static type 'Null'.
   var s5 = {...n3, n1};
-               ^");
-    #t14.{core::Set::add}{Invariant}(n1);
+               ^"){(dynamic) → core::bool};
+    #t14.{core::Set::add}(n1){(dynamic) → core::bool};
   } =>#t14;
   core::Set<Never> s6 = block {
     final core::Set<Never> #t15 = col::LinkedHashSet::•<Never>();
     final core::Iterable<Never>? #t16 = n3;
-    if(!#t16.{core::Object::==}(null))
-      #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<Never>});
-    #t15.{core::Set::add}{Invariant}(n1);
+    if(!(#t16 == null))
+      #t15.{core::Set::addAll}(#t16{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t15.{core::Set::add}(n1){(Never) → core::bool};
   } =>#t15;
   core::Map<Never, Never> m1 = block {
     final core::Map<Never, Never> #t17 = <Never, Never>{};
-    for (final core::MapEntry<Never, Never> #t18 in n1.{core::Map::entries})
-      #t17.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
-    #t17.{core::Map::[]=}{Invariant}(n1, n1);
+    for (final core::MapEntry<Never, Never> #t18 in n1.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+      #t17.{core::Map::[]=}(#t18.{core::MapEntry::key}{Never}, #t18.{core::MapEntry::value}{Never}){(Never, Never) → void};
+    #t17.{core::Map::[]=}(n1, n1){(Never, Never) → void};
   } =>#t17;
   core::Map<Never, Never> m2 = block {
     final core::Map<Never, Never> #t19 = <Never, Never>{};
     final core::Map<Never, Never>? #t20 = n1;
-    if(!#t20.{core::Object::==}(null))
-      for (final core::MapEntry<Never, Never> #t21 in #t20{core::Map<Never, Never>}.{core::Map::entries})
-        #t19.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
-    #t19.{core::Map::[]=}{Invariant}(n1, n1);
+    if(!(#t20 == null))
+      for (final core::MapEntry<Never, Never> #t21 in #t20{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+        #t19.{core::Map::[]=}(#t21.{core::MapEntry::key}{Never}, #t21.{core::MapEntry::value}{Never}){(Never, Never) → void};
+    #t19.{core::Map::[]=}(n1, n1){(Never, Never) → void};
   } =>#t19;
   core::Map<dynamic, dynamic> m3 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:20:16: Error: Can't spread a value with static type 'Never?'.
   var m3 = {...n2, n1: n1};
@@ -165,10 +165,10 @@
   core::Map<Never, Never> m4 = block {
     final core::Map<Never, Never> #t22 = <Never, Never>{};
     final core::Map<Never, Never>? #t23 = n2;
-    if(!#t23.{core::Object::==}(null))
-      for (final core::MapEntry<Never, Never> #t24 in #t23{core::Map<Never, Never>}.{core::Map::entries})
-        #t22.{core::Map::[]=}{Invariant}(#t24.{core::MapEntry::key}, #t24.{core::MapEntry::value});
-    #t22.{core::Map::[]=}{Invariant}(n1, n1);
+    if(!(#t23 == null))
+      for (final core::MapEntry<Never, Never> #t24 in #t23{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+        #t22.{core::Map::[]=}(#t24.{core::MapEntry::key}{Never}, #t24.{core::MapEntry::value}{Never}){(Never, Never) → void};
+    #t22.{core::Map::[]=}(n1, n1){(Never, Never) → void};
   } =>#t22;
   core::Map<dynamic, dynamic> m5 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:22:16: Error: Can't spread a value with static type 'Null'.
   var m5 = {...n3, n1: n1};
@@ -176,10 +176,10 @@
   core::Map<Never, Never> m6 = block {
     final core::Map<Never, Never> #t25 = <Never, Never>{};
     final core::Map<Never, Never>? #t26 = n3;
-    if(!#t26.{core::Object::==}(null))
-      for (final core::MapEntry<Never, Never> #t27 in #t26{core::Map<Never, Never>}.{core::Map::entries})
-        #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}, #t27.{core::MapEntry::value});
-    #t25.{core::Map::[]=}{Invariant}(n1, n1);
+    if(!(#t26 == null))
+      for (final core::MapEntry<Never, Never> #t27 in #t26{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+        #t25.{core::Map::[]=}(#t27.{core::MapEntry::key}{Never}, #t27.{core::MapEntry::value}{Never}){(Never, Never) → void};
+    #t25.{core::Map::[]=}(n1, n1){(Never, Never) → void};
   } =>#t25;
 }
 static method test2<N1 extends Never, N2 extends Never?, N3 extends Null>(self::test2::N1 n1, self::test2::N2% n2, self::test2::N3% n3) → dynamic {
@@ -189,8 +189,8 @@
   core::List<Never> l2 = block {
     final core::List<Never> #t29 = <Never>[];
     final core::Iterable<Never>? #t30 = n1;
-    if(!#t30.{core::Object::==}(null))
-      #t29.{core::List::addAll}{Invariant}(#t30{core::Iterable<Never>});
+    if(!(#t30 == null))
+      #t29.{core::List::addAll}(#t30{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t29;
   core::List<dynamic> l3 = <dynamic>[invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:30:16: Error: Can't spread a value with static type 'N2'.
   var l3 = [...n2];
@@ -198,8 +198,8 @@
   core::List<Never> l4 = block {
     final core::List<Never> #t31 = <Never>[];
     final core::Iterable<Never>? #t32 = n2;
-    if(!#t32.{core::Object::==}(null))
-      #t31.{core::List::addAll}{Invariant}(#t32{core::Iterable<Never>});
+    if(!(#t32 == null))
+      #t31.{core::List::addAll}(#t32{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t31;
   core::List<dynamic> l5 = <dynamic>[invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:32:16: Error: Can't spread a value with static type 'N3'.
   var l5 = [...n3];
@@ -207,61 +207,61 @@
   core::List<Never> l6 = block {
     final core::List<Never> #t33 = <Never>[];
     final core::Iterable<Never>? #t34 = n3;
-    if(!#t34.{core::Object::==}(null))
-      #t33.{core::List::addAll}{Invariant}(#t34{core::Iterable<Never>});
+    if(!(#t34 == null))
+      #t33.{core::List::addAll}(#t34{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t33;
   core::Set<self::test2::N1> s1 = block {
     final core::Set<self::test2::N1> #t35 = col::LinkedHashSet::of<self::test2::N1>(n1);
-    #t35.{core::Set::add}{Invariant}(n1);
+    #t35.{core::Set::add}(n1){(self::test2::N1) → core::bool};
   } =>#t35;
   core::Set<self::test2::N1> s2 = block {
     final core::Set<self::test2::N1> #t36 = col::LinkedHashSet::•<self::test2::N1>();
     final core::Iterable<self::test2::N1>? #t37 = n1;
-    if(!#t37.{core::Object::==}(null))
-      #t36.{core::Set::addAll}{Invariant}(#t37{core::Iterable<self::test2::N1>});
-    #t36.{core::Set::add}{Invariant}(n1);
+    if(!(#t37 == null))
+      #t36.{core::Set::addAll}(#t37{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t36.{core::Set::add}(n1){(self::test2::N1) → core::bool};
   } =>#t36;
   core::Set<dynamic> s3 = block {
     final core::Set<dynamic> #t38 = col::LinkedHashSet::•<dynamic>();
-    #t38.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:36:16: Error: Can't spread a value with static type 'N2'.
+    #t38.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:36:16: Error: Can't spread a value with static type 'N2'.
   var s3 = {...n2, n1};
-               ^");
-    #t38.{core::Set::add}{Invariant}(n1);
+               ^"){(dynamic) → core::bool};
+    #t38.{core::Set::add}(n1){(dynamic) → core::bool};
   } =>#t38;
   core::Set<self::test2::N1> s4 = block {
     final core::Set<self::test2::N1> #t39 = col::LinkedHashSet::•<self::test2::N1>();
     final core::Iterable<self::test2::N1>? #t40 = n2;
-    if(!#t40.{core::Object::==}(null))
-      #t39.{core::Set::addAll}{Invariant}(#t40{core::Iterable<self::test2::N1>});
-    #t39.{core::Set::add}{Invariant}(n1);
+    if(!(#t40 == null))
+      #t39.{core::Set::addAll}(#t40{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t39.{core::Set::add}(n1){(self::test2::N1) → core::bool};
   } =>#t39;
   core::Set<dynamic> s5 = block {
     final core::Set<dynamic> #t41 = col::LinkedHashSet::•<dynamic>();
-    #t41.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:38:16: Error: Can't spread a value with static type 'N3'.
+    #t41.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:38:16: Error: Can't spread a value with static type 'N3'.
   var s5 = {...n3, n1};
-               ^");
-    #t41.{core::Set::add}{Invariant}(n1);
+               ^"){(dynamic) → core::bool};
+    #t41.{core::Set::add}(n1){(dynamic) → core::bool};
   } =>#t41;
   core::Set<self::test2::N1> s6 = block {
     final core::Set<self::test2::N1> #t42 = col::LinkedHashSet::•<self::test2::N1>();
     final core::Iterable<self::test2::N1>? #t43 = n3;
-    if(!#t43.{core::Object::==}(null))
-      #t42.{core::Set::addAll}{Invariant}(#t43{core::Iterable<self::test2::N1>});
-    #t42.{core::Set::add}{Invariant}(n1);
+    if(!(#t43 == null))
+      #t42.{core::Set::addAll}(#t43{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t42.{core::Set::add}(n1){(self::test2::N1) → core::bool};
   } =>#t42;
   core::Map<self::test2::N1, self::test2::N1> m1 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t44 = <self::test2::N1, self::test2::N1>{};
-    for (final core::MapEntry<self::test2::N1, self::test2::N1> #t45 in n1.{core::Map::entries})
-      #t44.{core::Map::[]=}{Invariant}(#t45.{core::MapEntry::key}, #t45.{core::MapEntry::value});
-    #t44.{core::Map::[]=}{Invariant}(n1, n1);
+    for (final core::MapEntry<self::test2::N1, self::test2::N1> #t45 in n1.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+      #t44.{core::Map::[]=}(#t45.{core::MapEntry::key}{self::test2::N1}, #t45.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
+    #t44.{core::Map::[]=}(n1, n1){(self::test2::N1, self::test2::N1) → void};
   } =>#t44;
   core::Map<self::test2::N1, self::test2::N1> m2 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t46 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t47 = n1;
-    if(!#t47.{core::Object::==}(null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t48 in #t47{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries})
-        #t46.{core::Map::[]=}{Invariant}(#t48.{core::MapEntry::key}, #t48.{core::MapEntry::value});
-    #t46.{core::Map::[]=}{Invariant}(n1, n1);
+    if(!(#t47 == null))
+      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t48 in #t47{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+        #t46.{core::Map::[]=}(#t48.{core::MapEntry::key}{self::test2::N1}, #t48.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
+    #t46.{core::Map::[]=}(n1, n1){(self::test2::N1, self::test2::N1) → void};
   } =>#t46;
   core::Map<dynamic, dynamic> m3 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:42:16: Error: Can't spread a value with static type 'N2'.
   var m3 = {...n2, n1: n1};
@@ -269,10 +269,10 @@
   core::Map<self::test2::N1, self::test2::N1> m4 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t49 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t50 = n2;
-    if(!#t50.{core::Object::==}(null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t51 in #t50{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries})
-        #t49.{core::Map::[]=}{Invariant}(#t51.{core::MapEntry::key}, #t51.{core::MapEntry::value});
-    #t49.{core::Map::[]=}{Invariant}(n1, n1);
+    if(!(#t50 == null))
+      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t51 in #t50{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+        #t49.{core::Map::[]=}(#t51.{core::MapEntry::key}{self::test2::N1}, #t51.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
+    #t49.{core::Map::[]=}(n1, n1){(self::test2::N1, self::test2::N1) → void};
   } =>#t49;
   core::Map<dynamic, dynamic> m5 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:44:16: Error: Can't spread a value with static type 'N3'.
   var m5 = {...n3, n1: n1};
@@ -280,10 +280,10 @@
   core::Map<self::test2::N1, self::test2::N1> m6 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t52 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t53 = n3;
-    if(!#t53.{core::Object::==}(null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t54 in #t53{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries})
-        #t52.{core::Map::[]=}{Invariant}(#t54.{core::MapEntry::key}, #t54.{core::MapEntry::value});
-    #t52.{core::Map::[]=}{Invariant}(n1, n1);
+    if(!(#t53 == null))
+      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t54 in #t53{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+        #t52.{core::Map::[]=}(#t54.{core::MapEntry::key}{self::test2::N1}, #t54.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
+    #t52.{core::Map::[]=}(n1, n1){(self::test2::N1, self::test2::N1) → void};
   } =>#t52;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42758.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42758.dart.strong.transformed.expect
index 57f8fe1..fc29605 100644
--- a/pkg/front_end/testcases/nnbd/issue42758.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42758.dart.strong.transformed.expect
@@ -85,8 +85,8 @@
   core::List<Never> l2 = block {
     final core::List<Never> #t2 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t3 = n1;
-    if(!#t3.{core::Object::==}(null))
-      #t2.{core::List::addAll}{Invariant}(#t3{core::Iterable<Never>});
+    if(!(#t3 == null))
+      #t2.{core::List::addAll}(#t3{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t2;
   core::List<dynamic> l3 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:8:16: Error: Can't spread a value with static type 'Never?'.
   var l3 = [...n2];
@@ -94,8 +94,8 @@
   core::List<Never> l4 = block {
     final core::List<Never> #t4 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t5 = n2;
-    if(!#t5.{core::Object::==}(null))
-      #t4.{core::List::addAll}{Invariant}(#t5{core::Iterable<Never>});
+    if(!(#t5 == null))
+      #t4.{core::List::addAll}(#t5{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t4;
   core::List<dynamic> l5 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:10:16: Error: Can't spread a value with static type 'Null'.
   var l5 = [...n3];
@@ -103,70 +103,70 @@
   core::List<Never> l6 = block {
     final core::List<Never> #t6 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t7 = n3;
-    if(!#t7.{core::Object::==}(null))
-      #t6.{core::List::addAll}{Invariant}(#t7{core::Iterable<Never>});
+    if(!(#t7 == null))
+      #t6.{core::List::addAll}(#t7{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t6;
   core::Set<Never> s1 = block {
     final core::Set<Never> #t8 = col::LinkedHashSet::of<Never>(n1);
-    #t8.{core::Set::add}{Invariant}(n1);
+    #t8.{core::Set::add}(n1){(Never) → core::bool};
   } =>#t8;
   core::Set<Never> s2 = block {
     final core::Set<Never> #t9 = new col::_CompactLinkedHashSet::•<Never>();
     final core::Iterable<Never>? #t10 = n1;
-    if(!#t10.{core::Object::==}(null))
-      #t9.{core::Set::addAll}{Invariant}(#t10{core::Iterable<Never>});
-    #t9.{core::Set::add}{Invariant}(n1);
+    if(!(#t10 == null))
+      #t9.{core::Set::addAll}(#t10{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t9.{core::Set::add}(n1){(Never) → core::bool};
   } =>#t9;
   core::Set<dynamic> s3 = block {
     final core::Set<dynamic> #t11 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t11.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:14:16: Error: Can't spread a value with static type 'Never?'.
+    #t11.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:14:16: Error: Can't spread a value with static type 'Never?'.
   var s3 = {...n2, n1};
-               ^");
-    #t11.{core::Set::add}{Invariant}(n1);
+               ^"){(dynamic) → core::bool};
+    #t11.{core::Set::add}(n1){(dynamic) → core::bool};
   } =>#t11;
   core::Set<Never> s4 = block {
     final core::Set<Never> #t12 = new col::_CompactLinkedHashSet::•<Never>();
     final core::Iterable<Never>? #t13 = n2;
-    if(!#t13.{core::Object::==}(null))
-      #t12.{core::Set::addAll}{Invariant}(#t13{core::Iterable<Never>});
-    #t12.{core::Set::add}{Invariant}(n1);
+    if(!(#t13 == null))
+      #t12.{core::Set::addAll}(#t13{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t12.{core::Set::add}(n1){(Never) → core::bool};
   } =>#t12;
   core::Set<dynamic> s5 = block {
     final core::Set<dynamic> #t14 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t14.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:16:16: Error: Can't spread a value with static type 'Null'.
+    #t14.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:16:16: Error: Can't spread a value with static type 'Null'.
   var s5 = {...n3, n1};
-               ^");
-    #t14.{core::Set::add}{Invariant}(n1);
+               ^"){(dynamic) → core::bool};
+    #t14.{core::Set::add}(n1){(dynamic) → core::bool};
   } =>#t14;
   core::Set<Never> s6 = block {
     final core::Set<Never> #t15 = new col::_CompactLinkedHashSet::•<Never>();
     final core::Iterable<Never>? #t16 = n3;
-    if(!#t16.{core::Object::==}(null))
-      #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<Never>});
-    #t15.{core::Set::add}{Invariant}(n1);
+    if(!(#t16 == null))
+      #t15.{core::Set::addAll}(#t16{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t15.{core::Set::add}(n1){(Never) → core::bool};
   } =>#t15;
   core::Map<Never, Never> m1 = block {
     final core::Map<Never, Never> #t17 = <Never, Never>{};
     {
-      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = n1.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = n1.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<Never, Never> #t18 = :sync-for-iterator.{core::Iterator::current};
-        #t17.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
+        #t17.{core::Map::[]=}(#t18.{core::MapEntry::key}{Never}, #t18.{core::MapEntry::value}{Never}){(Never, Never) → void};
       }
     }
-    #t17.{core::Map::[]=}{Invariant}(n1, n1);
+    #t17.{core::Map::[]=}(n1, n1){(Never, Never) → void};
   } =>#t17;
   core::Map<Never, Never> m2 = block {
     final core::Map<Never, Never> #t19 = <Never, Never>{};
     final core::Map<Never, Never>? #t20 = n1;
-    if(!#t20.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t20{core::Map<Never, Never>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t20 == null)) {
+      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t20{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<Never, Never> #t21 = :sync-for-iterator.{core::Iterator::current};
-        #t19.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
+        #t19.{core::Map::[]=}(#t21.{core::MapEntry::key}{Never}, #t21.{core::MapEntry::value}{Never}){(Never, Never) → void};
       }
     }
-    #t19.{core::Map::[]=}{Invariant}(n1, n1);
+    #t19.{core::Map::[]=}(n1, n1){(Never, Never) → void};
   } =>#t19;
   core::Map<dynamic, dynamic> m3 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:20:16: Error: Can't spread a value with static type 'Never?'.
   var m3 = {...n2, n1: n1};
@@ -174,14 +174,14 @@
   core::Map<Never, Never> m4 = block {
     final core::Map<Never, Never> #t22 = <Never, Never>{};
     final core::Map<Never, Never>? #t23 = n2;
-    if(!#t23.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t23{core::Map<Never, Never>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t23 == null)) {
+      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t23{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<Never, Never> #t24 = :sync-for-iterator.{core::Iterator::current};
-        #t22.{core::Map::[]=}{Invariant}(#t24.{core::MapEntry::key}, #t24.{core::MapEntry::value});
+        #t22.{core::Map::[]=}(#t24.{core::MapEntry::key}{Never}, #t24.{core::MapEntry::value}{Never}){(Never, Never) → void};
       }
     }
-    #t22.{core::Map::[]=}{Invariant}(n1, n1);
+    #t22.{core::Map::[]=}(n1, n1){(Never, Never) → void};
   } =>#t22;
   core::Map<dynamic, dynamic> m5 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:22:16: Error: Can't spread a value with static type 'Null'.
   var m5 = {...n3, n1: n1};
@@ -189,14 +189,14 @@
   core::Map<Never, Never> m6 = block {
     final core::Map<Never, Never> #t25 = <Never, Never>{};
     final core::Map<Never, Never>? #t26 = n3;
-    if(!#t26.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t26{core::Map<Never, Never>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t26 == null)) {
+      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t26{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<Never, Never> #t27 = :sync-for-iterator.{core::Iterator::current};
-        #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}, #t27.{core::MapEntry::value});
+        #t25.{core::Map::[]=}(#t27.{core::MapEntry::key}{Never}, #t27.{core::MapEntry::value}{Never}){(Never, Never) → void};
       }
     }
-    #t25.{core::Map::[]=}{Invariant}(n1, n1);
+    #t25.{core::Map::[]=}(n1, n1){(Never, Never) → void};
   } =>#t25;
 }
 static method test2<N1 extends Never, N2 extends Never?, N3 extends Null>(self::test2::N1 n1, self::test2::N2% n2, self::test2::N3% n3) → dynamic {
@@ -206,8 +206,8 @@
   core::List<Never> l2 = block {
     final core::List<Never> #t29 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t30 = n1;
-    if(!#t30.{core::Object::==}(null))
-      #t29.{core::List::addAll}{Invariant}(#t30{core::Iterable<Never>});
+    if(!(#t30 == null))
+      #t29.{core::List::addAll}(#t30{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t29;
   core::List<dynamic> l3 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:30:16: Error: Can't spread a value with static type 'N2'.
   var l3 = [...n2];
@@ -215,8 +215,8 @@
   core::List<Never> l4 = block {
     final core::List<Never> #t31 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t32 = n2;
-    if(!#t32.{core::Object::==}(null))
-      #t31.{core::List::addAll}{Invariant}(#t32{core::Iterable<Never>});
+    if(!(#t32 == null))
+      #t31.{core::List::addAll}(#t32{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t31;
   core::List<dynamic> l5 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:32:16: Error: Can't spread a value with static type 'N3'.
   var l5 = [...n3];
@@ -224,70 +224,70 @@
   core::List<Never> l6 = block {
     final core::List<Never> #t33 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t34 = n3;
-    if(!#t34.{core::Object::==}(null))
-      #t33.{core::List::addAll}{Invariant}(#t34{core::Iterable<Never>});
+    if(!(#t34 == null))
+      #t33.{core::List::addAll}(#t34{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t33;
   core::Set<self::test2::N1> s1 = block {
     final core::Set<self::test2::N1> #t35 = col::LinkedHashSet::of<self::test2::N1>(n1);
-    #t35.{core::Set::add}{Invariant}(n1);
+    #t35.{core::Set::add}(n1){(self::test2::N1) → core::bool};
   } =>#t35;
   core::Set<self::test2::N1> s2 = block {
     final core::Set<self::test2::N1> #t36 = new col::_CompactLinkedHashSet::•<self::test2::N1>();
     final core::Iterable<self::test2::N1>? #t37 = n1;
-    if(!#t37.{core::Object::==}(null))
-      #t36.{core::Set::addAll}{Invariant}(#t37{core::Iterable<self::test2::N1>});
-    #t36.{core::Set::add}{Invariant}(n1);
+    if(!(#t37 == null))
+      #t36.{core::Set::addAll}(#t37{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t36.{core::Set::add}(n1){(self::test2::N1) → core::bool};
   } =>#t36;
   core::Set<dynamic> s3 = block {
     final core::Set<dynamic> #t38 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t38.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:36:16: Error: Can't spread a value with static type 'N2'.
+    #t38.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:36:16: Error: Can't spread a value with static type 'N2'.
   var s3 = {...n2, n1};
-               ^");
-    #t38.{core::Set::add}{Invariant}(n1);
+               ^"){(dynamic) → core::bool};
+    #t38.{core::Set::add}(n1){(dynamic) → core::bool};
   } =>#t38;
   core::Set<self::test2::N1> s4 = block {
     final core::Set<self::test2::N1> #t39 = new col::_CompactLinkedHashSet::•<self::test2::N1>();
     final core::Iterable<self::test2::N1>? #t40 = n2;
-    if(!#t40.{core::Object::==}(null))
-      #t39.{core::Set::addAll}{Invariant}(#t40{core::Iterable<self::test2::N1>});
-    #t39.{core::Set::add}{Invariant}(n1);
+    if(!(#t40 == null))
+      #t39.{core::Set::addAll}(#t40{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t39.{core::Set::add}(n1){(self::test2::N1) → core::bool};
   } =>#t39;
   core::Set<dynamic> s5 = block {
     final core::Set<dynamic> #t41 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t41.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:38:16: Error: Can't spread a value with static type 'N3'.
+    #t41.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:38:16: Error: Can't spread a value with static type 'N3'.
   var s5 = {...n3, n1};
-               ^");
-    #t41.{core::Set::add}{Invariant}(n1);
+               ^"){(dynamic) → core::bool};
+    #t41.{core::Set::add}(n1){(dynamic) → core::bool};
   } =>#t41;
   core::Set<self::test2::N1> s6 = block {
     final core::Set<self::test2::N1> #t42 = new col::_CompactLinkedHashSet::•<self::test2::N1>();
     final core::Iterable<self::test2::N1>? #t43 = n3;
-    if(!#t43.{core::Object::==}(null))
-      #t42.{core::Set::addAll}{Invariant}(#t43{core::Iterable<self::test2::N1>});
-    #t42.{core::Set::add}{Invariant}(n1);
+    if(!(#t43 == null))
+      #t42.{core::Set::addAll}(#t43{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t42.{core::Set::add}(n1){(self::test2::N1) → core::bool};
   } =>#t42;
   core::Map<self::test2::N1, self::test2::N1> m1 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t44 = <self::test2::N1, self::test2::N1>{};
     {
-      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = n1.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = n1.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<self::test2::N1, self::test2::N1> #t45 = :sync-for-iterator.{core::Iterator::current};
-        #t44.{core::Map::[]=}{Invariant}(#t45.{core::MapEntry::key}, #t45.{core::MapEntry::value});
+        #t44.{core::Map::[]=}(#t45.{core::MapEntry::key}{self::test2::N1}, #t45.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
       }
     }
-    #t44.{core::Map::[]=}{Invariant}(n1, n1);
+    #t44.{core::Map::[]=}(n1, n1){(self::test2::N1, self::test2::N1) → void};
   } =>#t44;
   core::Map<self::test2::N1, self::test2::N1> m2 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t46 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t47 = n1;
-    if(!#t47.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t47{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t47 == null)) {
+      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t47{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<self::test2::N1, self::test2::N1> #t48 = :sync-for-iterator.{core::Iterator::current};
-        #t46.{core::Map::[]=}{Invariant}(#t48.{core::MapEntry::key}, #t48.{core::MapEntry::value});
+        #t46.{core::Map::[]=}(#t48.{core::MapEntry::key}{self::test2::N1}, #t48.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
       }
     }
-    #t46.{core::Map::[]=}{Invariant}(n1, n1);
+    #t46.{core::Map::[]=}(n1, n1){(self::test2::N1, self::test2::N1) → void};
   } =>#t46;
   core::Map<dynamic, dynamic> m3 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:42:16: Error: Can't spread a value with static type 'N2'.
   var m3 = {...n2, n1: n1};
@@ -295,14 +295,14 @@
   core::Map<self::test2::N1, self::test2::N1> m4 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t49 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t50 = n2;
-    if(!#t50.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t50{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t50 == null)) {
+      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t50{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<self::test2::N1, self::test2::N1> #t51 = :sync-for-iterator.{core::Iterator::current};
-        #t49.{core::Map::[]=}{Invariant}(#t51.{core::MapEntry::key}, #t51.{core::MapEntry::value});
+        #t49.{core::Map::[]=}(#t51.{core::MapEntry::key}{self::test2::N1}, #t51.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
       }
     }
-    #t49.{core::Map::[]=}{Invariant}(n1, n1);
+    #t49.{core::Map::[]=}(n1, n1){(self::test2::N1, self::test2::N1) → void};
   } =>#t49;
   core::Map<dynamic, dynamic> m5 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:44:16: Error: Can't spread a value with static type 'N3'.
   var m5 = {...n3, n1: n1};
@@ -310,14 +310,14 @@
   core::Map<self::test2::N1, self::test2::N1> m6 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t52 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t53 = n3;
-    if(!#t53.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t53{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t53 == null)) {
+      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t53{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<self::test2::N1, self::test2::N1> #t54 = :sync-for-iterator.{core::Iterator::current};
-        #t52.{core::Map::[]=}{Invariant}(#t54.{core::MapEntry::key}, #t54.{core::MapEntry::value});
+        #t52.{core::Map::[]=}(#t54.{core::MapEntry::key}{self::test2::N1}, #t54.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
       }
     }
-    #t52.{core::Map::[]=}{Invariant}(n1, n1);
+    #t52.{core::Map::[]=}(n1, n1){(self::test2::N1, self::test2::N1) → void};
   } =>#t52;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42758.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42758.dart.weak.expect
index 0eb909b..1126a7e 100644
--- a/pkg/front_end/testcases/nnbd/issue42758.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42758.dart.weak.expect
@@ -86,8 +86,8 @@
   core::List<Never> l2 = block {
     final core::List<Never> #t3 = <Never>[];
     final core::Iterable<Never>? #t4 = let final Never #t5 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    if(!#t4.{core::Object::==}(null))
-      #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<Never>});
+    if(!(#t4 == null))
+      #t3.{core::List::addAll}(#t4{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t3;
   core::List<dynamic> l3 = <dynamic>[invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:8:16: Error: Can't spread a value with static type 'Never?'.
   var l3 = [...n2];
@@ -95,8 +95,8 @@
   core::List<Never> l4 = block {
     final core::List<Never> #t6 = <Never>[];
     final core::Iterable<Never>? #t7 = n2;
-    if(!#t7.{core::Object::==}(null))
-      #t6.{core::List::addAll}{Invariant}(#t7{core::Iterable<Never>});
+    if(!(#t7 == null))
+      #t6.{core::List::addAll}(#t7{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t6;
   core::List<dynamic> l5 = <dynamic>[invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:10:16: Error: Can't spread a value with static type 'Null'.
   var l5 = [...n3];
@@ -104,61 +104,61 @@
   core::List<Never> l6 = block {
     final core::List<Never> #t8 = <Never>[];
     final core::Iterable<Never>? #t9 = n3;
-    if(!#t9.{core::Object::==}(null))
-      #t8.{core::List::addAll}{Invariant}(#t9{core::Iterable<Never>});
+    if(!(#t9 == null))
+      #t8.{core::List::addAll}(#t9{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t8;
   core::Set<Never> s1 = block {
     final core::Set<Never> #t10 = col::LinkedHashSet::of<Never>(let final Never #t11 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
-    #t10.{core::Set::add}{Invariant}(let final Never #t12 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t10.{core::Set::add}(let final Never #t12 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never) → core::bool};
   } =>#t10;
   core::Set<Never> s2 = block {
     final core::Set<Never> #t13 = col::LinkedHashSet::•<Never>();
     final core::Iterable<Never>? #t14 = let final Never #t15 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    if(!#t14.{core::Object::==}(null))
-      #t13.{core::Set::addAll}{Invariant}(#t14{core::Iterable<Never>});
-    #t13.{core::Set::add}{Invariant}(let final Never #t16 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t14 == null))
+      #t13.{core::Set::addAll}(#t14{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t13.{core::Set::add}(let final Never #t16 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never) → core::bool};
   } =>#t13;
   core::Set<dynamic> s3 = block {
     final core::Set<dynamic> #t17 = col::LinkedHashSet::•<dynamic>();
-    #t17.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:14:16: Error: Can't spread a value with static type 'Never?'.
+    #t17.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:14:16: Error: Can't spread a value with static type 'Never?'.
   var s3 = {...n2, n1};
-               ^");
-    #t17.{core::Set::add}{Invariant}(let final Never #t18 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+               ^"){(dynamic) → core::bool};
+    #t17.{core::Set::add}(let final Never #t18 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(dynamic) → core::bool};
   } =>#t17;
   core::Set<Never> s4 = block {
     final core::Set<Never> #t19 = col::LinkedHashSet::•<Never>();
     final core::Iterable<Never>? #t20 = n2;
-    if(!#t20.{core::Object::==}(null))
-      #t19.{core::Set::addAll}{Invariant}(#t20{core::Iterable<Never>});
-    #t19.{core::Set::add}{Invariant}(let final Never #t21 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t20 == null))
+      #t19.{core::Set::addAll}(#t20{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t19.{core::Set::add}(let final Never #t21 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never) → core::bool};
   } =>#t19;
   core::Set<dynamic> s5 = block {
     final core::Set<dynamic> #t22 = col::LinkedHashSet::•<dynamic>();
-    #t22.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:16:16: Error: Can't spread a value with static type 'Null'.
+    #t22.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:16:16: Error: Can't spread a value with static type 'Null'.
   var s5 = {...n3, n1};
-               ^");
-    #t22.{core::Set::add}{Invariant}(let final Never #t23 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+               ^"){(dynamic) → core::bool};
+    #t22.{core::Set::add}(let final Never #t23 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(dynamic) → core::bool};
   } =>#t22;
   core::Set<Never> s6 = block {
     final core::Set<Never> #t24 = col::LinkedHashSet::•<Never>();
     final core::Iterable<Never>? #t25 = n3;
-    if(!#t25.{core::Object::==}(null))
-      #t24.{core::Set::addAll}{Invariant}(#t25{core::Iterable<Never>});
-    #t24.{core::Set::add}{Invariant}(let final Never #t26 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t25 == null))
+      #t24.{core::Set::addAll}(#t25{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t24.{core::Set::add}(let final Never #t26 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never) → core::bool};
   } =>#t24;
   core::Map<Never, Never> m1 = block {
     final core::Map<Never, Never> #t27 = <Never, Never>{};
-    for (final core::MapEntry<Never, Never> #t28 in (let final Never #t29 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries})
-      #t27.{core::Map::[]=}{Invariant}(#t28.{core::MapEntry::key}, #t28.{core::MapEntry::value});
-    #t27.{core::Map::[]=}{Invariant}(let final Never #t30 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t31 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    for (final core::MapEntry<Never, Never> #t28 in (let final Never #t29 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+      #t27.{core::Map::[]=}(#t28.{core::MapEntry::key}{Never}, #t28.{core::MapEntry::value}{Never}){(Never, Never) → void};
+    #t27.{core::Map::[]=}(let final Never #t30 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t31 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t27;
   core::Map<Never, Never> m2 = block {
     final core::Map<Never, Never> #t32 = <Never, Never>{};
     final core::Map<Never, Never>? #t33 = let final Never #t34 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    if(!#t33.{core::Object::==}(null))
-      for (final core::MapEntry<Never, Never> #t35 in #t33{core::Map<Never, Never>}.{core::Map::entries})
-        #t32.{core::Map::[]=}{Invariant}(#t35.{core::MapEntry::key}, #t35.{core::MapEntry::value});
-    #t32.{core::Map::[]=}{Invariant}(let final Never #t36 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t37 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t33 == null))
+      for (final core::MapEntry<Never, Never> #t35 in #t33{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+        #t32.{core::Map::[]=}(#t35.{core::MapEntry::key}{Never}, #t35.{core::MapEntry::value}{Never}){(Never, Never) → void};
+    #t32.{core::Map::[]=}(let final Never #t36 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t37 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t32;
   core::Map<dynamic, dynamic> m3 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:20:16: Error: Can't spread a value with static type 'Never?'.
   var m3 = {...n2, n1: n1};
@@ -166,10 +166,10 @@
   core::Map<Never, Never> m4 = block {
     final core::Map<Never, Never> #t40 = <Never, Never>{};
     final core::Map<Never, Never>? #t41 = n2;
-    if(!#t41.{core::Object::==}(null))
-      for (final core::MapEntry<Never, Never> #t42 in #t41{core::Map<Never, Never>}.{core::Map::entries})
-        #t40.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}, #t42.{core::MapEntry::value});
-    #t40.{core::Map::[]=}{Invariant}(let final Never #t43 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t44 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t41 == null))
+      for (final core::MapEntry<Never, Never> #t42 in #t41{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+        #t40.{core::Map::[]=}(#t42.{core::MapEntry::key}{Never}, #t42.{core::MapEntry::value}{Never}){(Never, Never) → void};
+    #t40.{core::Map::[]=}(let final Never #t43 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t44 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t40;
   core::Map<dynamic, dynamic> m5 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:22:16: Error: Can't spread a value with static type 'Null'.
   var m5 = {...n3, n1: n1};
@@ -177,10 +177,10 @@
   core::Map<Never, Never> m6 = block {
     final core::Map<Never, Never> #t47 = <Never, Never>{};
     final core::Map<Never, Never>? #t48 = n3;
-    if(!#t48.{core::Object::==}(null))
-      for (final core::MapEntry<Never, Never> #t49 in #t48{core::Map<Never, Never>}.{core::Map::entries})
-        #t47.{core::Map::[]=}{Invariant}(#t49.{core::MapEntry::key}, #t49.{core::MapEntry::value});
-    #t47.{core::Map::[]=}{Invariant}(let final Never #t50 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t51 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t48 == null))
+      for (final core::MapEntry<Never, Never> #t49 in #t48{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+        #t47.{core::Map::[]=}(#t49.{core::MapEntry::key}{Never}, #t49.{core::MapEntry::value}{Never}){(Never, Never) → void};
+    #t47.{core::Map::[]=}(let final Never #t50 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t51 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t47;
 }
 static method test2<N1 extends Never, N2 extends Never?, N3 extends Null>(self::test2::N1 n1, self::test2::N2% n2, self::test2::N3% n3) → dynamic {
@@ -190,8 +190,8 @@
   core::List<Never> l2 = block {
     final core::List<Never> #t54 = <Never>[];
     final core::Iterable<Never>? #t55 = let final self::test2::N1 #t56 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    if(!#t55.{core::Object::==}(null))
-      #t54.{core::List::addAll}{Invariant}(#t55{core::Iterable<Never>});
+    if(!(#t55 == null))
+      #t54.{core::List::addAll}(#t55{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t54;
   core::List<dynamic> l3 = <dynamic>[invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:30:16: Error: Can't spread a value with static type 'N2'.
   var l3 = [...n2];
@@ -199,8 +199,8 @@
   core::List<Never> l4 = block {
     final core::List<Never> #t57 = <Never>[];
     final core::Iterable<Never>? #t58 = n2;
-    if(!#t58.{core::Object::==}(null))
-      #t57.{core::List::addAll}{Invariant}(#t58{core::Iterable<Never>});
+    if(!(#t58 == null))
+      #t57.{core::List::addAll}(#t58{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t57;
   core::List<dynamic> l5 = <dynamic>[invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:32:16: Error: Can't spread a value with static type 'N3'.
   var l5 = [...n3];
@@ -208,61 +208,61 @@
   core::List<Never> l6 = block {
     final core::List<Never> #t59 = <Never>[];
     final core::Iterable<Never>? #t60 = n3;
-    if(!#t60.{core::Object::==}(null))
-      #t59.{core::List::addAll}{Invariant}(#t60{core::Iterable<Never>});
+    if(!(#t60 == null))
+      #t59.{core::List::addAll}(#t60{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t59;
   core::Set<self::test2::N1> s1 = block {
     final core::Set<self::test2::N1> #t61 = col::LinkedHashSet::of<self::test2::N1>(let final self::test2::N1 #t62 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
-    #t61.{core::Set::add}{Invariant}(let final self::test2::N1 #t63 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t61.{core::Set::add}(let final self::test2::N1 #t63 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1) → core::bool};
   } =>#t61;
   core::Set<self::test2::N1> s2 = block {
     final core::Set<self::test2::N1> #t64 = col::LinkedHashSet::•<self::test2::N1>();
     final core::Iterable<self::test2::N1>? #t65 = let final self::test2::N1 #t66 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    if(!#t65.{core::Object::==}(null))
-      #t64.{core::Set::addAll}{Invariant}(#t65{core::Iterable<self::test2::N1>});
-    #t64.{core::Set::add}{Invariant}(let final self::test2::N1 #t67 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t65 == null))
+      #t64.{core::Set::addAll}(#t65{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t64.{core::Set::add}(let final self::test2::N1 #t67 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1) → core::bool};
   } =>#t64;
   core::Set<dynamic> s3 = block {
     final core::Set<dynamic> #t68 = col::LinkedHashSet::•<dynamic>();
-    #t68.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:36:16: Error: Can't spread a value with static type 'N2'.
+    #t68.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:36:16: Error: Can't spread a value with static type 'N2'.
   var s3 = {...n2, n1};
-               ^");
-    #t68.{core::Set::add}{Invariant}(let final self::test2::N1 #t69 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+               ^"){(dynamic) → core::bool};
+    #t68.{core::Set::add}(let final self::test2::N1 #t69 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(dynamic) → core::bool};
   } =>#t68;
   core::Set<self::test2::N1> s4 = block {
     final core::Set<self::test2::N1> #t70 = col::LinkedHashSet::•<self::test2::N1>();
     final core::Iterable<self::test2::N1>? #t71 = n2;
-    if(!#t71.{core::Object::==}(null))
-      #t70.{core::Set::addAll}{Invariant}(#t71{core::Iterable<self::test2::N1>});
-    #t70.{core::Set::add}{Invariant}(let final self::test2::N1 #t72 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t71 == null))
+      #t70.{core::Set::addAll}(#t71{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t70.{core::Set::add}(let final self::test2::N1 #t72 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1) → core::bool};
   } =>#t70;
   core::Set<dynamic> s5 = block {
     final core::Set<dynamic> #t73 = col::LinkedHashSet::•<dynamic>();
-    #t73.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:38:16: Error: Can't spread a value with static type 'N3'.
+    #t73.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:38:16: Error: Can't spread a value with static type 'N3'.
   var s5 = {...n3, n1};
-               ^");
-    #t73.{core::Set::add}{Invariant}(let final self::test2::N1 #t74 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+               ^"){(dynamic) → core::bool};
+    #t73.{core::Set::add}(let final self::test2::N1 #t74 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(dynamic) → core::bool};
   } =>#t73;
   core::Set<self::test2::N1> s6 = block {
     final core::Set<self::test2::N1> #t75 = col::LinkedHashSet::•<self::test2::N1>();
     final core::Iterable<self::test2::N1>? #t76 = n3;
-    if(!#t76.{core::Object::==}(null))
-      #t75.{core::Set::addAll}{Invariant}(#t76{core::Iterable<self::test2::N1>});
-    #t75.{core::Set::add}{Invariant}(let final self::test2::N1 #t77 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t76 == null))
+      #t75.{core::Set::addAll}(#t76{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t75.{core::Set::add}(let final self::test2::N1 #t77 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1) → core::bool};
   } =>#t75;
   core::Map<self::test2::N1, self::test2::N1> m1 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t78 = <self::test2::N1, self::test2::N1>{};
-    for (final core::MapEntry<self::test2::N1, self::test2::N1> #t79 in (let final self::test2::N1 #t80 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries})
-      #t78.{core::Map::[]=}{Invariant}(#t79.{core::MapEntry::key}, #t79.{core::MapEntry::value});
-    #t78.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t81 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t82 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    for (final core::MapEntry<self::test2::N1, self::test2::N1> #t79 in (let final self::test2::N1 #t80 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+      #t78.{core::Map::[]=}(#t79.{core::MapEntry::key}{self::test2::N1}, #t79.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
+    #t78.{core::Map::[]=}(let final self::test2::N1 #t81 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t82 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t78;
   core::Map<self::test2::N1, self::test2::N1> m2 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t83 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t84 = let final self::test2::N1 #t85 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    if(!#t84.{core::Object::==}(null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t86 in #t84{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries})
-        #t83.{core::Map::[]=}{Invariant}(#t86.{core::MapEntry::key}, #t86.{core::MapEntry::value});
-    #t83.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t87 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t88 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t84 == null))
+      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t86 in #t84{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+        #t83.{core::Map::[]=}(#t86.{core::MapEntry::key}{self::test2::N1}, #t86.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
+    #t83.{core::Map::[]=}(let final self::test2::N1 #t87 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t88 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t83;
   core::Map<dynamic, dynamic> m3 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:42:16: Error: Can't spread a value with static type 'N2'.
   var m3 = {...n2, n1: n1};
@@ -270,10 +270,10 @@
   core::Map<self::test2::N1, self::test2::N1> m4 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t91 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t92 = n2;
-    if(!#t92.{core::Object::==}(null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t93 in #t92{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries})
-        #t91.{core::Map::[]=}{Invariant}(#t93.{core::MapEntry::key}, #t93.{core::MapEntry::value});
-    #t91.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t94 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t95 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t92 == null))
+      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t93 in #t92{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+        #t91.{core::Map::[]=}(#t93.{core::MapEntry::key}{self::test2::N1}, #t93.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
+    #t91.{core::Map::[]=}(let final self::test2::N1 #t94 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t95 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t91;
   core::Map<dynamic, dynamic> m5 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:44:16: Error: Can't spread a value with static type 'N3'.
   var m5 = {...n3, n1: n1};
@@ -281,10 +281,10 @@
   core::Map<self::test2::N1, self::test2::N1> m6 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t98 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t99 = n3;
-    if(!#t99.{core::Object::==}(null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t100 in #t99{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries})
-        #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}, #t100.{core::MapEntry::value});
-    #t98.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t101 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t102 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t99 == null))
+      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t100 in #t99{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+        #t98.{core::Map::[]=}(#t100.{core::MapEntry::key}{self::test2::N1}, #t100.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
+    #t98.{core::Map::[]=}(let final self::test2::N1 #t101 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t102 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t98;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42758.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42758.dart.weak.transformed.expect
index 645b792..d7272c6 100644
--- a/pkg/front_end/testcases/nnbd/issue42758.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42758.dart.weak.transformed.expect
@@ -86,8 +86,8 @@
   core::List<Never> l2 = block {
     final core::List<Never> #t3 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t4 = let final Never #t5 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    if(!#t4.{core::Object::==}(null))
-      #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<Never>});
+    if(!(#t4 == null))
+      #t3.{core::List::addAll}(#t4{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t3;
   core::List<dynamic> l3 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:8:16: Error: Can't spread a value with static type 'Never?'.
   var l3 = [...n2];
@@ -95,8 +95,8 @@
   core::List<Never> l4 = block {
     final core::List<Never> #t6 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t7 = n2;
-    if(!#t7.{core::Object::==}(null))
-      #t6.{core::List::addAll}{Invariant}(#t7{core::Iterable<Never>});
+    if(!(#t7 == null))
+      #t6.{core::List::addAll}(#t7{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t6;
   core::List<dynamic> l5 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:10:16: Error: Can't spread a value with static type 'Null'.
   var l5 = [...n3];
@@ -104,70 +104,70 @@
   core::List<Never> l6 = block {
     final core::List<Never> #t8 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t9 = n3;
-    if(!#t9.{core::Object::==}(null))
-      #t8.{core::List::addAll}{Invariant}(#t9{core::Iterable<Never>});
+    if(!(#t9 == null))
+      #t8.{core::List::addAll}(#t9{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t8;
   core::Set<Never> s1 = block {
     final core::Set<Never> #t10 = col::LinkedHashSet::of<Never>(let final Never #t11 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
-    #t10.{core::Set::add}{Invariant}(let final Never #t12 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t10.{core::Set::add}(let final Never #t12 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never) → core::bool};
   } =>#t10;
   core::Set<Never> s2 = block {
     final core::Set<Never> #t13 = new col::_CompactLinkedHashSet::•<Never>();
     final core::Iterable<Never>? #t14 = let final Never #t15 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    if(!#t14.{core::Object::==}(null))
-      #t13.{core::Set::addAll}{Invariant}(#t14{core::Iterable<Never>});
-    #t13.{core::Set::add}{Invariant}(let final Never #t16 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t14 == null))
+      #t13.{core::Set::addAll}(#t14{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t13.{core::Set::add}(let final Never #t16 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never) → core::bool};
   } =>#t13;
   core::Set<dynamic> s3 = block {
     final core::Set<dynamic> #t17 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t17.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:14:16: Error: Can't spread a value with static type 'Never?'.
+    #t17.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:14:16: Error: Can't spread a value with static type 'Never?'.
   var s3 = {...n2, n1};
-               ^");
-    #t17.{core::Set::add}{Invariant}(let final Never #t18 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+               ^"){(dynamic) → core::bool};
+    #t17.{core::Set::add}(let final Never #t18 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(dynamic) → core::bool};
   } =>#t17;
   core::Set<Never> s4 = block {
     final core::Set<Never> #t19 = new col::_CompactLinkedHashSet::•<Never>();
     final core::Iterable<Never>? #t20 = n2;
-    if(!#t20.{core::Object::==}(null))
-      #t19.{core::Set::addAll}{Invariant}(#t20{core::Iterable<Never>});
-    #t19.{core::Set::add}{Invariant}(let final Never #t21 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t20 == null))
+      #t19.{core::Set::addAll}(#t20{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t19.{core::Set::add}(let final Never #t21 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never) → core::bool};
   } =>#t19;
   core::Set<dynamic> s5 = block {
     final core::Set<dynamic> #t22 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t22.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:16:16: Error: Can't spread a value with static type 'Null'.
+    #t22.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:16:16: Error: Can't spread a value with static type 'Null'.
   var s5 = {...n3, n1};
-               ^");
-    #t22.{core::Set::add}{Invariant}(let final Never #t23 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+               ^"){(dynamic) → core::bool};
+    #t22.{core::Set::add}(let final Never #t23 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(dynamic) → core::bool};
   } =>#t22;
   core::Set<Never> s6 = block {
     final core::Set<Never> #t24 = new col::_CompactLinkedHashSet::•<Never>();
     final core::Iterable<Never>? #t25 = n3;
-    if(!#t25.{core::Object::==}(null))
-      #t24.{core::Set::addAll}{Invariant}(#t25{core::Iterable<Never>});
-    #t24.{core::Set::add}{Invariant}(let final Never #t26 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t25 == null))
+      #t24.{core::Set::addAll}(#t25{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t24.{core::Set::add}(let final Never #t26 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never) → core::bool};
   } =>#t24;
   core::Map<Never, Never> m1 = block {
     final core::Map<Never, Never> #t27 = <Never, Never>{};
     {
-      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = (let final Never #t28 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = (let final Never #t28 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<Never, Never> #t29 = :sync-for-iterator.{core::Iterator::current};
-        #t27.{core::Map::[]=}{Invariant}(#t29.{core::MapEntry::key}, #t29.{core::MapEntry::value});
+        #t27.{core::Map::[]=}(#t29.{core::MapEntry::key}{Never}, #t29.{core::MapEntry::value}{Never}){(Never, Never) → void};
       }
     }
-    #t27.{core::Map::[]=}{Invariant}(let final Never #t30 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t31 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t27.{core::Map::[]=}(let final Never #t30 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t31 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t27;
   core::Map<Never, Never> m2 = block {
     final core::Map<Never, Never> #t32 = <Never, Never>{};
     final core::Map<Never, Never>? #t33 = let final Never #t34 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    if(!#t33.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t33{core::Map<Never, Never>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t33 == null)) {
+      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t33{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<Never, Never> #t35 = :sync-for-iterator.{core::Iterator::current};
-        #t32.{core::Map::[]=}{Invariant}(#t35.{core::MapEntry::key}, #t35.{core::MapEntry::value});
+        #t32.{core::Map::[]=}(#t35.{core::MapEntry::key}{Never}, #t35.{core::MapEntry::value}{Never}){(Never, Never) → void};
       }
     }
-    #t32.{core::Map::[]=}{Invariant}(let final Never #t36 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t37 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t32.{core::Map::[]=}(let final Never #t36 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t37 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t32;
   core::Map<dynamic, dynamic> m3 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:20:16: Error: Can't spread a value with static type 'Never?'.
   var m3 = {...n2, n1: n1};
@@ -175,14 +175,14 @@
   core::Map<Never, Never> m4 = block {
     final core::Map<Never, Never> #t40 = <Never, Never>{};
     final core::Map<Never, Never>? #t41 = n2;
-    if(!#t41.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t41{core::Map<Never, Never>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t41 == null)) {
+      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t41{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<Never, Never> #t42 = :sync-for-iterator.{core::Iterator::current};
-        #t40.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}, #t42.{core::MapEntry::value});
+        #t40.{core::Map::[]=}(#t42.{core::MapEntry::key}{Never}, #t42.{core::MapEntry::value}{Never}){(Never, Never) → void};
       }
     }
-    #t40.{core::Map::[]=}{Invariant}(let final Never #t43 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t44 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t40.{core::Map::[]=}(let final Never #t43 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t44 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t40;
   core::Map<dynamic, dynamic> m5 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:22:16: Error: Can't spread a value with static type 'Null'.
   var m5 = {...n3, n1: n1};
@@ -190,14 +190,14 @@
   core::Map<Never, Never> m6 = block {
     final core::Map<Never, Never> #t47 = <Never, Never>{};
     final core::Map<Never, Never>? #t48 = n3;
-    if(!#t48.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t48{core::Map<Never, Never>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t48 == null)) {
+      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t48{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<Never, Never> #t49 = :sync-for-iterator.{core::Iterator::current};
-        #t47.{core::Map::[]=}{Invariant}(#t49.{core::MapEntry::key}, #t49.{core::MapEntry::value});
+        #t47.{core::Map::[]=}(#t49.{core::MapEntry::key}{Never}, #t49.{core::MapEntry::value}{Never}){(Never, Never) → void};
       }
     }
-    #t47.{core::Map::[]=}{Invariant}(let final Never #t50 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t51 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t47.{core::Map::[]=}(let final Never #t50 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t51 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t47;
 }
 static method test2<N1 extends Never, N2 extends Never?, N3 extends Null>(self::test2::N1 n1, self::test2::N2% n2, self::test2::N3% n3) → dynamic {
@@ -207,8 +207,8 @@
   core::List<Never> l2 = block {
     final core::List<Never> #t54 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t55 = let final self::test2::N1 #t56 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    if(!#t55.{core::Object::==}(null))
-      #t54.{core::List::addAll}{Invariant}(#t55{core::Iterable<Never>});
+    if(!(#t55 == null))
+      #t54.{core::List::addAll}(#t55{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t54;
   core::List<dynamic> l3 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:30:16: Error: Can't spread a value with static type 'N2'.
   var l3 = [...n2];
@@ -216,8 +216,8 @@
   core::List<Never> l4 = block {
     final core::List<Never> #t57 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t58 = n2;
-    if(!#t58.{core::Object::==}(null))
-      #t57.{core::List::addAll}{Invariant}(#t58{core::Iterable<Never>});
+    if(!(#t58 == null))
+      #t57.{core::List::addAll}(#t58{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t57;
   core::List<dynamic> l5 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:32:16: Error: Can't spread a value with static type 'N3'.
   var l5 = [...n3];
@@ -225,70 +225,70 @@
   core::List<Never> l6 = block {
     final core::List<Never> #t59 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t60 = n3;
-    if(!#t60.{core::Object::==}(null))
-      #t59.{core::List::addAll}{Invariant}(#t60{core::Iterable<Never>});
+    if(!(#t60 == null))
+      #t59.{core::List::addAll}(#t60{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t59;
   core::Set<self::test2::N1> s1 = block {
     final core::Set<self::test2::N1> #t61 = col::LinkedHashSet::of<self::test2::N1>(let final self::test2::N1 #t62 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
-    #t61.{core::Set::add}{Invariant}(let final self::test2::N1 #t63 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t61.{core::Set::add}(let final self::test2::N1 #t63 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1) → core::bool};
   } =>#t61;
   core::Set<self::test2::N1> s2 = block {
     final core::Set<self::test2::N1> #t64 = new col::_CompactLinkedHashSet::•<self::test2::N1>();
     final core::Iterable<self::test2::N1>? #t65 = let final self::test2::N1 #t66 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    if(!#t65.{core::Object::==}(null))
-      #t64.{core::Set::addAll}{Invariant}(#t65{core::Iterable<self::test2::N1>});
-    #t64.{core::Set::add}{Invariant}(let final self::test2::N1 #t67 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t65 == null))
+      #t64.{core::Set::addAll}(#t65{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t64.{core::Set::add}(let final self::test2::N1 #t67 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1) → core::bool};
   } =>#t64;
   core::Set<dynamic> s3 = block {
     final core::Set<dynamic> #t68 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t68.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:36:16: Error: Can't spread a value with static type 'N2'.
+    #t68.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:36:16: Error: Can't spread a value with static type 'N2'.
   var s3 = {...n2, n1};
-               ^");
-    #t68.{core::Set::add}{Invariant}(let final self::test2::N1 #t69 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+               ^"){(dynamic) → core::bool};
+    #t68.{core::Set::add}(let final self::test2::N1 #t69 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(dynamic) → core::bool};
   } =>#t68;
   core::Set<self::test2::N1> s4 = block {
     final core::Set<self::test2::N1> #t70 = new col::_CompactLinkedHashSet::•<self::test2::N1>();
     final core::Iterable<self::test2::N1>? #t71 = n2;
-    if(!#t71.{core::Object::==}(null))
-      #t70.{core::Set::addAll}{Invariant}(#t71{core::Iterable<self::test2::N1>});
-    #t70.{core::Set::add}{Invariant}(let final self::test2::N1 #t72 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t71 == null))
+      #t70.{core::Set::addAll}(#t71{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t70.{core::Set::add}(let final self::test2::N1 #t72 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1) → core::bool};
   } =>#t70;
   core::Set<dynamic> s5 = block {
     final core::Set<dynamic> #t73 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t73.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:38:16: Error: Can't spread a value with static type 'N3'.
+    #t73.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:38:16: Error: Can't spread a value with static type 'N3'.
   var s5 = {...n3, n1};
-               ^");
-    #t73.{core::Set::add}{Invariant}(let final self::test2::N1 #t74 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+               ^"){(dynamic) → core::bool};
+    #t73.{core::Set::add}(let final self::test2::N1 #t74 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(dynamic) → core::bool};
   } =>#t73;
   core::Set<self::test2::N1> s6 = block {
     final core::Set<self::test2::N1> #t75 = new col::_CompactLinkedHashSet::•<self::test2::N1>();
     final core::Iterable<self::test2::N1>? #t76 = n3;
-    if(!#t76.{core::Object::==}(null))
-      #t75.{core::Set::addAll}{Invariant}(#t76{core::Iterable<self::test2::N1>});
-    #t75.{core::Set::add}{Invariant}(let final self::test2::N1 #t77 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    if(!(#t76 == null))
+      #t75.{core::Set::addAll}(#t76{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t75.{core::Set::add}(let final self::test2::N1 #t77 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1) → core::bool};
   } =>#t75;
   core::Map<self::test2::N1, self::test2::N1> m1 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t78 = <self::test2::N1, self::test2::N1>{};
     {
-      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = (let final self::test2::N1 #t79 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = (let final self::test2::N1 #t79 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<self::test2::N1, self::test2::N1> #t80 = :sync-for-iterator.{core::Iterator::current};
-        #t78.{core::Map::[]=}{Invariant}(#t80.{core::MapEntry::key}, #t80.{core::MapEntry::value});
+        #t78.{core::Map::[]=}(#t80.{core::MapEntry::key}{self::test2::N1}, #t80.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
       }
     }
-    #t78.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t81 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t82 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t78.{core::Map::[]=}(let final self::test2::N1 #t81 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t82 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t78;
   core::Map<self::test2::N1, self::test2::N1> m2 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t83 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t84 = let final self::test2::N1 #t85 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-    if(!#t84.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t84{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t84 == null)) {
+      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t84{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<self::test2::N1, self::test2::N1> #t86 = :sync-for-iterator.{core::Iterator::current};
-        #t83.{core::Map::[]=}{Invariant}(#t86.{core::MapEntry::key}, #t86.{core::MapEntry::value});
+        #t83.{core::Map::[]=}(#t86.{core::MapEntry::key}{self::test2::N1}, #t86.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
       }
     }
-    #t83.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t87 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t88 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t83.{core::Map::[]=}(let final self::test2::N1 #t87 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t88 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t83;
   core::Map<dynamic, dynamic> m3 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:42:16: Error: Can't spread a value with static type 'N2'.
   var m3 = {...n2, n1: n1};
@@ -296,14 +296,14 @@
   core::Map<self::test2::N1, self::test2::N1> m4 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t91 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t92 = n2;
-    if(!#t92.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t92{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t92 == null)) {
+      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t92{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<self::test2::N1, self::test2::N1> #t93 = :sync-for-iterator.{core::Iterator::current};
-        #t91.{core::Map::[]=}{Invariant}(#t93.{core::MapEntry::key}, #t93.{core::MapEntry::value});
+        #t91.{core::Map::[]=}(#t93.{core::MapEntry::key}{self::test2::N1}, #t93.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
       }
     }
-    #t91.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t94 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t95 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t91.{core::Map::[]=}(let final self::test2::N1 #t94 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t95 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t91;
   core::Map<dynamic, dynamic> m5 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:44:16: Error: Can't spread a value with static type 'N3'.
   var m5 = {...n3, n1: n1};
@@ -311,14 +311,14 @@
   core::Map<self::test2::N1, self::test2::N1> m6 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t98 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t99 = n3;
-    if(!#t99.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t99{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t99 == null)) {
+      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t99{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<self::test2::N1, self::test2::N1> #t100 = :sync-for-iterator.{core::Iterator::current};
-        #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}, #t100.{core::MapEntry::value});
+        #t98.{core::Map::[]=}(#t100.{core::MapEntry::key}{self::test2::N1}, #t100.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
       }
     }
-    #t98.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t101 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t102 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t98.{core::Map::[]=}(let final self::test2::N1 #t101 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t102 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t98;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43174.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43174.dart.strong.expect
index 2a0b346..1954bc8 100644
--- a/pkg/front_end/testcases/nnbd/issue43174.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43174.dart.strong.expect
@@ -12,10 +12,10 @@
 import "dart:async";
 
 static method method(() → void f) → dynamic {
-  f.call();
+  f(){() → void};
 }
 static method method2(() → FutureOr<void>f) → dynamic {
-  f.call();
+  f(){() → FutureOr<void>};
 }
 static method test() → dynamic {
   self::method(() → void {
diff --git a/pkg/front_end/testcases/nnbd/issue43174.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43174.dart.strong.transformed.expect
index 2a0b346..1954bc8 100644
--- a/pkg/front_end/testcases/nnbd/issue43174.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43174.dart.strong.transformed.expect
@@ -12,10 +12,10 @@
 import "dart:async";
 
 static method method(() → void f) → dynamic {
-  f.call();
+  f(){() → void};
 }
 static method method2(() → FutureOr<void>f) → dynamic {
-  f.call();
+  f(){() → FutureOr<void>};
 }
 static method test() → dynamic {
   self::method(() → void {
diff --git a/pkg/front_end/testcases/nnbd/issue43174.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43174.dart.weak.expect
index 2a0b346..1954bc8 100644
--- a/pkg/front_end/testcases/nnbd/issue43174.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43174.dart.weak.expect
@@ -12,10 +12,10 @@
 import "dart:async";
 
 static method method(() → void f) → dynamic {
-  f.call();
+  f(){() → void};
 }
 static method method2(() → FutureOr<void>f) → dynamic {
-  f.call();
+  f(){() → FutureOr<void>};
 }
 static method test() → dynamic {
   self::method(() → void {
diff --git a/pkg/front_end/testcases/nnbd/issue43174.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43174.dart.weak.transformed.expect
index 2a0b346..1954bc8 100644
--- a/pkg/front_end/testcases/nnbd/issue43174.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43174.dart.weak.transformed.expect
@@ -12,10 +12,10 @@
 import "dart:async";
 
 static method method(() → void f) → dynamic {
-  f.call();
+  f(){() → void};
 }
 static method method2(() → FutureOr<void>f) → dynamic {
-  f.call();
+  f(){() → FutureOr<void>};
 }
 static method test() → dynamic {
   self::method(() → void {
diff --git a/pkg/front_end/testcases/nnbd/issue43256.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43256.dart.strong.expect
index a77f5c0..2c388f4 100644
--- a/pkg/front_end/testcases/nnbd/issue43256.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43256.dart.strong.expect
@@ -57,86 +57,86 @@
 static field dynamic dynamicList = <core::int>[1, 2, 3];
 static field core::Map<dynamic, dynamic> map1 = block {
   final core::Map<dynamic, dynamic> #t1 = <dynamic, dynamic>{};
-  if(self::i.{core::num::>}(0))
-    #t1.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:16:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:16:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   if (i > 0) ...nullableMap, // error
-                ^", null);
-  if(self::i.{core::num::>}(0))
-    for (final core::MapEntry<dynamic, dynamic> #t2 in (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries})
-      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}, #t2.{core::MapEntry::value});
-  if(self::i.{core::num::>}(0))
-    for (final core::MapEntry<dynamic, dynamic> #t3 in self::nullableMap!.{core::Map::entries})
-      #t1.{core::Map::[]=}{Invariant}(#t3.{core::MapEntry::key}, #t3.{core::MapEntry::value});
+                ^", null){(dynamic, dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    for (final core::MapEntry<dynamic, dynamic> #t2 in (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t1.{core::Map::[]=}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    for (final core::MapEntry<dynamic, dynamic> #t3 in self::nullableMap!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t1.{core::Map::[]=}(#t3.{core::MapEntry::key}{dynamic}, #t3.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
 } =>#t1;
 static field core::Set<dynamic> set1 = block {
   final core::Set<dynamic> #t4 = col::LinkedHashSet::•<dynamic>();
-  #t4.{core::Set::add}{Invariant}(0);
-  if(self::i.{core::num::>}(0))
-    #t4.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:23:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  #t4.{core::Set::add}(0){(dynamic) → core::bool};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:23:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   if (i > 0) ...nullableList, // error
-                ^");
-  if(self::i.{core::num::>}(0))
-    #t4.{core::Set::addAll}{Invariant}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
-  if(self::i.{core::num::>}(0))
-    #t4.{core::Set::addAll}{Invariant}(self::nullableList!);
+                ^"){(dynamic) → core::bool};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::addAll}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::addAll}(self::nullableList!){(core::Iterable<dynamic>) → void};
 } =>#t4;
 static field core::List<dynamic> list1 = block {
   final core::List<dynamic> #t5 = <dynamic>[];
-  if(self::i.{core::num::>}(0))
-    #t5.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:29:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:29:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   if (i > 0) ...nullableList, // error
-                ^");
-  if(self::i.{core::num::>}(0))
-    #t5.{core::List::addAll}{Invariant}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
-  if(self::i.{core::num::>}(0))
-    #t5.{core::List::addAll}{Invariant}(self::nullableList!);
+                ^"){(dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::addAll}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::addAll}(self::nullableList!){(core::Iterable<dynamic>) → void};
 } =>#t5;
 static method testMap<X extends dynamic, Y extends core::Map<core::int, core::String>?, Z extends core::Map<core::int, core::String>>(self::testMap::X% x, self::testMap::Y% y, self::testMap::Z z) → dynamic {
   core::Map<dynamic, dynamic> map2 = block {
     final core::Map<dynamic, dynamic> #t6 = <dynamic, dynamic>{};
-    if(self::i.{core::num::>}(0))
-      #t6.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:37:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t6.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:37:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
     if (i > 0) ...x, // error
-                  ^", null);
-    if(self::i.{core::num::>}(0))
-      #t6.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:38:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+                  ^", null){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t6.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:38:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     if (i > 0) ...y, // error
-                  ^", null);
-    if(self::i.{core::num::>}(0))
-      for (final core::MapEntry<dynamic, dynamic> #t7 in z.{core::Map::entries})
-        #t6.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
-    if(self::i.{core::num::>}(0))
-      for (final core::MapEntry<dynamic, dynamic> #t8 in y!.{core::Map::entries})
-        #t6.{core::Map::[]=}{Invariant}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value});
+                  ^", null){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      for (final core::MapEntry<dynamic, dynamic> #t7 in z.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        #t6.{core::Map::[]=}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      for (final core::MapEntry<dynamic, dynamic> #t8 in y!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        #t6.{core::Map::[]=}(#t8.{core::MapEntry::key}{dynamic}, #t8.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   } =>#t6;
 }
 static method testIterables<X extends dynamic, Y extends core::List<core::int>?, Z extends core::List<core::int>>(self::testIterables::X% x, self::testIterables::Y% y, self::testIterables::Z z) → dynamic {
   core::Set<dynamic> set2 = block {
     final core::Set<dynamic> #t9 = col::LinkedHashSet::•<dynamic>();
-    #t9.{core::Set::add}{Invariant}(0);
-    if(self::i.{core::num::>}(0))
-      #t9.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
+    #t9.{core::Set::add}(0){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
     if (i > 0) ...x, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t9.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:49:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+                  ^"){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:49:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     if (i > 0) ...y, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t9.{core::Set::addAll}{Invariant}(z);
+                  ^"){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::addAll}(z){(core::Iterable<dynamic>) → void};
   } =>#t9;
   core::List<dynamic> list2 = block {
     final core::List<dynamic> #t10 = <dynamic>[];
-    if(self::i.{core::num::>}(0))
-      #t10.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
     if (i > 0) ...x, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t10.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+                  ^"){(dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     if (i > 0) ...y, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t10.{core::List::addAll}{Invariant}(z);
+                  ^"){(dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::addAll}(z){(core::Iterable<dynamic>) → void};
   } =>#t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43256.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43256.dart.strong.transformed.expect
index 04e38068..fb6047d 100644
--- a/pkg/front_end/testcases/nnbd/issue43256.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43256.dart.strong.transformed.expect
@@ -57,71 +57,71 @@
 static field dynamic dynamicList = core::_GrowableList::_literal3<core::int>(1, 2, 3);
 static field core::Map<dynamic, dynamic> map1 = block {
   final core::Map<dynamic, dynamic> #t1 = <dynamic, dynamic>{};
-  if(self::i.{core::num::>}(0))
-    #t1.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:16:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:16:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   if (i > 0) ...nullableMap, // error
-                ^", null);
-  if(self::i.{core::num::>}(0)) {
-    core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}.{core::Iterable::iterator};
+                ^", null){(dynamic, dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool}) {
+    core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final core::MapEntry<dynamic, dynamic> #t2 = :sync-for-iterator.{core::Iterator::current};
-      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}, #t2.{core::MapEntry::value});
+      #t1.{core::Map::[]=}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     }
   }
-  if(self::i.{core::num::>}(0)) {
-    core::Iterator<core::MapEntry<core::int, core::String>> :sync-for-iterator = self::nullableMap!.{core::Map::entries}.{core::Iterable::iterator};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool}) {
+    core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = self::nullableMap!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final core::MapEntry<dynamic, dynamic> #t3 = :sync-for-iterator.{core::Iterator::current};
-      #t1.{core::Map::[]=}{Invariant}(#t3.{core::MapEntry::key}, #t3.{core::MapEntry::value});
+      #t1.{core::Map::[]=}(#t3.{core::MapEntry::key}{dynamic}, #t3.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     }
   }
 } =>#t1;
 static field core::Set<dynamic> set1 = block {
   final core::Set<dynamic> #t4 = new col::_CompactLinkedHashSet::•<dynamic>();
-  #t4.{core::Set::add}{Invariant}(0);
-  if(self::i.{core::num::>}(0))
-    #t4.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:23:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  #t4.{core::Set::add}(0){(dynamic) → core::bool};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:23:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   if (i > 0) ...nullableList, // error
-                ^");
-  if(self::i.{core::num::>}(0))
-    #t4.{core::Set::addAll}{Invariant}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
-  if(self::i.{core::num::>}(0))
-    #t4.{core::Set::addAll}{Invariant}(self::nullableList!);
+                ^"){(dynamic) → core::bool};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::addAll}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::addAll}(self::nullableList!){(core::Iterable<dynamic>) → void};
 } =>#t4;
 static field core::List<dynamic> list1 = block {
   final core::List<dynamic> #t5 = core::_GrowableList::•<dynamic>(0);
-  if(self::i.{core::num::>}(0))
-    #t5.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:29:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:29:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   if (i > 0) ...nullableList, // error
-                ^");
-  if(self::i.{core::num::>}(0))
-    #t5.{core::List::addAll}{Invariant}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
-  if(self::i.{core::num::>}(0))
-    #t5.{core::List::addAll}{Invariant}(self::nullableList!);
+                ^"){(dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::addAll}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::addAll}(self::nullableList!){(core::Iterable<dynamic>) → void};
 } =>#t5;
 static method testMap<X extends dynamic, Y extends core::Map<core::int, core::String>?, Z extends core::Map<core::int, core::String>>(self::testMap::X% x, self::testMap::Y% y, self::testMap::Z z) → dynamic {
   core::Map<dynamic, dynamic> map2 = block {
     final core::Map<dynamic, dynamic> #t6 = <dynamic, dynamic>{};
-    if(self::i.{core::num::>}(0))
-      #t6.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:37:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t6.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:37:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
     if (i > 0) ...x, // error
-                  ^", null);
-    if(self::i.{core::num::>}(0))
-      #t6.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:38:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+                  ^", null){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t6.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:38:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     if (i > 0) ...y, // error
-                  ^", null);
-    if(self::i.{core::num::>}(0)) {
-      core::Iterator<core::MapEntry<core::int, core::String>> :sync-for-iterator = z.{core::Map::entries}.{core::Iterable::iterator};
+                  ^", null){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool}) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = z.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic> #t7 = :sync-for-iterator.{core::Iterator::current};
-        #t6.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
+        #t6.{core::Map::[]=}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
       }
     }
-    if(self::i.{core::num::>}(0)) {
-      core::Iterator<core::MapEntry<core::int, core::String>> :sync-for-iterator = y!.{core::Map::entries}.{core::Iterable::iterator};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool}) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = y!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic> #t8 = :sync-for-iterator.{core::Iterator::current};
-        #t6.{core::Map::[]=}{Invariant}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value});
+        #t6.{core::Map::[]=}(#t8.{core::MapEntry::key}{dynamic}, #t8.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
       }
     }
   } =>#t6;
@@ -129,30 +129,30 @@
 static method testIterables<X extends dynamic, Y extends core::List<core::int>?, Z extends core::List<core::int>>(self::testIterables::X% x, self::testIterables::Y% y, self::testIterables::Z z) → dynamic {
   core::Set<dynamic> set2 = block {
     final core::Set<dynamic> #t9 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t9.{core::Set::add}{Invariant}(0);
-    if(self::i.{core::num::>}(0))
-      #t9.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
+    #t9.{core::Set::add}(0){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
     if (i > 0) ...x, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t9.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:49:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+                  ^"){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:49:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     if (i > 0) ...y, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t9.{core::Set::addAll}{Invariant}(z);
+                  ^"){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::addAll}(z){(core::Iterable<dynamic>) → void};
   } =>#t9;
   core::List<dynamic> list2 = block {
     final core::List<dynamic> #t10 = core::_GrowableList::•<dynamic>(0);
-    if(self::i.{core::num::>}(0))
-      #t10.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
     if (i > 0) ...x, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t10.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+                  ^"){(dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     if (i > 0) ...y, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t10.{core::List::addAll}{Invariant}(z);
+                  ^"){(dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::addAll}(z){(core::Iterable<dynamic>) → void};
   } =>#t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43256.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43256.dart.weak.expect
index a77f5c0..2c388f4 100644
--- a/pkg/front_end/testcases/nnbd/issue43256.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43256.dart.weak.expect
@@ -57,86 +57,86 @@
 static field dynamic dynamicList = <core::int>[1, 2, 3];
 static field core::Map<dynamic, dynamic> map1 = block {
   final core::Map<dynamic, dynamic> #t1 = <dynamic, dynamic>{};
-  if(self::i.{core::num::>}(0))
-    #t1.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:16:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:16:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   if (i > 0) ...nullableMap, // error
-                ^", null);
-  if(self::i.{core::num::>}(0))
-    for (final core::MapEntry<dynamic, dynamic> #t2 in (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries})
-      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}, #t2.{core::MapEntry::value});
-  if(self::i.{core::num::>}(0))
-    for (final core::MapEntry<dynamic, dynamic> #t3 in self::nullableMap!.{core::Map::entries})
-      #t1.{core::Map::[]=}{Invariant}(#t3.{core::MapEntry::key}, #t3.{core::MapEntry::value});
+                ^", null){(dynamic, dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    for (final core::MapEntry<dynamic, dynamic> #t2 in (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t1.{core::Map::[]=}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    for (final core::MapEntry<dynamic, dynamic> #t3 in self::nullableMap!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t1.{core::Map::[]=}(#t3.{core::MapEntry::key}{dynamic}, #t3.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
 } =>#t1;
 static field core::Set<dynamic> set1 = block {
   final core::Set<dynamic> #t4 = col::LinkedHashSet::•<dynamic>();
-  #t4.{core::Set::add}{Invariant}(0);
-  if(self::i.{core::num::>}(0))
-    #t4.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:23:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  #t4.{core::Set::add}(0){(dynamic) → core::bool};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:23:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   if (i > 0) ...nullableList, // error
-                ^");
-  if(self::i.{core::num::>}(0))
-    #t4.{core::Set::addAll}{Invariant}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
-  if(self::i.{core::num::>}(0))
-    #t4.{core::Set::addAll}{Invariant}(self::nullableList!);
+                ^"){(dynamic) → core::bool};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::addAll}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::addAll}(self::nullableList!){(core::Iterable<dynamic>) → void};
 } =>#t4;
 static field core::List<dynamic> list1 = block {
   final core::List<dynamic> #t5 = <dynamic>[];
-  if(self::i.{core::num::>}(0))
-    #t5.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:29:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:29:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   if (i > 0) ...nullableList, // error
-                ^");
-  if(self::i.{core::num::>}(0))
-    #t5.{core::List::addAll}{Invariant}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
-  if(self::i.{core::num::>}(0))
-    #t5.{core::List::addAll}{Invariant}(self::nullableList!);
+                ^"){(dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::addAll}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::addAll}(self::nullableList!){(core::Iterable<dynamic>) → void};
 } =>#t5;
 static method testMap<X extends dynamic, Y extends core::Map<core::int, core::String>?, Z extends core::Map<core::int, core::String>>(self::testMap::X% x, self::testMap::Y% y, self::testMap::Z z) → dynamic {
   core::Map<dynamic, dynamic> map2 = block {
     final core::Map<dynamic, dynamic> #t6 = <dynamic, dynamic>{};
-    if(self::i.{core::num::>}(0))
-      #t6.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:37:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t6.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:37:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
     if (i > 0) ...x, // error
-                  ^", null);
-    if(self::i.{core::num::>}(0))
-      #t6.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:38:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+                  ^", null){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t6.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:38:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     if (i > 0) ...y, // error
-                  ^", null);
-    if(self::i.{core::num::>}(0))
-      for (final core::MapEntry<dynamic, dynamic> #t7 in z.{core::Map::entries})
-        #t6.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
-    if(self::i.{core::num::>}(0))
-      for (final core::MapEntry<dynamic, dynamic> #t8 in y!.{core::Map::entries})
-        #t6.{core::Map::[]=}{Invariant}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value});
+                  ^", null){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      for (final core::MapEntry<dynamic, dynamic> #t7 in z.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        #t6.{core::Map::[]=}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      for (final core::MapEntry<dynamic, dynamic> #t8 in y!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        #t6.{core::Map::[]=}(#t8.{core::MapEntry::key}{dynamic}, #t8.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   } =>#t6;
 }
 static method testIterables<X extends dynamic, Y extends core::List<core::int>?, Z extends core::List<core::int>>(self::testIterables::X% x, self::testIterables::Y% y, self::testIterables::Z z) → dynamic {
   core::Set<dynamic> set2 = block {
     final core::Set<dynamic> #t9 = col::LinkedHashSet::•<dynamic>();
-    #t9.{core::Set::add}{Invariant}(0);
-    if(self::i.{core::num::>}(0))
-      #t9.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
+    #t9.{core::Set::add}(0){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
     if (i > 0) ...x, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t9.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:49:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+                  ^"){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:49:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     if (i > 0) ...y, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t9.{core::Set::addAll}{Invariant}(z);
+                  ^"){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::addAll}(z){(core::Iterable<dynamic>) → void};
   } =>#t9;
   core::List<dynamic> list2 = block {
     final core::List<dynamic> #t10 = <dynamic>[];
-    if(self::i.{core::num::>}(0))
-      #t10.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
     if (i > 0) ...x, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t10.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+                  ^"){(dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     if (i > 0) ...y, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t10.{core::List::addAll}{Invariant}(z);
+                  ^"){(dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::addAll}(z){(core::Iterable<dynamic>) → void};
   } =>#t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43256.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43256.dart.weak.transformed.expect
index 04e38068..fb6047d 100644
--- a/pkg/front_end/testcases/nnbd/issue43256.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43256.dart.weak.transformed.expect
@@ -57,71 +57,71 @@
 static field dynamic dynamicList = core::_GrowableList::_literal3<core::int>(1, 2, 3);
 static field core::Map<dynamic, dynamic> map1 = block {
   final core::Map<dynamic, dynamic> #t1 = <dynamic, dynamic>{};
-  if(self::i.{core::num::>}(0))
-    #t1.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:16:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:16:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   if (i > 0) ...nullableMap, // error
-                ^", null);
-  if(self::i.{core::num::>}(0)) {
-    core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}.{core::Iterable::iterator};
+                ^", null){(dynamic, dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool}) {
+    core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final core::MapEntry<dynamic, dynamic> #t2 = :sync-for-iterator.{core::Iterator::current};
-      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}, #t2.{core::MapEntry::value});
+      #t1.{core::Map::[]=}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     }
   }
-  if(self::i.{core::num::>}(0)) {
-    core::Iterator<core::MapEntry<core::int, core::String>> :sync-for-iterator = self::nullableMap!.{core::Map::entries}.{core::Iterable::iterator};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool}) {
+    core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = self::nullableMap!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final core::MapEntry<dynamic, dynamic> #t3 = :sync-for-iterator.{core::Iterator::current};
-      #t1.{core::Map::[]=}{Invariant}(#t3.{core::MapEntry::key}, #t3.{core::MapEntry::value});
+      #t1.{core::Map::[]=}(#t3.{core::MapEntry::key}{dynamic}, #t3.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     }
   }
 } =>#t1;
 static field core::Set<dynamic> set1 = block {
   final core::Set<dynamic> #t4 = new col::_CompactLinkedHashSet::•<dynamic>();
-  #t4.{core::Set::add}{Invariant}(0);
-  if(self::i.{core::num::>}(0))
-    #t4.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:23:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  #t4.{core::Set::add}(0){(dynamic) → core::bool};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:23:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   if (i > 0) ...nullableList, // error
-                ^");
-  if(self::i.{core::num::>}(0))
-    #t4.{core::Set::addAll}{Invariant}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
-  if(self::i.{core::num::>}(0))
-    #t4.{core::Set::addAll}{Invariant}(self::nullableList!);
+                ^"){(dynamic) → core::bool};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::addAll}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::addAll}(self::nullableList!){(core::Iterable<dynamic>) → void};
 } =>#t4;
 static field core::List<dynamic> list1 = block {
   final core::List<dynamic> #t5 = core::_GrowableList::•<dynamic>(0);
-  if(self::i.{core::num::>}(0))
-    #t5.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:29:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:29:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
   if (i > 0) ...nullableList, // error
-                ^");
-  if(self::i.{core::num::>}(0))
-    #t5.{core::List::addAll}{Invariant}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
-  if(self::i.{core::num::>}(0))
-    #t5.{core::List::addAll}{Invariant}(self::nullableList!);
+                ^"){(dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::addAll}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::addAll}(self::nullableList!){(core::Iterable<dynamic>) → void};
 } =>#t5;
 static method testMap<X extends dynamic, Y extends core::Map<core::int, core::String>?, Z extends core::Map<core::int, core::String>>(self::testMap::X% x, self::testMap::Y% y, self::testMap::Z z) → dynamic {
   core::Map<dynamic, dynamic> map2 = block {
     final core::Map<dynamic, dynamic> #t6 = <dynamic, dynamic>{};
-    if(self::i.{core::num::>}(0))
-      #t6.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:37:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t6.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:37:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
     if (i > 0) ...x, // error
-                  ^", null);
-    if(self::i.{core::num::>}(0))
-      #t6.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:38:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+                  ^", null){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t6.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:38:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     if (i > 0) ...y, // error
-                  ^", null);
-    if(self::i.{core::num::>}(0)) {
-      core::Iterator<core::MapEntry<core::int, core::String>> :sync-for-iterator = z.{core::Map::entries}.{core::Iterable::iterator};
+                  ^", null){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool}) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = z.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic> #t7 = :sync-for-iterator.{core::Iterator::current};
-        #t6.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
+        #t6.{core::Map::[]=}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
       }
     }
-    if(self::i.{core::num::>}(0)) {
-      core::Iterator<core::MapEntry<core::int, core::String>> :sync-for-iterator = y!.{core::Map::entries}.{core::Iterable::iterator};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool}) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = y!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic> #t8 = :sync-for-iterator.{core::Iterator::current};
-        #t6.{core::Map::[]=}{Invariant}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value});
+        #t6.{core::Map::[]=}(#t8.{core::MapEntry::key}{dynamic}, #t8.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
       }
     }
   } =>#t6;
@@ -129,30 +129,30 @@
 static method testIterables<X extends dynamic, Y extends core::List<core::int>?, Z extends core::List<core::int>>(self::testIterables::X% x, self::testIterables::Y% y, self::testIterables::Z z) → dynamic {
   core::Set<dynamic> set2 = block {
     final core::Set<dynamic> #t9 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t9.{core::Set::add}{Invariant}(0);
-    if(self::i.{core::num::>}(0))
-      #t9.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
+    #t9.{core::Set::add}(0){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
     if (i > 0) ...x, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t9.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:49:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+                  ^"){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:49:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     if (i > 0) ...y, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t9.{core::Set::addAll}{Invariant}(z);
+                  ^"){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::addAll}(z){(core::Iterable<dynamic>) → void};
   } =>#t9;
   core::List<dynamic> list2 = block {
     final core::List<dynamic> #t10 = core::_GrowableList::•<dynamic>(0);
-    if(self::i.{core::num::>}(0))
-      #t10.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
     if (i > 0) ...x, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t10.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+                  ^"){(dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     if (i > 0) ...y, // error
-                  ^");
-    if(self::i.{core::num::>}(0))
-      #t10.{core::List::addAll}{Invariant}(z);
+                  ^"){(dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::addAll}(z){(core::Iterable<dynamic>) → void};
   } =>#t10;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.strong.expect
index cd83b1e..3de5c65 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.strong.expect
@@ -49,20 +49,20 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
-    ^^^" in #t1.{self::A::foo}).{core::num::==}(null) ?{core::int} let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
-    ^^^" in #t1.{self::A::foo} = x : null;
+    ^^^" in #t1.{self::A::foo}{<nullable>}. = x : null;
   let final self::test::T% #t4 = t in (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo}).{core::num::==}(null) ?{core::int} let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+    ^^^" in #t4.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo} = x : null;
-  let final dynamic #t7 = d in #t7.foo.{core::Object::==}(null) ?{dynamic} #t7.foo = x : null;
-  let final self::A? #t8 = a in #t8.{core::Object::==}(null) ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar} in #t9.{self::A::foo}.{core::num::==}(null) ?{core::int} #t9.{self::A::foo} = x : null;
+    ^^^" in #t4.{self::A::foo}{<nullable>}. = x : null;
+  let final dynamic #t7 = d in #t7{dynamic}.foo == null ?{dynamic} #t7{dynamic}.foo = x : null;
+  let final self::A? #t8 = a in #t8 == null ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar}{self::A} in #t9.{self::A::foo}{core::int?} == null ?{core::int} #t9.{self::A::foo} = x : null;
 }
 static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   return null;
@@ -74,7 +74,7 @@
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t10)).{core::num::==}(null) ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t10)) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
@@ -82,10 +82,10 @@
   let final self::testExtension::T% #t13 = t in (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t13)).{core::num::==}(null) ?{core::int} let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t13)) == null ?{core::int} let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
     ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t13, x) : null;
-  let final self::B? #t16 = b in #t16.{core::Object::==}(null) ?{core::int?} null : let final self::B #t17 = self::Extension|get#barExtension(#t16{self::B}) in self::Extension|get#fooExtension(#t17).{core::num::==}(null) ?{core::int} self::Extension|set#fooExtension(#t17, x) : null;
+  let final self::B? #t16 = b in #t16 == null ?{core::int?} null : let final self::B #t17 = self::Extension|get#barExtension(#t16{self::B}) in self::Extension|get#fooExtension(#t17) == null ?{core::int} self::Extension|set#fooExtension(#t17, x) : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.strong.transformed.expect
index cd83b1e..3de5c65 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.strong.transformed.expect
@@ -49,20 +49,20 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
-    ^^^" in #t1.{self::A::foo}).{core::num::==}(null) ?{core::int} let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
-    ^^^" in #t1.{self::A::foo} = x : null;
+    ^^^" in #t1.{self::A::foo}{<nullable>}. = x : null;
   let final self::test::T% #t4 = t in (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo}).{core::num::==}(null) ?{core::int} let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+    ^^^" in #t4.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo} = x : null;
-  let final dynamic #t7 = d in #t7.foo.{core::Object::==}(null) ?{dynamic} #t7.foo = x : null;
-  let final self::A? #t8 = a in #t8.{core::Object::==}(null) ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar} in #t9.{self::A::foo}.{core::num::==}(null) ?{core::int} #t9.{self::A::foo} = x : null;
+    ^^^" in #t4.{self::A::foo}{<nullable>}. = x : null;
+  let final dynamic #t7 = d in #t7{dynamic}.foo == null ?{dynamic} #t7{dynamic}.foo = x : null;
+  let final self::A? #t8 = a in #t8 == null ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar}{self::A} in #t9.{self::A::foo}{core::int?} == null ?{core::int} #t9.{self::A::foo} = x : null;
 }
 static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   return null;
@@ -74,7 +74,7 @@
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t10)).{core::num::==}(null) ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t10)) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
@@ -82,10 +82,10 @@
   let final self::testExtension::T% #t13 = t in (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t13)).{core::num::==}(null) ?{core::int} let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t13)) == null ?{core::int} let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
     ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t13, x) : null;
-  let final self::B? #t16 = b in #t16.{core::Object::==}(null) ?{core::int?} null : let final self::B #t17 = self::Extension|get#barExtension(#t16{self::B}) in self::Extension|get#fooExtension(#t17).{core::num::==}(null) ?{core::int} self::Extension|set#fooExtension(#t17, x) : null;
+  let final self::B? #t16 = b in #t16 == null ?{core::int?} null : let final self::B #t17 = self::Extension|get#barExtension(#t16{self::B}) in self::Extension|get#fooExtension(#t17) == null ?{core::int} self::Extension|set#fooExtension(#t17, x) : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.expect
index cd83b1e..3de5c65 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.expect
@@ -49,20 +49,20 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
-    ^^^" in #t1.{self::A::foo}).{core::num::==}(null) ?{core::int} let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
-    ^^^" in #t1.{self::A::foo} = x : null;
+    ^^^" in #t1.{self::A::foo}{<nullable>}. = x : null;
   let final self::test::T% #t4 = t in (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo}).{core::num::==}(null) ?{core::int} let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+    ^^^" in #t4.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo} = x : null;
-  let final dynamic #t7 = d in #t7.foo.{core::Object::==}(null) ?{dynamic} #t7.foo = x : null;
-  let final self::A? #t8 = a in #t8.{core::Object::==}(null) ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar} in #t9.{self::A::foo}.{core::num::==}(null) ?{core::int} #t9.{self::A::foo} = x : null;
+    ^^^" in #t4.{self::A::foo}{<nullable>}. = x : null;
+  let final dynamic #t7 = d in #t7{dynamic}.foo == null ?{dynamic} #t7{dynamic}.foo = x : null;
+  let final self::A? #t8 = a in #t8 == null ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar}{self::A} in #t9.{self::A::foo}{core::int?} == null ?{core::int} #t9.{self::A::foo} = x : null;
 }
 static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   return null;
@@ -74,7 +74,7 @@
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t10)).{core::num::==}(null) ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t10)) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
@@ -82,10 +82,10 @@
   let final self::testExtension::T% #t13 = t in (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t13)).{core::num::==}(null) ?{core::int} let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t13)) == null ?{core::int} let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
     ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t13, x) : null;
-  let final self::B? #t16 = b in #t16.{core::Object::==}(null) ?{core::int?} null : let final self::B #t17 = self::Extension|get#barExtension(#t16{self::B}) in self::Extension|get#fooExtension(#t17).{core::num::==}(null) ?{core::int} self::Extension|set#fooExtension(#t17, x) : null;
+  let final self::B? #t16 = b in #t16 == null ?{core::int?} null : let final self::B #t17 = self::Extension|get#barExtension(#t16{self::B}) in self::Extension|get#fooExtension(#t17) == null ?{core::int} self::Extension|set#fooExtension(#t17, x) : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.transformed.expect
index cd83b1e..3de5c65 100644
--- a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.transformed.expect
@@ -49,20 +49,20 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
-    ^^^" in #t1.{self::A::foo}).{core::num::==}(null) ?{core::int} let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   a.foo ??= x; // Error.
-    ^^^" in #t1.{self::A::foo} = x : null;
+    ^^^" in #t1.{self::A::foo}{<nullable>}. = x : null;
   let final self::test::T% #t4 = t in (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo}).{core::num::==}(null) ?{core::int} let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+    ^^^" in #t4.{self::A::foo}{<nullable>}.{core::int?}) == null ?{core::int} let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.foo ??= x; // Error.
-    ^^^" in #t4.{self::A::foo} = x : null;
-  let final dynamic #t7 = d in #t7.foo.{core::Object::==}(null) ?{dynamic} #t7.foo = x : null;
-  let final self::A? #t8 = a in #t8.{core::Object::==}(null) ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar} in #t9.{self::A::foo}.{core::num::==}(null) ?{core::int} #t9.{self::A::foo} = x : null;
+    ^^^" in #t4.{self::A::foo}{<nullable>}. = x : null;
+  let final dynamic #t7 = d in #t7{dynamic}.foo == null ?{dynamic} #t7{dynamic}.foo = x : null;
+  let final self::A? #t8 = a in #t8 == null ?{core::int?} null : let final self::A #t9 = #t8{self::A}.{self::A::bar}{self::A} in #t9.{self::A::foo}{core::int?} == null ?{core::int} #t9.{self::A::foo} = x : null;
 }
 static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
   return null;
@@ -74,7 +74,7 @@
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t10)).{core::num::==}(null) ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t10)) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
 Try accessing using ?. instead.
   b.fooExtension ??= x; // Error.
@@ -82,10 +82,10 @@
   let final self::testExtension::T% #t13 = t in (let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
-    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t13)).{core::num::==}(null) ?{core::int} let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t13)) == null ?{core::int} let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
 Try accessing using ?. instead.
   t.fooExtension ??= x; // Error.
     ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t13, x) : null;
-  let final self::B? #t16 = b in #t16.{core::Object::==}(null) ?{core::int?} null : let final self::B #t17 = self::Extension|get#barExtension(#t16{self::B}) in self::Extension|get#fooExtension(#t17).{core::num::==}(null) ?{core::int} self::Extension|set#fooExtension(#t17, x) : null;
+  let final self::B? #t16 = b in #t16 == null ?{core::int?} null : let final self::B #t17 = self::Extension|get#barExtension(#t16{self::B}) in self::Extension|get#fooExtension(#t17) == null ?{core::int} self::Extension|set#fooExtension(#t17, x) : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43455.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43455.dart.strong.expect
index 9a0b8b5..bdb5c97 100644
--- a/pkg/front_end/testcases/nnbd/issue43455.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43455.dart.strong.expect
@@ -10,23 +10,23 @@
   method test(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y? y) → dynamic {
     core::Set<core::Object?> v = block {
       final core::Set<core::Object?> #t1 = col::LinkedHashSet::•<core::Object?>();
-      #t1.{core::Set::add}{Invariant}(x);
-      #t1.{core::Set::add}{Invariant}(42);
+      #t1.{core::Set::add}(x){(core::Object?) → core::bool};
+      #t1.{core::Set::add}(42){(core::Object?) → core::bool};
     } =>#t1;
     core::Set<core::Object?> w = block {
       final core::Set<core::Object?> #t2 = col::LinkedHashSet::•<core::Object?>();
-      #t2.{core::Set::add}{Invariant}(42);
-      #t2.{core::Set::add}{Invariant}(x);
+      #t2.{core::Set::add}(42){(core::Object?) → core::bool};
+      #t2.{core::Set::add}(x){(core::Object?) → core::bool};
     } =>#t2;
     core::Set<core::Object?> p = block {
       final core::Set<core::Object?> #t3 = col::LinkedHashSet::•<core::Object?>();
-      #t3.{core::Set::add}{Invariant}(y);
-      #t3.{core::Set::add}{Invariant}(42);
+      #t3.{core::Set::add}(y){(core::Object?) → core::bool};
+      #t3.{core::Set::add}(42){(core::Object?) → core::bool};
     } =>#t3;
     core::Set<core::Object?> q = block {
       final core::Set<core::Object?> #t4 = col::LinkedHashSet::•<core::Object?>();
-      #t4.{core::Set::add}{Invariant}(42);
-      #t4.{core::Set::add}{Invariant}(y);
+      #t4.{core::Set::add}(42){(core::Object?) → core::bool};
+      #t4.{core::Set::add}(y){(core::Object?) → core::bool};
     } =>#t4;
     self::assertRightSubtype(v);
     self::assertLeftSubtype<core::Set<core::Object?>>(v);
@@ -39,13 +39,13 @@
     if(x is{ForNonNullableByDefault} core::Object?) {
       core::Set<core::Object?> v = block {
         final core::Set<core::Object?> #t5 = col::LinkedHashSet::•<core::Object?>();
-        #t5.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */});
-        #t5.{core::Set::add}{Invariant}(42);
+        #t5.{core::Set::add}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}){(core::Object?) → core::bool};
+        #t5.{core::Set::add}(42){(core::Object?) → core::bool};
       } =>#t5;
       core::Set<core::Object?> w = block {
         final core::Set<core::Object?> #t6 = col::LinkedHashSet::•<core::Object?>();
-        #t6.{core::Set::add}{Invariant}(42);
-        #t6.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */});
+        #t6.{core::Set::add}(42){(core::Object?) → core::bool};
+        #t6.{core::Set::add}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}){(core::Object?) → core::bool};
       } =>#t6;
       self::assertRightSubtype(v);
       self::assertLeftSubtype<core::Set<core::Object?>>(v);
@@ -61,6 +61,6 @@
   col::LinkedHashSet::•<core::Object?>() as{ForNonNullableByDefault} self::assertLeftSubtype::X%;
 }
 static method main() → dynamic {
-  new self::C::•<core::int?, core::int>().{self::C::test}(42, null);
-  new self::C::•<core::int?, core::int>().{self::C::test}(null, null);
+  new self::C::•<core::int?, core::int>().{self::C::test}(42, null){(core::int?, core::int?) → dynamic};
+  new self::C::•<core::int?, core::int>().{self::C::test}(null, null){(core::int?, core::int?) → dynamic};
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43455.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43455.dart.strong.transformed.expect
index ceddbed..75bcc24 100644
--- a/pkg/front_end/testcases/nnbd/issue43455.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43455.dart.strong.transformed.expect
@@ -10,23 +10,23 @@
   method test(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y? y) → dynamic {
     core::Set<core::Object?> v = block {
       final core::Set<core::Object?> #t1 = new col::_CompactLinkedHashSet::•<core::Object?>();
-      #t1.{core::Set::add}{Invariant}(x);
-      #t1.{core::Set::add}{Invariant}(42);
+      #t1.{core::Set::add}(x){(core::Object?) → core::bool};
+      #t1.{core::Set::add}(42){(core::Object?) → core::bool};
     } =>#t1;
     core::Set<core::Object?> w = block {
       final core::Set<core::Object?> #t2 = new col::_CompactLinkedHashSet::•<core::Object?>();
-      #t2.{core::Set::add}{Invariant}(42);
-      #t2.{core::Set::add}{Invariant}(x);
+      #t2.{core::Set::add}(42){(core::Object?) → core::bool};
+      #t2.{core::Set::add}(x){(core::Object?) → core::bool};
     } =>#t2;
     core::Set<core::Object?> p = block {
       final core::Set<core::Object?> #t3 = new col::_CompactLinkedHashSet::•<core::Object?>();
-      #t3.{core::Set::add}{Invariant}(y);
-      #t3.{core::Set::add}{Invariant}(42);
+      #t3.{core::Set::add}(y){(core::Object?) → core::bool};
+      #t3.{core::Set::add}(42){(core::Object?) → core::bool};
     } =>#t3;
     core::Set<core::Object?> q = block {
       final core::Set<core::Object?> #t4 = new col::_CompactLinkedHashSet::•<core::Object?>();
-      #t4.{core::Set::add}{Invariant}(42);
-      #t4.{core::Set::add}{Invariant}(y);
+      #t4.{core::Set::add}(42){(core::Object?) → core::bool};
+      #t4.{core::Set::add}(y){(core::Object?) → core::bool};
     } =>#t4;
     self::assertRightSubtype(v);
     self::assertLeftSubtype<core::Set<core::Object?>>(v);
@@ -39,13 +39,13 @@
     if(x is{ForNonNullableByDefault} core::Object?) {
       core::Set<core::Object?> v = block {
         final core::Set<core::Object?> #t5 = new col::_CompactLinkedHashSet::•<core::Object?>();
-        #t5.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */});
-        #t5.{core::Set::add}{Invariant}(42);
+        #t5.{core::Set::add}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}){(core::Object?) → core::bool};
+        #t5.{core::Set::add}(42){(core::Object?) → core::bool};
       } =>#t5;
       core::Set<core::Object?> w = block {
         final core::Set<core::Object?> #t6 = new col::_CompactLinkedHashSet::•<core::Object?>();
-        #t6.{core::Set::add}{Invariant}(42);
-        #t6.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */});
+        #t6.{core::Set::add}(42){(core::Object?) → core::bool};
+        #t6.{core::Set::add}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}){(core::Object?) → core::bool};
       } =>#t6;
       self::assertRightSubtype(v);
       self::assertLeftSubtype<core::Set<core::Object?>>(v);
@@ -61,6 +61,6 @@
   new col::_CompactLinkedHashSet::•<core::Object?>() as{ForNonNullableByDefault} self::assertLeftSubtype::X%;
 }
 static method main() → dynamic {
-  new self::C::•<core::int?, core::int>().{self::C::test}(42, null);
-  new self::C::•<core::int?, core::int>().{self::C::test}(null, null);
+  new self::C::•<core::int?, core::int>().{self::C::test}(42, null){(core::int?, core::int?) → dynamic};
+  new self::C::•<core::int?, core::int>().{self::C::test}(null, null){(core::int?, core::int?) → dynamic};
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43455.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43455.dart.weak.expect
index 9a0b8b5..bdb5c97 100644
--- a/pkg/front_end/testcases/nnbd/issue43455.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43455.dart.weak.expect
@@ -10,23 +10,23 @@
   method test(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y? y) → dynamic {
     core::Set<core::Object?> v = block {
       final core::Set<core::Object?> #t1 = col::LinkedHashSet::•<core::Object?>();
-      #t1.{core::Set::add}{Invariant}(x);
-      #t1.{core::Set::add}{Invariant}(42);
+      #t1.{core::Set::add}(x){(core::Object?) → core::bool};
+      #t1.{core::Set::add}(42){(core::Object?) → core::bool};
     } =>#t1;
     core::Set<core::Object?> w = block {
       final core::Set<core::Object?> #t2 = col::LinkedHashSet::•<core::Object?>();
-      #t2.{core::Set::add}{Invariant}(42);
-      #t2.{core::Set::add}{Invariant}(x);
+      #t2.{core::Set::add}(42){(core::Object?) → core::bool};
+      #t2.{core::Set::add}(x){(core::Object?) → core::bool};
     } =>#t2;
     core::Set<core::Object?> p = block {
       final core::Set<core::Object?> #t3 = col::LinkedHashSet::•<core::Object?>();
-      #t3.{core::Set::add}{Invariant}(y);
-      #t3.{core::Set::add}{Invariant}(42);
+      #t3.{core::Set::add}(y){(core::Object?) → core::bool};
+      #t3.{core::Set::add}(42){(core::Object?) → core::bool};
     } =>#t3;
     core::Set<core::Object?> q = block {
       final core::Set<core::Object?> #t4 = col::LinkedHashSet::•<core::Object?>();
-      #t4.{core::Set::add}{Invariant}(42);
-      #t4.{core::Set::add}{Invariant}(y);
+      #t4.{core::Set::add}(42){(core::Object?) → core::bool};
+      #t4.{core::Set::add}(y){(core::Object?) → core::bool};
     } =>#t4;
     self::assertRightSubtype(v);
     self::assertLeftSubtype<core::Set<core::Object?>>(v);
@@ -39,13 +39,13 @@
     if(x is{ForNonNullableByDefault} core::Object?) {
       core::Set<core::Object?> v = block {
         final core::Set<core::Object?> #t5 = col::LinkedHashSet::•<core::Object?>();
-        #t5.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */});
-        #t5.{core::Set::add}{Invariant}(42);
+        #t5.{core::Set::add}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}){(core::Object?) → core::bool};
+        #t5.{core::Set::add}(42){(core::Object?) → core::bool};
       } =>#t5;
       core::Set<core::Object?> w = block {
         final core::Set<core::Object?> #t6 = col::LinkedHashSet::•<core::Object?>();
-        #t6.{core::Set::add}{Invariant}(42);
-        #t6.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */});
+        #t6.{core::Set::add}(42){(core::Object?) → core::bool};
+        #t6.{core::Set::add}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}){(core::Object?) → core::bool};
       } =>#t6;
       self::assertRightSubtype(v);
       self::assertLeftSubtype<core::Set<core::Object?>>(v);
@@ -61,6 +61,6 @@
   col::LinkedHashSet::•<core::Object?>() as{ForNonNullableByDefault} self::assertLeftSubtype::X%;
 }
 static method main() → dynamic {
-  new self::C::•<core::int?, core::int>().{self::C::test}(42, null);
-  new self::C::•<core::int?, core::int>().{self::C::test}(null, null);
+  new self::C::•<core::int?, core::int>().{self::C::test}(42, null){(core::int?, core::int?) → dynamic};
+  new self::C::•<core::int?, core::int>().{self::C::test}(null, null){(core::int?, core::int?) → dynamic};
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43455.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43455.dart.weak.transformed.expect
index ceddbed..75bcc24 100644
--- a/pkg/front_end/testcases/nnbd/issue43455.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43455.dart.weak.transformed.expect
@@ -10,23 +10,23 @@
   method test(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y? y) → dynamic {
     core::Set<core::Object?> v = block {
       final core::Set<core::Object?> #t1 = new col::_CompactLinkedHashSet::•<core::Object?>();
-      #t1.{core::Set::add}{Invariant}(x);
-      #t1.{core::Set::add}{Invariant}(42);
+      #t1.{core::Set::add}(x){(core::Object?) → core::bool};
+      #t1.{core::Set::add}(42){(core::Object?) → core::bool};
     } =>#t1;
     core::Set<core::Object?> w = block {
       final core::Set<core::Object?> #t2 = new col::_CompactLinkedHashSet::•<core::Object?>();
-      #t2.{core::Set::add}{Invariant}(42);
-      #t2.{core::Set::add}{Invariant}(x);
+      #t2.{core::Set::add}(42){(core::Object?) → core::bool};
+      #t2.{core::Set::add}(x){(core::Object?) → core::bool};
     } =>#t2;
     core::Set<core::Object?> p = block {
       final core::Set<core::Object?> #t3 = new col::_CompactLinkedHashSet::•<core::Object?>();
-      #t3.{core::Set::add}{Invariant}(y);
-      #t3.{core::Set::add}{Invariant}(42);
+      #t3.{core::Set::add}(y){(core::Object?) → core::bool};
+      #t3.{core::Set::add}(42){(core::Object?) → core::bool};
     } =>#t3;
     core::Set<core::Object?> q = block {
       final core::Set<core::Object?> #t4 = new col::_CompactLinkedHashSet::•<core::Object?>();
-      #t4.{core::Set::add}{Invariant}(42);
-      #t4.{core::Set::add}{Invariant}(y);
+      #t4.{core::Set::add}(42){(core::Object?) → core::bool};
+      #t4.{core::Set::add}(y){(core::Object?) → core::bool};
     } =>#t4;
     self::assertRightSubtype(v);
     self::assertLeftSubtype<core::Set<core::Object?>>(v);
@@ -39,13 +39,13 @@
     if(x is{ForNonNullableByDefault} core::Object?) {
       core::Set<core::Object?> v = block {
         final core::Set<core::Object?> #t5 = new col::_CompactLinkedHashSet::•<core::Object?>();
-        #t5.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */});
-        #t5.{core::Set::add}{Invariant}(42);
+        #t5.{core::Set::add}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}){(core::Object?) → core::bool};
+        #t5.{core::Set::add}(42){(core::Object?) → core::bool};
       } =>#t5;
       core::Set<core::Object?> w = block {
         final core::Set<core::Object?> #t6 = new col::_CompactLinkedHashSet::•<core::Object?>();
-        #t6.{core::Set::add}{Invariant}(42);
-        #t6.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */});
+        #t6.{core::Set::add}(42){(core::Object?) → core::bool};
+        #t6.{core::Set::add}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}){(core::Object?) → core::bool};
       } =>#t6;
       self::assertRightSubtype(v);
       self::assertLeftSubtype<core::Set<core::Object?>>(v);
@@ -61,6 +61,6 @@
   new col::_CompactLinkedHashSet::•<core::Object?>() as{ForNonNullableByDefault} self::assertLeftSubtype::X%;
 }
 static method main() → dynamic {
-  new self::C::•<core::int?, core::int>().{self::C::test}(42, null);
-  new self::C::•<core::int?, core::int>().{self::C::test}(null, null);
+  new self::C::•<core::int?, core::int>().{self::C::test}(42, null){(core::int?, core::int?) → dynamic};
+  new self::C::•<core::int?, core::int>().{self::C::test}(null, null){(core::int?, core::int?) → dynamic};
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43495.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43495.dart.strong.expect
index e5985d6..a6b4f4e 100644
--- a/pkg/front_end/testcases/nnbd/issue43495.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43495.dart.strong.expect
@@ -175,7 +175,7 @@
     {...a}, // Error.
         ^") {
       final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
-      #t1.{core::Set::add}{Invariant}(#t3);
+      #t1.{core::Set::add}(#t3){(core::int) → core::bool};
     }
   } =>#t1, block {
     final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
@@ -183,7 +183,7 @@
     {...b}, // Error.
         ^") {
       final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
-      #t4.{core::Set::add}{Invariant}(#t6);
+      #t4.{core::Set::add}(#t6){(core::int) → core::bool};
     }
   } =>#t4, block {
     final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
@@ -191,7 +191,7 @@
     {...c}, // Error.
         ^") {
       final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
-      #t7.{core::Set::add}{Invariant}(#t9);
+      #t7.{core::Set::add}(#t9){(core::int) → core::bool};
     }
   } =>#t7, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:11:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...d}, // Error.
@@ -200,10 +200,10 @@
     <int, int>{...a}, // Error.
                   ^": null}, block {
     final core::Set<core::int> #t10 = col::LinkedHashSet::•<core::int>();
-    #t10.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
+    #t10.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
     <int>{...d}, // Error.
-             ^");
+             ^"){(core::int) → core::bool};
   } =>#t10, block {
     final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
     if(condition)
@@ -211,7 +211,7 @@
     {if (condition) ...a}, // Error.
                        ^") {
         final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
-        #t11.{core::Set::add}{Invariant}(#t13);
+        #t11.{core::Set::add}(#t13){(core::int) → core::bool};
       }
   } =>#t11, block {
     final core::Set<core::int> #t14 = col::LinkedHashSet::•<core::int>();
@@ -220,7 +220,7 @@
     {if (condition) ...b}, // Error.
                        ^") {
         final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
-        #t14.{core::Set::add}{Invariant}(#t16);
+        #t14.{core::Set::add}(#t16){(core::int) → core::bool};
       }
   } =>#t14, block {
     final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
@@ -229,14 +229,14 @@
     {if (condition) ...c}, // Error.
                        ^") {
         final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
-        #t17.{core::Set::add}{Invariant}(#t19);
+        #t17.{core::Set::add}(#t19){(core::int) → core::bool};
       }
   } =>#t17, block {
     final core::Map<core::int, core::int> #t20 = <core::int, core::int>{};
     if(condition)
-      #t20.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:17:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      #t20.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:17:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...d}, // Error.
-                       ^", null);
+                       ^", null){(core::int, core::int) → void};
   } =>#t20, block {
     final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
@@ -244,7 +244,7 @@
     {for (dynamic e in iterable) ...a}, // Error.
                                     ^") {
         final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
-        #t21.{core::Set::add}{Invariant}(#t23);
+        #t21.{core::Set::add}(#t23){(core::int) → core::bool};
       }
   } =>#t21, block {
     final core::Set<core::int> #t24 = col::LinkedHashSet::•<core::int>();
@@ -253,7 +253,7 @@
     {for (dynamic e in iterable) ...b}, // Error.
                                     ^") {
         final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
-        #t24.{core::Set::add}{Invariant}(#t26);
+        #t24.{core::Set::add}(#t26){(core::int) → core::bool};
       }
   } =>#t24, block {
     final core::Set<core::int> #t27 = col::LinkedHashSet::•<core::int>();
@@ -262,190 +262,190 @@
     {for (dynamic e in iterable) ...c}, // Error.
                                     ^") {
         final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
-        #t27.{core::Set::add}{Invariant}(#t29);
+        #t27.{core::Set::add}(#t29){(core::int) → core::bool};
       }
   } =>#t27, block {
     final core::Map<core::int, core::int> #t30 = <core::int, core::int>{};
     for (dynamic e in iterable)
-      #t30.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:21:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      #t30.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:21:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...d}, // Error.
-                                    ^", null);
+                                    ^", null){(core::int, core::int) → void};
   } =>#t30, block {
     final core::Set<core::int> #t31 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
       for (final dynamic #t32 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...a}, // Error.
                                      ^") {
         final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
-        #t31.{core::Set::add}{Invariant}(#t33);
+        #t31.{core::Set::add}(#t33){(core::int) → core::bool};
       }
   } =>#t31, block {
     final core::Set<core::int> #t34 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
       for (final dynamic #t35 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...b}, // Error.
                                      ^") {
         final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
-        #t34.{core::Set::add}{Invariant}(#t36);
+        #t34.{core::Set::add}(#t36){(core::int) → core::bool};
       }
   } =>#t34, block {
     final core::Set<core::int> #t37 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
       for (final dynamic #t38 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...c}, // Error.
                                      ^") {
         final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
-        #t37.{core::Set::add}{Invariant}(#t39);
+        #t37.{core::Set::add}(#t39){(core::int) → core::bool};
       }
   } =>#t37, block {
     final core::Map<core::int, core::int> #t40 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
-      #t40.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:25:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t40.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:25:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...d}, // Error.
-                                     ^", null);
+                                     ^", null){(core::int, core::int) → void};
   } =>#t40, block {
     final core::Set<core::int> #t41 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t42 = a;
-    if(!#t42.{core::Object::==}(null))
+    if(!(#t42 == null))
       for (final dynamic #t43 in #t42{core::Iterable<dynamic>}) {
         final core::int #t44 = #t43 as{TypeError,ForNonNullableByDefault} core::int;
-        #t41.{core::Set::add}{Invariant}(#t44);
+        #t41.{core::Set::add}(#t44){(core::int) → core::bool};
       }
   } =>#t41, block {
     final core::Set<core::int> #t45 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t46 = b;
-    if(!#t46.{core::Object::==}(null))
+    if(!(#t46 == null))
       for (final dynamic #t47 in #t46{core::Iterable<dynamic>}) {
         final core::int #t48 = #t47 as{TypeError,ForNonNullableByDefault} core::int;
-        #t45.{core::Set::add}{Invariant}(#t48);
+        #t45.{core::Set::add}(#t48){(core::int) → core::bool};
       }
   } =>#t45, block {
     final core::Set<core::int> #t49 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t50 = c;
-    if(!#t50.{core::Object::==}(null))
+    if(!(#t50 == null))
       for (final dynamic #t51 in #t50{core::Iterable<dynamic>}) {
         final core::int #t52 = #t51 as{TypeError,ForNonNullableByDefault} core::int;
-        #t49.{core::Set::add}{Invariant}(#t52);
+        #t49.{core::Set::add}(#t52){(core::int) → core::bool};
       }
   } =>#t49, block {
     final core::Map<core::int, core::int> #t53 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t54 = d;
-    if(!#t54.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t53.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}, #t55.{core::MapEntry::value});
+    if(!(#t54 == null))
+      for (final core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t53.{core::Map::[]=}(#t55.{core::MapEntry::key}{core::int}, #t55.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t53, block {
     final core::Set<core::int> #t56 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t57 = a;
-      if(!#t57.{core::Object::==}(null))
+      if(!(#t57 == null))
         for (final dynamic #t58 in #t57{core::Iterable<dynamic>}) {
           final core::int #t59 = #t58 as{TypeError,ForNonNullableByDefault} core::int;
-          #t56.{core::Set::add}{Invariant}(#t59);
+          #t56.{core::Set::add}(#t59){(core::int) → core::bool};
         }
     }
   } =>#t56, block {
     final core::Set<core::int> #t60 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t61 = b;
-      if(!#t61.{core::Object::==}(null))
+      if(!(#t61 == null))
         for (final dynamic #t62 in #t61{core::Iterable<dynamic>}) {
           final core::int #t63 = #t62 as{TypeError,ForNonNullableByDefault} core::int;
-          #t60.{core::Set::add}{Invariant}(#t63);
+          #t60.{core::Set::add}(#t63){(core::int) → core::bool};
         }
     }
   } =>#t60, block {
     final core::Set<core::int> #t64 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t65 = c;
-      if(!#t65.{core::Object::==}(null))
+      if(!(#t65 == null))
         for (final dynamic #t66 in #t65{core::Iterable<dynamic>}) {
           final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
-          #t64.{core::Set::add}{Invariant}(#t67);
+          #t64.{core::Set::add}(#t67){(core::int) → core::bool};
         }
     }
   } =>#t64, block {
     final core::Map<core::int, core::int> #t68 = <core::int, core::int>{};
     if(condition) {
       final core::Map<core::int, core::int>? #t69 = d;
-      if(!#t69.{core::Object::==}(null))
-        for (final core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries})
-          #t68.{core::Map::[]=}{Invariant}(#t70.{core::MapEntry::key}, #t70.{core::MapEntry::value});
+      if(!(#t69 == null))
+        for (final core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t68.{core::Map::[]=}(#t70.{core::MapEntry::key}{core::int}, #t70.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t68, block {
     final core::Set<core::int> #t71 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t72 = a;
-      if(!#t72.{core::Object::==}(null))
+      if(!(#t72 == null))
         for (final dynamic #t73 in #t72{core::Iterable<dynamic>}) {
           final core::int #t74 = #t73 as{TypeError,ForNonNullableByDefault} core::int;
-          #t71.{core::Set::add}{Invariant}(#t74);
+          #t71.{core::Set::add}(#t74){(core::int) → core::bool};
         }
     }
   } =>#t71, block {
     final core::Set<core::int> #t75 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t76 = b;
-      if(!#t76.{core::Object::==}(null))
+      if(!(#t76 == null))
         for (final dynamic #t77 in #t76{core::Iterable<dynamic>}) {
           final core::int #t78 = #t77 as{TypeError,ForNonNullableByDefault} core::int;
-          #t75.{core::Set::add}{Invariant}(#t78);
+          #t75.{core::Set::add}(#t78){(core::int) → core::bool};
         }
     }
   } =>#t75, block {
     final core::Set<core::int> #t79 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t80 = c;
-      if(!#t80.{core::Object::==}(null))
+      if(!(#t80 == null))
         for (final dynamic #t81 in #t80{core::Iterable<dynamic>}) {
           final core::int #t82 = #t81 as{TypeError,ForNonNullableByDefault} core::int;
-          #t79.{core::Set::add}{Invariant}(#t82);
+          #t79.{core::Set::add}(#t82){(core::int) → core::bool};
         }
     }
   } =>#t79, block {
     final core::Map<core::int, core::int> #t83 = <core::int, core::int>{};
     for (dynamic e in iterable) {
       final core::Map<core::int, core::int>? #t84 = d;
-      if(!#t84.{core::Object::==}(null))
-        for (final core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries})
-          #t83.{core::Map::[]=}{Invariant}(#t85.{core::MapEntry::key}, #t85.{core::MapEntry::value});
+      if(!(#t84 == null))
+        for (final core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t83.{core::Map::[]=}(#t85.{core::MapEntry::key}{core::int}, #t85.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t83, block {
     final core::Set<core::int> #t86 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t87 = a;
-      if(!#t87.{core::Object::==}(null))
+      if(!(#t87 == null))
         for (final dynamic #t88 in #t87{core::Iterable<dynamic>}) {
           final core::int #t89 = #t88 as{TypeError,ForNonNullableByDefault} core::int;
-          #t86.{core::Set::add}{Invariant}(#t89);
+          #t86.{core::Set::add}(#t89){(core::int) → core::bool};
         }
     }
   } =>#t86, block {
     final core::Set<core::int> #t90 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t91 = b;
-      if(!#t91.{core::Object::==}(null))
+      if(!(#t91 == null))
         for (final dynamic #t92 in #t91{core::Iterable<dynamic>}) {
           final core::int #t93 = #t92 as{TypeError,ForNonNullableByDefault} core::int;
-          #t90.{core::Set::add}{Invariant}(#t93);
+          #t90.{core::Set::add}(#t93){(core::int) → core::bool};
         }
     }
   } =>#t90, block {
     final core::Set<core::int> #t94 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t95 = c;
-      if(!#t95.{core::Object::==}(null))
+      if(!(#t95 == null))
         for (final dynamic #t96 in #t95{core::Iterable<dynamic>}) {
           final core::int #t97 = #t96 as{TypeError,ForNonNullableByDefault} core::int;
-          #t94.{core::Set::add}{Invariant}(#t97);
+          #t94.{core::Set::add}(#t97){(core::int) → core::bool};
         }
     }
   } =>#t94, block {
     final core::Map<core::int, core::int> #t98 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t99 = d;
-      if(!#t99.{core::Object::==}(null))
-        for (final core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries})
-          #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}, #t100.{core::MapEntry::value});
+      if(!(#t99 == null))
+        for (final core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t98.{core::Map::[]=}(#t100.{core::MapEntry::key}{core::int}, #t100.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t98];
 }
@@ -456,7 +456,7 @@
     {...x}, // Error.
         ^") {
       final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
-      #t101.{core::Set::add}{Invariant}(#t103);
+      #t101.{core::Set::add}(#t103){(core::int) → core::bool};
     }
   } =>#t101, block {
     final core::Set<core::int> #t104 = col::LinkedHashSet::•<core::int>();
@@ -464,7 +464,7 @@
     {...y}, // Error.
         ^") {
       final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
-      #t104.{core::Set::add}{Invariant}(#t106);
+      #t104.{core::Set::add}(#t106){(core::int) → core::bool};
     }
   } =>#t104, block {
     final core::Set<core::int> #t107 = col::LinkedHashSet::•<core::int>();
@@ -472,7 +472,7 @@
     {...z}, // Error.
         ^") {
       final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
-      #t107.{core::Set::add}{Invariant}(#t109);
+      #t107.{core::Set::add}(#t109){(core::int) → core::bool};
     }
   } =>#t107, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:53:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...w}, // Error.
@@ -480,9 +480,9 @@
     <int, int>{...x}, // Error.
                   ^": null}, block {
     final core::Set<core::int> #t110 = col::LinkedHashSet::•<core::int>();
-    #t110.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: Unexpected type 'W' of a spread.  Expected 'dynamic' or an Iterable.
+    #t110.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: Unexpected type 'W' of a spread.  Expected 'dynamic' or an Iterable.
     <int>{...w}, // Error.
-             ^");
+             ^"){(core::int) → core::bool};
   } =>#t110, block {
     final core::Set<core::int> #t111 = col::LinkedHashSet::•<core::int>();
     if(condition)
@@ -490,7 +490,7 @@
     {if (condition) ...x}, // Error.
                        ^") {
         final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
-        #t111.{core::Set::add}{Invariant}(#t113);
+        #t111.{core::Set::add}(#t113){(core::int) → core::bool};
       }
   } =>#t111, block {
     final core::Set<core::int> #t114 = col::LinkedHashSet::•<core::int>();
@@ -499,7 +499,7 @@
     {if (condition) ...y}, // Error.
                        ^") {
         final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
-        #t114.{core::Set::add}{Invariant}(#t116);
+        #t114.{core::Set::add}(#t116){(core::int) → core::bool};
       }
   } =>#t114, block {
     final core::Set<core::int> #t117 = col::LinkedHashSet::•<core::int>();
@@ -508,14 +508,14 @@
     {if (condition) ...z}, // Error.
                        ^") {
         final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
-        #t117.{core::Set::add}{Invariant}(#t119);
+        #t117.{core::Set::add}(#t119){(core::int) → core::bool};
       }
   } =>#t117, block {
     final core::Map<core::int, core::int> #t120 = <core::int, core::int>{};
     if(condition)
-      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:59:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      #t120.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:59:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...w}, // Error.
-                       ^", null);
+                       ^", null){(core::int, core::int) → void};
   } =>#t120, block {
     final core::Set<core::int> #t121 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
@@ -523,7 +523,7 @@
     {for (dynamic e in iterable) ...x}, // Error.
                                     ^") {
         final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
-        #t121.{core::Set::add}{Invariant}(#t123);
+        #t121.{core::Set::add}(#t123){(core::int) → core::bool};
       }
   } =>#t121, block {
     final core::Set<core::int> #t124 = col::LinkedHashSet::•<core::int>();
@@ -532,7 +532,7 @@
     {for (dynamic e in iterable) ...y}, // Error.
                                     ^") {
         final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
-        #t124.{core::Set::add}{Invariant}(#t126);
+        #t124.{core::Set::add}(#t126){(core::int) → core::bool};
       }
   } =>#t124, block {
     final core::Set<core::int> #t127 = col::LinkedHashSet::•<core::int>();
@@ -541,190 +541,190 @@
     {for (dynamic e in iterable) ...z}, // Error.
                                     ^") {
         final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
-        #t127.{core::Set::add}{Invariant}(#t129);
+        #t127.{core::Set::add}(#t129){(core::int) → core::bool};
       }
   } =>#t127, block {
     final core::Map<core::int, core::int> #t130 = <core::int, core::int>{};
     for (dynamic e in iterable)
-      #t130.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:63:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      #t130.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:63:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...w}, // Error.
-                                    ^", null);
+                                    ^", null){(core::int, core::int) → void};
   } =>#t130, block {
     final core::Set<core::int> #t131 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
       for (final dynamic #t132 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...x}, // Error.
                                      ^") {
         final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
-        #t131.{core::Set::add}{Invariant}(#t133);
+        #t131.{core::Set::add}(#t133){(core::int) → core::bool};
       }
   } =>#t131, block {
     final core::Set<core::int> #t134 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
       for (final dynamic #t135 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...y}, // Error.
                                      ^") {
         final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
-        #t134.{core::Set::add}{Invariant}(#t136);
+        #t134.{core::Set::add}(#t136){(core::int) → core::bool};
       }
   } =>#t134, block {
     final core::Set<core::int> #t137 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
       for (final dynamic #t138 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...z}, // Error.
                                      ^") {
         final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
-        #t137.{core::Set::add}{Invariant}(#t139);
+        #t137.{core::Set::add}(#t139){(core::int) → core::bool};
       }
   } =>#t137, block {
     final core::Map<core::int, core::int> #t140 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
-      #t140.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:67:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t140.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:67:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...w}, // Error.
-                                     ^", null);
+                                     ^", null){(core::int, core::int) → void};
   } =>#t140, block {
     final core::Set<core::int> #t141 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t142 = x;
-    if(!#t142.{core::Object::==}(null))
+    if(!(#t142 == null))
       for (final dynamic #t143 in #t142{core::Iterable<dynamic>}) {
         final core::int #t144 = #t143 as{TypeError,ForNonNullableByDefault} core::int;
-        #t141.{core::Set::add}{Invariant}(#t144);
+        #t141.{core::Set::add}(#t144){(core::int) → core::bool};
       }
   } =>#t141, block {
     final core::Set<core::int> #t145 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t146 = y;
-    if(!#t146.{core::Object::==}(null))
+    if(!(#t146 == null))
       for (final dynamic #t147 in #t146{core::Iterable<dynamic>}) {
         final core::int #t148 = #t147 as{TypeError,ForNonNullableByDefault} core::int;
-        #t145.{core::Set::add}{Invariant}(#t148);
+        #t145.{core::Set::add}(#t148){(core::int) → core::bool};
       }
   } =>#t145, block {
     final core::Set<core::int> #t149 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t150 = z;
-    if(!#t150.{core::Object::==}(null))
+    if(!(#t150 == null))
       for (final dynamic #t151 in #t150{core::Iterable<dynamic>}) {
         final core::int #t152 = #t151 as{TypeError,ForNonNullableByDefault} core::int;
-        #t149.{core::Set::add}{Invariant}(#t152);
+        #t149.{core::Set::add}(#t152){(core::int) → core::bool};
       }
   } =>#t149, block {
     final core::Map<core::int, core::int> #t153 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t154 = w;
-    if(!#t154.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t153.{core::Map::[]=}{Invariant}(#t155.{core::MapEntry::key}, #t155.{core::MapEntry::value});
+    if(!(#t154 == null))
+      for (final core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t153.{core::Map::[]=}(#t155.{core::MapEntry::key}{core::int}, #t155.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t153, block {
     final core::Set<core::int> #t156 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t157 = x;
-      if(!#t157.{core::Object::==}(null))
+      if(!(#t157 == null))
         for (final dynamic #t158 in #t157{core::Iterable<dynamic>}) {
           final core::int #t159 = #t158 as{TypeError,ForNonNullableByDefault} core::int;
-          #t156.{core::Set::add}{Invariant}(#t159);
+          #t156.{core::Set::add}(#t159){(core::int) → core::bool};
         }
     }
   } =>#t156, block {
     final core::Set<core::int> #t160 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t161 = y;
-      if(!#t161.{core::Object::==}(null))
+      if(!(#t161 == null))
         for (final dynamic #t162 in #t161{core::Iterable<dynamic>}) {
           final core::int #t163 = #t162 as{TypeError,ForNonNullableByDefault} core::int;
-          #t160.{core::Set::add}{Invariant}(#t163);
+          #t160.{core::Set::add}(#t163){(core::int) → core::bool};
         }
     }
   } =>#t160, block {
     final core::Set<core::int> #t164 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t165 = z;
-      if(!#t165.{core::Object::==}(null))
+      if(!(#t165 == null))
         for (final dynamic #t166 in #t165{core::Iterable<dynamic>}) {
           final core::int #t167 = #t166 as{TypeError,ForNonNullableByDefault} core::int;
-          #t164.{core::Set::add}{Invariant}(#t167);
+          #t164.{core::Set::add}(#t167){(core::int) → core::bool};
         }
     }
   } =>#t164, block {
     final core::Map<core::int, core::int> #t168 = <core::int, core::int>{};
     if(condition) {
       final core::Map<core::int, core::int>? #t169 = w;
-      if(!#t169.{core::Object::==}(null))
-        for (final core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries})
-          #t168.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}, #t170.{core::MapEntry::value});
+      if(!(#t169 == null))
+        for (final core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t168.{core::Map::[]=}(#t170.{core::MapEntry::key}{core::int}, #t170.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t168, block {
     final core::Set<core::int> #t171 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t172 = x;
-      if(!#t172.{core::Object::==}(null))
+      if(!(#t172 == null))
         for (final dynamic #t173 in #t172{core::Iterable<dynamic>}) {
           final core::int #t174 = #t173 as{TypeError,ForNonNullableByDefault} core::int;
-          #t171.{core::Set::add}{Invariant}(#t174);
+          #t171.{core::Set::add}(#t174){(core::int) → core::bool};
         }
     }
   } =>#t171, block {
     final core::Set<core::int> #t175 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t176 = y;
-      if(!#t176.{core::Object::==}(null))
+      if(!(#t176 == null))
         for (final dynamic #t177 in #t176{core::Iterable<dynamic>}) {
           final core::int #t178 = #t177 as{TypeError,ForNonNullableByDefault} core::int;
-          #t175.{core::Set::add}{Invariant}(#t178);
+          #t175.{core::Set::add}(#t178){(core::int) → core::bool};
         }
     }
   } =>#t175, block {
     final core::Set<core::int> #t179 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t180 = z;
-      if(!#t180.{core::Object::==}(null))
+      if(!(#t180 == null))
         for (final dynamic #t181 in #t180{core::Iterable<dynamic>}) {
           final core::int #t182 = #t181 as{TypeError,ForNonNullableByDefault} core::int;
-          #t179.{core::Set::add}{Invariant}(#t182);
+          #t179.{core::Set::add}(#t182){(core::int) → core::bool};
         }
     }
   } =>#t179, block {
     final core::Map<core::int, core::int> #t183 = <core::int, core::int>{};
     for (dynamic e in iterable) {
       final core::Map<core::int, core::int>? #t184 = w;
-      if(!#t184.{core::Object::==}(null))
-        for (final core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries})
-          #t183.{core::Map::[]=}{Invariant}(#t185.{core::MapEntry::key}, #t185.{core::MapEntry::value});
+      if(!(#t184 == null))
+        for (final core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t183.{core::Map::[]=}(#t185.{core::MapEntry::key}{core::int}, #t185.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t183, block {
     final core::Set<core::int> #t186 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t187 = x;
-      if(!#t187.{core::Object::==}(null))
+      if(!(#t187 == null))
         for (final dynamic #t188 in #t187{core::Iterable<dynamic>}) {
           final core::int #t189 = #t188 as{TypeError,ForNonNullableByDefault} core::int;
-          #t186.{core::Set::add}{Invariant}(#t189);
+          #t186.{core::Set::add}(#t189){(core::int) → core::bool};
         }
     }
   } =>#t186, block {
     final core::Set<core::int> #t190 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t191 = y;
-      if(!#t191.{core::Object::==}(null))
+      if(!(#t191 == null))
         for (final dynamic #t192 in #t191{core::Iterable<dynamic>}) {
           final core::int #t193 = #t192 as{TypeError,ForNonNullableByDefault} core::int;
-          #t190.{core::Set::add}{Invariant}(#t193);
+          #t190.{core::Set::add}(#t193){(core::int) → core::bool};
         }
     }
   } =>#t190, block {
     final core::Set<core::int> #t194 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t195 = z;
-      if(!#t195.{core::Object::==}(null))
+      if(!(#t195 == null))
         for (final dynamic #t196 in #t195{core::Iterable<dynamic>}) {
           final core::int #t197 = #t196 as{TypeError,ForNonNullableByDefault} core::int;
-          #t194.{core::Set::add}{Invariant}(#t197);
+          #t194.{core::Set::add}(#t197){(core::int) → core::bool};
         }
     }
   } =>#t194, block {
     final core::Map<core::int, core::int> #t198 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t199 = w;
-      if(!#t199.{core::Object::==}(null))
-        for (final core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries})
-          #t198.{core::Map::[]=}{Invariant}(#t200.{core::MapEntry::key}, #t200.{core::MapEntry::value});
+      if(!(#t199 == null))
+        for (final core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t198.{core::Map::[]=}(#t200.{core::MapEntry::key}{core::int}, #t200.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t198];
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43495.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43495.dart.strong.transformed.expect
index 7d89db1..ccf9bc0 100644
--- a/pkg/front_end/testcases/nnbd/issue43495.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43495.dart.strong.transformed.expect
@@ -179,7 +179,7 @@
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
-          #t1.{core::Set::add}{Invariant}(#t3);
+          #t1.{core::Set::add}(#t3){(core::int) → core::bool};
         }
       }
     }
@@ -193,7 +193,7 @@
         final dynamic #t5 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
-          #t4.{core::Set::add}{Invariant}(#t6);
+          #t4.{core::Set::add}(#t6){(core::int) → core::bool};
         }
       }
     }
@@ -207,7 +207,7 @@
         final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
-          #t7.{core::Set::add}{Invariant}(#t9);
+          #t7.{core::Set::add}(#t9){(core::int) → core::bool};
         }
       }
     }
@@ -218,10 +218,10 @@
     <int, int>{...a}, // Error.
                   ^": null}, block {
     final core::Set<core::int> #t10 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t10.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
+    #t10.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
     <int>{...d}, // Error.
-             ^");
+             ^"){(core::int) → core::bool};
   } =>#t10, block {
     final core::Set<core::int> #t11 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
@@ -232,7 +232,7 @@
         final dynamic #t12 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
-          #t11.{core::Set::add}{Invariant}(#t13);
+          #t11.{core::Set::add}(#t13){(core::int) → core::bool};
         }
       }
     }
@@ -246,7 +246,7 @@
         final dynamic #t15 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
-          #t14.{core::Set::add}{Invariant}(#t16);
+          #t14.{core::Set::add}(#t16){(core::int) → core::bool};
         }
       }
     }
@@ -260,16 +260,16 @@
         final dynamic #t18 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
-          #t17.{core::Set::add}{Invariant}(#t19);
+          #t17.{core::Set::add}(#t19){(core::int) → core::bool};
         }
       }
     }
   } =>#t17, block {
     final core::Map<core::int, core::int> #t20 = <core::int, core::int>{};
     if(condition)
-      #t20.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:17:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      #t20.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:17:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...d}, // Error.
-                       ^", null);
+                       ^", null){(core::int, core::int) → void};
   } =>#t20, block {
     final core::Set<core::int> #t21 = new col::_CompactLinkedHashSet::•<core::int>();
     {
@@ -284,7 +284,7 @@
             final dynamic #t22 = :sync-for-iterator.{core::Iterator::current};
             {
               final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
-              #t21.{core::Set::add}{Invariant}(#t23);
+              #t21.{core::Set::add}(#t23){(core::int) → core::bool};
             }
           }
         }
@@ -304,7 +304,7 @@
             final dynamic #t25 = :sync-for-iterator.{core::Iterator::current};
             {
               final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
-              #t24.{core::Set::add}{Invariant}(#t26);
+              #t24.{core::Set::add}(#t26){(core::int) → core::bool};
             }
           }
         }
@@ -324,7 +324,7 @@
             final dynamic #t28 = :sync-for-iterator.{core::Iterator::current};
             {
               final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
-              #t27.{core::Set::add}{Invariant}(#t29);
+              #t27.{core::Set::add}(#t29){(core::int) → core::bool};
             }
           }
         }
@@ -336,14 +336,14 @@
       core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic e = :sync-for-iterator.{core::Iterator::current};
-        #t30.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:21:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+        #t30.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:21:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...d}, // Error.
-                                    ^", null);
+                                    ^", null){(core::int, core::int) → void};
       }
     }
   } =>#t30, block {
     final core::Set<core::int> #t31 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...a}, // Error.
                                      ^".{core::Iterable::iterator};
@@ -351,13 +351,13 @@
         final dynamic #t32 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
-          #t31.{core::Set::add}{Invariant}(#t33);
+          #t31.{core::Set::add}(#t33){(core::int) → core::bool};
         }
       }
     }
   } =>#t31, block {
     final core::Set<core::int> #t34 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...b}, // Error.
                                      ^".{core::Iterable::iterator};
@@ -365,13 +365,13 @@
         final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
-          #t34.{core::Set::add}{Invariant}(#t36);
+          #t34.{core::Set::add}(#t36){(core::int) → core::bool};
         }
       }
     }
   } =>#t34, block {
     final core::Set<core::int> #t37 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...c}, // Error.
                                      ^".{core::Iterable::iterator};
@@ -379,76 +379,76 @@
         final dynamic #t38 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
-          #t37.{core::Set::add}{Invariant}(#t39);
+          #t37.{core::Set::add}(#t39){(core::int) → core::bool};
         }
       }
     }
   } =>#t37, block {
     final core::Map<core::int, core::int> #t40 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
-      #t40.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:25:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t40.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:25:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...d}, // Error.
-                                     ^", null);
+                                     ^", null){(core::int, core::int) → void};
   } =>#t40, block {
     final core::Set<core::int> #t41 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t42 = a;
-    if(!#t42.{core::Object::==}(null)) {
+    if(!(#t42 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t42{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t43 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t44 = #t43 as{TypeError,ForNonNullableByDefault} core::int;
-          #t41.{core::Set::add}{Invariant}(#t44);
+          #t41.{core::Set::add}(#t44){(core::int) → core::bool};
         }
       }
     }
   } =>#t41, block {
     final core::Set<core::int> #t45 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t46 = b;
-    if(!#t46.{core::Object::==}(null)) {
+    if(!(#t46 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t46{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t47 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t48 = #t47 as{TypeError,ForNonNullableByDefault} core::int;
-          #t45.{core::Set::add}{Invariant}(#t48);
+          #t45.{core::Set::add}(#t48){(core::int) → core::bool};
         }
       }
     }
   } =>#t45, block {
     final core::Set<core::int> #t49 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t50 = c;
-    if(!#t50.{core::Object::==}(null)) {
+    if(!(#t50 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t50{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t51 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t52 = #t51 as{TypeError,ForNonNullableByDefault} core::int;
-          #t49.{core::Set::add}{Invariant}(#t52);
+          #t49.{core::Set::add}(#t52){(core::int) → core::bool};
         }
       }
     }
   } =>#t49, block {
     final core::Map<core::int, core::int> #t53 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t54 = d;
-    if(!#t54.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t54{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t54 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t54{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t55 = :sync-for-iterator.{core::Iterator::current};
-        #t53.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}, #t55.{core::MapEntry::value});
+        #t53.{core::Map::[]=}(#t55.{core::MapEntry::key}{core::int}, #t55.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
   } =>#t53, block {
     final core::Set<core::int> #t56 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t57 = a;
-      if(!#t57.{core::Object::==}(null)) {
+      if(!(#t57 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t57{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t58 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t59 = #t58 as{TypeError,ForNonNullableByDefault} core::int;
-            #t56.{core::Set::add}{Invariant}(#t59);
+            #t56.{core::Set::add}(#t59){(core::int) → core::bool};
           }
         }
       }
@@ -457,13 +457,13 @@
     final core::Set<core::int> #t60 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t61 = b;
-      if(!#t61.{core::Object::==}(null)) {
+      if(!(#t61 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t61{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t62 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t63 = #t62 as{TypeError,ForNonNullableByDefault} core::int;
-            #t60.{core::Set::add}{Invariant}(#t63);
+            #t60.{core::Set::add}(#t63){(core::int) → core::bool};
           }
         }
       }
@@ -472,13 +472,13 @@
     final core::Set<core::int> #t64 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t65 = c;
-      if(!#t65.{core::Object::==}(null)) {
+      if(!(#t65 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t65{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t66 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
-            #t64.{core::Set::add}{Invariant}(#t67);
+            #t64.{core::Set::add}(#t67){(core::int) → core::bool};
           }
         }
       }
@@ -487,11 +487,11 @@
     final core::Map<core::int, core::int> #t68 = <core::int, core::int>{};
     if(condition) {
       final core::Map<core::int, core::int>? #t69 = d;
-      if(!#t69.{core::Object::==}(null)) {
-        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t69{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+      if(!(#t69 == null)) {
+        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t69{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::int, core::int> #t70 = :sync-for-iterator.{core::Iterator::current};
-          #t68.{core::Map::[]=}{Invariant}(#t70.{core::MapEntry::key}, #t70.{core::MapEntry::value});
+          #t68.{core::Map::[]=}(#t70.{core::MapEntry::key}{core::int}, #t70.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
         }
       }
     }
@@ -503,13 +503,13 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Iterable<dynamic>? #t72 = a;
-          if(!#t72.{core::Object::==}(null)) {
+          if(!(#t72 == null)) {
             core::Iterator<dynamic> :sync-for-iterator = #t72{core::Iterable<dynamic>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final dynamic #t73 = :sync-for-iterator.{core::Iterator::current};
               {
                 final core::int #t74 = #t73 as{TypeError,ForNonNullableByDefault} core::int;
-                #t71.{core::Set::add}{Invariant}(#t74);
+                #t71.{core::Set::add}(#t74){(core::int) → core::bool};
               }
             }
           }
@@ -524,13 +524,13 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Iterable<dynamic>? #t76 = b;
-          if(!#t76.{core::Object::==}(null)) {
+          if(!(#t76 == null)) {
             core::Iterator<dynamic> :sync-for-iterator = #t76{core::Iterable<dynamic>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final dynamic #t77 = :sync-for-iterator.{core::Iterator::current};
               {
                 final core::int #t78 = #t77 as{TypeError,ForNonNullableByDefault} core::int;
-                #t75.{core::Set::add}{Invariant}(#t78);
+                #t75.{core::Set::add}(#t78){(core::int) → core::bool};
               }
             }
           }
@@ -545,13 +545,13 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Iterable<dynamic>? #t80 = c;
-          if(!#t80.{core::Object::==}(null)) {
+          if(!(#t80 == null)) {
             core::Iterator<dynamic> :sync-for-iterator = #t80{core::Iterable<dynamic>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final dynamic #t81 = :sync-for-iterator.{core::Iterator::current};
               {
                 final core::int #t82 = #t81 as{TypeError,ForNonNullableByDefault} core::int;
-                #t79.{core::Set::add}{Invariant}(#t82);
+                #t79.{core::Set::add}(#t82){(core::int) → core::bool};
               }
             }
           }
@@ -566,11 +566,11 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Map<core::int, core::int>? #t84 = d;
-          if(!#t84.{core::Object::==}(null)) {
-            core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t84{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+          if(!(#t84 == null)) {
+            core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t84{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final core::MapEntry<core::int, core::int> #t85 = :sync-for-iterator.{core::Iterator::current};
-              #t83.{core::Map::[]=}{Invariant}(#t85.{core::MapEntry::key}, #t85.{core::MapEntry::value});
+              #t83.{core::Map::[]=}(#t85.{core::MapEntry::key}{core::int}, #t85.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
             }
           }
         }
@@ -578,58 +578,58 @@
     }
   } =>#t83, block {
     final core::Set<core::int> #t86 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t87 = a;
-      if(!#t87.{core::Object::==}(null)) {
+      if(!(#t87 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t87{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t88 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t89 = #t88 as{TypeError,ForNonNullableByDefault} core::int;
-            #t86.{core::Set::add}{Invariant}(#t89);
+            #t86.{core::Set::add}(#t89){(core::int) → core::bool};
           }
         }
       }
     }
   } =>#t86, block {
     final core::Set<core::int> #t90 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t91 = b;
-      if(!#t91.{core::Object::==}(null)) {
+      if(!(#t91 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t91{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t92 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t93 = #t92 as{TypeError,ForNonNullableByDefault} core::int;
-            #t90.{core::Set::add}{Invariant}(#t93);
+            #t90.{core::Set::add}(#t93){(core::int) → core::bool};
           }
         }
       }
     }
   } =>#t90, block {
     final core::Set<core::int> #t94 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t95 = c;
-      if(!#t95.{core::Object::==}(null)) {
+      if(!(#t95 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t95{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t96 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t97 = #t96 as{TypeError,ForNonNullableByDefault} core::int;
-            #t94.{core::Set::add}{Invariant}(#t97);
+            #t94.{core::Set::add}(#t97){(core::int) → core::bool};
           }
         }
       }
     }
   } =>#t94, block {
     final core::Map<core::int, core::int> #t98 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t99 = d;
-      if(!#t99.{core::Object::==}(null)) {
-        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t99{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+      if(!(#t99 == null)) {
+        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t99{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::int, core::int> #t100 = :sync-for-iterator.{core::Iterator::current};
-          #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}, #t100.{core::MapEntry::value});
+          #t98.{core::Map::[]=}(#t100.{core::MapEntry::key}{core::int}, #t100.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
         }
       }
     }
@@ -646,7 +646,7 @@
         final dynamic #t102 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
-          #t101.{core::Set::add}{Invariant}(#t103);
+          #t101.{core::Set::add}(#t103){(core::int) → core::bool};
         }
       }
     }
@@ -660,7 +660,7 @@
         final dynamic #t105 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
-          #t104.{core::Set::add}{Invariant}(#t106);
+          #t104.{core::Set::add}(#t106){(core::int) → core::bool};
         }
       }
     }
@@ -674,7 +674,7 @@
         final dynamic #t108 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
-          #t107.{core::Set::add}{Invariant}(#t109);
+          #t107.{core::Set::add}(#t109){(core::int) → core::bool};
         }
       }
     }
@@ -684,9 +684,9 @@
     <int, int>{...x}, // Error.
                   ^": null}, block {
     final core::Set<core::int> #t110 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t110.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: Unexpected type 'W' of a spread.  Expected 'dynamic' or an Iterable.
+    #t110.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: Unexpected type 'W' of a spread.  Expected 'dynamic' or an Iterable.
     <int>{...w}, // Error.
-             ^");
+             ^"){(core::int) → core::bool};
   } =>#t110, block {
     final core::Set<core::int> #t111 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
@@ -697,7 +697,7 @@
         final dynamic #t112 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
-          #t111.{core::Set::add}{Invariant}(#t113);
+          #t111.{core::Set::add}(#t113){(core::int) → core::bool};
         }
       }
     }
@@ -711,7 +711,7 @@
         final dynamic #t115 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
-          #t114.{core::Set::add}{Invariant}(#t116);
+          #t114.{core::Set::add}(#t116){(core::int) → core::bool};
         }
       }
     }
@@ -725,16 +725,16 @@
         final dynamic #t118 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
-          #t117.{core::Set::add}{Invariant}(#t119);
+          #t117.{core::Set::add}(#t119){(core::int) → core::bool};
         }
       }
     }
   } =>#t117, block {
     final core::Map<core::int, core::int> #t120 = <core::int, core::int>{};
     if(condition)
-      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:59:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      #t120.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:59:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...w}, // Error.
-                       ^", null);
+                       ^", null){(core::int, core::int) → void};
   } =>#t120, block {
     final core::Set<core::int> #t121 = new col::_CompactLinkedHashSet::•<core::int>();
     {
@@ -749,7 +749,7 @@
             final dynamic #t122 = :sync-for-iterator.{core::Iterator::current};
             {
               final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
-              #t121.{core::Set::add}{Invariant}(#t123);
+              #t121.{core::Set::add}(#t123){(core::int) → core::bool};
             }
           }
         }
@@ -769,7 +769,7 @@
             final dynamic #t125 = :sync-for-iterator.{core::Iterator::current};
             {
               final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
-              #t124.{core::Set::add}{Invariant}(#t126);
+              #t124.{core::Set::add}(#t126){(core::int) → core::bool};
             }
           }
         }
@@ -789,7 +789,7 @@
             final dynamic #t128 = :sync-for-iterator.{core::Iterator::current};
             {
               final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
-              #t127.{core::Set::add}{Invariant}(#t129);
+              #t127.{core::Set::add}(#t129){(core::int) → core::bool};
             }
           }
         }
@@ -801,14 +801,14 @@
       core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic e = :sync-for-iterator.{core::Iterator::current};
-        #t130.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:63:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+        #t130.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:63:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...w}, // Error.
-                                    ^", null);
+                                    ^", null){(core::int, core::int) → void};
       }
     }
   } =>#t130, block {
     final core::Set<core::int> #t131 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...x}, // Error.
                                      ^".{core::Iterable::iterator};
@@ -816,13 +816,13 @@
         final dynamic #t132 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
-          #t131.{core::Set::add}{Invariant}(#t133);
+          #t131.{core::Set::add}(#t133){(core::int) → core::bool};
         }
       }
     }
   } =>#t131, block {
     final core::Set<core::int> #t134 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...y}, // Error.
                                      ^".{core::Iterable::iterator};
@@ -830,13 +830,13 @@
         final dynamic #t135 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
-          #t134.{core::Set::add}{Invariant}(#t136);
+          #t134.{core::Set::add}(#t136){(core::int) → core::bool};
         }
       }
     }
   } =>#t134, block {
     final core::Set<core::int> #t137 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...z}, // Error.
                                      ^".{core::Iterable::iterator};
@@ -844,76 +844,76 @@
         final dynamic #t138 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
-          #t137.{core::Set::add}{Invariant}(#t139);
+          #t137.{core::Set::add}(#t139){(core::int) → core::bool};
         }
       }
     }
   } =>#t137, block {
     final core::Map<core::int, core::int> #t140 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
-      #t140.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:67:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t140.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:67:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...w}, // Error.
-                                     ^", null);
+                                     ^", null){(core::int, core::int) → void};
   } =>#t140, block {
     final core::Set<core::int> #t141 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t142 = x;
-    if(!#t142.{core::Object::==}(null)) {
+    if(!(#t142 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t142{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t143 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t144 = #t143 as{TypeError,ForNonNullableByDefault} core::int;
-          #t141.{core::Set::add}{Invariant}(#t144);
+          #t141.{core::Set::add}(#t144){(core::int) → core::bool};
         }
       }
     }
   } =>#t141, block {
     final core::Set<core::int> #t145 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t146 = y;
-    if(!#t146.{core::Object::==}(null)) {
+    if(!(#t146 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t146{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t147 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t148 = #t147 as{TypeError,ForNonNullableByDefault} core::int;
-          #t145.{core::Set::add}{Invariant}(#t148);
+          #t145.{core::Set::add}(#t148){(core::int) → core::bool};
         }
       }
     }
   } =>#t145, block {
     final core::Set<core::int> #t149 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t150 = z;
-    if(!#t150.{core::Object::==}(null)) {
+    if(!(#t150 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t150{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t151 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t152 = #t151 as{TypeError,ForNonNullableByDefault} core::int;
-          #t149.{core::Set::add}{Invariant}(#t152);
+          #t149.{core::Set::add}(#t152){(core::int) → core::bool};
         }
       }
     }
   } =>#t149, block {
     final core::Map<core::int, core::int> #t153 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t154 = w;
-    if(!#t154.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t154{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t154 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t154{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t155 = :sync-for-iterator.{core::Iterator::current};
-        #t153.{core::Map::[]=}{Invariant}(#t155.{core::MapEntry::key}, #t155.{core::MapEntry::value});
+        #t153.{core::Map::[]=}(#t155.{core::MapEntry::key}{core::int}, #t155.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
   } =>#t153, block {
     final core::Set<core::int> #t156 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t157 = x;
-      if(!#t157.{core::Object::==}(null)) {
+      if(!(#t157 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t157{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t158 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t159 = #t158 as{TypeError,ForNonNullableByDefault} core::int;
-            #t156.{core::Set::add}{Invariant}(#t159);
+            #t156.{core::Set::add}(#t159){(core::int) → core::bool};
           }
         }
       }
@@ -922,13 +922,13 @@
     final core::Set<core::int> #t160 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t161 = y;
-      if(!#t161.{core::Object::==}(null)) {
+      if(!(#t161 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t161{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t162 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t163 = #t162 as{TypeError,ForNonNullableByDefault} core::int;
-            #t160.{core::Set::add}{Invariant}(#t163);
+            #t160.{core::Set::add}(#t163){(core::int) → core::bool};
           }
         }
       }
@@ -937,13 +937,13 @@
     final core::Set<core::int> #t164 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t165 = z;
-      if(!#t165.{core::Object::==}(null)) {
+      if(!(#t165 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t165{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t166 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t167 = #t166 as{TypeError,ForNonNullableByDefault} core::int;
-            #t164.{core::Set::add}{Invariant}(#t167);
+            #t164.{core::Set::add}(#t167){(core::int) → core::bool};
           }
         }
       }
@@ -952,11 +952,11 @@
     final core::Map<core::int, core::int> #t168 = <core::int, core::int>{};
     if(condition) {
       final core::Map<core::int, core::int>? #t169 = w;
-      if(!#t169.{core::Object::==}(null)) {
-        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t169{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+      if(!(#t169 == null)) {
+        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t169{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::int, core::int> #t170 = :sync-for-iterator.{core::Iterator::current};
-          #t168.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}, #t170.{core::MapEntry::value});
+          #t168.{core::Map::[]=}(#t170.{core::MapEntry::key}{core::int}, #t170.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
         }
       }
     }
@@ -968,13 +968,13 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Iterable<dynamic>? #t172 = x;
-          if(!#t172.{core::Object::==}(null)) {
+          if(!(#t172 == null)) {
             core::Iterator<dynamic> :sync-for-iterator = #t172{core::Iterable<dynamic>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final dynamic #t173 = :sync-for-iterator.{core::Iterator::current};
               {
                 final core::int #t174 = #t173 as{TypeError,ForNonNullableByDefault} core::int;
-                #t171.{core::Set::add}{Invariant}(#t174);
+                #t171.{core::Set::add}(#t174){(core::int) → core::bool};
               }
             }
           }
@@ -989,13 +989,13 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Iterable<dynamic>? #t176 = y;
-          if(!#t176.{core::Object::==}(null)) {
+          if(!(#t176 == null)) {
             core::Iterator<dynamic> :sync-for-iterator = #t176{core::Iterable<dynamic>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final dynamic #t177 = :sync-for-iterator.{core::Iterator::current};
               {
                 final core::int #t178 = #t177 as{TypeError,ForNonNullableByDefault} core::int;
-                #t175.{core::Set::add}{Invariant}(#t178);
+                #t175.{core::Set::add}(#t178){(core::int) → core::bool};
               }
             }
           }
@@ -1010,13 +1010,13 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Iterable<dynamic>? #t180 = z;
-          if(!#t180.{core::Object::==}(null)) {
+          if(!(#t180 == null)) {
             core::Iterator<dynamic> :sync-for-iterator = #t180{core::Iterable<dynamic>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final dynamic #t181 = :sync-for-iterator.{core::Iterator::current};
               {
                 final core::int #t182 = #t181 as{TypeError,ForNonNullableByDefault} core::int;
-                #t179.{core::Set::add}{Invariant}(#t182);
+                #t179.{core::Set::add}(#t182){(core::int) → core::bool};
               }
             }
           }
@@ -1031,11 +1031,11 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Map<core::int, core::int>? #t184 = w;
-          if(!#t184.{core::Object::==}(null)) {
-            core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t184{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+          if(!(#t184 == null)) {
+            core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t184{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final core::MapEntry<core::int, core::int> #t185 = :sync-for-iterator.{core::Iterator::current};
-              #t183.{core::Map::[]=}{Invariant}(#t185.{core::MapEntry::key}, #t185.{core::MapEntry::value});
+              #t183.{core::Map::[]=}(#t185.{core::MapEntry::key}{core::int}, #t185.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
             }
           }
         }
@@ -1043,58 +1043,58 @@
     }
   } =>#t183, block {
     final core::Set<core::int> #t186 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t187 = x;
-      if(!#t187.{core::Object::==}(null)) {
+      if(!(#t187 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t187{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t188 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t189 = #t188 as{TypeError,ForNonNullableByDefault} core::int;
-            #t186.{core::Set::add}{Invariant}(#t189);
+            #t186.{core::Set::add}(#t189){(core::int) → core::bool};
           }
         }
       }
     }
   } =>#t186, block {
     final core::Set<core::int> #t190 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t191 = y;
-      if(!#t191.{core::Object::==}(null)) {
+      if(!(#t191 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t191{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t192 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t193 = #t192 as{TypeError,ForNonNullableByDefault} core::int;
-            #t190.{core::Set::add}{Invariant}(#t193);
+            #t190.{core::Set::add}(#t193){(core::int) → core::bool};
           }
         }
       }
     }
   } =>#t190, block {
     final core::Set<core::int> #t194 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t195 = z;
-      if(!#t195.{core::Object::==}(null)) {
+      if(!(#t195 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t195{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t196 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t197 = #t196 as{TypeError,ForNonNullableByDefault} core::int;
-            #t194.{core::Set::add}{Invariant}(#t197);
+            #t194.{core::Set::add}(#t197){(core::int) → core::bool};
           }
         }
       }
     }
   } =>#t194, block {
     final core::Map<core::int, core::int> #t198 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t199 = w;
-      if(!#t199.{core::Object::==}(null)) {
-        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t199{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+      if(!(#t199 == null)) {
+        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t199{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::int, core::int> #t200 = :sync-for-iterator.{core::Iterator::current};
-          #t198.{core::Map::[]=}{Invariant}(#t200.{core::MapEntry::key}, #t200.{core::MapEntry::value});
+          #t198.{core::Map::[]=}(#t200.{core::MapEntry::key}{core::int}, #t200.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
         }
       }
     }
diff --git a/pkg/front_end/testcases/nnbd/issue43495.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43495.dart.weak.expect
index e5985d6..a6b4f4e 100644
--- a/pkg/front_end/testcases/nnbd/issue43495.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43495.dart.weak.expect
@@ -175,7 +175,7 @@
     {...a}, // Error.
         ^") {
       final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
-      #t1.{core::Set::add}{Invariant}(#t3);
+      #t1.{core::Set::add}(#t3){(core::int) → core::bool};
     }
   } =>#t1, block {
     final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
@@ -183,7 +183,7 @@
     {...b}, // Error.
         ^") {
       final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
-      #t4.{core::Set::add}{Invariant}(#t6);
+      #t4.{core::Set::add}(#t6){(core::int) → core::bool};
     }
   } =>#t4, block {
     final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
@@ -191,7 +191,7 @@
     {...c}, // Error.
         ^") {
       final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
-      #t7.{core::Set::add}{Invariant}(#t9);
+      #t7.{core::Set::add}(#t9){(core::int) → core::bool};
     }
   } =>#t7, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:11:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...d}, // Error.
@@ -200,10 +200,10 @@
     <int, int>{...a}, // Error.
                   ^": null}, block {
     final core::Set<core::int> #t10 = col::LinkedHashSet::•<core::int>();
-    #t10.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
+    #t10.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
     <int>{...d}, // Error.
-             ^");
+             ^"){(core::int) → core::bool};
   } =>#t10, block {
     final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
     if(condition)
@@ -211,7 +211,7 @@
     {if (condition) ...a}, // Error.
                        ^") {
         final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
-        #t11.{core::Set::add}{Invariant}(#t13);
+        #t11.{core::Set::add}(#t13){(core::int) → core::bool};
       }
   } =>#t11, block {
     final core::Set<core::int> #t14 = col::LinkedHashSet::•<core::int>();
@@ -220,7 +220,7 @@
     {if (condition) ...b}, // Error.
                        ^") {
         final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
-        #t14.{core::Set::add}{Invariant}(#t16);
+        #t14.{core::Set::add}(#t16){(core::int) → core::bool};
       }
   } =>#t14, block {
     final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
@@ -229,14 +229,14 @@
     {if (condition) ...c}, // Error.
                        ^") {
         final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
-        #t17.{core::Set::add}{Invariant}(#t19);
+        #t17.{core::Set::add}(#t19){(core::int) → core::bool};
       }
   } =>#t17, block {
     final core::Map<core::int, core::int> #t20 = <core::int, core::int>{};
     if(condition)
-      #t20.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:17:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      #t20.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:17:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...d}, // Error.
-                       ^", null);
+                       ^", null){(core::int, core::int) → void};
   } =>#t20, block {
     final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
@@ -244,7 +244,7 @@
     {for (dynamic e in iterable) ...a}, // Error.
                                     ^") {
         final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
-        #t21.{core::Set::add}{Invariant}(#t23);
+        #t21.{core::Set::add}(#t23){(core::int) → core::bool};
       }
   } =>#t21, block {
     final core::Set<core::int> #t24 = col::LinkedHashSet::•<core::int>();
@@ -253,7 +253,7 @@
     {for (dynamic e in iterable) ...b}, // Error.
                                     ^") {
         final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
-        #t24.{core::Set::add}{Invariant}(#t26);
+        #t24.{core::Set::add}(#t26){(core::int) → core::bool};
       }
   } =>#t24, block {
     final core::Set<core::int> #t27 = col::LinkedHashSet::•<core::int>();
@@ -262,190 +262,190 @@
     {for (dynamic e in iterable) ...c}, // Error.
                                     ^") {
         final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
-        #t27.{core::Set::add}{Invariant}(#t29);
+        #t27.{core::Set::add}(#t29){(core::int) → core::bool};
       }
   } =>#t27, block {
     final core::Map<core::int, core::int> #t30 = <core::int, core::int>{};
     for (dynamic e in iterable)
-      #t30.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:21:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      #t30.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:21:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...d}, // Error.
-                                    ^", null);
+                                    ^", null){(core::int, core::int) → void};
   } =>#t30, block {
     final core::Set<core::int> #t31 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
       for (final dynamic #t32 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...a}, // Error.
                                      ^") {
         final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
-        #t31.{core::Set::add}{Invariant}(#t33);
+        #t31.{core::Set::add}(#t33){(core::int) → core::bool};
       }
   } =>#t31, block {
     final core::Set<core::int> #t34 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
       for (final dynamic #t35 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...b}, // Error.
                                      ^") {
         final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
-        #t34.{core::Set::add}{Invariant}(#t36);
+        #t34.{core::Set::add}(#t36){(core::int) → core::bool};
       }
   } =>#t34, block {
     final core::Set<core::int> #t37 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
       for (final dynamic #t38 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...c}, // Error.
                                      ^") {
         final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
-        #t37.{core::Set::add}{Invariant}(#t39);
+        #t37.{core::Set::add}(#t39){(core::int) → core::bool};
       }
   } =>#t37, block {
     final core::Map<core::int, core::int> #t40 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
-      #t40.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:25:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t40.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:25:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...d}, // Error.
-                                     ^", null);
+                                     ^", null){(core::int, core::int) → void};
   } =>#t40, block {
     final core::Set<core::int> #t41 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t42 = a;
-    if(!#t42.{core::Object::==}(null))
+    if(!(#t42 == null))
       for (final dynamic #t43 in #t42{core::Iterable<dynamic>}) {
         final core::int #t44 = #t43 as{TypeError,ForNonNullableByDefault} core::int;
-        #t41.{core::Set::add}{Invariant}(#t44);
+        #t41.{core::Set::add}(#t44){(core::int) → core::bool};
       }
   } =>#t41, block {
     final core::Set<core::int> #t45 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t46 = b;
-    if(!#t46.{core::Object::==}(null))
+    if(!(#t46 == null))
       for (final dynamic #t47 in #t46{core::Iterable<dynamic>}) {
         final core::int #t48 = #t47 as{TypeError,ForNonNullableByDefault} core::int;
-        #t45.{core::Set::add}{Invariant}(#t48);
+        #t45.{core::Set::add}(#t48){(core::int) → core::bool};
       }
   } =>#t45, block {
     final core::Set<core::int> #t49 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t50 = c;
-    if(!#t50.{core::Object::==}(null))
+    if(!(#t50 == null))
       for (final dynamic #t51 in #t50{core::Iterable<dynamic>}) {
         final core::int #t52 = #t51 as{TypeError,ForNonNullableByDefault} core::int;
-        #t49.{core::Set::add}{Invariant}(#t52);
+        #t49.{core::Set::add}(#t52){(core::int) → core::bool};
       }
   } =>#t49, block {
     final core::Map<core::int, core::int> #t53 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t54 = d;
-    if(!#t54.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t53.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}, #t55.{core::MapEntry::value});
+    if(!(#t54 == null))
+      for (final core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t53.{core::Map::[]=}(#t55.{core::MapEntry::key}{core::int}, #t55.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t53, block {
     final core::Set<core::int> #t56 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t57 = a;
-      if(!#t57.{core::Object::==}(null))
+      if(!(#t57 == null))
         for (final dynamic #t58 in #t57{core::Iterable<dynamic>}) {
           final core::int #t59 = #t58 as{TypeError,ForNonNullableByDefault} core::int;
-          #t56.{core::Set::add}{Invariant}(#t59);
+          #t56.{core::Set::add}(#t59){(core::int) → core::bool};
         }
     }
   } =>#t56, block {
     final core::Set<core::int> #t60 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t61 = b;
-      if(!#t61.{core::Object::==}(null))
+      if(!(#t61 == null))
         for (final dynamic #t62 in #t61{core::Iterable<dynamic>}) {
           final core::int #t63 = #t62 as{TypeError,ForNonNullableByDefault} core::int;
-          #t60.{core::Set::add}{Invariant}(#t63);
+          #t60.{core::Set::add}(#t63){(core::int) → core::bool};
         }
     }
   } =>#t60, block {
     final core::Set<core::int> #t64 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t65 = c;
-      if(!#t65.{core::Object::==}(null))
+      if(!(#t65 == null))
         for (final dynamic #t66 in #t65{core::Iterable<dynamic>}) {
           final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
-          #t64.{core::Set::add}{Invariant}(#t67);
+          #t64.{core::Set::add}(#t67){(core::int) → core::bool};
         }
     }
   } =>#t64, block {
     final core::Map<core::int, core::int> #t68 = <core::int, core::int>{};
     if(condition) {
       final core::Map<core::int, core::int>? #t69 = d;
-      if(!#t69.{core::Object::==}(null))
-        for (final core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries})
-          #t68.{core::Map::[]=}{Invariant}(#t70.{core::MapEntry::key}, #t70.{core::MapEntry::value});
+      if(!(#t69 == null))
+        for (final core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t68.{core::Map::[]=}(#t70.{core::MapEntry::key}{core::int}, #t70.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t68, block {
     final core::Set<core::int> #t71 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t72 = a;
-      if(!#t72.{core::Object::==}(null))
+      if(!(#t72 == null))
         for (final dynamic #t73 in #t72{core::Iterable<dynamic>}) {
           final core::int #t74 = #t73 as{TypeError,ForNonNullableByDefault} core::int;
-          #t71.{core::Set::add}{Invariant}(#t74);
+          #t71.{core::Set::add}(#t74){(core::int) → core::bool};
         }
     }
   } =>#t71, block {
     final core::Set<core::int> #t75 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t76 = b;
-      if(!#t76.{core::Object::==}(null))
+      if(!(#t76 == null))
         for (final dynamic #t77 in #t76{core::Iterable<dynamic>}) {
           final core::int #t78 = #t77 as{TypeError,ForNonNullableByDefault} core::int;
-          #t75.{core::Set::add}{Invariant}(#t78);
+          #t75.{core::Set::add}(#t78){(core::int) → core::bool};
         }
     }
   } =>#t75, block {
     final core::Set<core::int> #t79 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t80 = c;
-      if(!#t80.{core::Object::==}(null))
+      if(!(#t80 == null))
         for (final dynamic #t81 in #t80{core::Iterable<dynamic>}) {
           final core::int #t82 = #t81 as{TypeError,ForNonNullableByDefault} core::int;
-          #t79.{core::Set::add}{Invariant}(#t82);
+          #t79.{core::Set::add}(#t82){(core::int) → core::bool};
         }
     }
   } =>#t79, block {
     final core::Map<core::int, core::int> #t83 = <core::int, core::int>{};
     for (dynamic e in iterable) {
       final core::Map<core::int, core::int>? #t84 = d;
-      if(!#t84.{core::Object::==}(null))
-        for (final core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries})
-          #t83.{core::Map::[]=}{Invariant}(#t85.{core::MapEntry::key}, #t85.{core::MapEntry::value});
+      if(!(#t84 == null))
+        for (final core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t83.{core::Map::[]=}(#t85.{core::MapEntry::key}{core::int}, #t85.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t83, block {
     final core::Set<core::int> #t86 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t87 = a;
-      if(!#t87.{core::Object::==}(null))
+      if(!(#t87 == null))
         for (final dynamic #t88 in #t87{core::Iterable<dynamic>}) {
           final core::int #t89 = #t88 as{TypeError,ForNonNullableByDefault} core::int;
-          #t86.{core::Set::add}{Invariant}(#t89);
+          #t86.{core::Set::add}(#t89){(core::int) → core::bool};
         }
     }
   } =>#t86, block {
     final core::Set<core::int> #t90 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t91 = b;
-      if(!#t91.{core::Object::==}(null))
+      if(!(#t91 == null))
         for (final dynamic #t92 in #t91{core::Iterable<dynamic>}) {
           final core::int #t93 = #t92 as{TypeError,ForNonNullableByDefault} core::int;
-          #t90.{core::Set::add}{Invariant}(#t93);
+          #t90.{core::Set::add}(#t93){(core::int) → core::bool};
         }
     }
   } =>#t90, block {
     final core::Set<core::int> #t94 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t95 = c;
-      if(!#t95.{core::Object::==}(null))
+      if(!(#t95 == null))
         for (final dynamic #t96 in #t95{core::Iterable<dynamic>}) {
           final core::int #t97 = #t96 as{TypeError,ForNonNullableByDefault} core::int;
-          #t94.{core::Set::add}{Invariant}(#t97);
+          #t94.{core::Set::add}(#t97){(core::int) → core::bool};
         }
     }
   } =>#t94, block {
     final core::Map<core::int, core::int> #t98 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t99 = d;
-      if(!#t99.{core::Object::==}(null))
-        for (final core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries})
-          #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}, #t100.{core::MapEntry::value});
+      if(!(#t99 == null))
+        for (final core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t98.{core::Map::[]=}(#t100.{core::MapEntry::key}{core::int}, #t100.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t98];
 }
@@ -456,7 +456,7 @@
     {...x}, // Error.
         ^") {
       final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
-      #t101.{core::Set::add}{Invariant}(#t103);
+      #t101.{core::Set::add}(#t103){(core::int) → core::bool};
     }
   } =>#t101, block {
     final core::Set<core::int> #t104 = col::LinkedHashSet::•<core::int>();
@@ -464,7 +464,7 @@
     {...y}, // Error.
         ^") {
       final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
-      #t104.{core::Set::add}{Invariant}(#t106);
+      #t104.{core::Set::add}(#t106){(core::int) → core::bool};
     }
   } =>#t104, block {
     final core::Set<core::int> #t107 = col::LinkedHashSet::•<core::int>();
@@ -472,7 +472,7 @@
     {...z}, // Error.
         ^") {
       final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
-      #t107.{core::Set::add}{Invariant}(#t109);
+      #t107.{core::Set::add}(#t109){(core::int) → core::bool};
     }
   } =>#t107, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:53:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...w}, // Error.
@@ -480,9 +480,9 @@
     <int, int>{...x}, // Error.
                   ^": null}, block {
     final core::Set<core::int> #t110 = col::LinkedHashSet::•<core::int>();
-    #t110.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: Unexpected type 'W' of a spread.  Expected 'dynamic' or an Iterable.
+    #t110.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: Unexpected type 'W' of a spread.  Expected 'dynamic' or an Iterable.
     <int>{...w}, // Error.
-             ^");
+             ^"){(core::int) → core::bool};
   } =>#t110, block {
     final core::Set<core::int> #t111 = col::LinkedHashSet::•<core::int>();
     if(condition)
@@ -490,7 +490,7 @@
     {if (condition) ...x}, // Error.
                        ^") {
         final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
-        #t111.{core::Set::add}{Invariant}(#t113);
+        #t111.{core::Set::add}(#t113){(core::int) → core::bool};
       }
   } =>#t111, block {
     final core::Set<core::int> #t114 = col::LinkedHashSet::•<core::int>();
@@ -499,7 +499,7 @@
     {if (condition) ...y}, // Error.
                        ^") {
         final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
-        #t114.{core::Set::add}{Invariant}(#t116);
+        #t114.{core::Set::add}(#t116){(core::int) → core::bool};
       }
   } =>#t114, block {
     final core::Set<core::int> #t117 = col::LinkedHashSet::•<core::int>();
@@ -508,14 +508,14 @@
     {if (condition) ...z}, // Error.
                        ^") {
         final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
-        #t117.{core::Set::add}{Invariant}(#t119);
+        #t117.{core::Set::add}(#t119){(core::int) → core::bool};
       }
   } =>#t117, block {
     final core::Map<core::int, core::int> #t120 = <core::int, core::int>{};
     if(condition)
-      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:59:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      #t120.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:59:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...w}, // Error.
-                       ^", null);
+                       ^", null){(core::int, core::int) → void};
   } =>#t120, block {
     final core::Set<core::int> #t121 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
@@ -523,7 +523,7 @@
     {for (dynamic e in iterable) ...x}, // Error.
                                     ^") {
         final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
-        #t121.{core::Set::add}{Invariant}(#t123);
+        #t121.{core::Set::add}(#t123){(core::int) → core::bool};
       }
   } =>#t121, block {
     final core::Set<core::int> #t124 = col::LinkedHashSet::•<core::int>();
@@ -532,7 +532,7 @@
     {for (dynamic e in iterable) ...y}, // Error.
                                     ^") {
         final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
-        #t124.{core::Set::add}{Invariant}(#t126);
+        #t124.{core::Set::add}(#t126){(core::int) → core::bool};
       }
   } =>#t124, block {
     final core::Set<core::int> #t127 = col::LinkedHashSet::•<core::int>();
@@ -541,190 +541,190 @@
     {for (dynamic e in iterable) ...z}, // Error.
                                     ^") {
         final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
-        #t127.{core::Set::add}{Invariant}(#t129);
+        #t127.{core::Set::add}(#t129){(core::int) → core::bool};
       }
   } =>#t127, block {
     final core::Map<core::int, core::int> #t130 = <core::int, core::int>{};
     for (dynamic e in iterable)
-      #t130.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:63:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      #t130.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:63:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...w}, // Error.
-                                    ^", null);
+                                    ^", null){(core::int, core::int) → void};
   } =>#t130, block {
     final core::Set<core::int> #t131 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
       for (final dynamic #t132 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...x}, // Error.
                                      ^") {
         final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
-        #t131.{core::Set::add}{Invariant}(#t133);
+        #t131.{core::Set::add}(#t133){(core::int) → core::bool};
       }
   } =>#t131, block {
     final core::Set<core::int> #t134 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
       for (final dynamic #t135 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...y}, // Error.
                                      ^") {
         final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
-        #t134.{core::Set::add}{Invariant}(#t136);
+        #t134.{core::Set::add}(#t136){(core::int) → core::bool};
       }
   } =>#t134, block {
     final core::Set<core::int> #t137 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
       for (final dynamic #t138 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...z}, // Error.
                                      ^") {
         final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
-        #t137.{core::Set::add}{Invariant}(#t139);
+        #t137.{core::Set::add}(#t139){(core::int) → core::bool};
       }
   } =>#t137, block {
     final core::Map<core::int, core::int> #t140 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
-      #t140.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:67:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t140.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:67:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...w}, // Error.
-                                     ^", null);
+                                     ^", null){(core::int, core::int) → void};
   } =>#t140, block {
     final core::Set<core::int> #t141 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t142 = x;
-    if(!#t142.{core::Object::==}(null))
+    if(!(#t142 == null))
       for (final dynamic #t143 in #t142{core::Iterable<dynamic>}) {
         final core::int #t144 = #t143 as{TypeError,ForNonNullableByDefault} core::int;
-        #t141.{core::Set::add}{Invariant}(#t144);
+        #t141.{core::Set::add}(#t144){(core::int) → core::bool};
       }
   } =>#t141, block {
     final core::Set<core::int> #t145 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t146 = y;
-    if(!#t146.{core::Object::==}(null))
+    if(!(#t146 == null))
       for (final dynamic #t147 in #t146{core::Iterable<dynamic>}) {
         final core::int #t148 = #t147 as{TypeError,ForNonNullableByDefault} core::int;
-        #t145.{core::Set::add}{Invariant}(#t148);
+        #t145.{core::Set::add}(#t148){(core::int) → core::bool};
       }
   } =>#t145, block {
     final core::Set<core::int> #t149 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t150 = z;
-    if(!#t150.{core::Object::==}(null))
+    if(!(#t150 == null))
       for (final dynamic #t151 in #t150{core::Iterable<dynamic>}) {
         final core::int #t152 = #t151 as{TypeError,ForNonNullableByDefault} core::int;
-        #t149.{core::Set::add}{Invariant}(#t152);
+        #t149.{core::Set::add}(#t152){(core::int) → core::bool};
       }
   } =>#t149, block {
     final core::Map<core::int, core::int> #t153 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t154 = w;
-    if(!#t154.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t153.{core::Map::[]=}{Invariant}(#t155.{core::MapEntry::key}, #t155.{core::MapEntry::value});
+    if(!(#t154 == null))
+      for (final core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t153.{core::Map::[]=}(#t155.{core::MapEntry::key}{core::int}, #t155.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t153, block {
     final core::Set<core::int> #t156 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t157 = x;
-      if(!#t157.{core::Object::==}(null))
+      if(!(#t157 == null))
         for (final dynamic #t158 in #t157{core::Iterable<dynamic>}) {
           final core::int #t159 = #t158 as{TypeError,ForNonNullableByDefault} core::int;
-          #t156.{core::Set::add}{Invariant}(#t159);
+          #t156.{core::Set::add}(#t159){(core::int) → core::bool};
         }
     }
   } =>#t156, block {
     final core::Set<core::int> #t160 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t161 = y;
-      if(!#t161.{core::Object::==}(null))
+      if(!(#t161 == null))
         for (final dynamic #t162 in #t161{core::Iterable<dynamic>}) {
           final core::int #t163 = #t162 as{TypeError,ForNonNullableByDefault} core::int;
-          #t160.{core::Set::add}{Invariant}(#t163);
+          #t160.{core::Set::add}(#t163){(core::int) → core::bool};
         }
     }
   } =>#t160, block {
     final core::Set<core::int> #t164 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t165 = z;
-      if(!#t165.{core::Object::==}(null))
+      if(!(#t165 == null))
         for (final dynamic #t166 in #t165{core::Iterable<dynamic>}) {
           final core::int #t167 = #t166 as{TypeError,ForNonNullableByDefault} core::int;
-          #t164.{core::Set::add}{Invariant}(#t167);
+          #t164.{core::Set::add}(#t167){(core::int) → core::bool};
         }
     }
   } =>#t164, block {
     final core::Map<core::int, core::int> #t168 = <core::int, core::int>{};
     if(condition) {
       final core::Map<core::int, core::int>? #t169 = w;
-      if(!#t169.{core::Object::==}(null))
-        for (final core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries})
-          #t168.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}, #t170.{core::MapEntry::value});
+      if(!(#t169 == null))
+        for (final core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t168.{core::Map::[]=}(#t170.{core::MapEntry::key}{core::int}, #t170.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t168, block {
     final core::Set<core::int> #t171 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t172 = x;
-      if(!#t172.{core::Object::==}(null))
+      if(!(#t172 == null))
         for (final dynamic #t173 in #t172{core::Iterable<dynamic>}) {
           final core::int #t174 = #t173 as{TypeError,ForNonNullableByDefault} core::int;
-          #t171.{core::Set::add}{Invariant}(#t174);
+          #t171.{core::Set::add}(#t174){(core::int) → core::bool};
         }
     }
   } =>#t171, block {
     final core::Set<core::int> #t175 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t176 = y;
-      if(!#t176.{core::Object::==}(null))
+      if(!(#t176 == null))
         for (final dynamic #t177 in #t176{core::Iterable<dynamic>}) {
           final core::int #t178 = #t177 as{TypeError,ForNonNullableByDefault} core::int;
-          #t175.{core::Set::add}{Invariant}(#t178);
+          #t175.{core::Set::add}(#t178){(core::int) → core::bool};
         }
     }
   } =>#t175, block {
     final core::Set<core::int> #t179 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t180 = z;
-      if(!#t180.{core::Object::==}(null))
+      if(!(#t180 == null))
         for (final dynamic #t181 in #t180{core::Iterable<dynamic>}) {
           final core::int #t182 = #t181 as{TypeError,ForNonNullableByDefault} core::int;
-          #t179.{core::Set::add}{Invariant}(#t182);
+          #t179.{core::Set::add}(#t182){(core::int) → core::bool};
         }
     }
   } =>#t179, block {
     final core::Map<core::int, core::int> #t183 = <core::int, core::int>{};
     for (dynamic e in iterable) {
       final core::Map<core::int, core::int>? #t184 = w;
-      if(!#t184.{core::Object::==}(null))
-        for (final core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries})
-          #t183.{core::Map::[]=}{Invariant}(#t185.{core::MapEntry::key}, #t185.{core::MapEntry::value});
+      if(!(#t184 == null))
+        for (final core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t183.{core::Map::[]=}(#t185.{core::MapEntry::key}{core::int}, #t185.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t183, block {
     final core::Set<core::int> #t186 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t187 = x;
-      if(!#t187.{core::Object::==}(null))
+      if(!(#t187 == null))
         for (final dynamic #t188 in #t187{core::Iterable<dynamic>}) {
           final core::int #t189 = #t188 as{TypeError,ForNonNullableByDefault} core::int;
-          #t186.{core::Set::add}{Invariant}(#t189);
+          #t186.{core::Set::add}(#t189){(core::int) → core::bool};
         }
     }
   } =>#t186, block {
     final core::Set<core::int> #t190 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t191 = y;
-      if(!#t191.{core::Object::==}(null))
+      if(!(#t191 == null))
         for (final dynamic #t192 in #t191{core::Iterable<dynamic>}) {
           final core::int #t193 = #t192 as{TypeError,ForNonNullableByDefault} core::int;
-          #t190.{core::Set::add}{Invariant}(#t193);
+          #t190.{core::Set::add}(#t193){(core::int) → core::bool};
         }
     }
   } =>#t190, block {
     final core::Set<core::int> #t194 = col::LinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t195 = z;
-      if(!#t195.{core::Object::==}(null))
+      if(!(#t195 == null))
         for (final dynamic #t196 in #t195{core::Iterable<dynamic>}) {
           final core::int #t197 = #t196 as{TypeError,ForNonNullableByDefault} core::int;
-          #t194.{core::Set::add}{Invariant}(#t197);
+          #t194.{core::Set::add}(#t197){(core::int) → core::bool};
         }
     }
   } =>#t194, block {
     final core::Map<core::int, core::int> #t198 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t199 = w;
-      if(!#t199.{core::Object::==}(null))
-        for (final core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries})
-          #t198.{core::Map::[]=}{Invariant}(#t200.{core::MapEntry::key}, #t200.{core::MapEntry::value});
+      if(!(#t199 == null))
+        for (final core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t198.{core::Map::[]=}(#t200.{core::MapEntry::key}{core::int}, #t200.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t198];
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43495.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43495.dart.weak.transformed.expect
index 7d89db1..ccf9bc0 100644
--- a/pkg/front_end/testcases/nnbd/issue43495.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43495.dart.weak.transformed.expect
@@ -179,7 +179,7 @@
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
-          #t1.{core::Set::add}{Invariant}(#t3);
+          #t1.{core::Set::add}(#t3){(core::int) → core::bool};
         }
       }
     }
@@ -193,7 +193,7 @@
         final dynamic #t5 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
-          #t4.{core::Set::add}{Invariant}(#t6);
+          #t4.{core::Set::add}(#t6){(core::int) → core::bool};
         }
       }
     }
@@ -207,7 +207,7 @@
         final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
-          #t7.{core::Set::add}{Invariant}(#t9);
+          #t7.{core::Set::add}(#t9){(core::int) → core::bool};
         }
       }
     }
@@ -218,10 +218,10 @@
     <int, int>{...a}, // Error.
                   ^": null}, block {
     final core::Set<core::int> #t10 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t10.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
+    #t10.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
     <int>{...d}, // Error.
-             ^");
+             ^"){(core::int) → core::bool};
   } =>#t10, block {
     final core::Set<core::int> #t11 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
@@ -232,7 +232,7 @@
         final dynamic #t12 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
-          #t11.{core::Set::add}{Invariant}(#t13);
+          #t11.{core::Set::add}(#t13){(core::int) → core::bool};
         }
       }
     }
@@ -246,7 +246,7 @@
         final dynamic #t15 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
-          #t14.{core::Set::add}{Invariant}(#t16);
+          #t14.{core::Set::add}(#t16){(core::int) → core::bool};
         }
       }
     }
@@ -260,16 +260,16 @@
         final dynamic #t18 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
-          #t17.{core::Set::add}{Invariant}(#t19);
+          #t17.{core::Set::add}(#t19){(core::int) → core::bool};
         }
       }
     }
   } =>#t17, block {
     final core::Map<core::int, core::int> #t20 = <core::int, core::int>{};
     if(condition)
-      #t20.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:17:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      #t20.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:17:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...d}, // Error.
-                       ^", null);
+                       ^", null){(core::int, core::int) → void};
   } =>#t20, block {
     final core::Set<core::int> #t21 = new col::_CompactLinkedHashSet::•<core::int>();
     {
@@ -284,7 +284,7 @@
             final dynamic #t22 = :sync-for-iterator.{core::Iterator::current};
             {
               final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
-              #t21.{core::Set::add}{Invariant}(#t23);
+              #t21.{core::Set::add}(#t23){(core::int) → core::bool};
             }
           }
         }
@@ -304,7 +304,7 @@
             final dynamic #t25 = :sync-for-iterator.{core::Iterator::current};
             {
               final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
-              #t24.{core::Set::add}{Invariant}(#t26);
+              #t24.{core::Set::add}(#t26){(core::int) → core::bool};
             }
           }
         }
@@ -324,7 +324,7 @@
             final dynamic #t28 = :sync-for-iterator.{core::Iterator::current};
             {
               final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
-              #t27.{core::Set::add}{Invariant}(#t29);
+              #t27.{core::Set::add}(#t29){(core::int) → core::bool};
             }
           }
         }
@@ -336,14 +336,14 @@
       core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic e = :sync-for-iterator.{core::Iterator::current};
-        #t30.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:21:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+        #t30.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:21:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...d}, // Error.
-                                    ^", null);
+                                    ^", null){(core::int, core::int) → void};
       }
     }
   } =>#t30, block {
     final core::Set<core::int> #t31 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...a}, // Error.
                                      ^".{core::Iterable::iterator};
@@ -351,13 +351,13 @@
         final dynamic #t32 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
-          #t31.{core::Set::add}{Invariant}(#t33);
+          #t31.{core::Set::add}(#t33){(core::int) → core::bool};
         }
       }
     }
   } =>#t31, block {
     final core::Set<core::int> #t34 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...b}, // Error.
                                      ^".{core::Iterable::iterator};
@@ -365,13 +365,13 @@
         final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
-          #t34.{core::Set::add}{Invariant}(#t36);
+          #t34.{core::Set::add}(#t36){(core::int) → core::bool};
         }
       }
     }
   } =>#t34, block {
     final core::Set<core::int> #t37 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...c}, // Error.
                                      ^".{core::Iterable::iterator};
@@ -379,76 +379,76 @@
         final dynamic #t38 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
-          #t37.{core::Set::add}{Invariant}(#t39);
+          #t37.{core::Set::add}(#t39){(core::int) → core::bool};
         }
       }
     }
   } =>#t37, block {
     final core::Map<core::int, core::int> #t40 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
-      #t40.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:25:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t40.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:25:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...d}, // Error.
-                                     ^", null);
+                                     ^", null){(core::int, core::int) → void};
   } =>#t40, block {
     final core::Set<core::int> #t41 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t42 = a;
-    if(!#t42.{core::Object::==}(null)) {
+    if(!(#t42 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t42{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t43 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t44 = #t43 as{TypeError,ForNonNullableByDefault} core::int;
-          #t41.{core::Set::add}{Invariant}(#t44);
+          #t41.{core::Set::add}(#t44){(core::int) → core::bool};
         }
       }
     }
   } =>#t41, block {
     final core::Set<core::int> #t45 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t46 = b;
-    if(!#t46.{core::Object::==}(null)) {
+    if(!(#t46 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t46{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t47 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t48 = #t47 as{TypeError,ForNonNullableByDefault} core::int;
-          #t45.{core::Set::add}{Invariant}(#t48);
+          #t45.{core::Set::add}(#t48){(core::int) → core::bool};
         }
       }
     }
   } =>#t45, block {
     final core::Set<core::int> #t49 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t50 = c;
-    if(!#t50.{core::Object::==}(null)) {
+    if(!(#t50 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t50{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t51 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t52 = #t51 as{TypeError,ForNonNullableByDefault} core::int;
-          #t49.{core::Set::add}{Invariant}(#t52);
+          #t49.{core::Set::add}(#t52){(core::int) → core::bool};
         }
       }
     }
   } =>#t49, block {
     final core::Map<core::int, core::int> #t53 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t54 = d;
-    if(!#t54.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t54{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t54 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t54{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t55 = :sync-for-iterator.{core::Iterator::current};
-        #t53.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}, #t55.{core::MapEntry::value});
+        #t53.{core::Map::[]=}(#t55.{core::MapEntry::key}{core::int}, #t55.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
   } =>#t53, block {
     final core::Set<core::int> #t56 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t57 = a;
-      if(!#t57.{core::Object::==}(null)) {
+      if(!(#t57 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t57{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t58 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t59 = #t58 as{TypeError,ForNonNullableByDefault} core::int;
-            #t56.{core::Set::add}{Invariant}(#t59);
+            #t56.{core::Set::add}(#t59){(core::int) → core::bool};
           }
         }
       }
@@ -457,13 +457,13 @@
     final core::Set<core::int> #t60 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t61 = b;
-      if(!#t61.{core::Object::==}(null)) {
+      if(!(#t61 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t61{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t62 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t63 = #t62 as{TypeError,ForNonNullableByDefault} core::int;
-            #t60.{core::Set::add}{Invariant}(#t63);
+            #t60.{core::Set::add}(#t63){(core::int) → core::bool};
           }
         }
       }
@@ -472,13 +472,13 @@
     final core::Set<core::int> #t64 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t65 = c;
-      if(!#t65.{core::Object::==}(null)) {
+      if(!(#t65 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t65{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t66 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
-            #t64.{core::Set::add}{Invariant}(#t67);
+            #t64.{core::Set::add}(#t67){(core::int) → core::bool};
           }
         }
       }
@@ -487,11 +487,11 @@
     final core::Map<core::int, core::int> #t68 = <core::int, core::int>{};
     if(condition) {
       final core::Map<core::int, core::int>? #t69 = d;
-      if(!#t69.{core::Object::==}(null)) {
-        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t69{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+      if(!(#t69 == null)) {
+        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t69{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::int, core::int> #t70 = :sync-for-iterator.{core::Iterator::current};
-          #t68.{core::Map::[]=}{Invariant}(#t70.{core::MapEntry::key}, #t70.{core::MapEntry::value});
+          #t68.{core::Map::[]=}(#t70.{core::MapEntry::key}{core::int}, #t70.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
         }
       }
     }
@@ -503,13 +503,13 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Iterable<dynamic>? #t72 = a;
-          if(!#t72.{core::Object::==}(null)) {
+          if(!(#t72 == null)) {
             core::Iterator<dynamic> :sync-for-iterator = #t72{core::Iterable<dynamic>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final dynamic #t73 = :sync-for-iterator.{core::Iterator::current};
               {
                 final core::int #t74 = #t73 as{TypeError,ForNonNullableByDefault} core::int;
-                #t71.{core::Set::add}{Invariant}(#t74);
+                #t71.{core::Set::add}(#t74){(core::int) → core::bool};
               }
             }
           }
@@ -524,13 +524,13 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Iterable<dynamic>? #t76 = b;
-          if(!#t76.{core::Object::==}(null)) {
+          if(!(#t76 == null)) {
             core::Iterator<dynamic> :sync-for-iterator = #t76{core::Iterable<dynamic>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final dynamic #t77 = :sync-for-iterator.{core::Iterator::current};
               {
                 final core::int #t78 = #t77 as{TypeError,ForNonNullableByDefault} core::int;
-                #t75.{core::Set::add}{Invariant}(#t78);
+                #t75.{core::Set::add}(#t78){(core::int) → core::bool};
               }
             }
           }
@@ -545,13 +545,13 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Iterable<dynamic>? #t80 = c;
-          if(!#t80.{core::Object::==}(null)) {
+          if(!(#t80 == null)) {
             core::Iterator<dynamic> :sync-for-iterator = #t80{core::Iterable<dynamic>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final dynamic #t81 = :sync-for-iterator.{core::Iterator::current};
               {
                 final core::int #t82 = #t81 as{TypeError,ForNonNullableByDefault} core::int;
-                #t79.{core::Set::add}{Invariant}(#t82);
+                #t79.{core::Set::add}(#t82){(core::int) → core::bool};
               }
             }
           }
@@ -566,11 +566,11 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Map<core::int, core::int>? #t84 = d;
-          if(!#t84.{core::Object::==}(null)) {
-            core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t84{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+          if(!(#t84 == null)) {
+            core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t84{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final core::MapEntry<core::int, core::int> #t85 = :sync-for-iterator.{core::Iterator::current};
-              #t83.{core::Map::[]=}{Invariant}(#t85.{core::MapEntry::key}, #t85.{core::MapEntry::value});
+              #t83.{core::Map::[]=}(#t85.{core::MapEntry::key}{core::int}, #t85.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
             }
           }
         }
@@ -578,58 +578,58 @@
     }
   } =>#t83, block {
     final core::Set<core::int> #t86 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t87 = a;
-      if(!#t87.{core::Object::==}(null)) {
+      if(!(#t87 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t87{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t88 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t89 = #t88 as{TypeError,ForNonNullableByDefault} core::int;
-            #t86.{core::Set::add}{Invariant}(#t89);
+            #t86.{core::Set::add}(#t89){(core::int) → core::bool};
           }
         }
       }
     }
   } =>#t86, block {
     final core::Set<core::int> #t90 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t91 = b;
-      if(!#t91.{core::Object::==}(null)) {
+      if(!(#t91 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t91{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t92 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t93 = #t92 as{TypeError,ForNonNullableByDefault} core::int;
-            #t90.{core::Set::add}{Invariant}(#t93);
+            #t90.{core::Set::add}(#t93){(core::int) → core::bool};
           }
         }
       }
     }
   } =>#t90, block {
     final core::Set<core::int> #t94 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t95 = c;
-      if(!#t95.{core::Object::==}(null)) {
+      if(!(#t95 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t95{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t96 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t97 = #t96 as{TypeError,ForNonNullableByDefault} core::int;
-            #t94.{core::Set::add}{Invariant}(#t97);
+            #t94.{core::Set::add}(#t97){(core::int) → core::bool};
           }
         }
       }
     }
   } =>#t94, block {
     final core::Map<core::int, core::int> #t98 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t99 = d;
-      if(!#t99.{core::Object::==}(null)) {
-        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t99{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+      if(!(#t99 == null)) {
+        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t99{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::int, core::int> #t100 = :sync-for-iterator.{core::Iterator::current};
-          #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}, #t100.{core::MapEntry::value});
+          #t98.{core::Map::[]=}(#t100.{core::MapEntry::key}{core::int}, #t100.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
         }
       }
     }
@@ -646,7 +646,7 @@
         final dynamic #t102 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
-          #t101.{core::Set::add}{Invariant}(#t103);
+          #t101.{core::Set::add}(#t103){(core::int) → core::bool};
         }
       }
     }
@@ -660,7 +660,7 @@
         final dynamic #t105 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
-          #t104.{core::Set::add}{Invariant}(#t106);
+          #t104.{core::Set::add}(#t106){(core::int) → core::bool};
         }
       }
     }
@@ -674,7 +674,7 @@
         final dynamic #t108 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
-          #t107.{core::Set::add}{Invariant}(#t109);
+          #t107.{core::Set::add}(#t109){(core::int) → core::bool};
         }
       }
     }
@@ -684,9 +684,9 @@
     <int, int>{...x}, // Error.
                   ^": null}, block {
     final core::Set<core::int> #t110 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t110.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: Unexpected type 'W' of a spread.  Expected 'dynamic' or an Iterable.
+    #t110.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: Unexpected type 'W' of a spread.  Expected 'dynamic' or an Iterable.
     <int>{...w}, // Error.
-             ^");
+             ^"){(core::int) → core::bool};
   } =>#t110, block {
     final core::Set<core::int> #t111 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
@@ -697,7 +697,7 @@
         final dynamic #t112 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
-          #t111.{core::Set::add}{Invariant}(#t113);
+          #t111.{core::Set::add}(#t113){(core::int) → core::bool};
         }
       }
     }
@@ -711,7 +711,7 @@
         final dynamic #t115 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
-          #t114.{core::Set::add}{Invariant}(#t116);
+          #t114.{core::Set::add}(#t116){(core::int) → core::bool};
         }
       }
     }
@@ -725,16 +725,16 @@
         final dynamic #t118 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
-          #t117.{core::Set::add}{Invariant}(#t119);
+          #t117.{core::Set::add}(#t119){(core::int) → core::bool};
         }
       }
     }
   } =>#t117, block {
     final core::Map<core::int, core::int> #t120 = <core::int, core::int>{};
     if(condition)
-      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:59:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      #t120.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:59:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...w}, // Error.
-                       ^", null);
+                       ^", null){(core::int, core::int) → void};
   } =>#t120, block {
     final core::Set<core::int> #t121 = new col::_CompactLinkedHashSet::•<core::int>();
     {
@@ -749,7 +749,7 @@
             final dynamic #t122 = :sync-for-iterator.{core::Iterator::current};
             {
               final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
-              #t121.{core::Set::add}{Invariant}(#t123);
+              #t121.{core::Set::add}(#t123){(core::int) → core::bool};
             }
           }
         }
@@ -769,7 +769,7 @@
             final dynamic #t125 = :sync-for-iterator.{core::Iterator::current};
             {
               final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
-              #t124.{core::Set::add}{Invariant}(#t126);
+              #t124.{core::Set::add}(#t126){(core::int) → core::bool};
             }
           }
         }
@@ -789,7 +789,7 @@
             final dynamic #t128 = :sync-for-iterator.{core::Iterator::current};
             {
               final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
-              #t127.{core::Set::add}{Invariant}(#t129);
+              #t127.{core::Set::add}(#t129){(core::int) → core::bool};
             }
           }
         }
@@ -801,14 +801,14 @@
       core::Iterator<dynamic> :sync-for-iterator = iterable.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic e = :sync-for-iterator.{core::Iterator::current};
-        #t130.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:63:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+        #t130.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:63:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...w}, // Error.
-                                    ^", null);
+                                    ^", null){(core::int, core::int) → void};
       }
     }
   } =>#t130, block {
     final core::Set<core::int> #t131 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...x}, // Error.
                                      ^".{core::Iterable::iterator};
@@ -816,13 +816,13 @@
         final dynamic #t132 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
-          #t131.{core::Set::add}{Invariant}(#t133);
+          #t131.{core::Set::add}(#t133){(core::int) → core::bool};
         }
       }
     }
   } =>#t131, block {
     final core::Set<core::int> #t134 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...y}, // Error.
                                      ^".{core::Iterable::iterator};
@@ -830,13 +830,13 @@
         final dynamic #t135 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
-          #t134.{core::Set::add}{Invariant}(#t136);
+          #t134.{core::Set::add}(#t136){(core::int) → core::bool};
         }
       }
     }
   } =>#t134, block {
     final core::Set<core::int> #t137 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...z}, // Error.
                                      ^".{core::Iterable::iterator};
@@ -844,76 +844,76 @@
         final dynamic #t138 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
-          #t137.{core::Set::add}{Invariant}(#t139);
+          #t137.{core::Set::add}(#t139){(core::int) → core::bool};
         }
       }
     }
   } =>#t137, block {
     final core::Map<core::int, core::int> #t140 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
-      #t140.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:67:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t140.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:67:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...w}, // Error.
-                                     ^", null);
+                                     ^", null){(core::int, core::int) → void};
   } =>#t140, block {
     final core::Set<core::int> #t141 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t142 = x;
-    if(!#t142.{core::Object::==}(null)) {
+    if(!(#t142 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t142{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t143 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t144 = #t143 as{TypeError,ForNonNullableByDefault} core::int;
-          #t141.{core::Set::add}{Invariant}(#t144);
+          #t141.{core::Set::add}(#t144){(core::int) → core::bool};
         }
       }
     }
   } =>#t141, block {
     final core::Set<core::int> #t145 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t146 = y;
-    if(!#t146.{core::Object::==}(null)) {
+    if(!(#t146 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t146{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t147 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t148 = #t147 as{TypeError,ForNonNullableByDefault} core::int;
-          #t145.{core::Set::add}{Invariant}(#t148);
+          #t145.{core::Set::add}(#t148){(core::int) → core::bool};
         }
       }
     }
   } =>#t145, block {
     final core::Set<core::int> #t149 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t150 = z;
-    if(!#t150.{core::Object::==}(null)) {
+    if(!(#t150 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t150{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t151 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t152 = #t151 as{TypeError,ForNonNullableByDefault} core::int;
-          #t149.{core::Set::add}{Invariant}(#t152);
+          #t149.{core::Set::add}(#t152){(core::int) → core::bool};
         }
       }
     }
   } =>#t149, block {
     final core::Map<core::int, core::int> #t153 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t154 = w;
-    if(!#t154.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t154{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t154 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t154{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t155 = :sync-for-iterator.{core::Iterator::current};
-        #t153.{core::Map::[]=}{Invariant}(#t155.{core::MapEntry::key}, #t155.{core::MapEntry::value});
+        #t153.{core::Map::[]=}(#t155.{core::MapEntry::key}{core::int}, #t155.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
   } =>#t153, block {
     final core::Set<core::int> #t156 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t157 = x;
-      if(!#t157.{core::Object::==}(null)) {
+      if(!(#t157 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t157{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t158 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t159 = #t158 as{TypeError,ForNonNullableByDefault} core::int;
-            #t156.{core::Set::add}{Invariant}(#t159);
+            #t156.{core::Set::add}(#t159){(core::int) → core::bool};
           }
         }
       }
@@ -922,13 +922,13 @@
     final core::Set<core::int> #t160 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t161 = y;
-      if(!#t161.{core::Object::==}(null)) {
+      if(!(#t161 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t161{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t162 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t163 = #t162 as{TypeError,ForNonNullableByDefault} core::int;
-            #t160.{core::Set::add}{Invariant}(#t163);
+            #t160.{core::Set::add}(#t163){(core::int) → core::bool};
           }
         }
       }
@@ -937,13 +937,13 @@
     final core::Set<core::int> #t164 = new col::_CompactLinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t165 = z;
-      if(!#t165.{core::Object::==}(null)) {
+      if(!(#t165 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t165{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t166 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t167 = #t166 as{TypeError,ForNonNullableByDefault} core::int;
-            #t164.{core::Set::add}{Invariant}(#t167);
+            #t164.{core::Set::add}(#t167){(core::int) → core::bool};
           }
         }
       }
@@ -952,11 +952,11 @@
     final core::Map<core::int, core::int> #t168 = <core::int, core::int>{};
     if(condition) {
       final core::Map<core::int, core::int>? #t169 = w;
-      if(!#t169.{core::Object::==}(null)) {
-        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t169{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+      if(!(#t169 == null)) {
+        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t169{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::int, core::int> #t170 = :sync-for-iterator.{core::Iterator::current};
-          #t168.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}, #t170.{core::MapEntry::value});
+          #t168.{core::Map::[]=}(#t170.{core::MapEntry::key}{core::int}, #t170.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
         }
       }
     }
@@ -968,13 +968,13 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Iterable<dynamic>? #t172 = x;
-          if(!#t172.{core::Object::==}(null)) {
+          if(!(#t172 == null)) {
             core::Iterator<dynamic> :sync-for-iterator = #t172{core::Iterable<dynamic>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final dynamic #t173 = :sync-for-iterator.{core::Iterator::current};
               {
                 final core::int #t174 = #t173 as{TypeError,ForNonNullableByDefault} core::int;
-                #t171.{core::Set::add}{Invariant}(#t174);
+                #t171.{core::Set::add}(#t174){(core::int) → core::bool};
               }
             }
           }
@@ -989,13 +989,13 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Iterable<dynamic>? #t176 = y;
-          if(!#t176.{core::Object::==}(null)) {
+          if(!(#t176 == null)) {
             core::Iterator<dynamic> :sync-for-iterator = #t176{core::Iterable<dynamic>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final dynamic #t177 = :sync-for-iterator.{core::Iterator::current};
               {
                 final core::int #t178 = #t177 as{TypeError,ForNonNullableByDefault} core::int;
-                #t175.{core::Set::add}{Invariant}(#t178);
+                #t175.{core::Set::add}(#t178){(core::int) → core::bool};
               }
             }
           }
@@ -1010,13 +1010,13 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Iterable<dynamic>? #t180 = z;
-          if(!#t180.{core::Object::==}(null)) {
+          if(!(#t180 == null)) {
             core::Iterator<dynamic> :sync-for-iterator = #t180{core::Iterable<dynamic>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final dynamic #t181 = :sync-for-iterator.{core::Iterator::current};
               {
                 final core::int #t182 = #t181 as{TypeError,ForNonNullableByDefault} core::int;
-                #t179.{core::Set::add}{Invariant}(#t182);
+                #t179.{core::Set::add}(#t182){(core::int) → core::bool};
               }
             }
           }
@@ -1031,11 +1031,11 @@
         dynamic e = :sync-for-iterator.{core::Iterator::current};
         {
           final core::Map<core::int, core::int>? #t184 = w;
-          if(!#t184.{core::Object::==}(null)) {
-            core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t184{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+          if(!(#t184 == null)) {
+            core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t184{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
               final core::MapEntry<core::int, core::int> #t185 = :sync-for-iterator.{core::Iterator::current};
-              #t183.{core::Map::[]=}{Invariant}(#t185.{core::MapEntry::key}, #t185.{core::MapEntry::value});
+              #t183.{core::Map::[]=}(#t185.{core::MapEntry::key}{core::int}, #t185.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
             }
           }
         }
@@ -1043,58 +1043,58 @@
     }
   } =>#t183, block {
     final core::Set<core::int> #t186 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t187 = x;
-      if(!#t187.{core::Object::==}(null)) {
+      if(!(#t187 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t187{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t188 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t189 = #t188 as{TypeError,ForNonNullableByDefault} core::int;
-            #t186.{core::Set::add}{Invariant}(#t189);
+            #t186.{core::Set::add}(#t189){(core::int) → core::bool};
           }
         }
       }
     }
   } =>#t186, block {
     final core::Set<core::int> #t190 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t191 = y;
-      if(!#t191.{core::Object::==}(null)) {
+      if(!(#t191 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t191{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t192 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t193 = #t192 as{TypeError,ForNonNullableByDefault} core::int;
-            #t190.{core::Set::add}{Invariant}(#t193);
+            #t190.{core::Set::add}(#t193){(core::int) → core::bool};
           }
         }
       }
     }
   } =>#t190, block {
     final core::Set<core::int> #t194 = new col::_CompactLinkedHashSet::•<core::int>();
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t195 = z;
-      if(!#t195.{core::Object::==}(null)) {
+      if(!(#t195 == null)) {
         core::Iterator<dynamic> :sync-for-iterator = #t195{core::Iterable<dynamic>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t196 = :sync-for-iterator.{core::Iterator::current};
           {
             final core::int #t197 = #t196 as{TypeError,ForNonNullableByDefault} core::int;
-            #t194.{core::Set::add}{Invariant}(#t197);
+            #t194.{core::Set::add}(#t197){(core::int) → core::bool};
           }
         }
       }
     }
   } =>#t194, block {
     final core::Map<core::int, core::int> #t198 = <core::int, core::int>{};
-    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t199 = w;
-      if(!#t199.{core::Object::==}(null)) {
-        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t199{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+      if(!(#t199 == null)) {
+        core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t199{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::int, core::int> #t200 = :sync-for-iterator.{core::Iterator::current};
-          #t198.{core::Map::[]=}{Invariant}(#t200.{core::MapEntry::key}, #t200.{core::MapEntry::value});
+          #t198.{core::Map::[]=}(#t200.{core::MapEntry::key}{core::int}, #t200.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
         }
       }
     }
diff --git a/pkg/front_end/testcases/nnbd/issue43536.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43536.dart.strong.expect
index de6fdb8..acf5d78 100644
--- a/pkg/front_end/testcases/nnbd/issue43536.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43536.dart.strong.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method foo<generic-covariant-impl E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
-    core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list);
+    core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list){(core::List<self::C::foo::E%>) → core::List<self::C::foo::E%>};
   }
   method method<generic-covariant-impl F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
     return list;
diff --git a/pkg/front_end/testcases/nnbd/issue43536.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43536.dart.strong.transformed.expect
index de6fdb8..acf5d78 100644
--- a/pkg/front_end/testcases/nnbd/issue43536.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43536.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method foo<generic-covariant-impl E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
-    core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list);
+    core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list){(core::List<self::C::foo::E%>) → core::List<self::C::foo::E%>};
   }
   method method<generic-covariant-impl F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
     return list;
diff --git a/pkg/front_end/testcases/nnbd/issue43536.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43536.dart.weak.expect
index de6fdb8..acf5d78 100644
--- a/pkg/front_end/testcases/nnbd/issue43536.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43536.dart.weak.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method foo<generic-covariant-impl E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
-    core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list);
+    core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list){(core::List<self::C::foo::E%>) → core::List<self::C::foo::E%>};
   }
   method method<generic-covariant-impl F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
     return list;
diff --git a/pkg/front_end/testcases/nnbd/issue43536.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43536.dart.weak.transformed.expect
index de6fdb8..acf5d78 100644
--- a/pkg/front_end/testcases/nnbd/issue43536.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43536.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method foo<generic-covariant-impl E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
-    core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list);
+    core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list){(core::List<self::C::foo::E%>) → core::List<self::C::foo::E%>};
   }
   method method<generic-covariant-impl F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
     return list;
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.strong.expect
index c09bec5..7bb6ecb 100644
--- a/pkg/front_end/testcases/nnbd/issue43591.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.strong.expect
@@ -11,12 +11,12 @@
   (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
 }
 static method method2<S extends dynamic>(self::method2::S% s) → dynamic {
-  self::throws(() → void => s.f);
+  self::throws(() → void => s{dynamic}.f);
 }
 static method main() → dynamic {}
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object e) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.strong.transformed.expect
index c09bec5..7bb6ecb 100644
--- a/pkg/front_end/testcases/nnbd/issue43591.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.strong.transformed.expect
@@ -11,12 +11,12 @@
   (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
 }
 static method method2<S extends dynamic>(self::method2::S% s) → dynamic {
-  self::throws(() → void => s.f);
+  self::throws(() → void => s{dynamic}.f);
 }
 static method main() → dynamic {}
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object e) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.expect
index c09bec5..7bb6ecb 100644
--- a/pkg/front_end/testcases/nnbd/issue43591.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.expect
@@ -11,12 +11,12 @@
   (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
 }
 static method method2<S extends dynamic>(self::method2::S% s) → dynamic {
-  self::throws(() → void => s.f);
+  self::throws(() → void => s{dynamic}.f);
 }
 static method main() → dynamic {}
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object e) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.transformed.expect
index c09bec5..7bb6ecb 100644
--- a/pkg/front_end/testcases/nnbd/issue43591.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.transformed.expect
@@ -11,12 +11,12 @@
   (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
 }
 static method method2<S extends dynamic>(self::method2::S% s) → dynamic {
-  self::throws(() → void => s.f);
+  self::throws(() → void => s{dynamic}.f);
 }
 static method main() → dynamic {}
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object e) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.expect
index 6482203..ac73263 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.expect
@@ -17,12 +17,12 @@
     ;
   method m(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → core::Object {
     self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
-    if(z.{core::Object::==}(null))
+    if(z == null)
       throw 0;
     return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     return z.x; // Error.
-             ^" in z{self::C<core::Object?, core::Object?>}.{self::C::x} as{TypeError,ForNonNullableByDefault} core::Object;
+             ^" in z{self::C<core::Object?, core::Object?>}.{self::C::x}{core::Object?} as{TypeError,ForNonNullableByDefault} core::Object;
   }
 }
 static field core::bool b = true;
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.transformed.expect
index 144101c..03d87ee 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.transformed.expect
@@ -17,12 +17,12 @@
     ;
   method m(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → core::Object {
     self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
-    if(z.{core::Object::==}(null))
+    if(z == null)
       throw 0;
     return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     return z.x; // Error.
-             ^" in let core::Object? #t2 = z{self::C<core::Object?, core::Object?>}.{self::C::x} in #t2.==(null) ?{core::Object} #t2 as{TypeError,ForNonNullableByDefault} core::Object : #t2{core::Object};
+             ^" in let core::Object? #t2 = z{self::C<core::Object?, core::Object?>}.{self::C::x}{core::Object?} in #t2.==(null) ?{core::Object} #t2 as{TypeError,ForNonNullableByDefault} core::Object : #t2{core::Object};
   }
 }
 static field core::bool b = true;
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.expect
index 6482203..ac73263 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.expect
@@ -17,12 +17,12 @@
     ;
   method m(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → core::Object {
     self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
-    if(z.{core::Object::==}(null))
+    if(z == null)
       throw 0;
     return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     return z.x; // Error.
-             ^" in z{self::C<core::Object?, core::Object?>}.{self::C::x} as{TypeError,ForNonNullableByDefault} core::Object;
+             ^" in z{self::C<core::Object?, core::Object?>}.{self::C::x}{core::Object?} as{TypeError,ForNonNullableByDefault} core::Object;
   }
 }
 static field core::bool b = true;
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.transformed.expect
index efcc89c..3c0963d 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.transformed.expect
@@ -17,12 +17,12 @@
     ;
   method m(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → core::Object {
     self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
-    if(z.{core::Object::==}(null))
+    if(z == null)
       throw 0;
     return let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
  - 'Object' is from 'dart:core'.
     return z.x; // Error.
-             ^" in z{self::C<core::Object?, core::Object?>}.{self::C::x};
+             ^" in z{self::C<core::Object?, core::Object?>}.{self::C::x}{core::Object?};
   }
 }
 static field core::bool b = true;
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.expect
index eb2e00a..0bba0ad 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.expect
@@ -15,12 +15,12 @@
     : self::C::x = x, super core::Object::•()
     ;
   method m() → void {
-    (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x} : #C1;
-    if(z.{core::Object::==}(null))
+    (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x}{self::C::X%} : #C1;
+    if(z == null)
       return;
-    z{(Never) → void}.call(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
+    z{(Never) → void}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
     z(42); // Error.
-      ^" in 42 as{TypeError,ForNonNullableByDefault} Never);
+      ^" in 42 as{TypeError,ForNonNullableByDefault} Never){(Never) → void};
   }
 }
 static field core::bool b = true;
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.transformed.expect
index eb2e00a..0bba0ad 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.transformed.expect
@@ -15,12 +15,12 @@
     : self::C::x = x, super core::Object::•()
     ;
   method m() → void {
-    (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x} : #C1;
-    if(z.{core::Object::==}(null))
+    (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x}{self::C::X%} : #C1;
+    if(z == null)
       return;
-    z{(Never) → void}.call(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
+    z{(Never) → void}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
     z(42); // Error.
-      ^" in 42 as{TypeError,ForNonNullableByDefault} Never);
+      ^" in 42 as{TypeError,ForNonNullableByDefault} Never){(Never) → void};
   }
 }
 static field core::bool b = true;
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.expect
index eb2e00a..0bba0ad 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.expect
@@ -15,12 +15,12 @@
     : self::C::x = x, super core::Object::•()
     ;
   method m() → void {
-    (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x} : #C1;
-    if(z.{core::Object::==}(null))
+    (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x}{self::C::X%} : #C1;
+    if(z == null)
       return;
-    z{(Never) → void}.call(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
+    z{(Never) → void}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
     z(42); // Error.
-      ^" in 42 as{TypeError,ForNonNullableByDefault} Never);
+      ^" in 42 as{TypeError,ForNonNullableByDefault} Never){(Never) → void};
   }
 }
 static field core::bool b = true;
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.transformed.expect
index eb2e00a..0bba0ad 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.transformed.expect
@@ -15,12 +15,12 @@
     : self::C::x = x, super core::Object::•()
     ;
   method m() → void {
-    (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x} : #C1;
-    if(z.{core::Object::==}(null))
+    (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x}{self::C::X%} : #C1;
+    if(z == null)
       return;
-    z{(Never) → void}.call(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
+    z{(Never) → void}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
     z(42); // Error.
-      ^" in 42 as{TypeError,ForNonNullableByDefault} Never);
+      ^" in 42 as{TypeError,ForNonNullableByDefault} Never){(Never) → void};
   }
 }
 static field core::bool b = true;
diff --git a/pkg/front_end/testcases/nnbd/issue44276.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue44276.dart.strong.expect
index 9f8c187..ce89c73 100644
--- a/pkg/front_end/testcases/nnbd/issue44276.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue44276.dart.strong.expect
@@ -14,6 +14,6 @@
 }
 static method fun() → core::int? {
   self::Base? a;
-  final core::int? b = let final core::int? #t1 = let final self::Base? #t2 = a in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::Base}.{self::Base::value1} in #t1.{core::num::==}(null) ?{core::int?} let final self::Base? #t3 = a in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Base}.{self::Base::value2} : #t1{core::int};
+  final core::int? b = let final core::int? #t1 = let final self::Base? #t2 = a in #t2 == null ?{core::int?} null : #t2{self::Base}.{self::Base::value1}{core::int?} in #t1 == null ?{core::int?} let final self::Base? #t3 = a in #t3 == null ?{core::int?} null : #t3{self::Base}.{self::Base::value2}{core::int?} : #t1{core::int};
   return b;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue44276.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue44276.dart.strong.transformed.expect
index 9f8c187..ce89c73 100644
--- a/pkg/front_end/testcases/nnbd/issue44276.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44276.dart.strong.transformed.expect
@@ -14,6 +14,6 @@
 }
 static method fun() → core::int? {
   self::Base? a;
-  final core::int? b = let final core::int? #t1 = let final self::Base? #t2 = a in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::Base}.{self::Base::value1} in #t1.{core::num::==}(null) ?{core::int?} let final self::Base? #t3 = a in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Base}.{self::Base::value2} : #t1{core::int};
+  final core::int? b = let final core::int? #t1 = let final self::Base? #t2 = a in #t2 == null ?{core::int?} null : #t2{self::Base}.{self::Base::value1}{core::int?} in #t1 == null ?{core::int?} let final self::Base? #t3 = a in #t3 == null ?{core::int?} null : #t3{self::Base}.{self::Base::value2}{core::int?} : #t1{core::int};
   return b;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue44276.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue44276.dart.weak.expect
index 9f8c187..ce89c73 100644
--- a/pkg/front_end/testcases/nnbd/issue44276.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue44276.dart.weak.expect
@@ -14,6 +14,6 @@
 }
 static method fun() → core::int? {
   self::Base? a;
-  final core::int? b = let final core::int? #t1 = let final self::Base? #t2 = a in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::Base}.{self::Base::value1} in #t1.{core::num::==}(null) ?{core::int?} let final self::Base? #t3 = a in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Base}.{self::Base::value2} : #t1{core::int};
+  final core::int? b = let final core::int? #t1 = let final self::Base? #t2 = a in #t2 == null ?{core::int?} null : #t2{self::Base}.{self::Base::value1}{core::int?} in #t1 == null ?{core::int?} let final self::Base? #t3 = a in #t3 == null ?{core::int?} null : #t3{self::Base}.{self::Base::value2}{core::int?} : #t1{core::int};
   return b;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue44276.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue44276.dart.weak.transformed.expect
index 9f8c187..ce89c73 100644
--- a/pkg/front_end/testcases/nnbd/issue44276.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44276.dart.weak.transformed.expect
@@ -14,6 +14,6 @@
 }
 static method fun() → core::int? {
   self::Base? a;
-  final core::int? b = let final core::int? #t1 = let final self::Base? #t2 = a in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::Base}.{self::Base::value1} in #t1.{core::num::==}(null) ?{core::int?} let final self::Base? #t3 = a in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Base}.{self::Base::value2} : #t1{core::int};
+  final core::int? b = let final core::int? #t1 = let final self::Base? #t2 = a in #t2 == null ?{core::int?} null : #t2{self::Base}.{self::Base::value1}{core::int?} in #t1 == null ?{core::int?} let final self::Base? #t3 = a in #t3 == null ?{core::int?} null : #t3{self::Base}.{self::Base::value2}{core::int?} : #t1{core::int};
   return b;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.expect
index e9cfab0..150af53 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.expect
@@ -12,11 +12,11 @@
 static method id<T extends core::Object? = dynamic>(self::id::T% value) → self::id::T%
   return value;
 static method main() → dynamic async {
-  FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1));
-  FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)) in block {
+  FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
+  FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
     self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
   } =>#t1;
-  FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)) in block {
+  FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)){(core::num) → core::int} in block {
     self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t2);
   } =>#t2;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
index ef34905..e08b045 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
@@ -24,11 +24,11 @@
     try {
       #L1:
       {
-        FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1));
-        FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)) in block {
+        FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
+        FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
           self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
         } =>#t1;
-        FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)) in block {
+        FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)){(core::num) → core::int} in block {
           self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t2);
         } =>#t2;
       }
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.expect
index e9cfab0..150af53 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.expect
@@ -12,11 +12,11 @@
 static method id<T extends core::Object? = dynamic>(self::id::T% value) → self::id::T%
   return value;
 static method main() → dynamic async {
-  FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1));
-  FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)) in block {
+  FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
+  FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
     self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
   } =>#t1;
-  FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)) in block {
+  FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)){(core::num) → core::int} in block {
     self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t2);
   } =>#t2;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
index ef34905..e08b045 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
@@ -24,11 +24,11 @@
     try {
       #L1:
       {
-        FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1));
-        FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)) in block {
+        FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
+        FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
           self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
         } =>#t1;
-        FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)) in block {
+        FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)){(core::num) → core::int} in block {
           self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t2);
         } =>#t2;
       }
diff --git a/pkg/front_end/testcases/nnbd/issue45598.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue45598.dart.strong.expect
index a1055bf..b03a7ab 100644
--- a/pkg/front_end/testcases/nnbd/issue45598.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue45598.dart.strong.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method foo(<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({m: core::Map<Y%, Z%>}) → dynamic bar, core::Map<core::String, core::String> m) → dynamic {
-  bar.call<core::String, core::String, core::String>(m: m);
+  bar<core::String, core::String, core::String>(m: m){({m: core::Map<core::String, core::String>}) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue45598.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue45598.dart.strong.transformed.expect
index a1055bf..b03a7ab 100644
--- a/pkg/front_end/testcases/nnbd/issue45598.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue45598.dart.strong.transformed.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method foo(<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({m: core::Map<Y%, Z%>}) → dynamic bar, core::Map<core::String, core::String> m) → dynamic {
-  bar.call<core::String, core::String, core::String>(m: m);
+  bar<core::String, core::String, core::String>(m: m){({m: core::Map<core::String, core::String>}) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue45598.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue45598.dart.weak.expect
index a1055bf..b03a7ab 100644
--- a/pkg/front_end/testcases/nnbd/issue45598.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue45598.dart.weak.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method foo(<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({m: core::Map<Y%, Z%>}) → dynamic bar, core::Map<core::String, core::String> m) → dynamic {
-  bar.call<core::String, core::String, core::String>(m: m);
+  bar<core::String, core::String, core::String>(m: m){({m: core::Map<core::String, core::String>}) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue45598.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue45598.dart.weak.transformed.expect
index a1055bf..b03a7ab 100644
--- a/pkg/front_end/testcases/nnbd/issue45598.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue45598.dart.weak.transformed.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method foo(<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({m: core::Map<Y%, Z%>}) → dynamic bar, core::Map<core::String, core::String> m) → dynamic {
-  bar.call<core::String, core::String, core::String>(m: m);
+  bar<core::String, core::String, core::String>(m: m){({m: core::Map<core::String, core::String>}) → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue45598_2.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue45598_2.dart.strong.expect
index 9c145d3..f0813ae 100644
--- a/pkg/front_end/testcases/nnbd/issue45598_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue45598_2.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method foo(core::Map<core::String, core::String> m) → dynamic {
   function bar<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({required core::Map<Y%, Z%> m = #C1}) → void {}
-  bar.call<core::String, core::String, core::String>(m: m);
+  bar<core::String, core::String, core::String>(m: m){({required m: core::Map<core::String, core::String>}) → void};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue45598_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue45598_2.dart.strong.transformed.expect
index 9c145d3..f0813ae 100644
--- a/pkg/front_end/testcases/nnbd/issue45598_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue45598_2.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static method foo(core::Map<core::String, core::String> m) → dynamic {
   function bar<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({required core::Map<Y%, Z%> m = #C1}) → void {}
-  bar.call<core::String, core::String, core::String>(m: m);
+  bar<core::String, core::String, core::String>(m: m){({required m: core::Map<core::String, core::String>}) → void};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue45598_2.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue45598_2.dart.weak.expect
index 9c145d3..f0813ae 100644
--- a/pkg/front_end/testcases/nnbd/issue45598_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue45598_2.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method foo(core::Map<core::String, core::String> m) → dynamic {
   function bar<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({required core::Map<Y%, Z%> m = #C1}) → void {}
-  bar.call<core::String, core::String, core::String>(m: m);
+  bar<core::String, core::String, core::String>(m: m){({required m: core::Map<core::String, core::String>}) → void};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue45598_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue45598_2.dart.weak.transformed.expect
index 9c145d3..f0813ae 100644
--- a/pkg/front_end/testcases/nnbd/issue45598_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue45598_2.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method foo(core::Map<core::String, core::String> m) → dynamic {
   function bar<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({required core::Map<Y%, Z%> m = #C1}) → void {}
-  bar.call<core::String, core::String, core::String>(m: m);
+  bar<core::String, core::String, core::String>(m: m){({required m: core::Map<core::String, core::String>}) → void};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue_39286.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue_39286.dart.strong.expect
index 95a3402..ebe9eae 100644
--- a/pkg/front_end/testcases/nnbd/issue_39286.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue_39286.dart.strong.expect
@@ -18,8 +18,8 @@
 }
 static method test(self::C x) → void {
   let final self::C #t1 = x in block {
-    #t1.{self::C::f}()!.{self::D::g}();
-    #t1.{self::C::h}();
+    #t1.{self::C::f}(){() → self::D?}!.{self::D::g}(){() → void};
+    #t1.{self::C::h}(){() → void};
   } =>#t1;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue_39286.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue_39286.dart.strong.transformed.expect
index 95a3402..ebe9eae 100644
--- a/pkg/front_end/testcases/nnbd/issue_39286.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue_39286.dart.strong.transformed.expect
@@ -18,8 +18,8 @@
 }
 static method test(self::C x) → void {
   let final self::C #t1 = x in block {
-    #t1.{self::C::f}()!.{self::D::g}();
-    #t1.{self::C::h}();
+    #t1.{self::C::f}(){() → self::D?}!.{self::D::g}(){() → void};
+    #t1.{self::C::h}(){() → void};
   } =>#t1;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue_39286.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue_39286.dart.weak.expect
index 95a3402..ebe9eae 100644
--- a/pkg/front_end/testcases/nnbd/issue_39286.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue_39286.dart.weak.expect
@@ -18,8 +18,8 @@
 }
 static method test(self::C x) → void {
   let final self::C #t1 = x in block {
-    #t1.{self::C::f}()!.{self::D::g}();
-    #t1.{self::C::h}();
+    #t1.{self::C::f}(){() → self::D?}!.{self::D::g}(){() → void};
+    #t1.{self::C::h}(){() → void};
   } =>#t1;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue_39286.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue_39286.dart.weak.transformed.expect
index 95a3402..ebe9eae 100644
--- a/pkg/front_end/testcases/nnbd/issue_39286.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue_39286.dart.weak.transformed.expect
@@ -18,8 +18,8 @@
 }
 static method test(self::C x) → void {
   let final self::C #t1 = x in block {
-    #t1.{self::C::f}()!.{self::D::g}();
-    #t1.{self::C::h}();
+    #t1.{self::C::f}(){() → self::D?}!.{self::D::g}(){() → void};
+    #t1.{self::C::h}(){() → void};
   } =>#t1;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue_39286_2.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue_39286_2.dart.strong.expect
index b21ab32..261dcc1 100644
--- a/pkg/front_end/testcases/nnbd/issue_39286_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue_39286_2.dart.strong.expect
@@ -36,8 +36,8 @@
 }
 static method test(self::C x) → void {
   let final self::C #t1 = x in block {
-    #t1.{self::C::f}()!.{self::D::g}().{self::D::[]}("Hi!")!;
-    #t1.{self::C::h}()!.{self::C::y} = 2;
+    #t1.{self::C::f}(){() → self::D?}!.{self::D::g}(){() → self::D}.{self::D::[]}("Hi!"){(core::String) → core::String}!;
+    #t1.{self::C::h}(){() → self::C}!.{self::C::y} = 2;
   } =>#t1;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue_39286_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue_39286_2.dart.strong.transformed.expect
index b21ab32..261dcc1 100644
--- a/pkg/front_end/testcases/nnbd/issue_39286_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue_39286_2.dart.strong.transformed.expect
@@ -36,8 +36,8 @@
 }
 static method test(self::C x) → void {
   let final self::C #t1 = x in block {
-    #t1.{self::C::f}()!.{self::D::g}().{self::D::[]}("Hi!")!;
-    #t1.{self::C::h}()!.{self::C::y} = 2;
+    #t1.{self::C::f}(){() → self::D?}!.{self::D::g}(){() → self::D}.{self::D::[]}("Hi!"){(core::String) → core::String}!;
+    #t1.{self::C::h}(){() → self::C}!.{self::C::y} = 2;
   } =>#t1;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue_39286_2.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue_39286_2.dart.weak.expect
index b21ab32..261dcc1 100644
--- a/pkg/front_end/testcases/nnbd/issue_39286_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue_39286_2.dart.weak.expect
@@ -36,8 +36,8 @@
 }
 static method test(self::C x) → void {
   let final self::C #t1 = x in block {
-    #t1.{self::C::f}()!.{self::D::g}().{self::D::[]}("Hi!")!;
-    #t1.{self::C::h}()!.{self::C::y} = 2;
+    #t1.{self::C::f}(){() → self::D?}!.{self::D::g}(){() → self::D}.{self::D::[]}("Hi!"){(core::String) → core::String}!;
+    #t1.{self::C::h}(){() → self::C}!.{self::C::y} = 2;
   } =>#t1;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue_39286_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue_39286_2.dart.weak.transformed.expect
index b21ab32..261dcc1 100644
--- a/pkg/front_end/testcases/nnbd/issue_39286_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue_39286_2.dart.weak.transformed.expect
@@ -36,8 +36,8 @@
 }
 static method test(self::C x) → void {
   let final self::C #t1 = x in block {
-    #t1.{self::C::f}()!.{self::D::g}().{self::D::[]}("Hi!")!;
-    #t1.{self::C::h}()!.{self::C::y} = 2;
+    #t1.{self::C::f}(){() → self::D?}!.{self::D::g}(){() → self::D}.{self::D::[]}("Hi!"){(core::String) → core::String}!;
+    #t1.{self::C::h}(){() → self::C}!.{self::C::y} = 2;
   } =>#t1;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/late.dart.strong.expect b/pkg/front_end/testcases/nnbd/late.dart.strong.expect
index eaf8c2c..d08482c 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.strong.expect
@@ -81,7 +81,7 @@
   self::lateTopLevelField = 0;
   self::lateFinalTopLevelField = 0;
   self::Class c1 = new self::Class::•();
-  c1.{self::Class::method}();
+  c1.{self::Class::method}(){() → dynamic};
   self::Class c2 = new self::Class::•();
   c2.{self::Class::lateInstanceField} = 0;
   c2.{self::Class::lateFinalInstanceField2} = 0;
@@ -98,7 +98,7 @@
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
   c.lateFinalInstanceFieldWithInit = 0;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  c.{self::Class::methodWithErrors}();
+  c.{self::Class::methodWithErrors}(){() → dynamic};
   invalid-expression "pkg/front_end/testcases/nnbd/late.dart:67:9: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
   Class.lateFinalStaticFieldWithInit = 0;
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
diff --git a/pkg/front_end/testcases/nnbd/late.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/late.dart.strong.transformed.expect
index eaf8c2c..d08482c 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.strong.transformed.expect
@@ -81,7 +81,7 @@
   self::lateTopLevelField = 0;
   self::lateFinalTopLevelField = 0;
   self::Class c1 = new self::Class::•();
-  c1.{self::Class::method}();
+  c1.{self::Class::method}(){() → dynamic};
   self::Class c2 = new self::Class::•();
   c2.{self::Class::lateInstanceField} = 0;
   c2.{self::Class::lateFinalInstanceField2} = 0;
@@ -98,7 +98,7 @@
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
   c.lateFinalInstanceFieldWithInit = 0;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  c.{self::Class::methodWithErrors}();
+  c.{self::Class::methodWithErrors}(){() → dynamic};
   invalid-expression "pkg/front_end/testcases/nnbd/late.dart:67:9: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
   Class.lateFinalStaticFieldWithInit = 0;
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
diff --git a/pkg/front_end/testcases/nnbd/late.dart.weak.expect b/pkg/front_end/testcases/nnbd/late.dart.weak.expect
index eaf8c2c..d08482c 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.weak.expect
@@ -81,7 +81,7 @@
   self::lateTopLevelField = 0;
   self::lateFinalTopLevelField = 0;
   self::Class c1 = new self::Class::•();
-  c1.{self::Class::method}();
+  c1.{self::Class::method}(){() → dynamic};
   self::Class c2 = new self::Class::•();
   c2.{self::Class::lateInstanceField} = 0;
   c2.{self::Class::lateFinalInstanceField2} = 0;
@@ -98,7 +98,7 @@
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
   c.lateFinalInstanceFieldWithInit = 0;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  c.{self::Class::methodWithErrors}();
+  c.{self::Class::methodWithErrors}(){() → dynamic};
   invalid-expression "pkg/front_end/testcases/nnbd/late.dart:67:9: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
   Class.lateFinalStaticFieldWithInit = 0;
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
diff --git a/pkg/front_end/testcases/nnbd/late.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/late.dart.weak.transformed.expect
index eaf8c2c..d08482c 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.weak.transformed.expect
@@ -81,7 +81,7 @@
   self::lateTopLevelField = 0;
   self::lateFinalTopLevelField = 0;
   self::Class c1 = new self::Class::•();
-  c1.{self::Class::method}();
+  c1.{self::Class::method}(){() → dynamic};
   self::Class c2 = new self::Class::•();
   c2.{self::Class::lateInstanceField} = 0;
   c2.{self::Class::lateFinalInstanceField2} = 0;
@@ -98,7 +98,7 @@
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
   c.lateFinalInstanceFieldWithInit = 0;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
-  c.{self::Class::methodWithErrors}();
+  c.{self::Class::methodWithErrors}(){() → dynamic};
   invalid-expression "pkg/front_end/testcases/nnbd/late.dart:67:9: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
   Class.lateFinalStaticFieldWithInit = 0;
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
index df47af6..7bd7713 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
@@ -68,7 +68,7 @@
 
 class A extends core::Object {
   field core::int a = 42;
-  late field core::int b = this.{self::A::a}.{core::num::*}(2).{core::int::>>}(1);
+  late field core::int b = this.{self::A::a}{core::int}.{core::num::*}(2){(core::num) → core::int}.{core::int::>>}(1){(core::int) → core::int};
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
@@ -104,7 +104,7 @@
     on dynamic catch(final dynamic late, final core::StackTrace e) {
     }
   }
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print("baz");
   }
   for (core::String s in <core::String>["baz"]) {
@@ -112,8 +112,8 @@
   }
   block {
     final core::List<core::int> #t1 = <core::int>[];
-    for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1))
-      #t1.{core::List::add}{Invariant}(i);
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t1.{core::List::add}(i){(core::int) → void};
   } =>#t1;
 }
 static method hest() → dynamic async {
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
index 2aba575..303c03a 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
@@ -69,7 +69,7 @@
 
 class A extends core::Object {
   field core::int a = 42;
-  late field core::int b = this.{self::A::a}.{core::num::*}(2).{core::int::>>}(1);
+  late field core::int b = this.{self::A::a}{core::int}.{core::num::*}(2){(core::num) → core::int}.{core::int::>>}(1){(core::int) → core::int};
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
@@ -105,7 +105,7 @@
     on dynamic catch(final dynamic late, final core::StackTrace e) {
     }
   }
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print("baz");
   }
   {
@@ -119,8 +119,8 @@
   }
   block {
     final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
-    for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1))
-      #t1.{core::List::add}{Invariant}(i);
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t1.{core::List::add}(i){(core::int) → void};
   } =>#t1;
 }
 static method hest() → dynamic /* originally async */ {
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
index df47af6..7bd7713 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
@@ -68,7 +68,7 @@
 
 class A extends core::Object {
   field core::int a = 42;
-  late field core::int b = this.{self::A::a}.{core::num::*}(2).{core::int::>>}(1);
+  late field core::int b = this.{self::A::a}{core::int}.{core::num::*}(2){(core::num) → core::int}.{core::int::>>}(1){(core::int) → core::int};
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
@@ -104,7 +104,7 @@
     on dynamic catch(final dynamic late, final core::StackTrace e) {
     }
   }
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print("baz");
   }
   for (core::String s in <core::String>["baz"]) {
@@ -112,8 +112,8 @@
   }
   block {
     final core::List<core::int> #t1 = <core::int>[];
-    for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1))
-      #t1.{core::List::add}{Invariant}(i);
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t1.{core::List::add}(i){(core::int) → void};
   } =>#t1;
 }
 static method hest() → dynamic async {
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
index 2aba575..303c03a 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
@@ -69,7 +69,7 @@
 
 class A extends core::Object {
   field core::int a = 42;
-  late field core::int b = this.{self::A::a}.{core::num::*}(2).{core::int::>>}(1);
+  late field core::int b = this.{self::A::a}{core::int}.{core::num::*}(2){(core::num) → core::int}.{core::int::>>}(1){(core::int) → core::int};
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
@@ -105,7 +105,7 @@
     on dynamic catch(final dynamic late, final core::StackTrace e) {
     }
   }
-  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print("baz");
   }
   {
@@ -119,8 +119,8 @@
   }
   block {
     final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
-    for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1))
-      #t1.{core::List::add}{Invariant}(i);
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t1.{core::List::add}(i){(core::int) → void};
   } =>#t1;
 }
 static method hest() → dynamic /* originally async */ {
diff --git a/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.strong.expect
index b8f0b54..42bf683 100644
--- a/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method f() → core::Object
-  return let final core::Object? #t1 = self::g<core::Object?>(null) in #t1.{core::Object::==}(null) ?{core::Object} 0 : #t1{core::Object};
+  return let final core::Object? #t1 = self::g<core::Object?>(null) in #t1 == null ?{core::Object} 0 : #t1{core::Object};
 static method g<T extends core::Object? = dynamic>(self::g::T% t) → self::g::T%
   return t;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.strong.transformed.expect
index b8f0b54..42bf683 100644
--- a/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method f() → core::Object
-  return let final core::Object? #t1 = self::g<core::Object?>(null) in #t1.{core::Object::==}(null) ?{core::Object} 0 : #t1{core::Object};
+  return let final core::Object? #t1 = self::g<core::Object?>(null) in #t1 == null ?{core::Object} 0 : #t1{core::Object};
 static method g<T extends core::Object? = dynamic>(self::g::T% t) → self::g::T%
   return t;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.weak.expect
index b8f0b54..42bf683 100644
--- a/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method f() → core::Object
-  return let final core::Object? #t1 = self::g<core::Object?>(null) in #t1.{core::Object::==}(null) ?{core::Object} 0 : #t1{core::Object};
+  return let final core::Object? #t1 = self::g<core::Object?>(null) in #t1 == null ?{core::Object} 0 : #t1{core::Object};
 static method g<T extends core::Object? = dynamic>(self::g::T% t) → self::g::T%
   return t;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.weak.transformed.expect
index b8f0b54..42bf683 100644
--- a/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method f() → core::Object
-  return let final core::Object? #t1 = self::g<core::Object?>(null) in #t1.{core::Object::==}(null) ?{core::Object} 0 : #t1{core::Object};
+  return let final core::Object? #t1 = self::g<core::Object?>(null) in #t1 == null ?{core::Object} 0 : #t1{core::Object};
 static method g<T extends core::Object? = dynamic>(self::g::T% t) → self::g::T%
   return t;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.strong.expect b/pkg/front_end/testcases/nnbd/load_library.dart.strong.expect
index 0e7e3b1..9513601 100644
--- a/pkg/front_end/testcases/nnbd/load_library.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.strong.expect
@@ -1,14 +1,15 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
+import "dart:core" as core;
 
 import "dart:math" deferred as math;
 
 static method main() → dynamic {
   asy::Future<dynamic> v1 = LoadLibrary(math);
-  v1.{asy::Future::then}<Null>((dynamic _) → Null {});
+  v1.{asy::Future::then}<Null>((dynamic _) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
   () → asy::Future<dynamic> v2 = #C1;
-  v2.call().{asy::Future::then}<Null>((dynamic _) → Null {});
+  v2(){() → asy::Future<dynamic>}.{asy::Future::then}<Null>((dynamic _) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
 }
 static method _#loadLibrary_math() → asy::Future<dynamic>
   return LoadLibrary(math);
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/load_library.dart.strong.transformed.expect
index 0e7e3b1..9513601 100644
--- a/pkg/front_end/testcases/nnbd/load_library.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.strong.transformed.expect
@@ -1,14 +1,15 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
+import "dart:core" as core;
 
 import "dart:math" deferred as math;
 
 static method main() → dynamic {
   asy::Future<dynamic> v1 = LoadLibrary(math);
-  v1.{asy::Future::then}<Null>((dynamic _) → Null {});
+  v1.{asy::Future::then}<Null>((dynamic _) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
   () → asy::Future<dynamic> v2 = #C1;
-  v2.call().{asy::Future::then}<Null>((dynamic _) → Null {});
+  v2(){() → asy::Future<dynamic>}.{asy::Future::then}<Null>((dynamic _) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
 }
 static method _#loadLibrary_math() → asy::Future<dynamic>
   return LoadLibrary(math);
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.weak.expect b/pkg/front_end/testcases/nnbd/load_library.dart.weak.expect
index 0e7e3b1..9513601 100644
--- a/pkg/front_end/testcases/nnbd/load_library.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.weak.expect
@@ -1,14 +1,15 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
+import "dart:core" as core;
 
 import "dart:math" deferred as math;
 
 static method main() → dynamic {
   asy::Future<dynamic> v1 = LoadLibrary(math);
-  v1.{asy::Future::then}<Null>((dynamic _) → Null {});
+  v1.{asy::Future::then}<Null>((dynamic _) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
   () → asy::Future<dynamic> v2 = #C1;
-  v2.call().{asy::Future::then}<Null>((dynamic _) → Null {});
+  v2(){() → asy::Future<dynamic>}.{asy::Future::then}<Null>((dynamic _) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
 }
 static method _#loadLibrary_math() → asy::Future<dynamic>
   return LoadLibrary(math);
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/load_library.dart.weak.transformed.expect
index 0e7e3b1..9513601 100644
--- a/pkg/front_end/testcases/nnbd/load_library.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.weak.transformed.expect
@@ -1,14 +1,15 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
+import "dart:core" as core;
 
 import "dart:math" deferred as math;
 
 static method main() → dynamic {
   asy::Future<dynamic> v1 = LoadLibrary(math);
-  v1.{asy::Future::then}<Null>((dynamic _) → Null {});
+  v1.{asy::Future::then}<Null>((dynamic _) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
   () → asy::Future<dynamic> v2 = #C1;
-  v2.call().{asy::Future::then}<Null>((dynamic _) → Null {});
+  v2(){() → asy::Future<dynamic>}.{asy::Future::then}<Null>((dynamic _) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
 }
 static method _#loadLibrary_math() → asy::Future<dynamic>
   return LoadLibrary(math);
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.expect
index fc8db9e..03536f5 100644
--- a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.expect
@@ -50,13 +50,13 @@
   self::A a = new self::A::•(x: 42);
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
   a.foo();
-       ^" in a.{self::A::foo}();
+       ^" in a.{self::A::foo}{<inapplicable>}.(){() → invalid-type};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
   a.f();
-     ^" in a.{self::A::f}.call();
+     ^" in a.{self::A::f}{({required s: core::String}) → void}{<inapplicable>}.();
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
   g();
-   ^" in self::g.call();
+   ^" in self::g{<inapplicable>}.();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.transformed.expect
index fc8db9e..03536f5 100644
--- a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.strong.transformed.expect
@@ -50,13 +50,13 @@
   self::A a = new self::A::•(x: 42);
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
   a.foo();
-       ^" in a.{self::A::foo}();
+       ^" in a.{self::A::foo}{<inapplicable>}.(){() → invalid-type};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
   a.f();
-     ^" in a.{self::A::f}.call();
+     ^" in a.{self::A::f}{({required s: core::String}) → void}{<inapplicable>}.();
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
   g();
-   ^" in self::g.call();
+   ^" in self::g{<inapplicable>}.();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.expect
index fc8db9e..03536f5 100644
--- a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.expect
@@ -50,13 +50,13 @@
   self::A a = new self::A::•(x: 42);
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
   a.foo();
-       ^" in a.{self::A::foo}();
+       ^" in a.{self::A::foo}{<inapplicable>}.(){() → invalid-type};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
   a.f();
-     ^" in a.{self::A::f}.call();
+     ^" in a.{self::A::f}{({required s: core::String}) → void}{<inapplicable>}.();
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
   g();
-   ^" in self::g.call();
+   ^" in self::g{<inapplicable>}.();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.transformed.expect
index fc8db9e..03536f5 100644
--- a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.transformed.expect
@@ -50,13 +50,13 @@
   self::A a = new self::A::•(x: 42);
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
   a.foo();
-       ^" in a.{self::A::foo}();
+       ^" in a.{self::A::foo}{<inapplicable>}.(){() → invalid-type};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
   a.f();
-     ^" in a.{self::A::f}.call();
+     ^" in a.{self::A::f}{({required s: core::String}) → void}{<inapplicable>}.();
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
   g();
-   ^" in self::g.call();
+   ^" in self::g{<inapplicable>}.();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/never_calls.dart.strong.expect b/pkg/front_end/testcases/nnbd/never_calls.dart.strong.expect
index 33ac05b..6187566 100644
--- a/pkg/front_end/testcases/nnbd/never_calls.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/never_calls.dart.strong.expect
@@ -3,32 +3,32 @@
 import "dart:core" as core;
 
 static method propertyGet(Never never) → dynamic {
-  Never v1 = never.foo;
-  Never v2 = never.hashCode;
-  Never v3 = never.runtimeType;
-  Never v4 = never.toString;
-  Never v5 = never.noSuchMethod;
+  Never v1 = never{Never}.foo;
+  Never v2 = never{Never}.hashCode;
+  Never v3 = never{Never}.runtimeType;
+  Never v4 = never{Never}.toString;
+  Never v5 = never{Never}.noSuchMethod;
 }
 static method propertySet(Never never) → dynamic {
-  core::int v1 = never.foo = 42;
+  core::int v1 = never{Never}.foo = 42;
 }
 static method methodInvocation(Never never, core::Invocation invocation) → dynamic {
-  Never v1 = never.foo();
-  Never v2 = never.hashCode();
-  Never v3 = never.runtimeType();
-  Never v4 = never.toString();
-  Never v5 = never.toString(foo: 42);
-  Never v6 = never.noSuchMethod(invocation);
-  Never v7 = never.noSuchMethod(42);
+  Never v1 = never{Never}.foo();
+  Never v2 = never{Never}.hashCode();
+  Never v3 = never{Never}.runtimeType();
+  Never v4 = never{Never}.toString();
+  Never v5 = never{Never}.toString(foo: 42);
+  Never v6 = never{Never}.noSuchMethod(invocation);
+  Never v7 = never{Never}.noSuchMethod(42);
 }
 static method equals(Never never) → dynamic {
-  Never v1 = never.==(null);
-  Never v2 = never.==(never);
+  core::bool v1 = never == null;
+  Never v2 = never =={core::Object::==}{(dynamic) → Never} never;
 }
 static method operator(Never never) → dynamic {
-  Never v1 = never.+(never);
-  Never v2 = never.unary-();
-  Never v3 = never.[](never);
-  Never v4 = let final Never #t1 = never in let final Never #t2 = never in let final Never #t3 = never in let final void #t4 = #t1.[]=(#t2, #t3) in #t3;
+  Never v1 = never{Never}.+(never);
+  Never v2 = never{Never}.unary-();
+  Never v3 = never{Never}.[](never);
+  Never v4 = let final Never #t1 = never in let final Never #t2 = never in let final Never #t3 = never in let final void #t4 = #t1{Never}.[]=(#t2, #t3) in #t3;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_calls.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/never_calls.dart.strong.transformed.expect
index 33ac05b..6187566 100644
--- a/pkg/front_end/testcases/nnbd/never_calls.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/never_calls.dart.strong.transformed.expect
@@ -3,32 +3,32 @@
 import "dart:core" as core;
 
 static method propertyGet(Never never) → dynamic {
-  Never v1 = never.foo;
-  Never v2 = never.hashCode;
-  Never v3 = never.runtimeType;
-  Never v4 = never.toString;
-  Never v5 = never.noSuchMethod;
+  Never v1 = never{Never}.foo;
+  Never v2 = never{Never}.hashCode;
+  Never v3 = never{Never}.runtimeType;
+  Never v4 = never{Never}.toString;
+  Never v5 = never{Never}.noSuchMethod;
 }
 static method propertySet(Never never) → dynamic {
-  core::int v1 = never.foo = 42;
+  core::int v1 = never{Never}.foo = 42;
 }
 static method methodInvocation(Never never, core::Invocation invocation) → dynamic {
-  Never v1 = never.foo();
-  Never v2 = never.hashCode();
-  Never v3 = never.runtimeType();
-  Never v4 = never.toString();
-  Never v5 = never.toString(foo: 42);
-  Never v6 = never.noSuchMethod(invocation);
-  Never v7 = never.noSuchMethod(42);
+  Never v1 = never{Never}.foo();
+  Never v2 = never{Never}.hashCode();
+  Never v3 = never{Never}.runtimeType();
+  Never v4 = never{Never}.toString();
+  Never v5 = never{Never}.toString(foo: 42);
+  Never v6 = never{Never}.noSuchMethod(invocation);
+  Never v7 = never{Never}.noSuchMethod(42);
 }
 static method equals(Never never) → dynamic {
-  Never v1 = never.==(null);
-  Never v2 = never.==(never);
+  core::bool v1 = never == null;
+  Never v2 = never =={core::Object::==}{(dynamic) → Never} never;
 }
 static method operator(Never never) → dynamic {
-  Never v1 = never.+(never);
-  Never v2 = never.unary-();
-  Never v3 = never.[](never);
-  Never v4 = let final Never #t1 = never in let final Never #t2 = never in let final Never #t3 = never in let final void #t4 = #t1.[]=(#t2, #t3) in #t3;
+  Never v1 = never{Never}.+(never);
+  Never v2 = never{Never}.unary-();
+  Never v3 = never{Never}.[](never);
+  Never v4 = let final Never #t1 = never in let final Never #t2 = never in let final Never #t3 = never in let final void #t4 = #t1{Never}.[]=(#t2, #t3) in #t3;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_calls.dart.weak.expect b/pkg/front_end/testcases/nnbd/never_calls.dart.weak.expect
index 242bb80..a1ee958 100644
--- a/pkg/front_end/testcases/nnbd/never_calls.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/never_calls.dart.weak.expect
@@ -4,32 +4,32 @@
 import "dart:core" as core;
 
 static method propertyGet(Never never) → dynamic {
-  Never v1 = let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).foo in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v2 = let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).hashCode in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v3 = let final Never #t5 = (let final Never #t6 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v4 = let final Never #t7 = (let final Never #t8 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v5 = let final Never #t9 = (let final Never #t10 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).noSuchMethod in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v1 = let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v2 = let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.hashCode in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v3 = let final Never #t5 = (let final Never #t6 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v4 = let final Never #t7 = (let final Never #t8 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v5 = let final Never #t9 = (let final Never #t10 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.noSuchMethod in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 }
 static method propertySet(Never never) → dynamic {
-  core::int v1 = (let final Never #t11 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).foo = 42;
+  core::int v1 = (let final Never #t11 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo = 42;
 }
 static method methodInvocation(Never never, core::Invocation invocation) → dynamic {
-  Never v1 = let final Never #t12 = (let final Never #t13 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v2 = let final Never #t14 = (let final Never #t15 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).hashCode() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v3 = let final Never #t16 = (let final Never #t17 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v4 = let final Never #t18 = (let final Never #t19 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v5 = let final Never #t20 = (let final Never #t21 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString(foo: 42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v6 = let final Never #t22 = (let final Never #t23 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).noSuchMethod(invocation) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v7 = let final Never #t24 = (let final Never #t25 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).noSuchMethod(42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v1 = let final Never #t12 = (let final Never #t13 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v2 = let final Never #t14 = (let final Never #t15 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.hashCode() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v3 = let final Never #t16 = (let final Never #t17 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v4 = let final Never #t18 = (let final Never #t19 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v5 = let final Never #t20 = (let final Never #t21 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString(foo: 42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v6 = let final Never #t22 = (let final Never #t23 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.noSuchMethod(invocation) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v7 = let final Never #t24 = (let final Never #t25 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.noSuchMethod(42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 }
 static method equals(Never never) → dynamic {
-  Never v1 = let final Never #t26 = (let final Never #t27 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).==(null) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v2 = let final Never #t28 = (let final Never #t29 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).==(let final Never #t30 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::bool v1 = (let final Never #t26 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null;
+  Never v2 = let final Never #t27 = (let final Never #t28 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} (let final Never #t29 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 }
 static method operator(Never never) → dynamic {
-  Never v1 = let final Never #t31 = (let final Never #t32 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).+(let final Never #t33 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v2 = let final Never #t34 = (let final Never #t35 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).unary-() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v3 = let final Never #t36 = (let final Never #t37 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[](let final Never #t38 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v4 = let final Never #t39 = let final Never #t40 = let final Never #t41 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final Never #t42 = let final Never #t43 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final Never #t44 = let final Never #t45 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final void #t46 = #t40.[]=(#t42, #t44) in #t44 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v1 = let final Never #t30 = (let final Never #t31 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(let final Never #t32 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v2 = let final Never #t33 = (let final Never #t34 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.unary-() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v3 = let final Never #t35 = (let final Never #t36 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](let final Never #t37 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v4 = let final Never #t38 = let final Never #t39 = let final Never #t40 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final Never #t41 = let final Never #t42 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final Never #t43 = let final Never #t44 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final void #t45 = #t39{Never}.[]=(#t41, #t43) in #t43 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_calls.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/never_calls.dart.weak.transformed.expect
index 242bb80..a1ee958 100644
--- a/pkg/front_end/testcases/nnbd/never_calls.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/never_calls.dart.weak.transformed.expect
@@ -4,32 +4,32 @@
 import "dart:core" as core;
 
 static method propertyGet(Never never) → dynamic {
-  Never v1 = let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).foo in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v2 = let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).hashCode in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v3 = let final Never #t5 = (let final Never #t6 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v4 = let final Never #t7 = (let final Never #t8 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v5 = let final Never #t9 = (let final Never #t10 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).noSuchMethod in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v1 = let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v2 = let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.hashCode in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v3 = let final Never #t5 = (let final Never #t6 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v4 = let final Never #t7 = (let final Never #t8 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v5 = let final Never #t9 = (let final Never #t10 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.noSuchMethod in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 }
 static method propertySet(Never never) → dynamic {
-  core::int v1 = (let final Never #t11 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).foo = 42;
+  core::int v1 = (let final Never #t11 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo = 42;
 }
 static method methodInvocation(Never never, core::Invocation invocation) → dynamic {
-  Never v1 = let final Never #t12 = (let final Never #t13 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v2 = let final Never #t14 = (let final Never #t15 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).hashCode() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v3 = let final Never #t16 = (let final Never #t17 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v4 = let final Never #t18 = (let final Never #t19 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v5 = let final Never #t20 = (let final Never #t21 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).toString(foo: 42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v6 = let final Never #t22 = (let final Never #t23 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).noSuchMethod(invocation) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v7 = let final Never #t24 = (let final Never #t25 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).noSuchMethod(42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v1 = let final Never #t12 = (let final Never #t13 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v2 = let final Never #t14 = (let final Never #t15 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.hashCode() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v3 = let final Never #t16 = (let final Never #t17 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v4 = let final Never #t18 = (let final Never #t19 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v5 = let final Never #t20 = (let final Never #t21 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString(foo: 42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v6 = let final Never #t22 = (let final Never #t23 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.noSuchMethod(invocation) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v7 = let final Never #t24 = (let final Never #t25 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.noSuchMethod(42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 }
 static method equals(Never never) → dynamic {
-  Never v1 = let final Never #t26 = (let final Never #t27 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).==(null) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v2 = let final Never #t28 = (let final Never #t29 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).==(let final Never #t30 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::bool v1 = (let final Never #t26 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null;
+  Never v2 = let final Never #t27 = (let final Never #t28 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} (let final Never #t29 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 }
 static method operator(Never never) → dynamic {
-  Never v1 = let final Never #t31 = (let final Never #t32 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).+(let final Never #t33 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v2 = let final Never #t34 = (let final Never #t35 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).unary-() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v3 = let final Never #t36 = (let final Never #t37 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[](let final Never #t38 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  Never v4 = let final Never #t39 = let final Never #t40 = let final Never #t41 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final Never #t42 = let final Never #t43 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final Never #t44 = let final Never #t45 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final void #t46 = #t40.[]=(#t42, #t44) in #t44 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v1 = let final Never #t30 = (let final Never #t31 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(let final Never #t32 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v2 = let final Never #t33 = (let final Never #t34 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.unary-() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v3 = let final Never #t35 = (let final Never #t36 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](let final Never #t37 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v4 = let final Never #t38 = let final Never #t39 = let final Never #t40 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final Never #t41 = let final Never #t42 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final Never #t43 = let final Never #t44 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final void #t45 = #t39{Never}.[]=(#t41, #t43) in #t43 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_equals.dart.strong.expect b/pkg/front_end/testcases/nnbd/never_equals.dart.strong.expect
index eafd607..6db1fcc 100644
--- a/pkg/front_end/testcases/nnbd/never_equals.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/never_equals.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method test(Never nonNullableNever, Never? nullableNever) → dynamic {
-  Never v1 = nonNullableNever.==(nonNullableNever);
-  core::bool v2 = nullableNever.{core::Object::==}(nullableNever);
+  Never v1 = nonNullableNever =={core::Object::==}{(dynamic) → Never} nonNullableNever;
+  core::bool v2 = nullableNever =={core::Object::==}{(core::Object) → core::bool} nullableNever;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_equals.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/never_equals.dart.strong.transformed.expect
index eafd607..6db1fcc 100644
--- a/pkg/front_end/testcases/nnbd/never_equals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/never_equals.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method test(Never nonNullableNever, Never? nullableNever) → dynamic {
-  Never v1 = nonNullableNever.==(nonNullableNever);
-  core::bool v2 = nullableNever.{core::Object::==}(nullableNever);
+  Never v1 = nonNullableNever =={core::Object::==}{(dynamic) → Never} nonNullableNever;
+  core::bool v2 = nullableNever =={core::Object::==}{(core::Object) → core::bool} nullableNever;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_equals.dart.weak.expect b/pkg/front_end/testcases/nnbd/never_equals.dart.weak.expect
index 52cfdac..3863424 100644
--- a/pkg/front_end/testcases/nnbd/never_equals.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/never_equals.dart.weak.expect
@@ -4,7 +4,7 @@
 import "dart:core" as core;
 
 static method test(Never nonNullableNever, Never? nullableNever) → dynamic {
-  Never v1 = let final Never #t1 = (let final Never #t2 = nonNullableNever in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).==(let final Never #t3 = nonNullableNever in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  core::bool v2 = nullableNever.{core::Object::==}(nullableNever);
+  Never v1 = let final Never #t1 = (let final Never #t2 = nonNullableNever in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} (let final Never #t3 = nonNullableNever in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::bool v2 = nullableNever =={core::Object::==}{(core::Object) → core::bool} nullableNever;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/never_equals.dart.weak.transformed.expect
index 52cfdac..3863424 100644
--- a/pkg/front_end/testcases/nnbd/never_equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/never_equals.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 import "dart:core" as core;
 
 static method test(Never nonNullableNever, Never? nullableNever) → dynamic {
-  Never v1 = let final Never #t1 = (let final Never #t2 = nonNullableNever in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).==(let final Never #t3 = nonNullableNever in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  core::bool v2 = nullableNever.{core::Object::==}(nullableNever);
+  Never v1 = let final Never #t1 = (let final Never #t2 = nonNullableNever in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} (let final Never #t3 = nonNullableNever in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::bool v2 = nullableNever =={core::Object::==}{(core::Object) → core::bool} nullableNever;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.expect
index 1a136213..cfeb55d 100644
--- a/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.expect
@@ -66,27 +66,27 @@
 import "dart:core" as core;
 
 static method foo(Never x, Never? y) → dynamic {
-  core::String local0 = y.{core::Object::toString}();
-  core::int local1 = y.{core::Object::hashCode};
-  x.foo();
-  x.bar;
-  x.baz = 42;
-  x.call();
-  x.[](42);
-  x.[]=(42, 42);
-  x = x.+(1);
-  x = x.+(1);
-  let final Never? #t1 = y in #t1.{core::Object::==}(null) ?{Null} null : #t1{Never}.foo();
-  let final Never? #t2 = y in #t2.{core::Object::==}(null) ?{Null} null : #t2{Never}.bar;
-  let final Never? #t3 = y in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{Never}.baz = 42;
-  let final Never? #t4 = y in #t4.{core::Object::==}(null) ?{Null} null : #t4{Never}.call();
-  let final Never? #t5 = y in #t5.{core::Object::==}(null) ?{Null} null : #t5{Never}.[](42);
-  let final Never? #t6 = y in #t6.{core::Object::==}(null) ?{core::int?} null : #t6{Never}.[]=(42, 42);
-  let final Never #t7 = x in #t7.{core::Object::==}(null) ?{Null} null : #t7.foo();
-  let final Never #t8 = x in #t8.{core::Object::==}(null) ?{Null} null : #t8.bar;
-  let final Never #t9 = x in #t9.{core::Object::==}(null) ?{core::int?} null : #t9.baz = 42;
-  let final Never #t10 = x in #t10.{core::Object::==}(null) ?{Null} null : #t10.[](42);
-  let final Never #t11 = x in #t11.{core::Object::==}(null) ?{core::int?} null : #t11.[]=(42, 42);
+  core::String local0 = y.{core::Object::toString}(){() → core::String};
+  core::int local1 = y.{core::Object::hashCode}{core::int};
+  x{Never}.foo();
+  x{Never}.bar;
+  x{Never}.baz = 42;
+  x{Never}.call();
+  x{Never}.[](42);
+  x{Never}.[]=(42, 42);
+  x = x{Never}.+(1);
+  x = x{Never}.+(1);
+  let final Never? #t1 = y in #t1 == null ?{Null} null : #t1{Never}{Never}.foo();
+  let final Never? #t2 = y in #t2 == null ?{Null} null : #t2{Never}{Never}.bar;
+  let final Never? #t3 = y in #t3 == null ?{core::int?} null : #t3{Never}{Never}.baz = 42;
+  let final Never? #t4 = y in #t4 == null ?{Null} null : #t4{Never}{Never}.call();
+  let final Never? #t5 = y in #t5 == null ?{Null} null : #t5{Never}{Never}.[](42);
+  let final Never? #t6 = y in #t6 == null ?{core::int?} null : #t6{Never}{Never}.[]=(42, 42);
+  let final Never #t7 = x in #t7 == null ?{Null} null : #t7{Never}.foo();
+  let final Never #t8 = x in #t8 == null ?{Null} null : #t8{Never}.bar;
+  let final Never #t9 = x in #t9 == null ?{core::int?} null : #t9{Never}.baz = 42;
+  let final Never #t10 = x in #t10 == null ?{Null} null : #t10{Never}.[](42);
+  let final Never #t11 = x in #t11 == null ?{core::int?} null : #t11{Never}.[]=(42, 42);
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:5: Error: The method 'foo' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo(); // Error.
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.transformed.expect
index 8078ed3..0451577 100644
--- a/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.transformed.expect
@@ -66,27 +66,27 @@
 import "dart:core" as core;
 
 static method foo(Never x, Never? y) → dynamic {
-  core::String local0 = y.{core::Object::toString}();
-  core::int local1 = y.{core::Object::hashCode};
-  x.foo();
-  x.bar;
-  x.baz = 42;
-  x.call();
-  x.[](42);
-  x.[]=(42, 42);
-  x = x.+(1);
-  x = x.+(1);
-  let final Never? #t1 = y in #t1.{core::Object::==}(null) ?{Null} null : #t1{Never}.foo();
-  let final Never? #t2 = y in #t2.{core::Object::==}(null) ?{Null} null : #t2{Never}.bar;
-  let final Never? #t3 = y in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{Never}.baz = 42;
-  let final Never? #t4 = y in #t4.{core::Object::==}(null) ?{Null} null : #t4{Never}.call();
-  let final Never? #t5 = y in #t5.{core::Object::==}(null) ?{Null} null : #t5{Never}.[](42);
-  let final Never? #t6 = y in #t6.{core::Object::==}(null) ?{core::int?} null : #t6{Never}.[]=(42, 42);
-  let final Never #t7 = x in #t7.{core::Object::==}(null) ?{Null} null : #t7.foo();
-  let final Never #t8 = x in #t8.{core::Object::==}(null) ?{Null} null : #t8.bar;
-  let final Never #t9 = x in #t9.{core::Object::==}(null) ?{core::int?} null : #t9.baz = 42;
-  let final Never #t10 = x in #t10.{core::Object::==}(null) ?{Null} null : #t10.[](42);
-  let final Never #t11 = x in #t11.{core::Object::==}(null) ?{core::int?} null : #t11.[]=(42, 42);
+  core::String local0 = y.{core::Object::toString}(){() → core::String};
+  core::int local1 = y.{core::Object::hashCode}{core::int};
+  x{Never}.foo();
+  x{Never}.bar;
+  x{Never}.baz = 42;
+  x{Never}.call();
+  x{Never}.[](42);
+  x{Never}.[]=(42, 42);
+  x = x{Never}.+(1);
+  x = x{Never}.+(1);
+  let final Never? #t1 = y in #t1 == null ?{Null} null : #t1{Never}{Never}.foo();
+  let final Never? #t2 = y in #t2 == null ?{Null} null : #t2{Never}{Never}.bar;
+  let final Never? #t3 = y in #t3 == null ?{core::int?} null : #t3{Never}{Never}.baz = 42;
+  let final Never? #t4 = y in #t4 == null ?{Null} null : #t4{Never}{Never}.call();
+  let final Never? #t5 = y in #t5 == null ?{Null} null : #t5{Never}{Never}.[](42);
+  let final Never? #t6 = y in #t6 == null ?{core::int?} null : #t6{Never}{Never}.[]=(42, 42);
+  let final Never #t7 = x in #t7 == null ?{Null} null : #t7{Never}.foo();
+  let final Never #t8 = x in #t8 == null ?{Null} null : #t8{Never}.bar;
+  let final Never #t9 = x in #t9 == null ?{core::int?} null : #t9{Never}.baz = 42;
+  let final Never #t10 = x in #t10 == null ?{Null} null : #t10{Never}.[](42);
+  let final Never #t11 = x in #t11 == null ?{core::int?} null : #t11{Never}.[]=(42, 42);
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:5: Error: The method 'foo' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo(); // Error.
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.expect
index 8460d43..c766f41 100644
--- a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.expect
@@ -67,27 +67,27 @@
 import "dart:_internal" as _in;
 
 static method foo(Never x, Never? y) → dynamic {
-  core::String local0 = y.{core::Object::toString}();
-  core::int local1 = y.{core::Object::hashCode};
-  let final Never #t1 = (let final Never #t2 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t3 = (let final Never #t4 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  (let final Never #t5 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).baz = 42;
-  let final Never #t6 = (let final Never #t7 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t8 = (let final Never #t9 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  (let final Never #t10 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[]=(42, 42);
-  let final Never #t11 = x = let final Never #t12 = (let final Never #t13 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).+(1) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t14 = x = let final Never #t15 = (let final Never #t16 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).+(1) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never? #t17 = y in #t17.{core::Object::==}(null) ?{Null} null : let final Never #t18 = (let final Never #t19 = #t17{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never? #t20 = y in #t20.{core::Object::==}(null) ?{Null} null : let final Never #t21 = (let final Never #t22 = #t20{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never? #t23 = y in #t23.{core::Object::==}(null) ?{core::int?} null : (let final Never #t24 = #t23{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).baz = 42;
-  let final Never? #t25 = y in #t25.{core::Object::==}(null) ?{Null} null : let final Never #t26 = (let final Never #t27 = #t25{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never? #t28 = y in #t28.{core::Object::==}(null) ?{Null} null : let final Never #t29 = (let final Never #t30 = #t28{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never? #t31 = y in #t31.{core::Object::==}(null) ?{core::int?} null : (let final Never #t32 = #t31{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[]=(42, 42);
-  let final Never #t33 = let final Never #t34 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t33.{core::Object::==}(null) ?{Null} null : let final Never #t35 = (let final Never #t36 = #t33 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t37 = let final Never #t38 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t37.{core::Object::==}(null) ?{Null} null : let final Never #t39 = (let final Never #t40 = #t37 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t41 = let final Never #t42 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t41.{core::Object::==}(null) ?{core::int?} null : (let final Never #t43 = #t41 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).baz = 42;
-  let final Never #t44 = let final Never #t45 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t44.{core::Object::==}(null) ?{Null} null : let final Never #t46 = (let final Never #t47 = #t44 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t48 = let final Never #t49 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t48.{core::Object::==}(null) ?{core::int?} null : (let final Never #t50 = #t48 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[]=(42, 42);
+  core::String local0 = y.{core::Object::toString}(){() → core::String};
+  core::int local1 = y.{core::Object::hashCode}{core::int};
+  let final Never #t1 = (let final Never #t2 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t3 = (let final Never #t4 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (let final Never #t5 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.baz = 42;
+  let final Never #t6 = (let final Never #t7 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t8 = (let final Never #t9 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (let final Never #t10 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(42, 42);
+  let final Never #t11 = x = let final Never #t12 = (let final Never #t13 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(1) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t14 = x = let final Never #t15 = (let final Never #t16 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(1) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t17 = y in #t17 == null ?{Null} null : let final Never #t18 = (let final Never #t19 = #t17{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t20 = y in #t20 == null ?{Null} null : let final Never #t21 = (let final Never #t22 = #t20{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t23 = y in #t23 == null ?{core::int?} null : (let final Never #t24 = #t23{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.baz = 42;
+  let final Never? #t25 = y in #t25 == null ?{Null} null : let final Never #t26 = (let final Never #t27 = #t25{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t28 = y in #t28 == null ?{Null} null : let final Never #t29 = (let final Never #t30 = #t28{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t31 = y in #t31 == null ?{core::int?} null : (let final Never #t32 = #t31{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(42, 42);
+  let final Never #t33 = let final Never #t34 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t33 == null ?{Null} null : let final Never #t35 = (let final Never #t36 = #t33 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t37 = let final Never #t38 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t37 == null ?{Null} null : let final Never #t39 = (let final Never #t40 = #t37 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t41 = let final Never #t42 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t41 == null ?{core::int?} null : (let final Never #t43 = #t41 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.baz = 42;
+  let final Never #t44 = let final Never #t45 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t44 == null ?{Null} null : let final Never #t46 = (let final Never #t47 = #t44 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t48 = let final Never #t49 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t48 == null ?{core::int?} null : (let final Never #t50 = #t48 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(42, 42);
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:5: Error: The method 'foo' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo(); // Error.
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.transformed.expect
index 7e2c429..58e9b4e 100644
--- a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.transformed.expect
@@ -67,27 +67,27 @@
 import "dart:_internal" as _in;
 
 static method foo(Never x, Never? y) → dynamic {
-  core::String local0 = y.{core::Object::toString}();
-  core::int local1 = y.{core::Object::hashCode};
-  let final Never #t1 = (let final Never #t2 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t3 = (let final Never #t4 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  (let final Never #t5 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).baz = 42;
-  let final Never #t6 = (let final Never #t7 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t8 = (let final Never #t9 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  (let final Never #t10 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[]=(42, 42);
-  let final Never #t11 = x = let final Never #t12 = (let final Never #t13 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).+(1) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t14 = x = let final Never #t15 = (let final Never #t16 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).+(1) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never? #t17 = y in #t17.{core::Object::==}(null) ?{Null} null : let final Never #t18 = (let final Never #t19 = #t17{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never? #t20 = y in #t20.{core::Object::==}(null) ?{Null} null : let final Never #t21 = (let final Never #t22 = #t20{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never? #t23 = y in #t23.{core::Object::==}(null) ?{core::int?} null : (let final Never #t24 = #t23{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).baz = 42;
-  let final Never? #t25 = y in #t25.{core::Object::==}(null) ?{Null} null : let final Never #t26 = (let final Never #t27 = #t25{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never? #t28 = y in #t28.{core::Object::==}(null) ?{Null} null : let final Never #t29 = (let final Never #t30 = #t28{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never? #t31 = y in #t31.{core::Object::==}(null) ?{core::int?} null : (let final Never #t32 = #t31{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[]=(42, 42);
-  let final Never #t33 = let final Never #t34 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t33.{core::Object::==}(null) ?{Null} null : let final Never #t35 = (let final Never #t36 = #t33 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t37 = let final Never #t38 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t37.{core::Object::==}(null) ?{Null} null : let final Never #t39 = (let final Never #t40 = #t37 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t41 = let final Never #t42 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t41.{core::Object::==}(null) ?{core::int?} null : (let final Never #t43 = #t41 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).baz = 42;
-  let final Never #t44 = let final Never #t45 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t44.{core::Object::==}(null) ?{Null} null : let final Never #t46 = (let final Never #t47 = #t44 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  let final Never #t48 = let final Never #t49 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t48.{core::Object::==}(null) ?{core::int?} null : (let final Never #t50 = #t48 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).[]=(42, 42);
+  core::String local0 = y.{core::Object::toString}(){() → core::String};
+  core::int local1 = y.{core::Object::hashCode}{core::int};
+  let final Never #t1 = (let final Never #t2 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t3 = (let final Never #t4 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (let final Never #t5 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.baz = 42;
+  let final Never #t6 = (let final Never #t7 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t8 = (let final Never #t9 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (let final Never #t10 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(42, 42);
+  let final Never #t11 = x = let final Never #t12 = (let final Never #t13 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(1) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t14 = x = let final Never #t15 = (let final Never #t16 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(1) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t17 = y in #t17 == null ?{Null} null : let final Never #t18 = (let final Never #t19 = #t17{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t20 = y in #t20 == null ?{Null} null : let final Never #t21 = (let final Never #t22 = #t20{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t23 = y in #t23 == null ?{core::int?} null : (let final Never #t24 = #t23{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.baz = 42;
+  let final Never? #t25 = y in #t25 == null ?{Null} null : let final Never #t26 = (let final Never #t27 = #t25{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t28 = y in #t28 == null ?{Null} null : let final Never #t29 = (let final Never #t30 = #t28{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t31 = y in #t31 == null ?{core::int?} null : (let final Never #t32 = #t31{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(42, 42);
+  let final Never #t33 = let final Never #t34 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t33 == null ?{Null} null : let final Never #t35 = (let final Never #t36 = #t33 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t37 = let final Never #t38 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t37 == null ?{Null} null : let final Never #t39 = (let final Never #t40 = #t37 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t41 = let final Never #t42 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t41 == null ?{core::int?} null : (let final Never #t43 = #t41 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.baz = 42;
+  let final Never #t44 = let final Never #t45 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t44 == null ?{Null} null : let final Never #t46 = (let final Never #t47 = #t44 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t48 = let final Never #t49 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t48 == null ?{core::int?} null : (let final Never #t50 = #t48 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(42, 42);
   invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:5: Error: The method 'foo' isn't defined for the class 'Never?'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo(); // Error.
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect
index f59eb15..8c14009 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect
@@ -192,12 +192,12 @@
   classAndSetter = classAndSetter();
   ^^^^^^^^^^^^^^";
   self::Class c = new self::Class::•();
-  c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}();
+  c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}(){() → dynamic};
   invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
   Class.staticMethodAndSetter = Class.staticMethodAndSetter();
         ^^^^^^^^^^^^^^^^^^^^^";
   c.{self::Class::staticMethodAndInstanceSetter} = self::Class::staticMethodAndInstanceSetter();
-  self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}();
+  self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}(){() → dynamic};
   c.{self::Class::Class} = invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect
index f59eb15..8c14009 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect
@@ -192,12 +192,12 @@
   classAndSetter = classAndSetter();
   ^^^^^^^^^^^^^^";
   self::Class c = new self::Class::•();
-  c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}();
+  c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}(){() → dynamic};
   invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
   Class.staticMethodAndSetter = Class.staticMethodAndSetter();
         ^^^^^^^^^^^^^^^^^^^^^";
   c.{self::Class::staticMethodAndInstanceSetter} = self::Class::staticMethodAndInstanceSetter();
-  self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}();
+  self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}(){() → dynamic};
   c.{self::Class::Class} = invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect
index f59eb15..8c14009 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect
@@ -192,12 +192,12 @@
   classAndSetter = classAndSetter();
   ^^^^^^^^^^^^^^";
   self::Class c = new self::Class::•();
-  c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}();
+  c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}(){() → dynamic};
   invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
   Class.staticMethodAndSetter = Class.staticMethodAndSetter();
         ^^^^^^^^^^^^^^^^^^^^^";
   c.{self::Class::staticMethodAndInstanceSetter} = self::Class::staticMethodAndInstanceSetter();
-  self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}();
+  self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}(){() → dynamic};
   c.{self::Class::Class} = invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect
index f59eb15..8c14009 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect
@@ -192,12 +192,12 @@
   classAndSetter = classAndSetter();
   ^^^^^^^^^^^^^^";
   self::Class c = new self::Class::•();
-  c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}();
+  c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}(){() → dynamic};
   invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
   Class.staticMethodAndSetter = Class.staticMethodAndSetter();
         ^^^^^^^^^^^^^^^^^^^^^";
   c.{self::Class::staticMethodAndInstanceSetter} = self::Class::staticMethodAndInstanceSetter();
-  self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}();
+  self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}(){() → dynamic};
   c.{self::Class::Class} = invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
diff --git a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.expect b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.expect
index 56259bd..9cb92de 100644
--- a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.expect
@@ -13,13 +13,13 @@
     late self::A::T% value;
     late core::int intValue;
     () → Null result = () → Null {
-      this.{self::A::bar}(value);
-      this.{self::A::barInt}(intValue);
+      this.{self::A::bar}(value){(self::A::T%) → dynamic};
+      this.{self::A::barInt}(intValue){(core::int) → dynamic};
     };
     (() → Null {
-      value = this.{self::A::baz}();
+      value = this.{self::A::baz}(){() → self::A::T%};
       intValue = 42;
-    }).call();
+    })(){() → Null};
     return result;
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.transformed.expect
index 56259bd..9cb92de 100644
--- a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.transformed.expect
@@ -13,13 +13,13 @@
     late self::A::T% value;
     late core::int intValue;
     () → Null result = () → Null {
-      this.{self::A::bar}(value);
-      this.{self::A::barInt}(intValue);
+      this.{self::A::bar}(value){(self::A::T%) → dynamic};
+      this.{self::A::barInt}(intValue){(core::int) → dynamic};
     };
     (() → Null {
-      value = this.{self::A::baz}();
+      value = this.{self::A::baz}(){() → self::A::T%};
       intValue = 42;
-    }).call();
+    })(){() → Null};
     return result;
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.expect b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.expect
index 56259bd..9cb92de 100644
--- a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.expect
@@ -13,13 +13,13 @@
     late self::A::T% value;
     late core::int intValue;
     () → Null result = () → Null {
-      this.{self::A::bar}(value);
-      this.{self::A::barInt}(intValue);
+      this.{self::A::bar}(value){(self::A::T%) → dynamic};
+      this.{self::A::barInt}(intValue){(core::int) → dynamic};
     };
     (() → Null {
-      value = this.{self::A::baz}();
+      value = this.{self::A::baz}(){() → self::A::T%};
       intValue = 42;
-    }).call();
+    })(){() → Null};
     return result;
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.transformed.expect
index 56259bd..9cb92de 100644
--- a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.transformed.expect
@@ -13,13 +13,13 @@
     late self::A::T% value;
     late core::int intValue;
     () → Null result = () → Null {
-      this.{self::A::bar}(value);
-      this.{self::A::barInt}(intValue);
+      this.{self::A::bar}(value){(self::A::T%) → dynamic};
+      this.{self::A::barInt}(intValue){(core::int) → dynamic};
     };
     (() → Null {
-      value = this.{self::A::baz}();
+      value = this.{self::A::baz}(){() → self::A::T%};
       intValue = 42;
-    }).call();
+    })(){() → Null};
     return result;
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_access.dart.strong.expect
index 3474107..bf9303e 100644
--- a/pkg/front_end/testcases/nnbd/null_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.strong.expect
@@ -125,80 +125,80 @@
 static method errors(self::Class? nullableClass, self::Class nonNullableClass, core::int? nullableInt, core::int nonNullableInt, self::NullableIndexClass? nullableNullableIndexClass) → dynamic {
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   -nullableInt; // error
-  ^" in nullableInt.{core::int::unary-}();
+  ^" in nullableInt.{core::int::unary-}(){() → core::int};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableInt + 2; // error
-              ^" in nullableInt.{core::num::+}(2);
+              ^" in nullableInt.{core::num::+}(2){(core::num) → core::num};
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt]; // error
-               ^" in nullableClass.{self::Class::[]}(nonNullableInt);
+               ^" in nullableClass.{self::Class::[]}{<nullable>}.(nonNullableInt){(core::int) → core::int};
   let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] = nonNullableInt; // error
-               ^" in nullableClass.{self::Class::[]=}(nonNullableInt, nonNullableInt);
+               ^" in nullableClass.{self::Class::[]=}{<nullable>}.(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
   let final self::Class? #t5 = nullableClass in let final core::int #t6 = nonNullableInt in let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]=}(#t6, (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+               ^" in #t5.{self::Class::[]=}{<nullable>}.(#t6, (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]}(#t6)).{core::num::+}(nonNullableInt));
+               ^" in #t5.{self::Class::[]}{<nullable>}.(#t6){(core::int) → core::int}).{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
   let final self::NullableIndexClass? #t9 = nullableNullableIndexClass in let final core::int #t10 = nonNullableInt in (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]}(#t10)).{core::num::==}(null) ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
+                            ^" in #t9.{self::NullableIndexClass::[]}{<nullable>}.(#t10){(core::int) → core::int?}) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]=}(#t10, nonNullableInt) : null;
-  let final self::Class? #t13 = nullableClass in #t13.{core::Object::==}(null) ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]}(nonNullableInt);
-  let final self::Class? #t14 = nullableClass in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]=}(nonNullableInt, nonNullableInt);
-  let final self::Class? #t15 = nullableClass in #t15.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17).{core::num::+}(nonNullableInt));
-  let final self::Class? #t18 = nullableClass in #t18.{core::Object::==}(null) ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20).{core::num::==}(null) ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt) : null;
+                            ^" in #t9.{self::NullableIndexClass::[]=}{<nullable>}.(#t10, nonNullableInt){(core::int, core::int) → void} : null;
+  let final self::Class? #t13 = nullableClass in #t13 == null ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
+  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
+  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20){(core::int) → core::int?} == null ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt){(core::int, core::int) → void} : null;
   let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField; // error
-                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField};
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}.{core::int};
   let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField = 2; // error
-                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField} = 2;
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}. = 2;
   let final self::Class? #t23 = nullableClass in let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField} = (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}. = (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}).{core::num::+}(2);
-  let final self::Class? #t26 = nullableClass in #t26.{core::Object::==}(null) ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField};
-  let final self::Class? #t27 = nullableClass in #t27.{core::Object::==}(null) ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class? #t28 = nullableClass in #t28.{core::Object::==}(null) ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}.{core::num::+}(2);
-  let final self::Class? #t29 = nullableClass in #t29.{core::Object::==}(null) ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField};
-  let final self::Class? #t30 = nullableClass in #t30.{core::Object::==}(null) ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField} = 2;
+                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}.{core::int}).{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t26 = nullableClass in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t27 = nullableClass in #t27 == null ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t28 = nullableClass in #t28 == null ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t29 = nullableClass in #t29 == null ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t30 = nullableClass in #t30 == null ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
   let final self::Class #t31 = nonNullableClass in #t31.{self::Class::nullableField} = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nonNullableClass.nullableField += 2; // error
                                  ^" in (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in #t31.{self::Class::nullableField}.{core::num::+}(2)) as{TypeError,ForNonNullableByDefault} core::int?;
-  let final self::Class? #t34 = nullableClass in #t34.{core::Object::==}(null) ?{core::num?} null : #t34.{self::Class::nullableField} = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+                                 ^" in #t31.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t34 = nullableClass in #t34 == null ?{core::num?} null : #t34.{self::Class::nullableField} = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nullableClass?.nullableField += 2; // error
                                ^" in (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableClass?.nullableField += 2; // error
-                               ^" in #t34.{self::Class::nullableField}.{core::num::+}(2)) as{TypeError,ForNonNullableByDefault} core::int?;
-  let final self::Class? #t37 = nullableClass in #t37.{core::Object::==}(null) ?{core::int?} null : #t37.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t37.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t38 = nullableClass in #t38.{core::Object::==}(null) ?{core::int?} null : #t38.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t38.{self::Class::nullableField} = 0 : null;
-  let final self::Class? #t39 = nullableClass in #t39.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t40 = #t39{self::Class}.{self::Class::nonNullableClass} in #t40.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t40.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t41 = nullableClass in #t41.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t42 = #t41{self::Class}.{self::Class::nonNullableClass} in #t42.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t42.{self::Class::nullableField} = 0 : null;
+                               ^" in #t34.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t37 = nullableClass in #t37 == null ?{core::int?} null : #t37.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t37.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t38 = nullableClass in #t38 == null ?{core::int?} null : #t38.{self::Class::nullableField}{core::int?} == null ?{core::int} #t38.{self::Class::nullableField} = 0 : null;
+  let final self::Class? #t39 = nullableClass in #t39 == null ?{core::int?} null : let final self::Class #t40 = #t39{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t40.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t40.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t41 = nullableClass in #t41 == null ?{core::int?} null : let final self::Class #t42 = #t41{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t42.{self::Class::nullableField}{core::int?} == null ?{core::int} #t42.{self::Class::nullableField} = 0 : null;
   let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try calling using ?.call instead.
   nullableClass(); // error
-               ^" in nullableClass.{self::Class::call}();
-  nonNullableClass.{self::Class::call}();
-  let final self::Class #t44 = nonNullableClass in #t44.{core::Object::==}(null) ?{self::Class?} null : #t44.{self::Class::nonNullableClass}.{self::Class::call}();
-  let final self::Class #t45 = nonNullableClass in #t45.{core::Object::==}(null) ?{self::Class?} null : #t45.{self::Class::nonNullableClass}.{self::Class::nonNullableClass}.{self::Class::call}();
+               ^" in nullableClass.{self::Class::call}{<nullable>}.(){() → self::Class};
+  nonNullableClass.{self::Class::call}(){() → self::Class};
+  let final self::Class #t44 = nonNullableClass in #t44 == null ?{self::Class?} null : #t44.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t45 = nonNullableClass in #t45 == null ?{self::Class?} null : #t45.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
 }
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_access.dart.strong.transformed.expect
index 103d267..bf9303e 100644
--- a/pkg/front_end/testcases/nnbd/null_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.strong.transformed.expect
@@ -125,80 +125,80 @@
 static method errors(self::Class? nullableClass, self::Class nonNullableClass, core::int? nullableInt, core::int nonNullableInt, self::NullableIndexClass? nullableNullableIndexClass) → dynamic {
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   -nullableInt; // error
-  ^" in nullableInt.{core::int::unary-}();
+  ^" in nullableInt.{core::int::unary-}(){() → core::int};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableInt + 2; // error
-              ^" in nullableInt.{core::num::+}(2);
+              ^" in nullableInt.{core::num::+}(2){(core::num) → core::num};
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt]; // error
-               ^" in nullableClass.{self::Class::[]}(nonNullableInt);
+               ^" in nullableClass.{self::Class::[]}{<nullable>}.(nonNullableInt){(core::int) → core::int};
   let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] = nonNullableInt; // error
-               ^" in nullableClass.{self::Class::[]=}(nonNullableInt, nonNullableInt);
+               ^" in nullableClass.{self::Class::[]=}{<nullable>}.(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
   let final self::Class? #t5 = nullableClass in let final core::int #t6 = nonNullableInt in let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]=}(#t6, (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+               ^" in #t5.{self::Class::[]=}{<nullable>}.(#t6, (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]}(#t6)).{core::num::+}(nonNullableInt));
+               ^" in #t5.{self::Class::[]}{<nullable>}.(#t6){(core::int) → core::int}).{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
   let final self::NullableIndexClass? #t9 = nullableNullableIndexClass in let final core::int #t10 = nonNullableInt in (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]}(#t10)).{core::num::==}(null) ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
+                            ^" in #t9.{self::NullableIndexClass::[]}{<nullable>}.(#t10){(core::int) → core::int?}) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]=}(#t10, nonNullableInt) : null;
-  let final self::Class? #t13 = nullableClass in #t13.{core::Object::==}(null) ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]}(nonNullableInt);
-  let final self::Class? #t14 = nullableClass in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]=}(nonNullableInt, nonNullableInt);
-  let final self::Class? #t15 = nullableClass in #t15.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17).{core::num::+}(nonNullableInt));
-  let final self::Class? #t18 = nullableClass in #t18.{core::Object::==}(null) ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20).{core::num::==}(null) ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt) : null;
+                            ^" in #t9.{self::NullableIndexClass::[]=}{<nullable>}.(#t10, nonNullableInt){(core::int, core::int) → void} : null;
+  let final self::Class? #t13 = nullableClass in #t13 == null ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
+  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
+  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20){(core::int) → core::int?} == null ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt){(core::int, core::int) → void} : null;
   let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField; // error
-                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField};
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}.{core::int};
   let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField = 2; // error
-                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField} = 2;
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}. = 2;
   let final self::Class? #t23 = nullableClass in let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField} = (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}. = (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}).{core::num::+}(2);
-  let final self::Class? #t26 = nullableClass in #t26.{core::Object::==}(null) ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField};
-  let final self::Class? #t27 = nullableClass in #t27.{core::Object::==}(null) ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class? #t28 = nullableClass in #t28.{core::Object::==}(null) ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}.{core::num::+}(2);
-  let final self::Class? #t29 = nullableClass in #t29.{core::Object::==}(null) ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField};
-  let final self::Class? #t30 = nullableClass in #t30.{core::Object::==}(null) ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField} = 2;
+                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}.{core::int}).{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t26 = nullableClass in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t27 = nullableClass in #t27 == null ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t28 = nullableClass in #t28 == null ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t29 = nullableClass in #t29 == null ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t30 = nullableClass in #t30 == null ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
   let final self::Class #t31 = nonNullableClass in #t31.{self::Class::nullableField} = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                                 ^" in (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in #t31.{self::Class::nullableField}.{core::num::+}(2);
-  let final self::Class? #t34 = nullableClass in #t34.{core::Object::==}(null) ?{core::num?} null : #t34.{self::Class::nullableField} = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+                                 ^" in #t31.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t34 = nullableClass in #t34 == null ?{core::num?} null : #t34.{self::Class::nullableField} = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nullableClass?.nullableField += 2; // error
-                               ^" in let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                               ^" in (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableClass?.nullableField += 2; // error
-                               ^" in #t34.{self::Class::nullableField}.{core::num::+}(2);
-  let final self::Class? #t37 = nullableClass in #t37.{core::Object::==}(null) ?{core::int?} null : #t37.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t37.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t38 = nullableClass in #t38.{core::Object::==}(null) ?{core::int?} null : #t38.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t38.{self::Class::nullableField} = 0 : null;
-  let final self::Class? #t39 = nullableClass in #t39.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t40 = #t39{self::Class}.{self::Class::nonNullableClass} in #t40.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t40.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t41 = nullableClass in #t41.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t42 = #t41{self::Class}.{self::Class::nonNullableClass} in #t42.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t42.{self::Class::nullableField} = 0 : null;
+                               ^" in #t34.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t37 = nullableClass in #t37 == null ?{core::int?} null : #t37.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t37.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t38 = nullableClass in #t38 == null ?{core::int?} null : #t38.{self::Class::nullableField}{core::int?} == null ?{core::int} #t38.{self::Class::nullableField} = 0 : null;
+  let final self::Class? #t39 = nullableClass in #t39 == null ?{core::int?} null : let final self::Class #t40 = #t39{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t40.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t40.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t41 = nullableClass in #t41 == null ?{core::int?} null : let final self::Class #t42 = #t41{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t42.{self::Class::nullableField}{core::int?} == null ?{core::int} #t42.{self::Class::nullableField} = 0 : null;
   let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try calling using ?.call instead.
   nullableClass(); // error
-               ^" in nullableClass.{self::Class::call}();
-  nonNullableClass.{self::Class::call}();
-  let final self::Class #t44 = nonNullableClass in #t44.{core::Object::==}(null) ?{self::Class?} null : #t44.{self::Class::nonNullableClass}.{self::Class::call}();
-  let final self::Class #t45 = nonNullableClass in #t45.{core::Object::==}(null) ?{self::Class?} null : #t45.{self::Class::nonNullableClass}.{self::Class::nonNullableClass}.{self::Class::call}();
+               ^" in nullableClass.{self::Class::call}{<nullable>}.(){() → self::Class};
+  nonNullableClass.{self::Class::call}(){() → self::Class};
+  let final self::Class #t44 = nonNullableClass in #t44 == null ?{self::Class?} null : #t44.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t45 = nonNullableClass in #t45 == null ?{self::Class?} null : #t45.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
 }
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_access.dart.weak.expect
index 3474107..bf9303e 100644
--- a/pkg/front_end/testcases/nnbd/null_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.weak.expect
@@ -125,80 +125,80 @@
 static method errors(self::Class? nullableClass, self::Class nonNullableClass, core::int? nullableInt, core::int nonNullableInt, self::NullableIndexClass? nullableNullableIndexClass) → dynamic {
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   -nullableInt; // error
-  ^" in nullableInt.{core::int::unary-}();
+  ^" in nullableInt.{core::int::unary-}(){() → core::int};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableInt + 2; // error
-              ^" in nullableInt.{core::num::+}(2);
+              ^" in nullableInt.{core::num::+}(2){(core::num) → core::num};
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt]; // error
-               ^" in nullableClass.{self::Class::[]}(nonNullableInt);
+               ^" in nullableClass.{self::Class::[]}{<nullable>}.(nonNullableInt){(core::int) → core::int};
   let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] = nonNullableInt; // error
-               ^" in nullableClass.{self::Class::[]=}(nonNullableInt, nonNullableInt);
+               ^" in nullableClass.{self::Class::[]=}{<nullable>}.(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
   let final self::Class? #t5 = nullableClass in let final core::int #t6 = nonNullableInt in let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]=}(#t6, (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+               ^" in #t5.{self::Class::[]=}{<nullable>}.(#t6, (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]}(#t6)).{core::num::+}(nonNullableInt));
+               ^" in #t5.{self::Class::[]}{<nullable>}.(#t6){(core::int) → core::int}).{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
   let final self::NullableIndexClass? #t9 = nullableNullableIndexClass in let final core::int #t10 = nonNullableInt in (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]}(#t10)).{core::num::==}(null) ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
+                            ^" in #t9.{self::NullableIndexClass::[]}{<nullable>}.(#t10){(core::int) → core::int?}) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]=}(#t10, nonNullableInt) : null;
-  let final self::Class? #t13 = nullableClass in #t13.{core::Object::==}(null) ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]}(nonNullableInt);
-  let final self::Class? #t14 = nullableClass in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]=}(nonNullableInt, nonNullableInt);
-  let final self::Class? #t15 = nullableClass in #t15.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17).{core::num::+}(nonNullableInt));
-  let final self::Class? #t18 = nullableClass in #t18.{core::Object::==}(null) ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20).{core::num::==}(null) ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt) : null;
+                            ^" in #t9.{self::NullableIndexClass::[]=}{<nullable>}.(#t10, nonNullableInt){(core::int, core::int) → void} : null;
+  let final self::Class? #t13 = nullableClass in #t13 == null ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
+  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
+  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20){(core::int) → core::int?} == null ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt){(core::int, core::int) → void} : null;
   let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField; // error
-                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField};
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}.{core::int};
   let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField = 2; // error
-                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField} = 2;
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}. = 2;
   let final self::Class? #t23 = nullableClass in let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField} = (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}. = (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}).{core::num::+}(2);
-  let final self::Class? #t26 = nullableClass in #t26.{core::Object::==}(null) ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField};
-  let final self::Class? #t27 = nullableClass in #t27.{core::Object::==}(null) ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class? #t28 = nullableClass in #t28.{core::Object::==}(null) ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}.{core::num::+}(2);
-  let final self::Class? #t29 = nullableClass in #t29.{core::Object::==}(null) ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField};
-  let final self::Class? #t30 = nullableClass in #t30.{core::Object::==}(null) ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField} = 2;
+                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}.{core::int}).{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t26 = nullableClass in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t27 = nullableClass in #t27 == null ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t28 = nullableClass in #t28 == null ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t29 = nullableClass in #t29 == null ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t30 = nullableClass in #t30 == null ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
   let final self::Class #t31 = nonNullableClass in #t31.{self::Class::nullableField} = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nonNullableClass.nullableField += 2; // error
                                  ^" in (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in #t31.{self::Class::nullableField}.{core::num::+}(2)) as{TypeError,ForNonNullableByDefault} core::int?;
-  let final self::Class? #t34 = nullableClass in #t34.{core::Object::==}(null) ?{core::num?} null : #t34.{self::Class::nullableField} = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+                                 ^" in #t31.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t34 = nullableClass in #t34 == null ?{core::num?} null : #t34.{self::Class::nullableField} = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nullableClass?.nullableField += 2; // error
                                ^" in (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableClass?.nullableField += 2; // error
-                               ^" in #t34.{self::Class::nullableField}.{core::num::+}(2)) as{TypeError,ForNonNullableByDefault} core::int?;
-  let final self::Class? #t37 = nullableClass in #t37.{core::Object::==}(null) ?{core::int?} null : #t37.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t37.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t38 = nullableClass in #t38.{core::Object::==}(null) ?{core::int?} null : #t38.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t38.{self::Class::nullableField} = 0 : null;
-  let final self::Class? #t39 = nullableClass in #t39.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t40 = #t39{self::Class}.{self::Class::nonNullableClass} in #t40.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t40.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t41 = nullableClass in #t41.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t42 = #t41{self::Class}.{self::Class::nonNullableClass} in #t42.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t42.{self::Class::nullableField} = 0 : null;
+                               ^" in #t34.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t37 = nullableClass in #t37 == null ?{core::int?} null : #t37.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t37.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t38 = nullableClass in #t38 == null ?{core::int?} null : #t38.{self::Class::nullableField}{core::int?} == null ?{core::int} #t38.{self::Class::nullableField} = 0 : null;
+  let final self::Class? #t39 = nullableClass in #t39 == null ?{core::int?} null : let final self::Class #t40 = #t39{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t40.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t40.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t41 = nullableClass in #t41 == null ?{core::int?} null : let final self::Class #t42 = #t41{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t42.{self::Class::nullableField}{core::int?} == null ?{core::int} #t42.{self::Class::nullableField} = 0 : null;
   let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try calling using ?.call instead.
   nullableClass(); // error
-               ^" in nullableClass.{self::Class::call}();
-  nonNullableClass.{self::Class::call}();
-  let final self::Class #t44 = nonNullableClass in #t44.{core::Object::==}(null) ?{self::Class?} null : #t44.{self::Class::nonNullableClass}.{self::Class::call}();
-  let final self::Class #t45 = nonNullableClass in #t45.{core::Object::==}(null) ?{self::Class?} null : #t45.{self::Class::nonNullableClass}.{self::Class::nonNullableClass}.{self::Class::call}();
+               ^" in nullableClass.{self::Class::call}{<nullable>}.(){() → self::Class};
+  nonNullableClass.{self::Class::call}(){() → self::Class};
+  let final self::Class #t44 = nonNullableClass in #t44 == null ?{self::Class?} null : #t44.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t45 = nonNullableClass in #t45 == null ?{self::Class?} null : #t45.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
 }
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_access.dart.weak.transformed.expect
index 103d267..bf9303e 100644
--- a/pkg/front_end/testcases/nnbd/null_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.weak.transformed.expect
@@ -125,80 +125,80 @@
 static method errors(self::Class? nullableClass, self::Class nonNullableClass, core::int? nullableInt, core::int nonNullableInt, self::NullableIndexClass? nullableNullableIndexClass) → dynamic {
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   -nullableInt; // error
-  ^" in nullableInt.{core::int::unary-}();
+  ^" in nullableInt.{core::int::unary-}(){() → core::int};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableInt + 2; // error
-              ^" in nullableInt.{core::num::+}(2);
+              ^" in nullableInt.{core::num::+}(2){(core::num) → core::num};
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt]; // error
-               ^" in nullableClass.{self::Class::[]}(nonNullableInt);
+               ^" in nullableClass.{self::Class::[]}{<nullable>}.(nonNullableInt){(core::int) → core::int};
   let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] = nonNullableInt; // error
-               ^" in nullableClass.{self::Class::[]=}(nonNullableInt, nonNullableInt);
+               ^" in nullableClass.{self::Class::[]=}{<nullable>}.(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
   let final self::Class? #t5 = nullableClass in let final core::int #t6 = nonNullableInt in let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]=}(#t6, (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+               ^" in #t5.{self::Class::[]=}{<nullable>}.(#t6, (let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableClass[nonNullableInt] += nonNullableInt; // error
-               ^" in #t5.{self::Class::[]}(#t6)).{core::num::+}(nonNullableInt));
+               ^" in #t5.{self::Class::[]}{<nullable>}.(#t6){(core::int) → core::int}).{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
   let final self::NullableIndexClass? #t9 = nullableNullableIndexClass in let final core::int #t10 = nonNullableInt in (let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]}(#t10)).{core::num::==}(null) ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
+                            ^" in #t9.{self::NullableIndexClass::[]}{<nullable>}.(#t10){(core::int) → core::int?}) == null ?{core::int} let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
-                            ^" in #t9.{self::NullableIndexClass::[]=}(#t10, nonNullableInt) : null;
-  let final self::Class? #t13 = nullableClass in #t13.{core::Object::==}(null) ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]}(nonNullableInt);
-  let final self::Class? #t14 = nullableClass in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]=}(nonNullableInt, nonNullableInt);
-  let final self::Class? #t15 = nullableClass in #t15.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17).{core::num::+}(nonNullableInt));
-  let final self::Class? #t18 = nullableClass in #t18.{core::Object::==}(null) ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20).{core::num::==}(null) ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt) : null;
+                            ^" in #t9.{self::NullableIndexClass::[]=}{<nullable>}.(#t10, nonNullableInt){(core::int, core::int) → void} : null;
+  let final self::Class? #t13 = nullableClass in #t13 == null ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
+  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
+  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20){(core::int) → core::int?} == null ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt){(core::int, core::int) → void} : null;
   let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField; // error
-                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField};
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}.{core::int};
   let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField = 2; // error
-                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField} = 2;
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}. = 2;
   let final self::Class? #t23 = nullableClass in let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField} = (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}. = (let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try accessing using ?. instead.
   nullableClass.nonNullableField += 2; // error
-                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}).{core::num::+}(2);
-  let final self::Class? #t26 = nullableClass in #t26.{core::Object::==}(null) ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField};
-  let final self::Class? #t27 = nullableClass in #t27.{core::Object::==}(null) ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class? #t28 = nullableClass in #t28.{core::Object::==}(null) ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}.{core::num::+}(2);
-  let final self::Class? #t29 = nullableClass in #t29.{core::Object::==}(null) ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField};
-  let final self::Class? #t30 = nullableClass in #t30.{core::Object::==}(null) ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField} = 2;
+                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}{<nullable>}.{core::int}).{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t26 = nullableClass in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t27 = nullableClass in #t27 == null ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t28 = nullableClass in #t28 == null ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t29 = nullableClass in #t29 == null ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t30 = nullableClass in #t30 == null ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
   let final self::Class #t31 = nonNullableClass in #t31.{self::Class::nullableField} = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                                 ^" in (let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nonNullableClass.nullableField += 2; // error
-                                 ^" in #t31.{self::Class::nullableField}.{core::num::+}(2);
-  let final self::Class? #t34 = nullableClass in #t34.{core::Object::==}(null) ?{core::num?} null : #t34.{self::Class::nullableField} = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+                                 ^" in #t31.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t34 = nullableClass in #t34 == null ?{core::num?} null : #t34.{self::Class::nullableField} = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
   nullableClass?.nullableField += 2; // error
-                               ^" in let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+                               ^" in (let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   nullableClass?.nullableField += 2; // error
-                               ^" in #t34.{self::Class::nullableField}.{core::num::+}(2);
-  let final self::Class? #t37 = nullableClass in #t37.{core::Object::==}(null) ?{core::int?} null : #t37.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t37.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t38 = nullableClass in #t38.{core::Object::==}(null) ?{core::int?} null : #t38.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t38.{self::Class::nullableField} = 0 : null;
-  let final self::Class? #t39 = nullableClass in #t39.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t40 = #t39{self::Class}.{self::Class::nonNullableClass} in #t40.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t40.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t41 = nullableClass in #t41.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t42 = #t41{self::Class}.{self::Class::nonNullableClass} in #t42.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t42.{self::Class::nullableField} = 0 : null;
+                               ^" in #t34.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num}) as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t37 = nullableClass in #t37 == null ?{core::int?} null : #t37.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t37.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t38 = nullableClass in #t38 == null ?{core::int?} null : #t38.{self::Class::nullableField}{core::int?} == null ?{core::int} #t38.{self::Class::nullableField} = 0 : null;
+  let final self::Class? #t39 = nullableClass in #t39 == null ?{core::int?} null : let final self::Class #t40 = #t39{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t40.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t40.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t41 = nullableClass in #t41 == null ?{core::int?} null : let final self::Class #t42 = #t41{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t42.{self::Class::nullableField}{core::int?} == null ?{core::int} #t42.{self::Class::nullableField} = 0 : null;
   let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try calling using ?.call instead.
   nullableClass(); // error
-               ^" in nullableClass.{self::Class::call}();
-  nonNullableClass.{self::Class::call}();
-  let final self::Class #t44 = nonNullableClass in #t44.{core::Object::==}(null) ?{self::Class?} null : #t44.{self::Class::nonNullableClass}.{self::Class::call}();
-  let final self::Class #t45 = nonNullableClass in #t45.{core::Object::==}(null) ?{self::Class?} null : #t45.{self::Class::nonNullableClass}.{self::Class::nonNullableClass}.{self::Class::call}();
+               ^" in nullableClass.{self::Class::call}{<nullable>}.(){() → self::Class};
+  nonNullableClass.{self::Class::call}(){() → self::Class};
+  let final self::Class #t44 = nonNullableClass in #t44 == null ?{self::Class?} null : #t44.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t45 = nonNullableClass in #t45 == null ?{self::Class?} null : #t45.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
 }
diff --git a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.strong.expect
index 4c16033..ce3973c 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.strong.expect
@@ -10,11 +10,11 @@
   get getter1() → self::Class
     return this;
   get getter2() → self::Class?
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class?};
 }
 static method main() → dynamic {
   self::Class? c = new self::Class::•() as{ForNonNullableByDefault} self::Class?;
-  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t2 = #t1{self::Class}.{self::Class::getter1}.{self::Class::getter2} in #t2.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t3 = #t2{self::Class}.{self::Class::getter1}.{self::Class::getter2} in #t3.{core::Object::==}(null) ?{self::Class?} null : #t3{self::Class}.{self::Class::field} = c{self::Class};
+  let final self::Class? #t1 = c in #t1 == null ?{self::Class?} null : let final self::Class? #t2 = #t1{self::Class}.{self::Class::getter1}{self::Class}.{self::Class::getter2}{self::Class?} in #t2 == null ?{self::Class?} null : let final self::Class? #t3 = #t2{self::Class}.{self::Class::getter1}{self::Class}.{self::Class::getter2}{self::Class?} in #t3 == null ?{self::Class?} null : #t3{self::Class}.{self::Class::field} = c{self::Class};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.strong.transformed.expect
index 267161a..5b52dd0 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.strong.transformed.expect
@@ -10,11 +10,11 @@
   get getter1() → self::Class
     return this;
   get getter2() → self::Class?
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class?};
 }
 static method main() → dynamic {
   self::Class? c = new self::Class::•();
-  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t2 = #t1{self::Class}.{self::Class::getter1}.{self::Class::getter2} in #t2.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t3 = #t2{self::Class}.{self::Class::getter1}.{self::Class::getter2} in #t3.{core::Object::==}(null) ?{self::Class?} null : #t3{self::Class}.{self::Class::field} = c{self::Class};
+  let final self::Class? #t1 = c in #t1 == null ?{self::Class?} null : let final self::Class? #t2 = #t1{self::Class}.{self::Class::getter1}{self::Class}.{self::Class::getter2}{self::Class?} in #t2 == null ?{self::Class?} null : let final self::Class? #t3 = #t2{self::Class}.{self::Class::getter1}{self::Class}.{self::Class::getter2}{self::Class?} in #t3 == null ?{self::Class?} null : #t3{self::Class}.{self::Class::field} = c{self::Class};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.expect
index 4c16033..ce3973c 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.expect
@@ -10,11 +10,11 @@
   get getter1() → self::Class
     return this;
   get getter2() → self::Class?
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class?};
 }
 static method main() → dynamic {
   self::Class? c = new self::Class::•() as{ForNonNullableByDefault} self::Class?;
-  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t2 = #t1{self::Class}.{self::Class::getter1}.{self::Class::getter2} in #t2.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t3 = #t2{self::Class}.{self::Class::getter1}.{self::Class::getter2} in #t3.{core::Object::==}(null) ?{self::Class?} null : #t3{self::Class}.{self::Class::field} = c{self::Class};
+  let final self::Class? #t1 = c in #t1 == null ?{self::Class?} null : let final self::Class? #t2 = #t1{self::Class}.{self::Class::getter1}{self::Class}.{self::Class::getter2}{self::Class?} in #t2 == null ?{self::Class?} null : let final self::Class? #t3 = #t2{self::Class}.{self::Class::getter1}{self::Class}.{self::Class::getter2}{self::Class?} in #t3 == null ?{self::Class?} null : #t3{self::Class}.{self::Class::field} = c{self::Class};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.transformed.expect
index 267161a..5b52dd0 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.transformed.expect
@@ -10,11 +10,11 @@
   get getter1() → self::Class
     return this;
   get getter2() → self::Class?
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class?};
 }
 static method main() → dynamic {
   self::Class? c = new self::Class::•();
-  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t2 = #t1{self::Class}.{self::Class::getter1}.{self::Class::getter2} in #t2.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t3 = #t2{self::Class}.{self::Class::getter1}.{self::Class::getter2} in #t3.{core::Object::==}(null) ?{self::Class?} null : #t3{self::Class}.{self::Class::field} = c{self::Class};
+  let final self::Class? #t1 = c in #t1 == null ?{self::Class?} null : let final self::Class? #t2 = #t1{self::Class}.{self::Class::getter1}{self::Class}.{self::Class::getter2}{self::Class?} in #t2 == null ?{self::Class?} null : let final self::Class? #t3 = #t2{self::Class}.{self::Class::getter1}{self::Class}.{self::Class::getter2}{self::Class?} in #t3 == null ?{self::Class?} null : #t3{self::Class}.{self::Class::field} = c{self::Class};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.strong.expect
index df91c3c..9811bce 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.strong.expect
@@ -86,13 +86,13 @@
   self::C::staticMember;
   self::C::staticMember = 42;
   self::C::staticMethod();
-  self::C::staticMember.{core::int::isEven};
-  self::C::staticMember.{core::int::toString}();
-  self::C::property.{core::List::[]}(0);
-  self::C::property.{core::List::[]=}(0, 0);
-  let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2).{core::num::==}(null) ?{core::int} #t1.{core::Map::[]=}(#t2, 0) : null;
-  self::C::staticMember2.{core::num::==}(null) ?{core::int} self::C::staticMember2 = 42 : null;
-  self::C::staticMember = self::C::staticMember.{core::num::+}(2);
-  self::C::staticMember = self::C::staticMember.{core::num::+}(1);
-  self::C::staticMember = self::C::staticMember.{core::num::-}(1);
+  self::C::staticMember.{core::int::isEven}{core::bool};
+  self::C::staticMember.{core::int::toString}(){() → core::String};
+  self::C::property.{core::List::[]}(0){(core::int) → core::int};
+  self::C::property.{core::List::[]=}(0, 0){(core::int, core::int) → void};
+  let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2){(core::Object?) → core::int?} == null ?{core::int} #t1.{core::Map::[]=}(#t2, 0){(core::int, core::int?) → void} : null;
+  self::C::staticMember2 == null ?{core::int} self::C::staticMember2 = 42 : null;
+  self::C::staticMember = self::C::staticMember.{core::num::+}(2){(core::num) → core::int};
+  self::C::staticMember = self::C::staticMember.{core::num::+}(1){(core::num) → core::int};
+  self::C::staticMember = self::C::staticMember.{core::num::-}(1){(core::num) → core::int};
 }
diff --git a/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.strong.transformed.expect
index 51e735b..551088b 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.strong.transformed.expect
@@ -86,15 +86,15 @@
   self::C::staticMember;
   self::C::staticMember = 42;
   self::C::staticMethod();
-  self::C::staticMember.{core::int::isEven};
-  self::C::staticMember.{core::int::toString}();
-  self::C::property.{core::List::[]}(0);
-  self::C::property.{core::List::[]=}(0, 0);
-  let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2).{core::num::==}(null) ?{core::int} #t1.{core::Map::[]=}(#t2, 0) : null;
-  self::C::staticMember2.{core::num::==}(null) ?{core::int} self::C::staticMember2 = 42 : null;
-  self::C::staticMember = self::C::staticMember.{core::num::+}(2);
-  self::C::staticMember = self::C::staticMember.{core::num::+}(1);
-  self::C::staticMember = self::C::staticMember.{core::num::-}(1);
+  self::C::staticMember.{core::int::isEven}{core::bool};
+  self::C::staticMember.{core::int::toString}(){() → core::String};
+  self::C::property.{core::List::[]}(0){(core::int) → core::int};
+  self::C::property.{core::List::[]=}(0, 0){(core::int, core::int) → void};
+  let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2){(core::Object?) → core::int?} == null ?{core::int} #t1.{core::Map::[]=}(#t2, 0){(core::int, core::int?) → void} : null;
+  self::C::staticMember2 == null ?{core::int} self::C::staticMember2 = 42 : null;
+  self::C::staticMember = self::C::staticMember.{core::num::+}(2){(core::num) → core::int};
+  self::C::staticMember = self::C::staticMember.{core::num::+}(1){(core::num) → core::int};
+  self::C::staticMember = self::C::staticMember.{core::num::-}(1){(core::num) → core::int};
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.weak.expect
index df91c3c..9811bce 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.weak.expect
@@ -86,13 +86,13 @@
   self::C::staticMember;
   self::C::staticMember = 42;
   self::C::staticMethod();
-  self::C::staticMember.{core::int::isEven};
-  self::C::staticMember.{core::int::toString}();
-  self::C::property.{core::List::[]}(0);
-  self::C::property.{core::List::[]=}(0, 0);
-  let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2).{core::num::==}(null) ?{core::int} #t1.{core::Map::[]=}(#t2, 0) : null;
-  self::C::staticMember2.{core::num::==}(null) ?{core::int} self::C::staticMember2 = 42 : null;
-  self::C::staticMember = self::C::staticMember.{core::num::+}(2);
-  self::C::staticMember = self::C::staticMember.{core::num::+}(1);
-  self::C::staticMember = self::C::staticMember.{core::num::-}(1);
+  self::C::staticMember.{core::int::isEven}{core::bool};
+  self::C::staticMember.{core::int::toString}(){() → core::String};
+  self::C::property.{core::List::[]}(0){(core::int) → core::int};
+  self::C::property.{core::List::[]=}(0, 0){(core::int, core::int) → void};
+  let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2){(core::Object?) → core::int?} == null ?{core::int} #t1.{core::Map::[]=}(#t2, 0){(core::int, core::int?) → void} : null;
+  self::C::staticMember2 == null ?{core::int} self::C::staticMember2 = 42 : null;
+  self::C::staticMember = self::C::staticMember.{core::num::+}(2){(core::num) → core::int};
+  self::C::staticMember = self::C::staticMember.{core::num::+}(1){(core::num) → core::int};
+  self::C::staticMember = self::C::staticMember.{core::num::-}(1){(core::num) → core::int};
 }
diff --git a/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.weak.transformed.expect
index 51e735b..551088b 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.weak.transformed.expect
@@ -86,15 +86,15 @@
   self::C::staticMember;
   self::C::staticMember = 42;
   self::C::staticMethod();
-  self::C::staticMember.{core::int::isEven};
-  self::C::staticMember.{core::int::toString}();
-  self::C::property.{core::List::[]}(0);
-  self::C::property.{core::List::[]=}(0, 0);
-  let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2).{core::num::==}(null) ?{core::int} #t1.{core::Map::[]=}(#t2, 0) : null;
-  self::C::staticMember2.{core::num::==}(null) ?{core::int} self::C::staticMember2 = 42 : null;
-  self::C::staticMember = self::C::staticMember.{core::num::+}(2);
-  self::C::staticMember = self::C::staticMember.{core::num::+}(1);
-  self::C::staticMember = self::C::staticMember.{core::num::-}(1);
+  self::C::staticMember.{core::int::isEven}{core::bool};
+  self::C::staticMember.{core::int::toString}(){() → core::String};
+  self::C::property.{core::List::[]}(0){(core::int) → core::int};
+  self::C::property.{core::List::[]=}(0, 0){(core::int, core::int) → void};
+  let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2){(core::Object?) → core::int?} == null ?{core::int} #t1.{core::Map::[]=}(#t2, 0){(core::int, core::int?) → void} : null;
+  self::C::staticMember2 == null ?{core::int} self::C::staticMember2 = 42 : null;
+  self::C::staticMember = self::C::staticMember.{core::num::+}(2){(core::num) → core::int};
+  self::C::staticMember = self::C::staticMember.{core::num::+}(1){(core::num) → core::int};
+  self::C::staticMember = self::C::staticMember.{core::num::-}(1){(core::num) → core::int};
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.strong.expect
index 2c133c7..aac887e 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.strong.expect
@@ -124,21 +124,21 @@
   get property() → self::C
     return this;
   method test() → dynamic {
-    this.{self::C::m1};
+    this.{self::C::m1}{core::int?};
     this.{self::C::m1} = 42;
-    this.{self::C::method}();
-    this.{self::C::property}.{self::C::m1};
-    this.{self::C::property}.{self::C::method}();
-    this.{self::C::[]}(0);
-    this.{self::C::[]=}(0, 0);
-    let final core::int #t1 = 0 in this.{self::C::[]}(#t1).{core::num::==}(null) ?{core::int} this.{self::C::[]=}(#t1, 0) : null;
-    this.{self::C::property}.{self::C::[]}(0);
-    this.{self::C::property}.{self::C::[]=}(0, 0);
-    let final self::C #t2 = this.{self::C::property} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3).{core::num::==}(null) ?{core::int} #t2.{self::C::[]=}(#t3, 0) : null;
-    this.{self::C::m1}.{core::num::==}(null) ?{core::int} this.{self::C::m1} = 42 : null;
-    this.{self::C::m2} = this.{self::C::m2}.{core::num::+}(2);
-    this.{self::C::m2} = this.{self::C::m2}.{core::num::+}(1);
-    this.{self::C::m2} = this.{self::C::m2}.{core::num::-}(1);
+    this.{self::C::method}(){() → dynamic};
+    this.{self::C::property}{self::C}.{self::C::m1}{core::int?};
+    this.{self::C::property}{self::C}.{self::C::method}(){() → dynamic};
+    this.{self::C::[]}(0){(core::int) → core::int?};
+    this.{self::C::[]=}(0, 0){(core::int, core::int) → void};
+    let final core::int #t1 = 0 in this.{self::C::[]}(#t1){(core::int) → core::int?} == null ?{core::int} this.{self::C::[]=}(#t1, 0){(core::int, core::int) → void} : null;
+    this.{self::C::property}{self::C}.{self::C::[]}(0){(core::int) → core::int?};
+    this.{self::C::property}{self::C}.{self::C::[]=}(0, 0){(core::int, core::int) → void};
+    let final self::C #t2 = this.{self::C::property}{self::C} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3){(core::int) → core::int?} == null ?{core::int} #t2.{self::C::[]=}(#t3, 0){(core::int, core::int) → void} : null;
+    this.{self::C::m1}{core::int?} == null ?{core::int} this.{self::C::m1} = 42 : null;
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(2){(core::num) → core::int};
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::-}(1){(core::num) → core::int};
     this;
   }
   operator [](core::int index) → core::int?
@@ -153,18 +153,18 @@
   get property() → self::D
     return this;
   method test() → dynamic {
-    this.{self::D::[]}(0);
-    this.{self::D::[]=}(0, 0);
-    let final core::int #t4 = 0 in this.{self::D::[]=}(#t4, this.{self::D::[]}(#t4).{core::num::+}(0));
-    this.{self::D::property}.{self::D::[]}(0);
-    this.{self::D::property}.{self::D::[]=}(0, 0);
-    let final self::D #t5 = this.{self::D::property} in let final core::int #t6 = 0 in #t5.{self::D::[]=}(#t6, #t5.{self::D::[]}(#t6).{core::num::+}(0));
+    this.{self::D::[]}(0){(core::int) → core::int};
+    this.{self::D::[]=}(0, 0){(core::int, core::int) → void};
+    let final core::int #t4 = 0 in this.{self::D::[]=}(#t4, this.{self::D::[]}(#t4){(core::int) → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int, core::int) → void};
+    this.{self::D::property}{self::D}.{self::D::[]}(0){(core::int) → core::int};
+    this.{self::D::property}{self::D}.{self::D::[]=}(0, 0){(core::int, core::int) → void};
+    let final self::D #t5 = this.{self::D::property}{self::D} in let final core::int #t6 = 0 in #t5.{self::D::[]=}(#t6, #t5.{self::D::[]}(#t6){(core::int) → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int, core::int) → void};
   }
   operator [](core::int index) → core::int
     return 0;
   operator []=(core::int index, core::int value) → void {}
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::test}();
-  new self::D::•().{self::D::test}();
+  new self::C::•().{self::C::test}(){() → dynamic};
+  new self::D::•().{self::D::test}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.strong.transformed.expect
index 992a282..5a45d00 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.strong.transformed.expect
@@ -124,21 +124,21 @@
   get property() → self::C
     return this;
   method test() → dynamic {
-    this.{self::C::m1};
+    this.{self::C::m1}{core::int?};
     this.{self::C::m1} = 42;
-    this.{self::C::method}();
-    this.{self::C::property}.{self::C::m1};
-    this.{self::C::property}.{self::C::method}();
-    this.{self::C::[]}(0);
-    this.{self::C::[]=}(0, 0);
-    let final core::int #t1 = 0 in this.{self::C::[]}(#t1).{core::num::==}(null) ?{core::int} this.{self::C::[]=}(#t1, 0) : null;
-    this.{self::C::property}.{self::C::[]}(0);
-    this.{self::C::property}.{self::C::[]=}(0, 0);
-    let final self::C #t2 = this.{self::C::property} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3).{core::num::==}(null) ?{core::int} #t2.{self::C::[]=}(#t3, 0) : null;
-    this.{self::C::m1}.{core::num::==}(null) ?{core::int} this.{self::C::m1} = 42 : null;
-    this.{self::C::m2} = this.{self::C::m2}.{core::num::+}(2);
-    this.{self::C::m2} = this.{self::C::m2}.{core::num::+}(1);
-    this.{self::C::m2} = this.{self::C::m2}.{core::num::-}(1);
+    this.{self::C::method}(){() → dynamic};
+    this.{self::C::property}{self::C}.{self::C::m1}{core::int?};
+    this.{self::C::property}{self::C}.{self::C::method}(){() → dynamic};
+    this.{self::C::[]}(0){(core::int) → core::int?};
+    this.{self::C::[]=}(0, 0){(core::int, core::int) → void};
+    let final core::int #t1 = 0 in this.{self::C::[]}(#t1){(core::int) → core::int?} == null ?{core::int} this.{self::C::[]=}(#t1, 0){(core::int, core::int) → void} : null;
+    this.{self::C::property}{self::C}.{self::C::[]}(0){(core::int) → core::int?};
+    this.{self::C::property}{self::C}.{self::C::[]=}(0, 0){(core::int, core::int) → void};
+    let final self::C #t2 = this.{self::C::property}{self::C} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3){(core::int) → core::int?} == null ?{core::int} #t2.{self::C::[]=}(#t3, 0){(core::int, core::int) → void} : null;
+    this.{self::C::m1}{core::int?} == null ?{core::int} this.{self::C::m1} = 42 : null;
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(2){(core::num) → core::int};
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::-}(1){(core::num) → core::int};
     this;
   }
   operator [](core::int index) → core::int?
@@ -153,20 +153,20 @@
   get property() → self::D
     return this;
   method test() → dynamic {
-    this.{self::D::[]}(0);
-    this.{self::D::[]=}(0, 0);
-    let final core::int #t4 = 0 in this.{self::D::[]=}(#t4, this.{self::D::[]}(#t4).{core::num::+}(0));
-    this.{self::D::property}.{self::D::[]}(0);
-    this.{self::D::property}.{self::D::[]=}(0, 0);
-    let final self::D #t5 = this.{self::D::property} in let final core::int #t6 = 0 in #t5.{self::D::[]=}(#t6, #t5.{self::D::[]}(#t6).{core::num::+}(0));
+    this.{self::D::[]}(0){(core::int) → core::int};
+    this.{self::D::[]=}(0, 0){(core::int, core::int) → void};
+    let final core::int #t4 = 0 in this.{self::D::[]=}(#t4, this.{self::D::[]}(#t4){(core::int) → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int, core::int) → void};
+    this.{self::D::property}{self::D}.{self::D::[]}(0){(core::int) → core::int};
+    this.{self::D::property}{self::D}.{self::D::[]=}(0, 0){(core::int, core::int) → void};
+    let final self::D #t5 = this.{self::D::property}{self::D} in let final core::int #t6 = 0 in #t5.{self::D::[]=}(#t6, #t5.{self::D::[]}(#t6){(core::int) → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int, core::int) → void};
   }
   operator [](core::int index) → core::int
     return 0;
   operator []=(core::int index, core::int value) → void {}
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::test}();
-  new self::D::•().{self::D::test}();
+  new self::C::•().{self::C::test}(){() → dynamic};
+  new self::D::•().{self::D::test}(){() → dynamic};
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.weak.expect
index 2c133c7..aac887e 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.weak.expect
@@ -124,21 +124,21 @@
   get property() → self::C
     return this;
   method test() → dynamic {
-    this.{self::C::m1};
+    this.{self::C::m1}{core::int?};
     this.{self::C::m1} = 42;
-    this.{self::C::method}();
-    this.{self::C::property}.{self::C::m1};
-    this.{self::C::property}.{self::C::method}();
-    this.{self::C::[]}(0);
-    this.{self::C::[]=}(0, 0);
-    let final core::int #t1 = 0 in this.{self::C::[]}(#t1).{core::num::==}(null) ?{core::int} this.{self::C::[]=}(#t1, 0) : null;
-    this.{self::C::property}.{self::C::[]}(0);
-    this.{self::C::property}.{self::C::[]=}(0, 0);
-    let final self::C #t2 = this.{self::C::property} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3).{core::num::==}(null) ?{core::int} #t2.{self::C::[]=}(#t3, 0) : null;
-    this.{self::C::m1}.{core::num::==}(null) ?{core::int} this.{self::C::m1} = 42 : null;
-    this.{self::C::m2} = this.{self::C::m2}.{core::num::+}(2);
-    this.{self::C::m2} = this.{self::C::m2}.{core::num::+}(1);
-    this.{self::C::m2} = this.{self::C::m2}.{core::num::-}(1);
+    this.{self::C::method}(){() → dynamic};
+    this.{self::C::property}{self::C}.{self::C::m1}{core::int?};
+    this.{self::C::property}{self::C}.{self::C::method}(){() → dynamic};
+    this.{self::C::[]}(0){(core::int) → core::int?};
+    this.{self::C::[]=}(0, 0){(core::int, core::int) → void};
+    let final core::int #t1 = 0 in this.{self::C::[]}(#t1){(core::int) → core::int?} == null ?{core::int} this.{self::C::[]=}(#t1, 0){(core::int, core::int) → void} : null;
+    this.{self::C::property}{self::C}.{self::C::[]}(0){(core::int) → core::int?};
+    this.{self::C::property}{self::C}.{self::C::[]=}(0, 0){(core::int, core::int) → void};
+    let final self::C #t2 = this.{self::C::property}{self::C} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3){(core::int) → core::int?} == null ?{core::int} #t2.{self::C::[]=}(#t3, 0){(core::int, core::int) → void} : null;
+    this.{self::C::m1}{core::int?} == null ?{core::int} this.{self::C::m1} = 42 : null;
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(2){(core::num) → core::int};
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::-}(1){(core::num) → core::int};
     this;
   }
   operator [](core::int index) → core::int?
@@ -153,18 +153,18 @@
   get property() → self::D
     return this;
   method test() → dynamic {
-    this.{self::D::[]}(0);
-    this.{self::D::[]=}(0, 0);
-    let final core::int #t4 = 0 in this.{self::D::[]=}(#t4, this.{self::D::[]}(#t4).{core::num::+}(0));
-    this.{self::D::property}.{self::D::[]}(0);
-    this.{self::D::property}.{self::D::[]=}(0, 0);
-    let final self::D #t5 = this.{self::D::property} in let final core::int #t6 = 0 in #t5.{self::D::[]=}(#t6, #t5.{self::D::[]}(#t6).{core::num::+}(0));
+    this.{self::D::[]}(0){(core::int) → core::int};
+    this.{self::D::[]=}(0, 0){(core::int, core::int) → void};
+    let final core::int #t4 = 0 in this.{self::D::[]=}(#t4, this.{self::D::[]}(#t4){(core::int) → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int, core::int) → void};
+    this.{self::D::property}{self::D}.{self::D::[]}(0){(core::int) → core::int};
+    this.{self::D::property}{self::D}.{self::D::[]=}(0, 0){(core::int, core::int) → void};
+    let final self::D #t5 = this.{self::D::property}{self::D} in let final core::int #t6 = 0 in #t5.{self::D::[]=}(#t6, #t5.{self::D::[]}(#t6){(core::int) → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int, core::int) → void};
   }
   operator [](core::int index) → core::int
     return 0;
   operator []=(core::int index, core::int value) → void {}
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::test}();
-  new self::D::•().{self::D::test}();
+  new self::C::•().{self::C::test}(){() → dynamic};
+  new self::D::•().{self::D::test}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.weak.transformed.expect
index 992a282..5a45d00 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.weak.transformed.expect
@@ -124,21 +124,21 @@
   get property() → self::C
     return this;
   method test() → dynamic {
-    this.{self::C::m1};
+    this.{self::C::m1}{core::int?};
     this.{self::C::m1} = 42;
-    this.{self::C::method}();
-    this.{self::C::property}.{self::C::m1};
-    this.{self::C::property}.{self::C::method}();
-    this.{self::C::[]}(0);
-    this.{self::C::[]=}(0, 0);
-    let final core::int #t1 = 0 in this.{self::C::[]}(#t1).{core::num::==}(null) ?{core::int} this.{self::C::[]=}(#t1, 0) : null;
-    this.{self::C::property}.{self::C::[]}(0);
-    this.{self::C::property}.{self::C::[]=}(0, 0);
-    let final self::C #t2 = this.{self::C::property} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3).{core::num::==}(null) ?{core::int} #t2.{self::C::[]=}(#t3, 0) : null;
-    this.{self::C::m1}.{core::num::==}(null) ?{core::int} this.{self::C::m1} = 42 : null;
-    this.{self::C::m2} = this.{self::C::m2}.{core::num::+}(2);
-    this.{self::C::m2} = this.{self::C::m2}.{core::num::+}(1);
-    this.{self::C::m2} = this.{self::C::m2}.{core::num::-}(1);
+    this.{self::C::method}(){() → dynamic};
+    this.{self::C::property}{self::C}.{self::C::m1}{core::int?};
+    this.{self::C::property}{self::C}.{self::C::method}(){() → dynamic};
+    this.{self::C::[]}(0){(core::int) → core::int?};
+    this.{self::C::[]=}(0, 0){(core::int, core::int) → void};
+    let final core::int #t1 = 0 in this.{self::C::[]}(#t1){(core::int) → core::int?} == null ?{core::int} this.{self::C::[]=}(#t1, 0){(core::int, core::int) → void} : null;
+    this.{self::C::property}{self::C}.{self::C::[]}(0){(core::int) → core::int?};
+    this.{self::C::property}{self::C}.{self::C::[]=}(0, 0){(core::int, core::int) → void};
+    let final self::C #t2 = this.{self::C::property}{self::C} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3){(core::int) → core::int?} == null ?{core::int} #t2.{self::C::[]=}(#t3, 0){(core::int, core::int) → void} : null;
+    this.{self::C::m1}{core::int?} == null ?{core::int} this.{self::C::m1} = 42 : null;
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(2){(core::num) → core::int};
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::-}(1){(core::num) → core::int};
     this;
   }
   operator [](core::int index) → core::int?
@@ -153,20 +153,20 @@
   get property() → self::D
     return this;
   method test() → dynamic {
-    this.{self::D::[]}(0);
-    this.{self::D::[]=}(0, 0);
-    let final core::int #t4 = 0 in this.{self::D::[]=}(#t4, this.{self::D::[]}(#t4).{core::num::+}(0));
-    this.{self::D::property}.{self::D::[]}(0);
-    this.{self::D::property}.{self::D::[]=}(0, 0);
-    let final self::D #t5 = this.{self::D::property} in let final core::int #t6 = 0 in #t5.{self::D::[]=}(#t6, #t5.{self::D::[]}(#t6).{core::num::+}(0));
+    this.{self::D::[]}(0){(core::int) → core::int};
+    this.{self::D::[]=}(0, 0){(core::int, core::int) → void};
+    let final core::int #t4 = 0 in this.{self::D::[]=}(#t4, this.{self::D::[]}(#t4){(core::int) → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int, core::int) → void};
+    this.{self::D::property}{self::D}.{self::D::[]}(0){(core::int) → core::int};
+    this.{self::D::property}{self::D}.{self::D::[]=}(0, 0){(core::int, core::int) → void};
+    let final self::D #t5 = this.{self::D::property}{self::D} in let final core::int #t6 = 0 in #t5.{self::D::[]=}(#t6, #t5.{self::D::[]}(#t6){(core::int) → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int, core::int) → void};
   }
   operator [](core::int index) → core::int
     return 0;
   operator []=(core::int index, core::int value) → void {}
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::test}();
-  new self::D::•().{self::D::test}();
+  new self::C::•().{self::C::test}(){() → dynamic};
+  new self::D::•().{self::D::test}(){() → dynamic};
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd/null_check.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_check.dart.strong.expect
index a1827fa..bbfe2d7 100644
--- a/pkg/front_end/testcases/nnbd/null_check.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_check.dart.strong.expect
@@ -94,23 +94,23 @@
     : super core::Object::•()
     ;
   method method() → core::int?
-    return this.{self::Class::field};
+    return this.{self::Class::field}{core::int?};
   operator +(self::Class other) → self::Class
     return new self::Class::•();
 }
 static method main() → dynamic {
   self::Class? c = new self::Class::•() as{ForNonNullableByDefault} self::Class?;
   c!;
-  c{self::Class}!.{self::Class::field};
+  c{self::Class}!.{self::Class::field}{core::int?};
   c{self::Class}!.{self::Class::field} = 42;
-  c{self::Class}!.{self::Class::method};
-  c{self::Class}!.{self::Class::method}();
-  c{self::Class}!.{self::Class::field}!.{core::int::toString}();
-  c{self::Class}!.{self::Class::method}()!.{core::int::toString}();
-  c{self::Class}!.{self::Class::+}(c{self::Class});
-  c{self::Class}!.{self::Class::+}(c{self::Class}!);
-  c{self::Class}.{self::Class::+}(c{self::Class}!);
-  c{self::Class}.{self::Class::+}(c{self::Class})!;
+  c{self::Class}!.{self::Class::method}{() → core::int?};
+  c{self::Class}!.{self::Class::method}(){() → core::int?};
+  c{self::Class}!.{self::Class::field}{core::int?}!.{core::int::toString}(){() → core::String};
+  c{self::Class}!.{self::Class::method}(){() → core::int?}!.{core::int::toString}(){() → core::String};
+  c{self::Class}!.{self::Class::+}(c{self::Class}){(self::Class) → self::Class};
+  c{self::Class}!.{self::Class::+}(c{self::Class}!){(self::Class) → self::Class};
+  c{self::Class}.{self::Class::+}(c{self::Class}!){(self::Class) → self::Class};
+  c{self::Class}.{self::Class::+}(c{self::Class}){(self::Class) → self::Class}!;
   core::bool? o = true as{ForNonNullableByDefault} core::bool?;
   !o! ?{core::bool} !o{core::bool}! : !!o{core::bool}!!;
   !o{core::bool}! ?{core::bool} (!o{core::bool})! : (!(!o{core::bool})!)!;
diff --git a/pkg/front_end/testcases/nnbd/null_check.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_check.dart.strong.transformed.expect
index 26ca627..0b8c30b 100644
--- a/pkg/front_end/testcases/nnbd/null_check.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_check.dart.strong.transformed.expect
@@ -94,23 +94,23 @@
     : super core::Object::•()
     ;
   method method() → core::int?
-    return this.{self::Class::field};
+    return this.{self::Class::field}{core::int?};
   operator +(self::Class other) → self::Class
     return new self::Class::•();
 }
 static method main() → dynamic {
   self::Class? c = new self::Class::•();
   c!;
-  c{self::Class}!.{self::Class::field};
+  c{self::Class}!.{self::Class::field}{core::int?};
   c{self::Class}!.{self::Class::field} = 42;
-  c{self::Class}!.{self::Class::method};
-  c{self::Class}!.{self::Class::method}();
-  c{self::Class}!.{self::Class::field}!.{core::int::toString}();
-  c{self::Class}!.{self::Class::method}()!.{core::int::toString}();
-  c{self::Class}!.{self::Class::+}(c{self::Class});
-  c{self::Class}!.{self::Class::+}(c{self::Class}!);
-  c{self::Class}.{self::Class::+}(c{self::Class}!);
-  c{self::Class}.{self::Class::+}(c{self::Class})!;
+  c{self::Class}!.{self::Class::method}{() → core::int?};
+  c{self::Class}!.{self::Class::method}(){() → core::int?};
+  c{self::Class}!.{self::Class::field}{core::int?}!.{core::int::toString}(){() → core::String};
+  c{self::Class}!.{self::Class::method}(){() → core::int?}!.{core::int::toString}(){() → core::String};
+  c{self::Class}!.{self::Class::+}(c{self::Class}){(self::Class) → self::Class};
+  c{self::Class}!.{self::Class::+}(c{self::Class}!){(self::Class) → self::Class};
+  c{self::Class}.{self::Class::+}(c{self::Class}!){(self::Class) → self::Class};
+  c{self::Class}.{self::Class::+}(c{self::Class}){(self::Class) → self::Class}!;
   core::bool? o = true;
   !o! ?{core::bool} !o{core::bool}! : !!o{core::bool}!!;
   !o{core::bool}! ?{core::bool} (!o{core::bool})! : (!(!o{core::bool})!)!;
diff --git a/pkg/front_end/testcases/nnbd/null_check.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_check.dart.weak.expect
index a1827fa..bbfe2d7 100644
--- a/pkg/front_end/testcases/nnbd/null_check.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_check.dart.weak.expect
@@ -94,23 +94,23 @@
     : super core::Object::•()
     ;
   method method() → core::int?
-    return this.{self::Class::field};
+    return this.{self::Class::field}{core::int?};
   operator +(self::Class other) → self::Class
     return new self::Class::•();
 }
 static method main() → dynamic {
   self::Class? c = new self::Class::•() as{ForNonNullableByDefault} self::Class?;
   c!;
-  c{self::Class}!.{self::Class::field};
+  c{self::Class}!.{self::Class::field}{core::int?};
   c{self::Class}!.{self::Class::field} = 42;
-  c{self::Class}!.{self::Class::method};
-  c{self::Class}!.{self::Class::method}();
-  c{self::Class}!.{self::Class::field}!.{core::int::toString}();
-  c{self::Class}!.{self::Class::method}()!.{core::int::toString}();
-  c{self::Class}!.{self::Class::+}(c{self::Class});
-  c{self::Class}!.{self::Class::+}(c{self::Class}!);
-  c{self::Class}.{self::Class::+}(c{self::Class}!);
-  c{self::Class}.{self::Class::+}(c{self::Class})!;
+  c{self::Class}!.{self::Class::method}{() → core::int?};
+  c{self::Class}!.{self::Class::method}(){() → core::int?};
+  c{self::Class}!.{self::Class::field}{core::int?}!.{core::int::toString}(){() → core::String};
+  c{self::Class}!.{self::Class::method}(){() → core::int?}!.{core::int::toString}(){() → core::String};
+  c{self::Class}!.{self::Class::+}(c{self::Class}){(self::Class) → self::Class};
+  c{self::Class}!.{self::Class::+}(c{self::Class}!){(self::Class) → self::Class};
+  c{self::Class}.{self::Class::+}(c{self::Class}!){(self::Class) → self::Class};
+  c{self::Class}.{self::Class::+}(c{self::Class}){(self::Class) → self::Class}!;
   core::bool? o = true as{ForNonNullableByDefault} core::bool?;
   !o! ?{core::bool} !o{core::bool}! : !!o{core::bool}!!;
   !o{core::bool}! ?{core::bool} (!o{core::bool})! : (!(!o{core::bool})!)!;
diff --git a/pkg/front_end/testcases/nnbd/null_check.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_check.dart.weak.transformed.expect
index 26ca627..0b8c30b 100644
--- a/pkg/front_end/testcases/nnbd/null_check.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_check.dart.weak.transformed.expect
@@ -94,23 +94,23 @@
     : super core::Object::•()
     ;
   method method() → core::int?
-    return this.{self::Class::field};
+    return this.{self::Class::field}{core::int?};
   operator +(self::Class other) → self::Class
     return new self::Class::•();
 }
 static method main() → dynamic {
   self::Class? c = new self::Class::•();
   c!;
-  c{self::Class}!.{self::Class::field};
+  c{self::Class}!.{self::Class::field}{core::int?};
   c{self::Class}!.{self::Class::field} = 42;
-  c{self::Class}!.{self::Class::method};
-  c{self::Class}!.{self::Class::method}();
-  c{self::Class}!.{self::Class::field}!.{core::int::toString}();
-  c{self::Class}!.{self::Class::method}()!.{core::int::toString}();
-  c{self::Class}!.{self::Class::+}(c{self::Class});
-  c{self::Class}!.{self::Class::+}(c{self::Class}!);
-  c{self::Class}.{self::Class::+}(c{self::Class}!);
-  c{self::Class}.{self::Class::+}(c{self::Class})!;
+  c{self::Class}!.{self::Class::method}{() → core::int?};
+  c{self::Class}!.{self::Class::method}(){() → core::int?};
+  c{self::Class}!.{self::Class::field}{core::int?}!.{core::int::toString}(){() → core::String};
+  c{self::Class}!.{self::Class::method}(){() → core::int?}!.{core::int::toString}(){() → core::String};
+  c{self::Class}!.{self::Class::+}(c{self::Class}){(self::Class) → self::Class};
+  c{self::Class}!.{self::Class::+}(c{self::Class}!){(self::Class) → self::Class};
+  c{self::Class}.{self::Class::+}(c{self::Class}!){(self::Class) → self::Class};
+  c{self::Class}.{self::Class::+}(c{self::Class}){(self::Class) → self::Class}!;
   core::bool? o = true;
   !o! ?{core::bool} !o{core::bool}! : !!o{core::bool}!!;
   !o{core::bool}! ?{core::bool} (!o{core::bool})! : (!(!o{core::bool})!)!;
diff --git a/pkg/front_end/testcases/nnbd/null_check_context.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_check_context.dart.strong.expect
index a9e189a..010a0ff 100644
--- a/pkg/front_end/testcases/nnbd/null_check_context.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_check_context.dart.strong.expect
@@ -8,6 +8,6 @@
     ;
   abstract method bar<T extends core::Object? = dynamic>() → self::A::bar::T%;
   method foo() → core::String
-    return this.{self::A::bar}<core::String?>()!;
+    return this.{self::A::bar}<core::String?>(){() → core::String?}!;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/null_check_context.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_check_context.dart.strong.transformed.expect
index a9e189a..010a0ff 100644
--- a/pkg/front_end/testcases/nnbd/null_check_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_check_context.dart.strong.transformed.expect
@@ -8,6 +8,6 @@
     ;
   abstract method bar<T extends core::Object? = dynamic>() → self::A::bar::T%;
   method foo() → core::String
-    return this.{self::A::bar}<core::String?>()!;
+    return this.{self::A::bar}<core::String?>(){() → core::String?}!;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/null_check_context.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_check_context.dart.weak.expect
index a9e189a..010a0ff 100644
--- a/pkg/front_end/testcases/nnbd/null_check_context.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_check_context.dart.weak.expect
@@ -8,6 +8,6 @@
     ;
   abstract method bar<T extends core::Object? = dynamic>() → self::A::bar::T%;
   method foo() → core::String
-    return this.{self::A::bar}<core::String?>()!;
+    return this.{self::A::bar}<core::String?>(){() → core::String?}!;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/null_check_context.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_check_context.dart.weak.transformed.expect
index a9e189a..010a0ff 100644
--- a/pkg/front_end/testcases/nnbd/null_check_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_check_context.dart.weak.transformed.expect
@@ -8,6 +8,6 @@
     ;
   abstract method bar<T extends core::Object? = dynamic>() → self::A::bar::T%;
   method foo() → core::String
-    return this.{self::A::bar}<core::String?>()!;
+    return this.{self::A::bar}<core::String?>(){() → core::String?}!;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.expect
index d6e1e8e..ed3bb8d 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.expect
@@ -39,25 +39,25 @@
   get property2() → self::Class2
     return new self::Class2::•();
   get nullable1() → self::Class1?
-    return this.{self::Class1::property1};
+    return this.{self::Class1::property1}{self::Class1};
   set nullable1(self::Class1? value) → void {
     this.{self::Class1::property} = value;
   }
   method nonNullable1Method() → self::Class1
-    return this.{self::Class1::nonNullable1};
+    return this.{self::Class1::nonNullable1}{self::Class1};
   operator [](self::Class1? key) → self::Class1?
-    return this.{self::Class1::nullable1};
+    return this.{self::Class1::nullable1}{self::Class1?};
   operator []=(self::Class1? key, self::Class1? value) → void {
     this.{self::Class1::property} = value;
   }
   operator +(core::int value) → self::Class1?
-    return this.{self::Class1::nullable1};
+    return this.{self::Class1::nullable1}{self::Class1?};
   operator unary-() → self::Class1?
-    return this.{self::Class1::nullable1};
+    return this.{self::Class1::nullable1}{self::Class1?};
   get nonNullable1() → self::Class1
-    return this.{self::Class1::property1};
+    return this.{self::Class1::property1}{self::Class1};
   get nonNullable2() → self::Class2
-    return this.{self::Class1::property2};
+    return this.{self::Class1::property2}{self::Class2};
 }
 class Class2 extends core::Object {
   synthetic constructor •() → self::Class2
@@ -67,17 +67,17 @@
     return this;
   set property(self::Class2 value) → void {}
   method nonNullable2Method() → self::Class2
-    return this.{self::Class2::nonNullable2};
+    return this.{self::Class2::nonNullable2}{self::Class2};
   operator [](self::Class2? key) → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   operator []=(self::Class2? key, self::Class2? value) → void
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   operator +(core::int value) → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   operator unary-() → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   get nonNullable2() → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   set nonNullable2(self::Class2 value) → void {
     this.{self::Class2::property} = value;
   }
@@ -89,7 +89,7 @@
   get property() → self::Class2?
     return null;
   operator [](self::Class3? key) → self::Class2?
-    return this.{self::Class3::property};
+    return this.{self::Class3::property}{self::Class2?};
 }
 static method main() → dynamic {
   self::propertyAccess(null);
@@ -99,168 +99,168 @@
 }
 static method propertyAccess(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t1 = n1 in #t1.{core::Object::==}(null) ?{self::Class1?} null : #t1{self::Class1}.{self::Class1::nullable1};
-  let final self::Class1? #t2 = n1 in #t2.{core::Object::==}(null) ?{self::Class1?} null : #t2{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t3 = n1 in #t3.{core::Object::==}(null) ?{self::Class1?} null : #t3{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t4 = n1 in #t4.{core::Object::==}(null) ?{self::Class1?} null : #t4{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t5 = n1 in #t5.{core::Object::==}(null) ?{self::Class1?} null : #t5{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t6 = n1 in #t6.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t7 = #t6{self::Class1}.{self::Class1::nullable1} in #t7.{core::Object::==}(null) ?{self::Class1?} null : #t7{self::Class1}.{self::Class1::nullable1};
-  let final self::Class1? #t8 = n1 in #t8.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t9 = #t8{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t9.{core::Object::==}(null) ?{self::Class1?} null : #t9{self::Class1}.{self::Class1::nullable1};
-  let final self::Class1? #t10 = n1 in #t10.{core::Object::==}(null) ?{self::Class1?} null : #t10{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t11 = n1 in #t11.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1} in #t12.{core::Object::==}(null) ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t14.{core::Object::==}(null) ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16.{core::Object::==}(null) ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1} in #t15.{core::Object::==}(null) ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1};
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : #t1{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : #t2{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : #t3{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t4 = n1 in #t4 == null ?{self::Class1?} null : #t4{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t5 = n1 in #t5 == null ?{self::Class1?} null : #t5{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : let final self::Class1? #t7 = #t6{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t7 == null ?{self::Class1?} null : #t7{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = #t8{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t9 == null ?{self::Class1?} null : #t9{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : #t10{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t11 = n1 in #t11 == null ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t12 == null ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t14 == null ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16 == null ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t15 == null ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1}{self::Class1?};
   self::throws(() → void => let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1});
+                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
   self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}()).{self::Class1::nullable1});
-  nullable1 = let final self::Class1? #t21 = n1 in #t21.{core::Object::==}(null) ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t22 = n1 in #t22.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1} in #t23.{core::Object::==}(null) ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t25.{core::Object::==}(null) ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t26 = n1 in #t26.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1} in #t27.{core::Object::==}(null) ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t29 = n1 in #t29.{core::Object::==}(null) ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t30 = n1 in #t30.{core::Object::==}(null) ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t31 = n1 in #t31.{core::Object::==}(null) ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t33 = n1 in #t33.{core::Object::==}(null) ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t34 = n1 in #t34.{core::Object::==}(null) ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t35 = n1 in #t35.{core::Object::==}(null) ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t37 = n1 in #t37.{core::Object::==}(null) ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t40 = n1 in #t40.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t41.{core::Object::==}(null) ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t43 = n1 in #t43.{core::Object::==}(null) ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t44 = n1 in #t44.{core::Object::==}(null) ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t46 = n1 in #t46.{core::Object::==}(null) ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t47 = n1 in #t47.{core::Object::==}(null) ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t48 = n1 in #t48.{core::Object::==}(null) ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t49 = n1 in #t49.{core::Object::==}(null) ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t52 = n1 in #t52.{core::Object::==}(null) ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t53 = n1 in #t53.{core::Object::==}(null) ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t60 = n1 in #t60.{core::Object::==}(null) ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t61 = n1 in #t61.{core::Object::==}(null) ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t63 = n1 in #t63.{core::Object::==}(null) ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t66 = n1 in #t66.{core::Object::==}(null) ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t67 = n1 in #t67.{core::Object::==}(null) ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t69 = n1 in #t69.{core::Object::==}(null) ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t70 = n1 in #t70.{core::Object::==}(null) ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t72 = n1 in #t72.{core::Object::==}(null) ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t73 = n1 in #t73.{core::Object::==}(null) ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t74 = n1 in #t74.{core::Object::==}(null) ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t75 = n1 in #t75.{core::Object::==}(null) ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t78 = n1 in #t78.{core::Object::==}(null) ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t79 = n1 in #t79.{core::Object::==}(null) ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}() in #t83.{core::Object::==}(null) ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}();
+                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  nullable1 = let final self::Class1? #t21 = n1 in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t85 = n1 in #t85.{core::Object::==}(null) ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  let final self::Class1? #t86 = n1 in #t86.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1) in #t87.{core::Object::==}(null) ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t88 = n1 in #t88.{core::Object::==}(null) ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t89 = n1 in #t89.{core::Object::==}(null) ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93) in #t93;
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1) in #t96.{core::Object::==}(null) ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t97 = n1 in #t97.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99).{self::Class2::+}(0));
-  nullable2 = let final self::Class1? #t100 = n1 in #t100.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102).{self::Class2::+}(0) in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103) in #t103;
-  let final self::Class1? #t105 = n1 in #t105.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106).{core::Object::==}(null) ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1) : null;
-  nullable1 = let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108) in #t109.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110) in #t110 : #t109{self::Class1};
-  let final self::Class2? #t112 = n2 in #t112.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113).{self::Class2::+}(0));
-  nullable2 = let final self::Class2? #t114 = n2 in #t114.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115).{self::Class2::+}(0) in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116) in #t116;
-  let final self::Class2? #t118 = n2 in #t118.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119).{self::Class2::+}(0));
-  nullable2 = let final self::Class2? #t120 = n2 in #t120.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121).{self::Class2::+}(0) in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122) in #t122;
-  let final self::Class2? #t124 = n2 in #t124.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125).{self::Class2::+}(1));
-  nullable2 = let final self::Class2? #t126 = n2 in #t126.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127) in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1)) in #t128;
-  let final self::Class2? #t130 = n2 in #t130.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131).{self::Class2::+}(1) in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132) in #t132;
-  nullable2 = let final self::Class2? #t134 = n2 in #t134.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135).{self::Class2::+}(1) in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136) in #t136;
-  let final self::Class1? #t138 = n1 in #t138.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140).{self::Class2::+}(1));
-  nullable2 = let final self::Class1? #t141 = n1 in #t141.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143) in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1)) in #t144;
-  let final self::Class1? #t146 = n1 in #t146.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148).{self::Class2::+}(1) in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149) in #t149;
-  nullable2 = let final self::Class1? #t151 = n1 in #t151.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153).{self::Class2::+}(1) in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154) in #t154;
-  let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2);
-  let final self::Class1? #t157 = n1 in #t157.{core::Object::==}(null) ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]=}(nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t158 = n1 in #t158.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161) in #t161;
-  let final self::Class1? #t163 = n1 in #t163.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2) in #t164.{core::Object::==}(null) ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}();
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167).{self::Class2::+}(0));
-  nullable2 = let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170).{self::Class2::+}(0) in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171) in #t171;
-  let final self::Class1? #t173 = n1 in #t173.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175).{self::Class2::+}(1));
-  nullable2 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178) in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1)) in #t179;
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183).{self::Class2::+}(1) in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184) in #t184;
-  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188).{self::Class2::+}(1) in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1) in #t192.{core::Object::==}(null) ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1) in #t194.{core::Object::==}(null) ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t195 = n1 in #t195.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1) in #t196.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198) in #t198;
-  let final self::Class1? #t200 = n1 in #t200.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1) in #t201.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1) in #t202.{core::Object::==}(null) ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t203 = n1 in #t203.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1) in #t204.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1) in #t205.{core::Object::==}(null) ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t206 = n1 in #t206.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1) in #t207.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208).{core::Object::==}(null) ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1) : null;
-  nullable1 = let final self::Class1? #t209 = n1 in #t209.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1) in #t210.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211) in #t212.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213) in #t213 : #t212{self::Class1};
-  let final self::Class3? #t215 = n3 in #t215.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3) in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217).{self::Class2::+}(0));
-  nullable2 = let final self::Class3? #t218 = n3 in #t218.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3) in #t219.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220).{self::Class2::+}(0) in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221) in #t221;
-  let final self::Class3? #t223 = n3 in #t223.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3) in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225).{self::Class2::+}(1));
-  nullable2 = let final self::Class3? #t226 = n3 in #t226.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3) in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228) in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1)) in #t229;
-  let final self::Class3? #t231 = n3 in #t231.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3) in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233).{self::Class2::+}(1) in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234) in #t234;
-  nullable2 = let final self::Class3? #t236 = n3 in #t236.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3) in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238).{self::Class2::+}(1) in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239) in #t239;
+  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t89 = n1 in #t89 == null ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93){(self::Class1?, self::Class1?) → void} in #t93;
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t96 == null ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103){(self::Class2?, self::Class2?) → void} in #t103;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108){(self::Class1?) → self::Class1?} in #t109 == null ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110){(self::Class1?, self::Class1?) → void} in #t110 : #t109{self::Class1};
+  let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t114 = n2 in #t114 == null ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116){(self::Class2?, self::Class2?) → void} in #t116;
+  let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t120 = n2 in #t120 == null ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122){(self::Class2?, self::Class2?) → void} in #t122;
+  let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t126 = n2 in #t126 == null ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127){(self::Class2?) → self::Class2} in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t128;
+  let final self::Class2? #t130 = n2 in #t130 == null ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132){(self::Class2?, self::Class2?) → void} in #t132;
+  nullable2 = let final self::Class2? #t134 = n2 in #t134 == null ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136){(self::Class2?, self::Class2?) → void} in #t136;
+  let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143){(self::Class2?) → self::Class2} in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149){(self::Class2?, self::Class2?) → void} in #t149;
+  nullable2 = let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154){(self::Class2?, self::Class2?) → void} in #t154;
+  let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
+  let final self::Class1? #t157 = n1 in #t157 == null ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t158 = n1 in #t158 == null ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161){(self::Class2?, self::Class2?) → void} in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t164 == null ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171){(self::Class2?, self::Class2?) → void} in #t171;
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178){(self::Class2?) → self::Class2} in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t179;
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184){(self::Class2?, self::Class2?) → void} in #t184;
+  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189){(self::Class2?, self::Class2?) → void} in #t189;
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t195 = n1 in #t195 == null ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t196 == null ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198){(self::Class1?, self::Class1?) → void} in #t198;
+  let final self::Class1? #t200 = n1 in #t200 == null ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t203 = n1 in #t203 == null ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t206 = n1 in #t206 == null ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t209 = n1 in #t209 == null ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211){(self::Class1?) → self::Class1?} in #t212 == null ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213){(self::Class1?, self::Class1?) → void} in #t213 : #t212{self::Class1};
+  let final self::Class3? #t215 = n3 in #t215 == null ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t218 = n3 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t219 == null ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221){(self::Class2?, self::Class2?) → void} in #t221;
+  let final self::Class3? #t223 = n3 in #t223 == null ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t226 = n3 in #t226 == null ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t227 == null ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228){(self::Class2?) → self::Class2} in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t229;
+  let final self::Class3? #t231 = n3 in #t231 == null ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t232 == null ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234){(self::Class2?, self::Class2?) → void} in #t234;
+  nullable2 = let final self::Class3? #t236 = n3 in #t236 == null ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t237 == null ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239){(self::Class2?, self::Class2?) → void} in #t239;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
   self::throws(() → void => let final Never #t241 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in (let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::+}(0));
+                                ^" in (let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
   self::throws(() → void => let final Never #t243 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in (let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::unary-}());
-  let final self::Class2? #t245 = n2 in #t245.{core::Object::==}(null) ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  nullable2 = let final self::Class2? #t246 = n2 in #t246.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}.{self::Class2::+}(0) in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
-  let final self::Class2? #t249 = n2 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  nullable2 = let final self::Class2? #t251 = n2 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  let final self::Class2? #t253 = n2 in #t253.{core::Object::==}(null) ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}.{self::Class2::+}(1);
-  nullable2 = let final self::Class2? #t254 = n2 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1) in #t255;
-  let final self::Class2? #t257 = n2 in #t257.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
-  nullable2 = let final self::Class2? #t260 = n2 in #t260.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
+               ^" in (let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
+  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t246 = n2 in #t246 == null ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
+  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t251 = n2 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t254 = n2 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2}{self::Class2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1){(core::int) → self::Class2} in #t255;
+  let final self::Class2? #t257 = n2 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
+  nullable2 = let final self::Class2? #t260 = n2 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t263 = n1 in #t263.{core::Object::==}(null) ?{self::Class1?} null : #t263.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t264 = n1 in #t264.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1} in #t265.{core::Object::==}(null) ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
-  let final self::Class1? #t266 = n1 in #t266.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t267 = #t266{self::Class1}.{self::Class1::nonNullable1} in #t267.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t267.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t268 = n1 in #t268.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t269 = #t268{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t270 = #t269.{self::Class1::nullable1} in #t270.{core::Object::==}(null) ?{self::Class1} #t269.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
-  let final self::Class1? #t271 = n1 in #t271.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273).{core::Object::==}(null) ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t274 = n1 in #t274.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276) in #t277.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278) in #t278 : #t277{self::Class1};
+  let final self::Class1? #t263 = n1 in #t263 == null ?{self::Class1?} null : #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1}{self::Class1?} in #t265 == null ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
+  let final self::Class1? #t266 = n1 in #t266 == null ?{self::Class1?} null : let final self::Class1 #t267 = #t266{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t267.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t267.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t268 = n1 in #t268 == null ?{self::Class1?} null : let final self::Class1 #t269 = #t268{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t270 = #t269.{self::Class1::nullable1}{self::Class1?} in #t270 == null ?{self::Class1} #t269.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
+  let final self::Class1? #t271 = n1 in #t271 == null ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
+  n1 = let final self::Class1? #t274 = n1 in #t274 == null ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276){(self::Class1?) → self::Class1?} in #t277 == null ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278){(self::Class1?, self::Class1?) → void} in #t278 : #t277{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.transformed.expect
index d6e1e8e..ed3bb8d 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.transformed.expect
@@ -39,25 +39,25 @@
   get property2() → self::Class2
     return new self::Class2::•();
   get nullable1() → self::Class1?
-    return this.{self::Class1::property1};
+    return this.{self::Class1::property1}{self::Class1};
   set nullable1(self::Class1? value) → void {
     this.{self::Class1::property} = value;
   }
   method nonNullable1Method() → self::Class1
-    return this.{self::Class1::nonNullable1};
+    return this.{self::Class1::nonNullable1}{self::Class1};
   operator [](self::Class1? key) → self::Class1?
-    return this.{self::Class1::nullable1};
+    return this.{self::Class1::nullable1}{self::Class1?};
   operator []=(self::Class1? key, self::Class1? value) → void {
     this.{self::Class1::property} = value;
   }
   operator +(core::int value) → self::Class1?
-    return this.{self::Class1::nullable1};
+    return this.{self::Class1::nullable1}{self::Class1?};
   operator unary-() → self::Class1?
-    return this.{self::Class1::nullable1};
+    return this.{self::Class1::nullable1}{self::Class1?};
   get nonNullable1() → self::Class1
-    return this.{self::Class1::property1};
+    return this.{self::Class1::property1}{self::Class1};
   get nonNullable2() → self::Class2
-    return this.{self::Class1::property2};
+    return this.{self::Class1::property2}{self::Class2};
 }
 class Class2 extends core::Object {
   synthetic constructor •() → self::Class2
@@ -67,17 +67,17 @@
     return this;
   set property(self::Class2 value) → void {}
   method nonNullable2Method() → self::Class2
-    return this.{self::Class2::nonNullable2};
+    return this.{self::Class2::nonNullable2}{self::Class2};
   operator [](self::Class2? key) → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   operator []=(self::Class2? key, self::Class2? value) → void
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   operator +(core::int value) → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   operator unary-() → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   get nonNullable2() → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   set nonNullable2(self::Class2 value) → void {
     this.{self::Class2::property} = value;
   }
@@ -89,7 +89,7 @@
   get property() → self::Class2?
     return null;
   operator [](self::Class3? key) → self::Class2?
-    return this.{self::Class3::property};
+    return this.{self::Class3::property}{self::Class2?};
 }
 static method main() → dynamic {
   self::propertyAccess(null);
@@ -99,168 +99,168 @@
 }
 static method propertyAccess(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t1 = n1 in #t1.{core::Object::==}(null) ?{self::Class1?} null : #t1{self::Class1}.{self::Class1::nullable1};
-  let final self::Class1? #t2 = n1 in #t2.{core::Object::==}(null) ?{self::Class1?} null : #t2{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t3 = n1 in #t3.{core::Object::==}(null) ?{self::Class1?} null : #t3{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t4 = n1 in #t4.{core::Object::==}(null) ?{self::Class1?} null : #t4{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t5 = n1 in #t5.{core::Object::==}(null) ?{self::Class1?} null : #t5{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t6 = n1 in #t6.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t7 = #t6{self::Class1}.{self::Class1::nullable1} in #t7.{core::Object::==}(null) ?{self::Class1?} null : #t7{self::Class1}.{self::Class1::nullable1};
-  let final self::Class1? #t8 = n1 in #t8.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t9 = #t8{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t9.{core::Object::==}(null) ?{self::Class1?} null : #t9{self::Class1}.{self::Class1::nullable1};
-  let final self::Class1? #t10 = n1 in #t10.{core::Object::==}(null) ?{self::Class1?} null : #t10{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t11 = n1 in #t11.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1} in #t12.{core::Object::==}(null) ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t14.{core::Object::==}(null) ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16.{core::Object::==}(null) ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1} in #t15.{core::Object::==}(null) ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1};
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : #t1{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : #t2{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : #t3{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t4 = n1 in #t4 == null ?{self::Class1?} null : #t4{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t5 = n1 in #t5 == null ?{self::Class1?} null : #t5{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : let final self::Class1? #t7 = #t6{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t7 == null ?{self::Class1?} null : #t7{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = #t8{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t9 == null ?{self::Class1?} null : #t9{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : #t10{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t11 = n1 in #t11 == null ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t12 == null ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t14 == null ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16 == null ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t15 == null ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1}{self::Class1?};
   self::throws(() → void => let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1});
+                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
   self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}()).{self::Class1::nullable1});
-  nullable1 = let final self::Class1? #t21 = n1 in #t21.{core::Object::==}(null) ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t22 = n1 in #t22.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1} in #t23.{core::Object::==}(null) ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t25.{core::Object::==}(null) ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t26 = n1 in #t26.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1} in #t27.{core::Object::==}(null) ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t29 = n1 in #t29.{core::Object::==}(null) ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t30 = n1 in #t30.{core::Object::==}(null) ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t31 = n1 in #t31.{core::Object::==}(null) ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t33 = n1 in #t33.{core::Object::==}(null) ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t34 = n1 in #t34.{core::Object::==}(null) ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t35 = n1 in #t35.{core::Object::==}(null) ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t37 = n1 in #t37.{core::Object::==}(null) ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t40 = n1 in #t40.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t41.{core::Object::==}(null) ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t43 = n1 in #t43.{core::Object::==}(null) ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t44 = n1 in #t44.{core::Object::==}(null) ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t46 = n1 in #t46.{core::Object::==}(null) ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t47 = n1 in #t47.{core::Object::==}(null) ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t48 = n1 in #t48.{core::Object::==}(null) ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t49 = n1 in #t49.{core::Object::==}(null) ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t52 = n1 in #t52.{core::Object::==}(null) ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t53 = n1 in #t53.{core::Object::==}(null) ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t60 = n1 in #t60.{core::Object::==}(null) ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t61 = n1 in #t61.{core::Object::==}(null) ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t63 = n1 in #t63.{core::Object::==}(null) ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t66 = n1 in #t66.{core::Object::==}(null) ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t67 = n1 in #t67.{core::Object::==}(null) ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t69 = n1 in #t69.{core::Object::==}(null) ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t70 = n1 in #t70.{core::Object::==}(null) ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t72 = n1 in #t72.{core::Object::==}(null) ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t73 = n1 in #t73.{core::Object::==}(null) ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t74 = n1 in #t74.{core::Object::==}(null) ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t75 = n1 in #t75.{core::Object::==}(null) ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t78 = n1 in #t78.{core::Object::==}(null) ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t79 = n1 in #t79.{core::Object::==}(null) ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}() in #t83.{core::Object::==}(null) ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}();
+                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  nullable1 = let final self::Class1? #t21 = n1 in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t85 = n1 in #t85.{core::Object::==}(null) ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  let final self::Class1? #t86 = n1 in #t86.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1) in #t87.{core::Object::==}(null) ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t88 = n1 in #t88.{core::Object::==}(null) ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t89 = n1 in #t89.{core::Object::==}(null) ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93) in #t93;
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1) in #t96.{core::Object::==}(null) ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t97 = n1 in #t97.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99).{self::Class2::+}(0));
-  nullable2 = let final self::Class1? #t100 = n1 in #t100.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102).{self::Class2::+}(0) in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103) in #t103;
-  let final self::Class1? #t105 = n1 in #t105.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106).{core::Object::==}(null) ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1) : null;
-  nullable1 = let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108) in #t109.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110) in #t110 : #t109{self::Class1};
-  let final self::Class2? #t112 = n2 in #t112.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113).{self::Class2::+}(0));
-  nullable2 = let final self::Class2? #t114 = n2 in #t114.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115).{self::Class2::+}(0) in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116) in #t116;
-  let final self::Class2? #t118 = n2 in #t118.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119).{self::Class2::+}(0));
-  nullable2 = let final self::Class2? #t120 = n2 in #t120.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121).{self::Class2::+}(0) in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122) in #t122;
-  let final self::Class2? #t124 = n2 in #t124.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125).{self::Class2::+}(1));
-  nullable2 = let final self::Class2? #t126 = n2 in #t126.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127) in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1)) in #t128;
-  let final self::Class2? #t130 = n2 in #t130.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131).{self::Class2::+}(1) in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132) in #t132;
-  nullable2 = let final self::Class2? #t134 = n2 in #t134.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135).{self::Class2::+}(1) in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136) in #t136;
-  let final self::Class1? #t138 = n1 in #t138.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140).{self::Class2::+}(1));
-  nullable2 = let final self::Class1? #t141 = n1 in #t141.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143) in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1)) in #t144;
-  let final self::Class1? #t146 = n1 in #t146.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148).{self::Class2::+}(1) in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149) in #t149;
-  nullable2 = let final self::Class1? #t151 = n1 in #t151.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153).{self::Class2::+}(1) in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154) in #t154;
-  let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2);
-  let final self::Class1? #t157 = n1 in #t157.{core::Object::==}(null) ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]=}(nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t158 = n1 in #t158.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161) in #t161;
-  let final self::Class1? #t163 = n1 in #t163.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2) in #t164.{core::Object::==}(null) ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}();
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167).{self::Class2::+}(0));
-  nullable2 = let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170).{self::Class2::+}(0) in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171) in #t171;
-  let final self::Class1? #t173 = n1 in #t173.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175).{self::Class2::+}(1));
-  nullable2 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178) in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1)) in #t179;
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183).{self::Class2::+}(1) in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184) in #t184;
-  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188).{self::Class2::+}(1) in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1) in #t192.{core::Object::==}(null) ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1) in #t194.{core::Object::==}(null) ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t195 = n1 in #t195.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1) in #t196.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198) in #t198;
-  let final self::Class1? #t200 = n1 in #t200.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1) in #t201.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1) in #t202.{core::Object::==}(null) ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t203 = n1 in #t203.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1) in #t204.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1) in #t205.{core::Object::==}(null) ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t206 = n1 in #t206.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1) in #t207.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208).{core::Object::==}(null) ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1) : null;
-  nullable1 = let final self::Class1? #t209 = n1 in #t209.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1) in #t210.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211) in #t212.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213) in #t213 : #t212{self::Class1};
-  let final self::Class3? #t215 = n3 in #t215.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3) in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217).{self::Class2::+}(0));
-  nullable2 = let final self::Class3? #t218 = n3 in #t218.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3) in #t219.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220).{self::Class2::+}(0) in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221) in #t221;
-  let final self::Class3? #t223 = n3 in #t223.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3) in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225).{self::Class2::+}(1));
-  nullable2 = let final self::Class3? #t226 = n3 in #t226.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3) in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228) in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1)) in #t229;
-  let final self::Class3? #t231 = n3 in #t231.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3) in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233).{self::Class2::+}(1) in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234) in #t234;
-  nullable2 = let final self::Class3? #t236 = n3 in #t236.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3) in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238).{self::Class2::+}(1) in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239) in #t239;
+  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t89 = n1 in #t89 == null ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93){(self::Class1?, self::Class1?) → void} in #t93;
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t96 == null ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103){(self::Class2?, self::Class2?) → void} in #t103;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108){(self::Class1?) → self::Class1?} in #t109 == null ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110){(self::Class1?, self::Class1?) → void} in #t110 : #t109{self::Class1};
+  let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t114 = n2 in #t114 == null ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116){(self::Class2?, self::Class2?) → void} in #t116;
+  let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t120 = n2 in #t120 == null ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122){(self::Class2?, self::Class2?) → void} in #t122;
+  let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t126 = n2 in #t126 == null ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127){(self::Class2?) → self::Class2} in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t128;
+  let final self::Class2? #t130 = n2 in #t130 == null ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132){(self::Class2?, self::Class2?) → void} in #t132;
+  nullable2 = let final self::Class2? #t134 = n2 in #t134 == null ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136){(self::Class2?, self::Class2?) → void} in #t136;
+  let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143){(self::Class2?) → self::Class2} in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149){(self::Class2?, self::Class2?) → void} in #t149;
+  nullable2 = let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154){(self::Class2?, self::Class2?) → void} in #t154;
+  let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
+  let final self::Class1? #t157 = n1 in #t157 == null ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t158 = n1 in #t158 == null ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161){(self::Class2?, self::Class2?) → void} in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t164 == null ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171){(self::Class2?, self::Class2?) → void} in #t171;
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178){(self::Class2?) → self::Class2} in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t179;
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184){(self::Class2?, self::Class2?) → void} in #t184;
+  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189){(self::Class2?, self::Class2?) → void} in #t189;
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t195 = n1 in #t195 == null ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t196 == null ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198){(self::Class1?, self::Class1?) → void} in #t198;
+  let final self::Class1? #t200 = n1 in #t200 == null ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t203 = n1 in #t203 == null ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t206 = n1 in #t206 == null ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t209 = n1 in #t209 == null ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211){(self::Class1?) → self::Class1?} in #t212 == null ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213){(self::Class1?, self::Class1?) → void} in #t213 : #t212{self::Class1};
+  let final self::Class3? #t215 = n3 in #t215 == null ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t218 = n3 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t219 == null ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221){(self::Class2?, self::Class2?) → void} in #t221;
+  let final self::Class3? #t223 = n3 in #t223 == null ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t226 = n3 in #t226 == null ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t227 == null ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228){(self::Class2?) → self::Class2} in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t229;
+  let final self::Class3? #t231 = n3 in #t231 == null ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t232 == null ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234){(self::Class2?, self::Class2?) → void} in #t234;
+  nullable2 = let final self::Class3? #t236 = n3 in #t236 == null ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t237 == null ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239){(self::Class2?, self::Class2?) → void} in #t239;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
   self::throws(() → void => let final Never #t241 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in (let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::+}(0));
+                                ^" in (let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
   self::throws(() → void => let final Never #t243 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in (let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::unary-}());
-  let final self::Class2? #t245 = n2 in #t245.{core::Object::==}(null) ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  nullable2 = let final self::Class2? #t246 = n2 in #t246.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}.{self::Class2::+}(0) in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
-  let final self::Class2? #t249 = n2 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  nullable2 = let final self::Class2? #t251 = n2 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  let final self::Class2? #t253 = n2 in #t253.{core::Object::==}(null) ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}.{self::Class2::+}(1);
-  nullable2 = let final self::Class2? #t254 = n2 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1) in #t255;
-  let final self::Class2? #t257 = n2 in #t257.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
-  nullable2 = let final self::Class2? #t260 = n2 in #t260.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
+               ^" in (let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
+  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t246 = n2 in #t246 == null ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
+  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t251 = n2 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t254 = n2 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2}{self::Class2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1){(core::int) → self::Class2} in #t255;
+  let final self::Class2? #t257 = n2 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
+  nullable2 = let final self::Class2? #t260 = n2 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t263 = n1 in #t263.{core::Object::==}(null) ?{self::Class1?} null : #t263.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t264 = n1 in #t264.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1} in #t265.{core::Object::==}(null) ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
-  let final self::Class1? #t266 = n1 in #t266.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t267 = #t266{self::Class1}.{self::Class1::nonNullable1} in #t267.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t267.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t268 = n1 in #t268.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t269 = #t268{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t270 = #t269.{self::Class1::nullable1} in #t270.{core::Object::==}(null) ?{self::Class1} #t269.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
-  let final self::Class1? #t271 = n1 in #t271.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273).{core::Object::==}(null) ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t274 = n1 in #t274.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276) in #t277.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278) in #t278 : #t277{self::Class1};
+  let final self::Class1? #t263 = n1 in #t263 == null ?{self::Class1?} null : #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1}{self::Class1?} in #t265 == null ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
+  let final self::Class1? #t266 = n1 in #t266 == null ?{self::Class1?} null : let final self::Class1 #t267 = #t266{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t267.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t267.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t268 = n1 in #t268 == null ?{self::Class1?} null : let final self::Class1 #t269 = #t268{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t270 = #t269.{self::Class1::nullable1}{self::Class1?} in #t270 == null ?{self::Class1} #t269.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
+  let final self::Class1? #t271 = n1 in #t271 == null ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
+  n1 = let final self::Class1? #t274 = n1 in #t274 == null ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276){(self::Class1?) → self::Class1?} in #t277 == null ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278){(self::Class1?, self::Class1?) → void} in #t278 : #t277{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.expect
index d6e1e8e..ed3bb8d 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.expect
@@ -39,25 +39,25 @@
   get property2() → self::Class2
     return new self::Class2::•();
   get nullable1() → self::Class1?
-    return this.{self::Class1::property1};
+    return this.{self::Class1::property1}{self::Class1};
   set nullable1(self::Class1? value) → void {
     this.{self::Class1::property} = value;
   }
   method nonNullable1Method() → self::Class1
-    return this.{self::Class1::nonNullable1};
+    return this.{self::Class1::nonNullable1}{self::Class1};
   operator [](self::Class1? key) → self::Class1?
-    return this.{self::Class1::nullable1};
+    return this.{self::Class1::nullable1}{self::Class1?};
   operator []=(self::Class1? key, self::Class1? value) → void {
     this.{self::Class1::property} = value;
   }
   operator +(core::int value) → self::Class1?
-    return this.{self::Class1::nullable1};
+    return this.{self::Class1::nullable1}{self::Class1?};
   operator unary-() → self::Class1?
-    return this.{self::Class1::nullable1};
+    return this.{self::Class1::nullable1}{self::Class1?};
   get nonNullable1() → self::Class1
-    return this.{self::Class1::property1};
+    return this.{self::Class1::property1}{self::Class1};
   get nonNullable2() → self::Class2
-    return this.{self::Class1::property2};
+    return this.{self::Class1::property2}{self::Class2};
 }
 class Class2 extends core::Object {
   synthetic constructor •() → self::Class2
@@ -67,17 +67,17 @@
     return this;
   set property(self::Class2 value) → void {}
   method nonNullable2Method() → self::Class2
-    return this.{self::Class2::nonNullable2};
+    return this.{self::Class2::nonNullable2}{self::Class2};
   operator [](self::Class2? key) → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   operator []=(self::Class2? key, self::Class2? value) → void
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   operator +(core::int value) → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   operator unary-() → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   get nonNullable2() → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   set nonNullable2(self::Class2 value) → void {
     this.{self::Class2::property} = value;
   }
@@ -89,7 +89,7 @@
   get property() → self::Class2?
     return null;
   operator [](self::Class3? key) → self::Class2?
-    return this.{self::Class3::property};
+    return this.{self::Class3::property}{self::Class2?};
 }
 static method main() → dynamic {
   self::propertyAccess(null);
@@ -99,168 +99,168 @@
 }
 static method propertyAccess(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t1 = n1 in #t1.{core::Object::==}(null) ?{self::Class1?} null : #t1{self::Class1}.{self::Class1::nullable1};
-  let final self::Class1? #t2 = n1 in #t2.{core::Object::==}(null) ?{self::Class1?} null : #t2{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t3 = n1 in #t3.{core::Object::==}(null) ?{self::Class1?} null : #t3{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t4 = n1 in #t4.{core::Object::==}(null) ?{self::Class1?} null : #t4{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t5 = n1 in #t5.{core::Object::==}(null) ?{self::Class1?} null : #t5{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t6 = n1 in #t6.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t7 = #t6{self::Class1}.{self::Class1::nullable1} in #t7.{core::Object::==}(null) ?{self::Class1?} null : #t7{self::Class1}.{self::Class1::nullable1};
-  let final self::Class1? #t8 = n1 in #t8.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t9 = #t8{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t9.{core::Object::==}(null) ?{self::Class1?} null : #t9{self::Class1}.{self::Class1::nullable1};
-  let final self::Class1? #t10 = n1 in #t10.{core::Object::==}(null) ?{self::Class1?} null : #t10{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t11 = n1 in #t11.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1} in #t12.{core::Object::==}(null) ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t14.{core::Object::==}(null) ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16.{core::Object::==}(null) ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1} in #t15.{core::Object::==}(null) ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1};
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : #t1{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : #t2{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : #t3{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t4 = n1 in #t4 == null ?{self::Class1?} null : #t4{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t5 = n1 in #t5 == null ?{self::Class1?} null : #t5{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : let final self::Class1? #t7 = #t6{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t7 == null ?{self::Class1?} null : #t7{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = #t8{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t9 == null ?{self::Class1?} null : #t9{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : #t10{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t11 = n1 in #t11 == null ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t12 == null ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t14 == null ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16 == null ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t15 == null ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1}{self::Class1?};
   self::throws(() → void => let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1});
+                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
   self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}()).{self::Class1::nullable1});
-  nullable1 = let final self::Class1? #t21 = n1 in #t21.{core::Object::==}(null) ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t22 = n1 in #t22.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1} in #t23.{core::Object::==}(null) ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t25.{core::Object::==}(null) ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t26 = n1 in #t26.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1} in #t27.{core::Object::==}(null) ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t29 = n1 in #t29.{core::Object::==}(null) ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t30 = n1 in #t30.{core::Object::==}(null) ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t31 = n1 in #t31.{core::Object::==}(null) ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t33 = n1 in #t33.{core::Object::==}(null) ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t34 = n1 in #t34.{core::Object::==}(null) ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t35 = n1 in #t35.{core::Object::==}(null) ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t37 = n1 in #t37.{core::Object::==}(null) ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t40 = n1 in #t40.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t41.{core::Object::==}(null) ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t43 = n1 in #t43.{core::Object::==}(null) ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t44 = n1 in #t44.{core::Object::==}(null) ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t46 = n1 in #t46.{core::Object::==}(null) ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t47 = n1 in #t47.{core::Object::==}(null) ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t48 = n1 in #t48.{core::Object::==}(null) ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t49 = n1 in #t49.{core::Object::==}(null) ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t52 = n1 in #t52.{core::Object::==}(null) ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t53 = n1 in #t53.{core::Object::==}(null) ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t60 = n1 in #t60.{core::Object::==}(null) ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t61 = n1 in #t61.{core::Object::==}(null) ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t63 = n1 in #t63.{core::Object::==}(null) ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t66 = n1 in #t66.{core::Object::==}(null) ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t67 = n1 in #t67.{core::Object::==}(null) ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t69 = n1 in #t69.{core::Object::==}(null) ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t70 = n1 in #t70.{core::Object::==}(null) ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t72 = n1 in #t72.{core::Object::==}(null) ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t73 = n1 in #t73.{core::Object::==}(null) ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t74 = n1 in #t74.{core::Object::==}(null) ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t75 = n1 in #t75.{core::Object::==}(null) ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t78 = n1 in #t78.{core::Object::==}(null) ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t79 = n1 in #t79.{core::Object::==}(null) ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}() in #t83.{core::Object::==}(null) ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}();
+                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  nullable1 = let final self::Class1? #t21 = n1 in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t85 = n1 in #t85.{core::Object::==}(null) ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  let final self::Class1? #t86 = n1 in #t86.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1) in #t87.{core::Object::==}(null) ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t88 = n1 in #t88.{core::Object::==}(null) ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t89 = n1 in #t89.{core::Object::==}(null) ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93) in #t93;
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1) in #t96.{core::Object::==}(null) ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t97 = n1 in #t97.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99).{self::Class2::+}(0));
-  nullable2 = let final self::Class1? #t100 = n1 in #t100.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102).{self::Class2::+}(0) in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103) in #t103;
-  let final self::Class1? #t105 = n1 in #t105.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106).{core::Object::==}(null) ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1) : null;
-  nullable1 = let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108) in #t109.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110) in #t110 : #t109{self::Class1};
-  let final self::Class2? #t112 = n2 in #t112.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113).{self::Class2::+}(0));
-  nullable2 = let final self::Class2? #t114 = n2 in #t114.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115).{self::Class2::+}(0) in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116) in #t116;
-  let final self::Class2? #t118 = n2 in #t118.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119).{self::Class2::+}(0));
-  nullable2 = let final self::Class2? #t120 = n2 in #t120.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121).{self::Class2::+}(0) in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122) in #t122;
-  let final self::Class2? #t124 = n2 in #t124.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125).{self::Class2::+}(1));
-  nullable2 = let final self::Class2? #t126 = n2 in #t126.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127) in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1)) in #t128;
-  let final self::Class2? #t130 = n2 in #t130.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131).{self::Class2::+}(1) in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132) in #t132;
-  nullable2 = let final self::Class2? #t134 = n2 in #t134.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135).{self::Class2::+}(1) in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136) in #t136;
-  let final self::Class1? #t138 = n1 in #t138.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140).{self::Class2::+}(1));
-  nullable2 = let final self::Class1? #t141 = n1 in #t141.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143) in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1)) in #t144;
-  let final self::Class1? #t146 = n1 in #t146.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148).{self::Class2::+}(1) in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149) in #t149;
-  nullable2 = let final self::Class1? #t151 = n1 in #t151.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153).{self::Class2::+}(1) in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154) in #t154;
-  let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2);
-  let final self::Class1? #t157 = n1 in #t157.{core::Object::==}(null) ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]=}(nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t158 = n1 in #t158.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161) in #t161;
-  let final self::Class1? #t163 = n1 in #t163.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2) in #t164.{core::Object::==}(null) ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}();
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167).{self::Class2::+}(0));
-  nullable2 = let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170).{self::Class2::+}(0) in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171) in #t171;
-  let final self::Class1? #t173 = n1 in #t173.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175).{self::Class2::+}(1));
-  nullable2 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178) in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1)) in #t179;
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183).{self::Class2::+}(1) in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184) in #t184;
-  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188).{self::Class2::+}(1) in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1) in #t192.{core::Object::==}(null) ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1) in #t194.{core::Object::==}(null) ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t195 = n1 in #t195.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1) in #t196.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198) in #t198;
-  let final self::Class1? #t200 = n1 in #t200.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1) in #t201.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1) in #t202.{core::Object::==}(null) ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t203 = n1 in #t203.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1) in #t204.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1) in #t205.{core::Object::==}(null) ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t206 = n1 in #t206.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1) in #t207.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208).{core::Object::==}(null) ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1) : null;
-  nullable1 = let final self::Class1? #t209 = n1 in #t209.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1) in #t210.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211) in #t212.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213) in #t213 : #t212{self::Class1};
-  let final self::Class3? #t215 = n3 in #t215.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3) in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217).{self::Class2::+}(0));
-  nullable2 = let final self::Class3? #t218 = n3 in #t218.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3) in #t219.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220).{self::Class2::+}(0) in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221) in #t221;
-  let final self::Class3? #t223 = n3 in #t223.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3) in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225).{self::Class2::+}(1));
-  nullable2 = let final self::Class3? #t226 = n3 in #t226.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3) in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228) in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1)) in #t229;
-  let final self::Class3? #t231 = n3 in #t231.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3) in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233).{self::Class2::+}(1) in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234) in #t234;
-  nullable2 = let final self::Class3? #t236 = n3 in #t236.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3) in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238).{self::Class2::+}(1) in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239) in #t239;
+  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t89 = n1 in #t89 == null ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93){(self::Class1?, self::Class1?) → void} in #t93;
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t96 == null ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103){(self::Class2?, self::Class2?) → void} in #t103;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108){(self::Class1?) → self::Class1?} in #t109 == null ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110){(self::Class1?, self::Class1?) → void} in #t110 : #t109{self::Class1};
+  let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t114 = n2 in #t114 == null ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116){(self::Class2?, self::Class2?) → void} in #t116;
+  let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t120 = n2 in #t120 == null ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122){(self::Class2?, self::Class2?) → void} in #t122;
+  let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t126 = n2 in #t126 == null ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127){(self::Class2?) → self::Class2} in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t128;
+  let final self::Class2? #t130 = n2 in #t130 == null ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132){(self::Class2?, self::Class2?) → void} in #t132;
+  nullable2 = let final self::Class2? #t134 = n2 in #t134 == null ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136){(self::Class2?, self::Class2?) → void} in #t136;
+  let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143){(self::Class2?) → self::Class2} in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149){(self::Class2?, self::Class2?) → void} in #t149;
+  nullable2 = let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154){(self::Class2?, self::Class2?) → void} in #t154;
+  let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
+  let final self::Class1? #t157 = n1 in #t157 == null ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t158 = n1 in #t158 == null ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161){(self::Class2?, self::Class2?) → void} in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t164 == null ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171){(self::Class2?, self::Class2?) → void} in #t171;
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178){(self::Class2?) → self::Class2} in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t179;
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184){(self::Class2?, self::Class2?) → void} in #t184;
+  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189){(self::Class2?, self::Class2?) → void} in #t189;
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t195 = n1 in #t195 == null ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t196 == null ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198){(self::Class1?, self::Class1?) → void} in #t198;
+  let final self::Class1? #t200 = n1 in #t200 == null ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t203 = n1 in #t203 == null ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t206 = n1 in #t206 == null ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t209 = n1 in #t209 == null ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211){(self::Class1?) → self::Class1?} in #t212 == null ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213){(self::Class1?, self::Class1?) → void} in #t213 : #t212{self::Class1};
+  let final self::Class3? #t215 = n3 in #t215 == null ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t218 = n3 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t219 == null ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221){(self::Class2?, self::Class2?) → void} in #t221;
+  let final self::Class3? #t223 = n3 in #t223 == null ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t226 = n3 in #t226 == null ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t227 == null ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228){(self::Class2?) → self::Class2} in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t229;
+  let final self::Class3? #t231 = n3 in #t231 == null ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t232 == null ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234){(self::Class2?, self::Class2?) → void} in #t234;
+  nullable2 = let final self::Class3? #t236 = n3 in #t236 == null ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t237 == null ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239){(self::Class2?, self::Class2?) → void} in #t239;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
   self::throws(() → void => let final Never #t241 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in (let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::+}(0));
+                                ^" in (let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
   self::throws(() → void => let final Never #t243 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in (let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::unary-}());
-  let final self::Class2? #t245 = n2 in #t245.{core::Object::==}(null) ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  nullable2 = let final self::Class2? #t246 = n2 in #t246.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}.{self::Class2::+}(0) in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
-  let final self::Class2? #t249 = n2 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  nullable2 = let final self::Class2? #t251 = n2 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  let final self::Class2? #t253 = n2 in #t253.{core::Object::==}(null) ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}.{self::Class2::+}(1);
-  nullable2 = let final self::Class2? #t254 = n2 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1) in #t255;
-  let final self::Class2? #t257 = n2 in #t257.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
-  nullable2 = let final self::Class2? #t260 = n2 in #t260.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
+               ^" in (let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
+  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t246 = n2 in #t246 == null ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
+  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t251 = n2 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t254 = n2 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2}{self::Class2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1){(core::int) → self::Class2} in #t255;
+  let final self::Class2? #t257 = n2 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
+  nullable2 = let final self::Class2? #t260 = n2 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t263 = n1 in #t263.{core::Object::==}(null) ?{self::Class1?} null : #t263.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t264 = n1 in #t264.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1} in #t265.{core::Object::==}(null) ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
-  let final self::Class1? #t266 = n1 in #t266.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t267 = #t266{self::Class1}.{self::Class1::nonNullable1} in #t267.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t267.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t268 = n1 in #t268.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t269 = #t268{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t270 = #t269.{self::Class1::nullable1} in #t270.{core::Object::==}(null) ?{self::Class1} #t269.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
-  let final self::Class1? #t271 = n1 in #t271.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273).{core::Object::==}(null) ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t274 = n1 in #t274.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276) in #t277.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278) in #t278 : #t277{self::Class1};
+  let final self::Class1? #t263 = n1 in #t263 == null ?{self::Class1?} null : #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1}{self::Class1?} in #t265 == null ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
+  let final self::Class1? #t266 = n1 in #t266 == null ?{self::Class1?} null : let final self::Class1 #t267 = #t266{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t267.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t267.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t268 = n1 in #t268 == null ?{self::Class1?} null : let final self::Class1 #t269 = #t268{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t270 = #t269.{self::Class1::nullable1}{self::Class1?} in #t270 == null ?{self::Class1} #t269.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
+  let final self::Class1? #t271 = n1 in #t271 == null ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
+  n1 = let final self::Class1? #t274 = n1 in #t274 == null ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276){(self::Class1?) → self::Class1?} in #t277 == null ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278){(self::Class1?, self::Class1?) → void} in #t278 : #t277{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.transformed.expect
index d6e1e8e..ed3bb8d 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.transformed.expect
@@ -39,25 +39,25 @@
   get property2() → self::Class2
     return new self::Class2::•();
   get nullable1() → self::Class1?
-    return this.{self::Class1::property1};
+    return this.{self::Class1::property1}{self::Class1};
   set nullable1(self::Class1? value) → void {
     this.{self::Class1::property} = value;
   }
   method nonNullable1Method() → self::Class1
-    return this.{self::Class1::nonNullable1};
+    return this.{self::Class1::nonNullable1}{self::Class1};
   operator [](self::Class1? key) → self::Class1?
-    return this.{self::Class1::nullable1};
+    return this.{self::Class1::nullable1}{self::Class1?};
   operator []=(self::Class1? key, self::Class1? value) → void {
     this.{self::Class1::property} = value;
   }
   operator +(core::int value) → self::Class1?
-    return this.{self::Class1::nullable1};
+    return this.{self::Class1::nullable1}{self::Class1?};
   operator unary-() → self::Class1?
-    return this.{self::Class1::nullable1};
+    return this.{self::Class1::nullable1}{self::Class1?};
   get nonNullable1() → self::Class1
-    return this.{self::Class1::property1};
+    return this.{self::Class1::property1}{self::Class1};
   get nonNullable2() → self::Class2
-    return this.{self::Class1::property2};
+    return this.{self::Class1::property2}{self::Class2};
 }
 class Class2 extends core::Object {
   synthetic constructor •() → self::Class2
@@ -67,17 +67,17 @@
     return this;
   set property(self::Class2 value) → void {}
   method nonNullable2Method() → self::Class2
-    return this.{self::Class2::nonNullable2};
+    return this.{self::Class2::nonNullable2}{self::Class2};
   operator [](self::Class2? key) → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   operator []=(self::Class2? key, self::Class2? value) → void
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   operator +(core::int value) → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   operator unary-() → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   get nonNullable2() → self::Class2
-    return this.{self::Class2::property};
+    return this.{self::Class2::property}{self::Class2};
   set nonNullable2(self::Class2 value) → void {
     this.{self::Class2::property} = value;
   }
@@ -89,7 +89,7 @@
   get property() → self::Class2?
     return null;
   operator [](self::Class3? key) → self::Class2?
-    return this.{self::Class3::property};
+    return this.{self::Class3::property}{self::Class2?};
 }
 static method main() → dynamic {
   self::propertyAccess(null);
@@ -99,168 +99,168 @@
 }
 static method propertyAccess(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t1 = n1 in #t1.{core::Object::==}(null) ?{self::Class1?} null : #t1{self::Class1}.{self::Class1::nullable1};
-  let final self::Class1? #t2 = n1 in #t2.{core::Object::==}(null) ?{self::Class1?} null : #t2{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t3 = n1 in #t3.{core::Object::==}(null) ?{self::Class1?} null : #t3{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t4 = n1 in #t4.{core::Object::==}(null) ?{self::Class1?} null : #t4{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t5 = n1 in #t5.{core::Object::==}(null) ?{self::Class1?} null : #t5{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t6 = n1 in #t6.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t7 = #t6{self::Class1}.{self::Class1::nullable1} in #t7.{core::Object::==}(null) ?{self::Class1?} null : #t7{self::Class1}.{self::Class1::nullable1};
-  let final self::Class1? #t8 = n1 in #t8.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t9 = #t8{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t9.{core::Object::==}(null) ?{self::Class1?} null : #t9{self::Class1}.{self::Class1::nullable1};
-  let final self::Class1? #t10 = n1 in #t10.{core::Object::==}(null) ?{self::Class1?} null : #t10{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t11 = n1 in #t11.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1} in #t12.{core::Object::==}(null) ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t14.{core::Object::==}(null) ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16.{core::Object::==}(null) ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1} in #t15.{core::Object::==}(null) ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1};
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : #t1{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : #t2{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : #t3{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t4 = n1 in #t4 == null ?{self::Class1?} null : #t4{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t5 = n1 in #t5 == null ?{self::Class1?} null : #t5{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : let final self::Class1? #t7 = #t6{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t7 == null ?{self::Class1?} null : #t7{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = #t8{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t9 == null ?{self::Class1?} null : #t9{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : #t10{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t11 = n1 in #t11 == null ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t12 == null ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t14 == null ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16 == null ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t15 == null ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1}{self::Class1?};
   self::throws(() → void => let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1});
+                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
   self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}()).{self::Class1::nullable1});
-  nullable1 = let final self::Class1? #t21 = n1 in #t21.{core::Object::==}(null) ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t22 = n1 in #t22.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1} in #t23.{core::Object::==}(null) ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t25.{core::Object::==}(null) ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t26 = n1 in #t26.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1} in #t27.{core::Object::==}(null) ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t29 = n1 in #t29.{core::Object::==}(null) ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t30 = n1 in #t30.{core::Object::==}(null) ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t31 = n1 in #t31.{core::Object::==}(null) ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t33 = n1 in #t33.{core::Object::==}(null) ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t34 = n1 in #t34.{core::Object::==}(null) ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t35 = n1 in #t35.{core::Object::==}(null) ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t37 = n1 in #t37.{core::Object::==}(null) ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t40 = n1 in #t40.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t41.{core::Object::==}(null) ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t43 = n1 in #t43.{core::Object::==}(null) ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t44 = n1 in #t44.{core::Object::==}(null) ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t46 = n1 in #t46.{core::Object::==}(null) ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t47 = n1 in #t47.{core::Object::==}(null) ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t48 = n1 in #t48.{core::Object::==}(null) ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t49 = n1 in #t49.{core::Object::==}(null) ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t52 = n1 in #t52.{core::Object::==}(null) ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t53 = n1 in #t53.{core::Object::==}(null) ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t60 = n1 in #t60.{core::Object::==}(null) ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t61 = n1 in #t61.{core::Object::==}(null) ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t63 = n1 in #t63.{core::Object::==}(null) ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t66 = n1 in #t66.{core::Object::==}(null) ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t67 = n1 in #t67.{core::Object::==}(null) ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t69 = n1 in #t69.{core::Object::==}(null) ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t70 = n1 in #t70.{core::Object::==}(null) ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t72 = n1 in #t72.{core::Object::==}(null) ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t73 = n1 in #t73.{core::Object::==}(null) ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t74 = n1 in #t74.{core::Object::==}(null) ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t75 = n1 in #t75.{core::Object::==}(null) ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t78 = n1 in #t78.{core::Object::==}(null) ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t79 = n1 in #t79.{core::Object::==}(null) ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}() in #t83.{core::Object::==}(null) ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}();
+                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  nullable1 = let final self::Class1? #t21 = n1 in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t85 = n1 in #t85.{core::Object::==}(null) ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  let final self::Class1? #t86 = n1 in #t86.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1) in #t87.{core::Object::==}(null) ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t88 = n1 in #t88.{core::Object::==}(null) ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t89 = n1 in #t89.{core::Object::==}(null) ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93) in #t93;
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1) in #t96.{core::Object::==}(null) ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t97 = n1 in #t97.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99).{self::Class2::+}(0));
-  nullable2 = let final self::Class1? #t100 = n1 in #t100.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102).{self::Class2::+}(0) in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103) in #t103;
-  let final self::Class1? #t105 = n1 in #t105.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106).{core::Object::==}(null) ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1) : null;
-  nullable1 = let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108) in #t109.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110) in #t110 : #t109{self::Class1};
-  let final self::Class2? #t112 = n2 in #t112.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113).{self::Class2::+}(0));
-  nullable2 = let final self::Class2? #t114 = n2 in #t114.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115).{self::Class2::+}(0) in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116) in #t116;
-  let final self::Class2? #t118 = n2 in #t118.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119).{self::Class2::+}(0));
-  nullable2 = let final self::Class2? #t120 = n2 in #t120.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121).{self::Class2::+}(0) in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122) in #t122;
-  let final self::Class2? #t124 = n2 in #t124.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125).{self::Class2::+}(1));
-  nullable2 = let final self::Class2? #t126 = n2 in #t126.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127) in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1)) in #t128;
-  let final self::Class2? #t130 = n2 in #t130.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131).{self::Class2::+}(1) in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132) in #t132;
-  nullable2 = let final self::Class2? #t134 = n2 in #t134.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135).{self::Class2::+}(1) in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136) in #t136;
-  let final self::Class1? #t138 = n1 in #t138.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140).{self::Class2::+}(1));
-  nullable2 = let final self::Class1? #t141 = n1 in #t141.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143) in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1)) in #t144;
-  let final self::Class1? #t146 = n1 in #t146.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148).{self::Class2::+}(1) in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149) in #t149;
-  nullable2 = let final self::Class1? #t151 = n1 in #t151.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153).{self::Class2::+}(1) in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154) in #t154;
-  let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2);
-  let final self::Class1? #t157 = n1 in #t157.{core::Object::==}(null) ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]=}(nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t158 = n1 in #t158.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161) in #t161;
-  let final self::Class1? #t163 = n1 in #t163.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2) in #t164.{core::Object::==}(null) ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}();
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167).{self::Class2::+}(0));
-  nullable2 = let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170).{self::Class2::+}(0) in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171) in #t171;
-  let final self::Class1? #t173 = n1 in #t173.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175).{self::Class2::+}(1));
-  nullable2 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178) in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1)) in #t179;
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183).{self::Class2::+}(1) in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184) in #t184;
-  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188).{self::Class2::+}(1) in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1) in #t192.{core::Object::==}(null) ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1) in #t194.{core::Object::==}(null) ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t195 = n1 in #t195.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1) in #t196.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198) in #t198;
-  let final self::Class1? #t200 = n1 in #t200.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1) in #t201.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1) in #t202.{core::Object::==}(null) ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t203 = n1 in #t203.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1) in #t204.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1) in #t205.{core::Object::==}(null) ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t206 = n1 in #t206.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1) in #t207.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208).{core::Object::==}(null) ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1) : null;
-  nullable1 = let final self::Class1? #t209 = n1 in #t209.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1) in #t210.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211) in #t212.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213) in #t213 : #t212{self::Class1};
-  let final self::Class3? #t215 = n3 in #t215.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3) in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217).{self::Class2::+}(0));
-  nullable2 = let final self::Class3? #t218 = n3 in #t218.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3) in #t219.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220).{self::Class2::+}(0) in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221) in #t221;
-  let final self::Class3? #t223 = n3 in #t223.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3) in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225).{self::Class2::+}(1));
-  nullable2 = let final self::Class3? #t226 = n3 in #t226.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3) in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228) in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1)) in #t229;
-  let final self::Class3? #t231 = n3 in #t231.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3) in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233).{self::Class2::+}(1) in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234) in #t234;
-  nullable2 = let final self::Class3? #t236 = n3 in #t236.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3) in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238).{self::Class2::+}(1) in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239) in #t239;
+  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t89 = n1 in #t89 == null ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93){(self::Class1?, self::Class1?) → void} in #t93;
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t96 == null ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103){(self::Class2?, self::Class2?) → void} in #t103;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108){(self::Class1?) → self::Class1?} in #t109 == null ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110){(self::Class1?, self::Class1?) → void} in #t110 : #t109{self::Class1};
+  let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t114 = n2 in #t114 == null ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116){(self::Class2?, self::Class2?) → void} in #t116;
+  let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t120 = n2 in #t120 == null ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122){(self::Class2?, self::Class2?) → void} in #t122;
+  let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t126 = n2 in #t126 == null ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127){(self::Class2?) → self::Class2} in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t128;
+  let final self::Class2? #t130 = n2 in #t130 == null ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132){(self::Class2?, self::Class2?) → void} in #t132;
+  nullable2 = let final self::Class2? #t134 = n2 in #t134 == null ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136){(self::Class2?, self::Class2?) → void} in #t136;
+  let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143){(self::Class2?) → self::Class2} in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149){(self::Class2?, self::Class2?) → void} in #t149;
+  nullable2 = let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154){(self::Class2?, self::Class2?) → void} in #t154;
+  let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
+  let final self::Class1? #t157 = n1 in #t157 == null ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t158 = n1 in #t158 == null ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161){(self::Class2?, self::Class2?) → void} in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t164 == null ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171){(self::Class2?, self::Class2?) → void} in #t171;
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178){(self::Class2?) → self::Class2} in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t179;
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184){(self::Class2?, self::Class2?) → void} in #t184;
+  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189){(self::Class2?, self::Class2?) → void} in #t189;
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t195 = n1 in #t195 == null ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t196 == null ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198){(self::Class1?, self::Class1?) → void} in #t198;
+  let final self::Class1? #t200 = n1 in #t200 == null ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t203 = n1 in #t203 == null ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t206 = n1 in #t206 == null ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t209 = n1 in #t209 == null ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211){(self::Class1?) → self::Class1?} in #t212 == null ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213){(self::Class1?, self::Class1?) → void} in #t213 : #t212{self::Class1};
+  let final self::Class3? #t215 = n3 in #t215 == null ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t218 = n3 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t219 == null ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221){(self::Class2?, self::Class2?) → void} in #t221;
+  let final self::Class3? #t223 = n3 in #t223 == null ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t226 = n3 in #t226 == null ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t227 == null ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228){(self::Class2?) → self::Class2} in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t229;
+  let final self::Class3? #t231 = n3 in #t231 == null ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t232 == null ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234){(self::Class2?, self::Class2?) → void} in #t234;
+  nullable2 = let final self::Class3? #t236 = n3 in #t236 == null ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t237 == null ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239){(self::Class2?, self::Class2?) → void} in #t239;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
   self::throws(() → void => let final Never #t241 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in (let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::+}(0));
+                                ^" in (let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
   self::throws(() → void => let final Never #t243 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in (let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::unary-}());
-  let final self::Class2? #t245 = n2 in #t245.{core::Object::==}(null) ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  nullable2 = let final self::Class2? #t246 = n2 in #t246.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}.{self::Class2::+}(0) in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
-  let final self::Class2? #t249 = n2 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  nullable2 = let final self::Class2? #t251 = n2 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  let final self::Class2? #t253 = n2 in #t253.{core::Object::==}(null) ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}.{self::Class2::+}(1);
-  nullable2 = let final self::Class2? #t254 = n2 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1) in #t255;
-  let final self::Class2? #t257 = n2 in #t257.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
-  nullable2 = let final self::Class2? #t260 = n2 in #t260.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
+               ^" in (let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
+  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t246 = n2 in #t246 == null ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
+  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t251 = n2 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t254 = n2 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2}{self::Class2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1){(core::int) → self::Class2} in #t255;
+  let final self::Class2? #t257 = n2 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
+  nullable2 = let final self::Class2? #t260 = n2 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t263 = n1 in #t263.{core::Object::==}(null) ?{self::Class1?} null : #t263.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t264 = n1 in #t264.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1} in #t265.{core::Object::==}(null) ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
-  let final self::Class1? #t266 = n1 in #t266.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t267 = #t266{self::Class1}.{self::Class1::nonNullable1} in #t267.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t267.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t268 = n1 in #t268.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t269 = #t268{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t270 = #t269.{self::Class1::nullable1} in #t270.{core::Object::==}(null) ?{self::Class1} #t269.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
-  let final self::Class1? #t271 = n1 in #t271.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273).{core::Object::==}(null) ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t274 = n1 in #t274.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276) in #t277.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278) in #t278 : #t277{self::Class1};
+  let final self::Class1? #t263 = n1 in #t263 == null ?{self::Class1?} null : #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1}{self::Class1?} in #t265 == null ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
+  let final self::Class1? #t266 = n1 in #t266 == null ?{self::Class1?} null : let final self::Class1 #t267 = #t266{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t267.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t267.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t268 = n1 in #t268 == null ?{self::Class1?} null : let final self::Class1 #t269 = #t268{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t270 = #t269.{self::Class1::nullable1}{self::Class1?} in #t270 == null ?{self::Class1} #t269.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
+  let final self::Class1? #t271 = n1 in #t271 == null ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
+  n1 = let final self::Class1? #t274 = n1 in #t274 == null ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276){(self::Class1?) → self::Class1?} in #t277 == null ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278){(self::Class1?, self::Class1?) → void} in #t278 : #t277{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.expect
index a139a5e..740e044 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.expect
@@ -19,17 +19,17 @@
   return () → self::Class => self::Extension|extensionMethod(#this);
 static method main() → dynamic {
   self::Class? c;
-  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{self::Class?} null : block {
-    #t1{self::Class}.{self::Class::method}();
+  let final self::Class? #t1 = c in #t1 == null ?{self::Class?} null : block {
+    #t1{self::Class}.{self::Class::method}(){() → self::Class};
   } =>#t1;
-  let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::Class?} null : block {
-    #t2{self::Class}.{self::Class::method}();
-    #t2{self::Class}.{self::Class::method}();
+  let final self::Class? #t2 = c in #t2 == null ?{self::Class?} null : block {
+    #t2{self::Class}.{self::Class::method}(){() → self::Class};
+    #t2{self::Class}.{self::Class::method}(){() → self::Class};
   } =>#t2;
-  let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{self::Class?} null : block {
+  let final self::Class? #t3 = c in #t3 == null ?{self::Class?} null : block {
     self::Extension|extensionMethod(#t3{self::Class});
   } =>#t3;
-  let final self::Class? #t4 = c in #t4.{core::Object::==}(null) ?{self::Class?} null : block {
+  let final self::Class? #t4 = c in #t4 == null ?{self::Class?} null : block {
     self::Extension|extensionMethod(#t4{self::Class});
     self::Extension|extensionMethod(#t4{self::Class});
   } =>#t4;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.transformed.expect
index a139a5e..740e044 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.strong.transformed.expect
@@ -19,17 +19,17 @@
   return () → self::Class => self::Extension|extensionMethod(#this);
 static method main() → dynamic {
   self::Class? c;
-  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{self::Class?} null : block {
-    #t1{self::Class}.{self::Class::method}();
+  let final self::Class? #t1 = c in #t1 == null ?{self::Class?} null : block {
+    #t1{self::Class}.{self::Class::method}(){() → self::Class};
   } =>#t1;
-  let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::Class?} null : block {
-    #t2{self::Class}.{self::Class::method}();
-    #t2{self::Class}.{self::Class::method}();
+  let final self::Class? #t2 = c in #t2 == null ?{self::Class?} null : block {
+    #t2{self::Class}.{self::Class::method}(){() → self::Class};
+    #t2{self::Class}.{self::Class::method}(){() → self::Class};
   } =>#t2;
-  let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{self::Class?} null : block {
+  let final self::Class? #t3 = c in #t3 == null ?{self::Class?} null : block {
     self::Extension|extensionMethod(#t3{self::Class});
   } =>#t3;
-  let final self::Class? #t4 = c in #t4.{core::Object::==}(null) ?{self::Class?} null : block {
+  let final self::Class? #t4 = c in #t4 == null ?{self::Class?} null : block {
     self::Extension|extensionMethod(#t4{self::Class});
     self::Extension|extensionMethod(#t4{self::Class});
   } =>#t4;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.expect
index a139a5e..740e044 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.expect
@@ -19,17 +19,17 @@
   return () → self::Class => self::Extension|extensionMethod(#this);
 static method main() → dynamic {
   self::Class? c;
-  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{self::Class?} null : block {
-    #t1{self::Class}.{self::Class::method}();
+  let final self::Class? #t1 = c in #t1 == null ?{self::Class?} null : block {
+    #t1{self::Class}.{self::Class::method}(){() → self::Class};
   } =>#t1;
-  let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::Class?} null : block {
-    #t2{self::Class}.{self::Class::method}();
-    #t2{self::Class}.{self::Class::method}();
+  let final self::Class? #t2 = c in #t2 == null ?{self::Class?} null : block {
+    #t2{self::Class}.{self::Class::method}(){() → self::Class};
+    #t2{self::Class}.{self::Class::method}(){() → self::Class};
   } =>#t2;
-  let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{self::Class?} null : block {
+  let final self::Class? #t3 = c in #t3 == null ?{self::Class?} null : block {
     self::Extension|extensionMethod(#t3{self::Class});
   } =>#t3;
-  let final self::Class? #t4 = c in #t4.{core::Object::==}(null) ?{self::Class?} null : block {
+  let final self::Class? #t4 = c in #t4 == null ?{self::Class?} null : block {
     self::Extension|extensionMethod(#t4{self::Class});
     self::Extension|extensionMethod(#t4{self::Class});
   } =>#t4;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.transformed.expect
index a139a5e..740e044 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.transformed.expect
@@ -19,17 +19,17 @@
   return () → self::Class => self::Extension|extensionMethod(#this);
 static method main() → dynamic {
   self::Class? c;
-  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{self::Class?} null : block {
-    #t1{self::Class}.{self::Class::method}();
+  let final self::Class? #t1 = c in #t1 == null ?{self::Class?} null : block {
+    #t1{self::Class}.{self::Class::method}(){() → self::Class};
   } =>#t1;
-  let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::Class?} null : block {
-    #t2{self::Class}.{self::Class::method}();
-    #t2{self::Class}.{self::Class::method}();
+  let final self::Class? #t2 = c in #t2 == null ?{self::Class?} null : block {
+    #t2{self::Class}.{self::Class::method}(){() → self::Class};
+    #t2{self::Class}.{self::Class::method}(){() → self::Class};
   } =>#t2;
-  let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{self::Class?} null : block {
+  let final self::Class? #t3 = c in #t3 == null ?{self::Class?} null : block {
     self::Extension|extensionMethod(#t3{self::Class});
   } =>#t3;
-  let final self::Class? #t4 = c in #t4.{core::Object::==}(null) ?{self::Class?} null : block {
+  let final self::Class? #t4 = c in #t4 == null ?{self::Class?} null : block {
     self::Extension|extensionMethod(#t4{self::Class});
     self::Extension|extensionMethod(#t4{self::Class});
   } =>#t4;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect
index 5146cf7..25e39a1 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect
@@ -80,7 +80,7 @@
   operator [] = self::Extension3|[];
 }
 static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
@@ -98,28 +98,28 @@
 static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
 static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
-  return #this.{self::Class1::property2};
+  return #this.{self::Class1::property2}{self::Class2};
 static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
 static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
 static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
 static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
-  return #this.{self::Class3::property};
+  return #this.{self::Class3::property}{self::Class2?};
 static method main() → dynamic {
   self::propertyAccess(null);
   self::indexAccess(null, null, null);
@@ -128,168 +128,168 @@
 }
 static method propertyAccess(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t1 = n1 in #t1.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
-  let final self::Class1? #t2 = n1 in #t2.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
-  nullable1 = let final self::Class1? #t3 = n1 in #t3.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
-  let final self::Class1? #t6 = n1 in #t6.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
-  let final self::Class1? #t7 = n1 in #t7.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
-  let final self::Class1? #t8 = n1 in #t8.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
-  let final self::Class1? #t10 = n1 in #t10.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
-  let final self::Class1? #t12 = n1 in #t12.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t15 = n1 in #t15.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
+  let final self::Class1? #t7 = n1 in #t7 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
+  let final self::Class1? #t12 = n1 in #t12 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
   self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
-                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
+                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
   self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
-                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
+  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
+  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
+  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
+  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
+  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
+  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
+  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
+  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
+  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
+  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
+  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
+  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
+  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
+  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
+  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
+  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
+  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
+  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
+  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
+  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
+  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
+  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
+  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
+  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
+  let final self::Class1? #t171 = n1 in #t171 == null ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
+  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
+  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
+  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
+  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
+  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
+  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
+  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
+  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
+  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
+  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
+  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
+  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
+  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
+  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
+  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
+  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
+  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
+  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
+  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
+  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
+  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
+  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
+  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
+  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
+  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
+  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
+  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
+  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
+  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
+  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
+  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
+  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
   self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => Extension1(n1)?.nonNullable1 + 0);
-                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
+                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
   self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => -Extension1(n1)?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
-  let final self::Class2? #t347 = n2 in #t347.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
-  nullable2 = let final self::Class2? #t350 = n2 in #t350.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
+               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
+  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
+  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
+  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
+  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
+  let final self::Class2? #t347 = n2 in #t347 == null ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
+  nullable2 = let final self::Class2? #t350 = n2 in #t350 == null ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t353 = n1 in #t353.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t353).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t354 = n1 in #t354.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
-  let final self::Class1? #t358 = n1 in #t358.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t359, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t360 = n1 in #t360.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361) in #t362.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361, #t363) in #t363 : #t362{self::Class1};
-  let final self::Class1? #t365 = n1 in #t365.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t368 = n1 in #t368.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
+  let final self::Class1? #t353 = n1 in #t353 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355 == null ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
+  let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359) == null ?{self::Class1} self::Extension1|set#nullable1(#t359, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t360 = n1 in #t360 == null ?{self::Class1?} null : let final self::Class1 #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361) in #t362 == null ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361, #t363) in #t363 : #t362{self::Class1};
+  let final self::Class1? #t365 = n1 in #t365 == null ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367) == null ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t368 = n1 in #t368 == null ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371 == null ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect
index 5146cf7..25e39a1 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect
@@ -80,7 +80,7 @@
   operator [] = self::Extension3|[];
 }
 static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
@@ -98,28 +98,28 @@
 static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
 static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
-  return #this.{self::Class1::property2};
+  return #this.{self::Class1::property2}{self::Class2};
 static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
 static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
 static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
 static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
-  return #this.{self::Class3::property};
+  return #this.{self::Class3::property}{self::Class2?};
 static method main() → dynamic {
   self::propertyAccess(null);
   self::indexAccess(null, null, null);
@@ -128,168 +128,168 @@
 }
 static method propertyAccess(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t1 = n1 in #t1.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
-  let final self::Class1? #t2 = n1 in #t2.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
-  nullable1 = let final self::Class1? #t3 = n1 in #t3.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
-  let final self::Class1? #t6 = n1 in #t6.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
-  let final self::Class1? #t7 = n1 in #t7.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
-  let final self::Class1? #t8 = n1 in #t8.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
-  let final self::Class1? #t10 = n1 in #t10.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
-  let final self::Class1? #t12 = n1 in #t12.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t15 = n1 in #t15.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
+  let final self::Class1? #t7 = n1 in #t7 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
+  let final self::Class1? #t12 = n1 in #t12 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
   self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
-                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
+                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
   self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
-                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
+  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
+  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
+  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
+  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
+  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
+  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
+  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
+  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
+  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
+  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
+  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
+  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
+  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
+  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
+  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
+  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
+  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
+  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
+  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
+  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
+  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
+  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
+  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
+  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
+  let final self::Class1? #t171 = n1 in #t171 == null ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
+  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
+  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
+  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
+  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
+  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
+  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
+  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
+  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
+  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
+  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
+  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
+  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
+  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
+  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
+  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
+  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
+  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
+  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
+  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
+  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
+  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
+  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
+  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
+  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
+  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
+  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
+  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
+  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
+  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
+  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
+  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
+  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
   self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => Extension1(n1)?.nonNullable1 + 0);
-                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
+                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
   self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => -Extension1(n1)?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
-  let final self::Class2? #t347 = n2 in #t347.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
-  nullable2 = let final self::Class2? #t350 = n2 in #t350.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
+               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
+  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
+  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
+  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
+  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
+  let final self::Class2? #t347 = n2 in #t347 == null ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
+  nullable2 = let final self::Class2? #t350 = n2 in #t350 == null ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t353 = n1 in #t353.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t353).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t354 = n1 in #t354.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
-  let final self::Class1? #t358 = n1 in #t358.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t359, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t360 = n1 in #t360.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361) in #t362.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361, #t363) in #t363 : #t362{self::Class1};
-  let final self::Class1? #t365 = n1 in #t365.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t368 = n1 in #t368.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
+  let final self::Class1? #t353 = n1 in #t353 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355 == null ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
+  let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359) == null ?{self::Class1} self::Extension1|set#nullable1(#t359, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t360 = n1 in #t360 == null ?{self::Class1?} null : let final self::Class1 #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361) in #t362 == null ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361, #t363) in #t363 : #t362{self::Class1};
+  let final self::Class1? #t365 = n1 in #t365 == null ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367) == null ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t368 = n1 in #t368 == null ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371 == null ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect
index 5146cf7..25e39a1 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect
@@ -80,7 +80,7 @@
   operator [] = self::Extension3|[];
 }
 static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
@@ -98,28 +98,28 @@
 static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
 static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
-  return #this.{self::Class1::property2};
+  return #this.{self::Class1::property2}{self::Class2};
 static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
 static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
 static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
 static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
-  return #this.{self::Class3::property};
+  return #this.{self::Class3::property}{self::Class2?};
 static method main() → dynamic {
   self::propertyAccess(null);
   self::indexAccess(null, null, null);
@@ -128,168 +128,168 @@
 }
 static method propertyAccess(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t1 = n1 in #t1.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
-  let final self::Class1? #t2 = n1 in #t2.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
-  nullable1 = let final self::Class1? #t3 = n1 in #t3.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
-  let final self::Class1? #t6 = n1 in #t6.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
-  let final self::Class1? #t7 = n1 in #t7.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
-  let final self::Class1? #t8 = n1 in #t8.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
-  let final self::Class1? #t10 = n1 in #t10.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
-  let final self::Class1? #t12 = n1 in #t12.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t15 = n1 in #t15.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
+  let final self::Class1? #t7 = n1 in #t7 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
+  let final self::Class1? #t12 = n1 in #t12 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
   self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
-                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
+                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
   self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
-                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
+  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
+  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
+  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
+  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
+  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
+  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
+  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
+  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
+  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
+  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
+  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
+  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
+  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
+  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
+  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
+  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
+  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
+  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
+  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
+  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
+  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
+  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
+  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
+  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
+  let final self::Class1? #t171 = n1 in #t171 == null ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
+  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
+  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
+  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
+  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
+  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
+  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
+  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
+  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
+  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
+  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
+  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
+  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
+  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
+  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
+  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
+  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
+  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
+  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
+  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
+  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
+  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
+  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
+  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
+  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
+  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
+  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
+  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
+  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
+  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
+  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
+  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
+  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
   self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => Extension1(n1)?.nonNullable1 + 0);
-                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
+                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
   self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => -Extension1(n1)?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
-  let final self::Class2? #t347 = n2 in #t347.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
-  nullable2 = let final self::Class2? #t350 = n2 in #t350.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
+               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
+  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
+  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
+  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
+  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
+  let final self::Class2? #t347 = n2 in #t347 == null ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
+  nullable2 = let final self::Class2? #t350 = n2 in #t350 == null ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t353 = n1 in #t353.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t353).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t354 = n1 in #t354.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
-  let final self::Class1? #t358 = n1 in #t358.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t359, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t360 = n1 in #t360.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361) in #t362.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361, #t363) in #t363 : #t362{self::Class1};
-  let final self::Class1? #t365 = n1 in #t365.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t368 = n1 in #t368.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
+  let final self::Class1? #t353 = n1 in #t353 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355 == null ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
+  let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359) == null ?{self::Class1} self::Extension1|set#nullable1(#t359, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t360 = n1 in #t360 == null ?{self::Class1?} null : let final self::Class1 #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361) in #t362 == null ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361, #t363) in #t363 : #t362{self::Class1};
+  let final self::Class1? #t365 = n1 in #t365 == null ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367) == null ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t368 = n1 in #t368 == null ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371 == null ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect
index 5146cf7..25e39a1 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect
@@ -80,7 +80,7 @@
   operator [] = self::Extension3|[];
 }
 static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
@@ -98,28 +98,28 @@
 static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
 static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
-  return #this.{self::Class1::property2};
+  return #this.{self::Class1::property2}{self::Class2};
 static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
 static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
 static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
 static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
-  return #this.{self::Class3::property};
+  return #this.{self::Class3::property}{self::Class2?};
 static method main() → dynamic {
   self::propertyAccess(null);
   self::indexAccess(null, null, null);
@@ -128,168 +128,168 @@
 }
 static method propertyAccess(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t1 = n1 in #t1.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
-  let final self::Class1? #t2 = n1 in #t2.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
-  nullable1 = let final self::Class1? #t3 = n1 in #t3.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
-  let final self::Class1? #t6 = n1 in #t6.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
-  let final self::Class1? #t7 = n1 in #t7.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
-  let final self::Class1? #t8 = n1 in #t8.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
-  let final self::Class1? #t10 = n1 in #t10.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
-  let final self::Class1? #t12 = n1 in #t12.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t15 = n1 in #t15.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
+  let final self::Class1? #t7 = n1 in #t7 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
+  let final self::Class1? #t12 = n1 in #t12 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
   self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
-                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
+                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
   self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
-                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
+  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
+  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
+  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
+  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
+  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
+  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
+  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
+  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
+  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
+  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
+  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
+  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
+  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
+  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
+  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
+  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
+  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
+  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
+  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
+  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
+  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
+  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
+  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
+  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
+  let final self::Class1? #t171 = n1 in #t171 == null ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
+  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
+  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
+  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
+  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
+  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
+  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
+  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
+  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
+  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
+  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
+  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
+  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
+  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
+  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
+  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
+  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
+  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
+  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
+  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
+  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
+  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
+  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
+  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
+  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
+  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
+  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
+  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
+  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
+  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
+  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
+  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
+  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
   self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => Extension1(n1)?.nonNullable1 + 0);
-                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
+                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
   self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
   throws(() => -Extension1(n1)?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
-  let final self::Class2? #t347 = n2 in #t347.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
-  nullable2 = let final self::Class2? #t350 = n2 in #t350.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
+               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
+  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
+  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
+  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
+  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
+  let final self::Class2? #t347 = n2 in #t347 == null ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
+  nullable2 = let final self::Class2? #t350 = n2 in #t350 == null ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t353 = n1 in #t353.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t353).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t354 = n1 in #t354.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
-  let final self::Class1? #t358 = n1 in #t358.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t359, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t360 = n1 in #t360.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361) in #t362.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361, #t363) in #t363 : #t362{self::Class1};
-  let final self::Class1? #t365 = n1 in #t365.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t368 = n1 in #t368.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
+  let final self::Class1? #t353 = n1 in #t353 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355 == null ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
+  let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359) == null ?{self::Class1} self::Extension1|set#nullable1(#t359, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t360 = n1 in #t360 == null ?{self::Class1?} null : let final self::Class1 #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361) in #t362 == null ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361, #t363) in #t363 : #t362{self::Class1};
+  let final self::Class1? #t365 = n1 in #t365 == null ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367) == null ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t368 = n1 in #t368 == null ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371 == null ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect
index 83c8b22..38237dc 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect
@@ -80,7 +80,7 @@
   operator [] = self::Extension3|[];
 }
 static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
@@ -98,28 +98,28 @@
 static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
 static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
-  return #this.{self::Class1::property2};
+  return #this.{self::Class1::property2}{self::Class2};
 static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
 static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
 static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
 static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
-  return #this.{self::Class3::property};
+  return #this.{self::Class3::property}{self::Class2?};
 static method main() → dynamic {
   self::propertyAccess(null);
   self::indexAccess(null, null, null);
@@ -128,168 +128,168 @@
 }
 static method propertyAccess(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t1 = n1 in #t1.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
-  let final self::Class1? #t2 = n1 in #t2.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
-  nullable1 = let final self::Class1? #t3 = n1 in #t3.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
-  let final self::Class1? #t6 = n1 in #t6.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
-  let final self::Class1? #t7 = n1 in #t7.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
-  let final self::Class1? #t8 = n1 in #t8.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
-  let final self::Class1? #t10 = n1 in #t10.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
-  let final self::Class1? #t12 = n1 in #t12.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t15 = n1 in #t15.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
+  let final self::Class1? #t7 = n1 in #t7 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
+  let final self::Class1? #t12 = n1 in #t12 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
   self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
+                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
   self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
+  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
+  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
+  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
+  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
+  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
+  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
+  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
+  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
+  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
+  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
+  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
+  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
+  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
+  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
+  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
+  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
+  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
+  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
+  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
+  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
+  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
+  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
+  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
+  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
+  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
+  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
+  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
+  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
+  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
+  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
+  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
+  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
+  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
+  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
+  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
+  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
+  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
+  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
+  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
+  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
+  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
+  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
+  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
+  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
+  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
+  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
+  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
+  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
+  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
+  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
+  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
+  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
+  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
+  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
+  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
+  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
+  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
   self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
+                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
   self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
-  let final self::Class2? #t345 = n2 in #t345.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
-  nullable2 = let final self::Class2? #t348 = n2 in #t348.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
+               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
+  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
+  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
+  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
+  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
+  let final self::Class2? #t345 = n2 in #t345 == null ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
+  nullable2 = let final self::Class2? #t348 = n2 in #t348 == null ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t351 = n1 in #t351.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t351).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t352 = n1 in #t352.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
-  let final self::Class1? #t356 = n1 in #t356.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t357, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t358 = n1 in #t358.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359) in #t360.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359, #t361) in #t361 : #t360{self::Class1};
-  let final self::Class1? #t363 = n1 in #t363.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t366 = n1 in #t366.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
+  let final self::Class1? #t351 = n1 in #t351 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t351) == null ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353 == null ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
+  let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357) == null ?{self::Class1} self::Extension1|set#nullable1(#t357, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359) in #t360 == null ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359, #t361) in #t361 : #t360{self::Class1};
+  let final self::Class1? #t363 = n1 in #t363 == null ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365) == null ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t366 = n1 in #t366 == null ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369 == null ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect
index 83c8b22..38237dc 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect
@@ -80,7 +80,7 @@
   operator [] = self::Extension3|[];
 }
 static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
@@ -98,28 +98,28 @@
 static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
 static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
-  return #this.{self::Class1::property2};
+  return #this.{self::Class1::property2}{self::Class2};
 static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
 static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
 static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
 static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
-  return #this.{self::Class3::property};
+  return #this.{self::Class3::property}{self::Class2?};
 static method main() → dynamic {
   self::propertyAccess(null);
   self::indexAccess(null, null, null);
@@ -128,168 +128,168 @@
 }
 static method propertyAccess(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t1 = n1 in #t1.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
-  let final self::Class1? #t2 = n1 in #t2.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
-  nullable1 = let final self::Class1? #t3 = n1 in #t3.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
-  let final self::Class1? #t6 = n1 in #t6.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
-  let final self::Class1? #t7 = n1 in #t7.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
-  let final self::Class1? #t8 = n1 in #t8.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
-  let final self::Class1? #t10 = n1 in #t10.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
-  let final self::Class1? #t12 = n1 in #t12.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t15 = n1 in #t15.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
+  let final self::Class1? #t7 = n1 in #t7 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
+  let final self::Class1? #t12 = n1 in #t12 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
   self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
+                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
   self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
+  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
+  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
+  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
+  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
+  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
+  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
+  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
+  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
+  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
+  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
+  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
+  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
+  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
+  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
+  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
+  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
+  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
+  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
+  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
+  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
+  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
+  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
+  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
+  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
+  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
+  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
+  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
+  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
+  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
+  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
+  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
+  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
+  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
+  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
+  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
+  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
+  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
+  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
+  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
+  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
+  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
+  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
+  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
+  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
+  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
+  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
+  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
+  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
+  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
+  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
+  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
+  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
+  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
+  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
+  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
+  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
+  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
   self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
+                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
   self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
-  let final self::Class2? #t345 = n2 in #t345.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
-  nullable2 = let final self::Class2? #t348 = n2 in #t348.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
+               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
+  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
+  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
+  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
+  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
+  let final self::Class2? #t345 = n2 in #t345 == null ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
+  nullable2 = let final self::Class2? #t348 = n2 in #t348 == null ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t351 = n1 in #t351.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t351).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t352 = n1 in #t352.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
-  let final self::Class1? #t356 = n1 in #t356.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t357, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t358 = n1 in #t358.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359) in #t360.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359, #t361) in #t361 : #t360{self::Class1};
-  let final self::Class1? #t363 = n1 in #t363.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t366 = n1 in #t366.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
+  let final self::Class1? #t351 = n1 in #t351 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t351) == null ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353 == null ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
+  let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357) == null ?{self::Class1} self::Extension1|set#nullable1(#t357, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359) in #t360 == null ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359, #t361) in #t361 : #t360{self::Class1};
+  let final self::Class1? #t363 = n1 in #t363 == null ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365) == null ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t366 = n1 in #t366 == null ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369 == null ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect
index 83c8b22..38237dc 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect
@@ -80,7 +80,7 @@
   operator [] = self::Extension3|[];
 }
 static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
@@ -98,28 +98,28 @@
 static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
 static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
-  return #this.{self::Class1::property2};
+  return #this.{self::Class1::property2}{self::Class2};
 static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
 static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
 static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
 static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
-  return #this.{self::Class3::property};
+  return #this.{self::Class3::property}{self::Class2?};
 static method main() → dynamic {
   self::propertyAccess(null);
   self::indexAccess(null, null, null);
@@ -128,168 +128,168 @@
 }
 static method propertyAccess(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t1 = n1 in #t1.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
-  let final self::Class1? #t2 = n1 in #t2.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
-  nullable1 = let final self::Class1? #t3 = n1 in #t3.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
-  let final self::Class1? #t6 = n1 in #t6.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
-  let final self::Class1? #t7 = n1 in #t7.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
-  let final self::Class1? #t8 = n1 in #t8.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
-  let final self::Class1? #t10 = n1 in #t10.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
-  let final self::Class1? #t12 = n1 in #t12.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t15 = n1 in #t15.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
+  let final self::Class1? #t7 = n1 in #t7 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
+  let final self::Class1? #t12 = n1 in #t12 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
   self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
+                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
   self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
+  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
+  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
+  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
+  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
+  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
+  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
+  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
+  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
+  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
+  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
+  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
+  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
+  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
+  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
+  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
+  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
+  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
+  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
+  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
+  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
+  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
+  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
+  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
+  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
+  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
+  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
+  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
+  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
+  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
+  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
+  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
+  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
+  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
+  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
+  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
+  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
+  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
+  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
+  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
+  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
+  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
+  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
+  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
+  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
+  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
+  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
+  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
+  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
+  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
+  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
+  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
+  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
+  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
+  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
+  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
+  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
+  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
   self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
+                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
   self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
-  let final self::Class2? #t345 = n2 in #t345.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
-  nullable2 = let final self::Class2? #t348 = n2 in #t348.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
+               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
+  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
+  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
+  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
+  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
+  let final self::Class2? #t345 = n2 in #t345 == null ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
+  nullable2 = let final self::Class2? #t348 = n2 in #t348 == null ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t351 = n1 in #t351.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t351).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t352 = n1 in #t352.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
-  let final self::Class1? #t356 = n1 in #t356.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t357, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t358 = n1 in #t358.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359) in #t360.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359, #t361) in #t361 : #t360{self::Class1};
-  let final self::Class1? #t363 = n1 in #t363.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t366 = n1 in #t366.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
+  let final self::Class1? #t351 = n1 in #t351 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t351) == null ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353 == null ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
+  let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357) == null ?{self::Class1} self::Extension1|set#nullable1(#t357, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359) in #t360 == null ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359, #t361) in #t361 : #t360{self::Class1};
+  let final self::Class1? #t363 = n1 in #t363 == null ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365) == null ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t366 = n1 in #t366 == null ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369 == null ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect
index 83c8b22..38237dc 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect
@@ -80,7 +80,7 @@
   operator [] = self::Extension3|[];
 }
 static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
   #this.{self::Class1::property} = value;
 }
@@ -98,28 +98,28 @@
 static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
   return self::Extension1|get#nullable1(#this);
 static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
-  return #this.{self::Class1::property1};
+  return #this.{self::Class1::property1}{self::Class1};
 static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
-  return #this.{self::Class1::property2};
+  return #this.{self::Class1::property2}{self::Class2};
 static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
   return self::Extension2|get#nonNullable2(#this);
 static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
   return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
 static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
-  return #this.{self::Class2::property};
+  return #this.{self::Class2::property}{self::Class2};
 static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
   #this.{self::Class2::property} = value;
 }
 static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
-  return #this.{self::Class3::property};
+  return #this.{self::Class3::property}{self::Class2?};
 static method main() → dynamic {
   self::propertyAccess(null);
   self::indexAccess(null, null, null);
@@ -128,168 +128,168 @@
 }
 static method propertyAccess(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t1 = n1 in #t1.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
-  let final self::Class1? #t2 = n1 in #t2.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
-  nullable1 = let final self::Class1? #t3 = n1 in #t3.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
-  let final self::Class1? #t6 = n1 in #t6.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
-  let final self::Class1? #t7 = n1 in #t7.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
-  let final self::Class1? #t8 = n1 in #t8.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
-  let final self::Class1? #t10 = n1 in #t10.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
-  let final self::Class1? #t12 = n1 in #t12.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t15 = n1 in #t15.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
-  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
+  let final self::Class1? #t7 = n1 in #t7 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
+  let final self::Class1? #t12 = n1 in #t12 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
   self::throws(() → void => let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nullable1 = new Class1()).nullable1);
-                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
+                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
   self::throws(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 Try accessing using ?. instead.
   throws(() => (n1?.nonNullable1Method()).nullable1);
-                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
-  nullable1 = let final self::Class1? #t25 = n1 in #t25.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
-  nullable1 = let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
-  nullable1 = let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
-  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
-  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
-  let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
-  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
-  let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
-  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
-  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
-  let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
-  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
-  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
-  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t96 = n1 in #t96.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
-  let final self::Class1? #t99 = n1 in #t99.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
-  nullable1 = let final self::Class1? #t102 = n1 in #t102.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
-  let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
-  nullable1 = let final self::Class1? #t112 = n1 in #t112.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
-  let final self::Class1? #t119 = n1 in #t119.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
-  nullable1 = let final self::Class1? #t122 = n1 in #t122.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
-  let final self::Class1? #t127 = n1 in #t127.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t128 = n1 in #t128.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
-  let final self::Class1? #t131 = n1 in #t131.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
-  nullable1 = let final self::Class1? #t134 = n1 in #t134.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
-  let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t140 = n1 in #t140.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
-  let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
-  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t145 = n1 in #t145.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
-  let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
-  let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t150 = n1 in #t150.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
-  let final self::Class1? #t153 = n1 in #t153.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
-  nullable1 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
-  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t162 = n1 in #t162.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t167 = n1 in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
-  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
+                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
+  nullable1 = let final self::Class1? #t25 = n1 in #t25 == null ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
+  nullable1 = let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29 == null ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
+  nullable1 = let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33 == null ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t39 = n1 in #t39 == null ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
+  let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
+  let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
+  let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
+  nullable1 = let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
+  let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
+  nullable1 = let final self::Class1? #t90 = n1 in #t90 == null ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t96 = n1 in #t96 == null ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
+  let final self::Class1? #t99 = n1 in #t99 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
+  nullable1 = let final self::Class1? #t102 = n1 in #t102 == null ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
+  let final self::Class1? #t107 = n1 in #t107 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
+  nullable1 = let final self::Class1? #t112 = n1 in #t112 == null ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
+  let final self::Class1? #t119 = n1 in #t119 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
+  nullable1 = let final self::Class1? #t122 = n1 in #t122 == null ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
+  let final self::Class1? #t127 = n1 in #t127 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t128 = n1 in #t128 == null ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
+  let final self::Class1? #t131 = n1 in #t131 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
+  nullable1 = let final self::Class1? #t134 = n1 in #t134 == null ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
+  let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t140 = n1 in #t140 == null ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
+  let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t145 = n1 in #t145 == null ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
+  let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
+  let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t150 = n1 in #t150 == null ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
+  let final self::Class1? #t153 = n1 in #t153 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
+  nullable1 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t162 = n1 in #t162 == null ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t167 = n1 in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
-  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
-  let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
-  let final self::Class1? #t175 = n1 in #t175.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
-  let final self::Class1? #t183 = n1 in #t183.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
-  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
-  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
-  let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
-  nullable2 = let final self::Class2? #t200 = n2 in #t200.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
-  let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
-  nullable2 = let final self::Class2? #t206 = n2 in #t206.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
-  let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
-  nullable2 = let final self::Class2? #t212 = n2 in #t212.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
-  let final self::Class2? #t216 = n2 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
-  nullable2 = let final self::Class2? #t220 = n2 in #t220.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
-  let final self::Class1? #t224 = n1 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
-  nullable2 = let final self::Class1? #t227 = n1 in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
-  let final self::Class1? #t232 = n1 in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
-  nullable2 = let final self::Class1? #t237 = n1 in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
-  let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t243 = n1 in #t243.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
-  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
-  let final self::Class1? #t251 = n1 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
-  nullable2 = let final self::Class1? #t254 = n1 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
-  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
-  nullable2 = let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
-  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
-  nullable2 = let final self::Class1? #t272 = n1 in #t272.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
-  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
-  let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t281 = n1 in #t281.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
-  let final self::Class1? #t286 = n1 in #t286.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
-  nullable1 = let final self::Class1? #t289 = n1 in #t289.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
-  let final self::Class1? #t292 = n1 in #t292.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
-  nullable1 = let final self::Class1? #t295 = n1 in #t295.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
-  let final self::Class3? #t301 = n3 in #t301.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
-  nullable2 = let final self::Class3? #t304 = n3 in #t304.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
-  let final self::Class3? #t309 = n3 in #t309.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
-  nullable2 = let final self::Class3? #t312 = n3 in #t312.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
-  let final self::Class3? #t317 = n3 in #t317.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
-  nullable2 = let final self::Class3? #t322 = n3 in #t322.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
+  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
+  let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
+  let final self::Class1? #t175 = n1 in #t175 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t176 = n1 in #t176 == null ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
+  let final self::Class1? #t183 = n1 in #t183 == null ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
+  nullable2 = let final self::Class1? #t186 = n1 in #t186 == null ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192) == null ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195 == null ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
+  let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
+  nullable2 = let final self::Class2? #t200 = n2 in #t200 == null ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
+  let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
+  nullable2 = let final self::Class2? #t206 = n2 in #t206 == null ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
+  let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
+  nullable2 = let final self::Class2? #t212 = n2 in #t212 == null ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
+  let final self::Class2? #t216 = n2 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
+  nullable2 = let final self::Class2? #t220 = n2 in #t220 == null ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
+  let final self::Class1? #t224 = n1 in #t224 == null ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
+  nullable2 = let final self::Class1? #t227 = n1 in #t227 == null ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
+  let final self::Class1? #t232 = n1 in #t232 == null ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
+  nullable2 = let final self::Class1? #t237 = n1 in #t237 == null ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
+  let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t243 = n1 in #t243 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t244 = n1 in #t244 == null ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
+  let final self::Class1? #t251 = n1 in #t251 == null ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
+  nullable2 = let final self::Class1? #t254 = n1 in #t254 == null ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
+  nullable2 = let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
+  nullable2 = let final self::Class1? #t272 = n1 in #t272 == null ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
+  let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t281 = n1 in #t281 == null ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282 == null ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
+  let final self::Class1? #t286 = n1 in #t286 == null ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
+  nullable1 = let final self::Class1? #t289 = n1 in #t289 == null ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
+  let final self::Class1? #t292 = n1 in #t292 == null ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294) == null ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
+  nullable1 = let final self::Class1? #t295 = n1 in #t295 == null ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296 == null ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298 == null ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
+  let final self::Class3? #t301 = n3 in #t301 == null ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
+  nullable2 = let final self::Class3? #t304 = n3 in #t304 == null ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305 == null ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
+  let final self::Class3? #t309 = n3 in #t309 == null ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
+  nullable2 = let final self::Class3? #t312 = n3 in #t312 == null ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313 == null ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
+  let final self::Class3? #t317 = n3 in #t317 == null ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318 == null ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
+  nullable2 = let final self::Class3? #t322 = n3 in #t322 == null ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323 == null ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
   self::throws(() → void => let final Never #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => n1?.nonNullable1 + 0);
-                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
+                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
   self::throws(() → void => let final Never #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
   throws(() => -n1?.nonNullable1);
-               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
-  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
-  nullable2 = let final self::Class2? #t332 = n2 in #t332.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
-  let final self::Class2? #t335 = n2 in #t335.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
-  nullable2 = let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
-  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
-  nullable2 = let final self::Class2? #t342 = n2 in #t342.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
-  let final self::Class2? #t345 = n2 in #t345.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
-  nullable2 = let final self::Class2? #t348 = n2 in #t348.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
+               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
+  nullable2 = let final self::Class2? #t332 = n2 in #t332 == null ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
+  let final self::Class2? #t335 = n2 in #t335 == null ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
+  nullable2 = let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
+  nullable2 = let final self::Class2? #t342 = n2 in #t342 == null ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
+  let final self::Class2? #t345 = n2 in #t345 == null ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
+  nullable2 = let final self::Class2? #t348 = n2 in #t348 == null ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t351 = n1 in #t351.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t351).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t352 = n1 in #t352.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
-  let final self::Class1? #t356 = n1 in #t356.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t357, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t358 = n1 in #t358.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359) in #t360.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359, #t361) in #t361 : #t360{self::Class1};
-  let final self::Class1? #t363 = n1 in #t363.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t366 = n1 in #t366.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
+  let final self::Class1? #t351 = n1 in #t351 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t351) == null ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353 == null ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
+  let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357) == null ?{self::Class1} self::Extension1|set#nullable1(#t357, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t358 = n1 in #t358 == null ?{self::Class1?} null : let final self::Class1 #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359) in #t360 == null ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359, #t361) in #t361 : #t360{self::Class1};
+  let final self::Class1? #t363 = n1 in #t363 == null ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365) == null ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t366 = n1 in #t366 == null ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369 == null ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.expect
index dc52187..438791b 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.expect
@@ -78,56 +78,56 @@
   operator []= = self::Extension|[]=;
 }
 static method Extension|[](lowered final self::Class2 #this, core::int index) → core::int
-  return #this.{self::Class2::field};
+  return #this.{self::Class2::field}{core::int};
 static method Extension|[]=(lowered final self::Class2 #this, core::int index, core::int value) → void {
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
   self::Class1? c1;
-  let final self::Class1? #t1 = c1 in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::Class1}.{self::Class1::[]}(0);
-  let final self::Class1? #t2 = c1 in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::Class1}.{self::Class1::[]=}(0, 1);
-  let final self::Class1? #t3 = c1 in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Class1}.{self::Class1::[]=}(0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0)));
-  let final self::Class1? #t4 = c1 in #t4.{core::Object::==}(null) ?{core::int?} null : let final core::int #t5 = 0 in #t4{self::Class1}.{self::Class1::[]=}(#t5, #t4{self::Class1}.{self::Class1::[]}(#t5).{core::num::+}(1));
-  let final self::Class1? #t6 = c1 in #t6.{core::Object::==}(null) ?{core::int?} null : let final core::int #t7 = 0 in #t6{self::Class1}.{self::Class1::[]=}(#t7, #t6{self::Class1}.{self::Class1::[]}(#t7).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0))));
-  let final self::Class1? #t8 = c1 in #t8.{core::Object::==}(null) ?{core::int?} null : let final core::int #t9 = 0 in let final core::int #t10 = #t8{self::Class1}.{self::Class1::[]}(#t9).{core::num::+}(1) in let final void #t11 = #t8{self::Class1}.{self::Class1::[]=}(#t9, #t10) in #t10;
-  let final self::Class1? #t12 = c1 in #t12.{core::Object::==}(null) ?{core::int?} null : let final core::int #t13 = 0 in #t12{self::Class1}.{self::Class1::[]=}(#t13, #t12{self::Class1}.{self::Class1::[]}(#t13).{core::num::+}(1));
-  let final self::Class1? #t14 = c1 in #t14.{core::Object::==}(null) ?{core::int?} null : let final core::int #t15 = 0 in #t14{self::Class1}.{self::Class1::[]}(#t15).{core::num::==}(null) ?{core::int} #t14{self::Class1}.{self::Class1::[]=}(#t15, 1) : null;
-  let final self::Class1? #t16 = c1 in #t16.{core::Object::==}(null) ?{core::int?} null : let final core::int #t17 = 0 in #t16{self::Class1}.{self::Class1::[]}(#t17).{core::num::==}(null) ?{core::int} #t16{self::Class1}.{self::Class1::[]=}(#t17, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1))) : null;
+  let final self::Class1? #t1 = c1 in #t1 == null ?{core::int?} null : #t1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int};
+  let final self::Class1? #t2 = c1 in #t2 == null ?{core::int?} null : #t2{self::Class1}.{self::Class1::[]=}(0, 1){(core::int, core::int) → void};
+  let final self::Class1? #t3 = c1 in #t3 == null ?{core::int?} null : #t3{self::Class1}.{self::Class1::[]=}(0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t4 = c1 in #t4 == null ?{core::int?} null : let final core::int #t5 = 0 in #t4{self::Class1}.{self::Class1::[]=}(#t5, #t4{self::Class1}.{self::Class1::[]}(#t5){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t6 = c1 in #t6 == null ?{core::int?} null : let final core::int #t7 = 0 in #t6{self::Class1}.{self::Class1::[]=}(#t7, #t6{self::Class1}.{self::Class1::[]}(#t7){(core::int) → core::int}.{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t8 = c1 in #t8 == null ?{core::int?} null : let final core::int #t9 = 0 in let final core::int #t10 = #t8{self::Class1}.{self::Class1::[]}(#t9){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t11 = #t8{self::Class1}.{self::Class1::[]=}(#t9, #t10){(core::int, core::int) → void} in #t10;
+  let final self::Class1? #t12 = c1 in #t12 == null ?{core::int?} null : let final core::int #t13 = 0 in #t12{self::Class1}.{self::Class1::[]=}(#t13, #t12{self::Class1}.{self::Class1::[]}(#t13){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t14 = c1 in #t14 == null ?{core::int?} null : let final core::int #t15 = 0 in #t14{self::Class1}.{self::Class1::[]}(#t15){(core::int) → core::int} == null ?{core::int} #t14{self::Class1}.{self::Class1::[]=}(#t15, 1){(core::int, core::int) → void} : null;
+  let final self::Class1? #t16 = c1 in #t16 == null ?{core::int?} null : let final core::int #t17 = 0 in #t16{self::Class1}.{self::Class1::[]}(#t17){(core::int) → core::int} == null ?{core::int} #t16{self::Class1}.{self::Class1::[]=}(#t17, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1){(core::int) → core::int}){(core::num) → core::int}){(core::int, core::int) → void} : null;
   self::Class2? c2;
-  let final self::Class2? #t18 = c2 in #t18.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t18{self::Class2}, 0);
-  let final self::Class2? #t19 = c2 in #t19.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t19{self::Class2}, 0, 1);
-  let final self::Class2? #t20 = c2 in #t20.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t20{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)));
-  let final self::Class2? #t21 = c2 in #t21.{core::Object::==}(null) ?{core::int?} null : let final core::int #t22 = 0 in self::Extension|[]=(#t21{self::Class2}, #t22, self::Extension|[](#t21{self::Class2}, #t22).{core::num::+}(1));
-  let final self::Class2? #t23 = c2 in #t23.{core::Object::==}(null) ?{core::int?} null : let final core::int #t24 = 0 in self::Extension|[]=(#t23{self::Class2}, #t24, self::Extension|[](#t23{self::Class2}, #t24).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0))));
-  let final self::Class2? #t25 = c2 in #t25.{core::Object::==}(null) ?{core::int?} null : let final core::int #t26 = 0 in let final core::int #t27 = self::Extension|[](#t25{self::Class2}, #t26).{core::num::+}(1) in let final void #t28 = self::Extension|[]=(#t25{self::Class2}, #t26, #t27) in #t27;
-  let final self::Class2? #t29 = c2 in #t29.{core::Object::==}(null) ?{core::int?} null : let final core::int #t30 = 0 in self::Extension|[]=(#t29{self::Class2}, #t30, self::Extension|[](#t29{self::Class2}, #t30).{core::num::+}(1));
-  let final self::Class2? #t31 = c2 in #t31.{core::Object::==}(null) ?{core::int?} null : let final core::int #t32 = 0 in self::Extension|[](#t31{self::Class2}, #t32).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t31{self::Class2}, #t32, 1) : null;
-  let final self::Class2? #t33 = c2 in #t33.{core::Object::==}(null) ?{core::int?} null : let final core::int #t34 = 0 in self::Extension|[](#t33{self::Class2}, #t34).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t33{self::Class2}, #t34, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1))) : null;
-  let final self::Class2? #t35 = c2 in #t35.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t35{self::Class2}, 0);
-  let final self::Class2? #t36 = c2 in #t36.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t36{self::Class2}, 0, 1);
-  let final self::Class2? #t37 = c2 in #t37.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t37{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)));
-  let final self::Class2? #t38 = c2 in #t38.{core::Object::==}(null) ?{core::int?} null : let final core::int #t39 = 0 in self::Extension|[]=(#t38{self::Class2}, #t39, self::Extension|[](#t38{self::Class2}, #t39).{core::num::+}(1));
-  let final self::Class2? #t40 = c2 in #t40.{core::Object::==}(null) ?{core::int?} null : let final core::int #t41 = 0 in self::Extension|[]=(#t40{self::Class2}, #t41, self::Extension|[](#t40{self::Class2}, #t41).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0))));
-  let final self::Class2? #t42 = c2 in #t42.{core::Object::==}(null) ?{core::int?} null : let final core::int #t43 = 0 in let final core::int #t44 = self::Extension|[](#t42{self::Class2}, #t43).{core::num::+}(1) in let final void #t45 = self::Extension|[]=(#t42{self::Class2}, #t43, #t44) in #t44;
-  let final self::Class2? #t46 = c2 in #t46.{core::Object::==}(null) ?{core::int?} null : let final core::int #t47 = 0 in self::Extension|[]=(#t46{self::Class2}, #t47, self::Extension|[](#t46{self::Class2}, #t47).{core::num::+}(1));
-  let final self::Class2? #t48 = c2 in #t48.{core::Object::==}(null) ?{core::int?} null : let final core::int #t49 = 0 in self::Extension|[](#t48{self::Class2}, #t49).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t48{self::Class2}, #t49, 1) : null;
-  let final self::Class2? #t50 = c2 in #t50.{core::Object::==}(null) ?{core::int?} null : let final core::int #t51 = 0 in self::Extension|[](#t50{self::Class2}, #t51).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t50{self::Class2}, #t51, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1))) : null;
-  let final self::Class1? #t52 = c1 in #t52.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t53 = #t52{self::Class1}.{self::Class1::field} in #t53.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t53{self::Class2}, 0);
-  let final self::Class1? #t54 = c1 in #t54.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t55 = #t54{self::Class1}.{self::Class1::field} in #t55.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t55{self::Class2}, 0, 1);
-  let final self::Class1? #t56 = c1 in #t56.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t57 = #t56{self::Class1}.{self::Class1::field} in #t57.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t57{self::Class2}, 0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0)));
-  let final self::Class1? #t58 = c1 in #t58.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t59 = #t58{self::Class1}.{self::Class1::field} in #t59.{core::Object::==}(null) ?{core::int?} null : let final core::int #t60 = 0 in self::Extension|[]=(#t59{self::Class2}, #t60, self::Extension|[](#t59{self::Class2}, #t60).{core::num::+}(1));
-  let final self::Class1? #t61 = c1 in #t61.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t62 = #t61{self::Class1}.{self::Class1::field} in #t62.{core::Object::==}(null) ?{core::int?} null : let final core::int #t63 = 0 in self::Extension|[]=(#t62{self::Class2}, #t63, self::Extension|[](#t62{self::Class2}, #t63).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0))));
-  let final self::Class1? #t64 = c1 in #t64.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t65 = #t64{self::Class1}.{self::Class1::field} in #t65.{core::Object::==}(null) ?{core::int?} null : let final core::int #t66 = 0 in let final core::int #t67 = self::Extension|[](#t65{self::Class2}, #t66).{core::num::+}(1) in let final void #t68 = self::Extension|[]=(#t65{self::Class2}, #t66, #t67) in #t67;
-  let final self::Class1? #t69 = c1 in #t69.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t70 = #t69{self::Class1}.{self::Class1::field} in #t70.{core::Object::==}(null) ?{core::int?} null : let final core::int #t71 = 0 in self::Extension|[]=(#t70{self::Class2}, #t71, self::Extension|[](#t70{self::Class2}, #t71).{core::num::+}(1));
-  let final self::Class1? #t72 = c1 in #t72.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t73 = #t72{self::Class1}.{self::Class1::field} in #t73.{core::Object::==}(null) ?{core::int?} null : let final core::int #t74 = 0 in self::Extension|[](#t73{self::Class2}, #t74).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t73{self::Class2}, #t74, 1) : null;
-  let final self::Class1? #t75 = c1 in #t75.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t76 = #t75{self::Class1}.{self::Class1::field} in #t76.{core::Object::==}(null) ?{core::int?} null : let final core::int #t77 = 0 in self::Extension|[](#t76{self::Class2}, #t77).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t76{self::Class2}, #t77, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1))) : null;
-  let final self::Class1? #t78 = c1 in #t78.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t79 = #t78{self::Class1}.{self::Class1::field} in #t79.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t79{self::Class2}, 0);
-  let final self::Class1? #t80 = c1 in #t80.{core::Object::==}(null) ?{void} null : let final self::Class2? #t81 = #t80{self::Class1}.{self::Class1::field} in #t81.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t81{self::Class2}, 0, 1);
-  let final self::Class1? #t82 = c1 in #t82.{core::Object::==}(null) ?{void} null : let final self::Class2? #t83 = #t82{self::Class1}.{self::Class1::field} in #t83.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t83{self::Class2}, 0, 1.{core::num::+}((let final self::Class2? #t84 = c2 in #t84.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t84{self::Class2}, 0)!) as{ForNonNullableByDefault} core::int));
-  let final self::Class1? #t85 = c1 in #t85.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t86 = #t85{self::Class1}.{self::Class1::field} in #t86.{core::Object::==}(null) ?{core::int?} null : let final core::int #t87 = 0 in self::Extension|[]=(#t86{self::Class2}, #t87, self::Extension|[](#t86{self::Class2}, #t87).{core::num::+}(1));
-  let final self::Class1? #t88 = c1 in #t88.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t89 = #t88{self::Class1}.{self::Class1::field} in #t89.{core::Object::==}(null) ?{core::int?} null : let final core::int #t90 = 0 in self::Extension|[]=(#t89{self::Class2}, #t90, self::Extension|[](#t89{self::Class2}, #t90).{core::num::+}(1.{core::num::+}((let final self::Class2? #t91 = c2 in #t91.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t91{self::Class2}, 0)!) as{ForNonNullableByDefault} core::int)));
-  let final self::Class1? #t92 = c1 in #t92.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t93 = #t92{self::Class1}.{self::Class1::field} in #t93.{core::Object::==}(null) ?{core::int?} null : let final core::int #t94 = 0 in let final core::int #t95 = self::Extension|[](#t93{self::Class2}, #t94).{core::num::+}(1) in let final void #t96 = self::Extension|[]=(#t93{self::Class2}, #t94, #t95) in #t95;
-  let final self::Class1? #t97 = c1 in #t97.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t98 = #t97{self::Class1}.{self::Class1::field} in #t98.{core::Object::==}(null) ?{core::int?} null : let final core::int #t99 = 0 in self::Extension|[]=(#t98{self::Class2}, #t99, self::Extension|[](#t98{self::Class2}, #t99).{core::num::+}(1));
-  let final self::Class1? #t100 = c1 in #t100.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t101 = #t100{self::Class1}.{self::Class1::field} in #t101.{core::Object::==}(null) ?{core::int?} null : let final core::int #t102 = 0 in self::Extension|[](#t101{self::Class2}, #t102).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t101{self::Class2}, #t102, 1) : null;
-  let final self::Class1? #t103 = c1 in #t103.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t104 = #t103{self::Class1}.{self::Class1::field} in #t104.{core::Object::==}(null) ?{core::int?} null : let final core::int #t105 = 0 in self::Extension|[](#t104{self::Class2}, #t105).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t104{self::Class2}, #t105, 1.{core::num::+}((let final self::Class2? #t106 = c2 in #t106.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t106{self::Class2}, 1)!) as{ForNonNullableByDefault} core::int)) : null;
+  let final self::Class2? #t18 = c2 in #t18 == null ?{core::int?} null : self::Extension|[](#t18{self::Class2}, 0);
+  let final self::Class2? #t19 = c2 in #t19 == null ?{core::int?} null : self::Extension|[]=(#t19{self::Class2}, 0, 1);
+  let final self::Class2? #t20 = c2 in #t20 == null ?{core::int?} null : self::Extension|[]=(#t20{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int});
+  let final self::Class2? #t21 = c2 in #t21 == null ?{core::int?} null : let final core::int #t22 = 0 in self::Extension|[]=(#t21{self::Class2}, #t22, self::Extension|[](#t21{self::Class2}, #t22).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t23 = c2 in #t23 == null ?{core::int?} null : let final core::int #t24 = 0 in self::Extension|[]=(#t23{self::Class2}, #t24, self::Extension|[](#t23{self::Class2}, #t24).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class2? #t25 = c2 in #t25 == null ?{core::int?} null : let final core::int #t26 = 0 in let final core::int #t27 = self::Extension|[](#t25{self::Class2}, #t26).{core::num::+}(1){(core::num) → core::int} in let final void #t28 = self::Extension|[]=(#t25{self::Class2}, #t26, #t27) in #t27;
+  let final self::Class2? #t29 = c2 in #t29 == null ?{core::int?} null : let final core::int #t30 = 0 in self::Extension|[]=(#t29{self::Class2}, #t30, self::Extension|[](#t29{self::Class2}, #t30).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t31 = c2 in #t31 == null ?{core::int?} null : let final core::int #t32 = 0 in self::Extension|[](#t31{self::Class2}, #t32) == null ?{core::int} self::Extension|[]=(#t31{self::Class2}, #t32, 1) : null;
+  let final self::Class2? #t33 = c2 in #t33 == null ?{core::int?} null : let final core::int #t34 = 0 in self::Extension|[](#t33{self::Class2}, #t34) == null ?{core::int} self::Extension|[]=(#t33{self::Class2}, #t34, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1)){(core::num) → core::int}) : null;
+  let final self::Class2? #t35 = c2 in #t35 == null ?{core::int?} null : self::Extension|[](#t35{self::Class2}, 0);
+  let final self::Class2? #t36 = c2 in #t36 == null ?{void} null : self::Extension|[]=(#t36{self::Class2}, 0, 1);
+  let final self::Class2? #t37 = c2 in #t37 == null ?{void} null : self::Extension|[]=(#t37{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int});
+  let final self::Class2? #t38 = c2 in #t38 == null ?{core::int?} null : let final core::int #t39 = 0 in self::Extension|[]=(#t38{self::Class2}, #t39, self::Extension|[](#t38{self::Class2}, #t39).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t40 = c2 in #t40 == null ?{core::int?} null : let final core::int #t41 = 0 in self::Extension|[]=(#t40{self::Class2}, #t41, self::Extension|[](#t40{self::Class2}, #t41).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class2? #t42 = c2 in #t42 == null ?{core::int?} null : let final core::int #t43 = 0 in let final core::int #t44 = self::Extension|[](#t42{self::Class2}, #t43).{core::num::+}(1){(core::num) → core::int} in let final void #t45 = self::Extension|[]=(#t42{self::Class2}, #t43, #t44) in #t44;
+  let final self::Class2? #t46 = c2 in #t46 == null ?{core::int?} null : let final core::int #t47 = 0 in self::Extension|[]=(#t46{self::Class2}, #t47, self::Extension|[](#t46{self::Class2}, #t47).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t48 = c2 in #t48 == null ?{core::int?} null : let final core::int #t49 = 0 in self::Extension|[](#t48{self::Class2}, #t49) == null ?{core::int} self::Extension|[]=(#t48{self::Class2}, #t49, 1) : null;
+  let final self::Class2? #t50 = c2 in #t50 == null ?{core::int?} null : let final core::int #t51 = 0 in self::Extension|[](#t50{self::Class2}, #t51) == null ?{core::int} self::Extension|[]=(#t50{self::Class2}, #t51, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1)){(core::num) → core::int}) : null;
+  let final self::Class1? #t52 = c1 in #t52 == null ?{core::int?} null : let final self::Class2? #t53 = #t52{self::Class1}.{self::Class1::field}{self::Class2?} in #t53 == null ?{core::int?} null : self::Extension|[](#t53{self::Class2}, 0);
+  let final self::Class1? #t54 = c1 in #t54 == null ?{core::int?} null : let final self::Class2? #t55 = #t54{self::Class1}.{self::Class1::field}{self::Class2?} in #t55 == null ?{core::int?} null : self::Extension|[]=(#t55{self::Class2}, 0, 1);
+  let final self::Class1? #t56 = c1 in #t56 == null ?{core::int?} null : let final self::Class2? #t57 = #t56{self::Class1}.{self::Class1::field}{self::Class2?} in #t57 == null ?{core::int?} null : self::Extension|[]=(#t57{self::Class2}, 0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t58 = c1 in #t58 == null ?{core::int?} null : let final self::Class2? #t59 = #t58{self::Class1}.{self::Class1::field}{self::Class2?} in #t59 == null ?{core::int?} null : let final core::int #t60 = 0 in self::Extension|[]=(#t59{self::Class2}, #t60, self::Extension|[](#t59{self::Class2}, #t60).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t61 = c1 in #t61 == null ?{core::int?} null : let final self::Class2? #t62 = #t61{self::Class1}.{self::Class1::field}{self::Class2?} in #t62 == null ?{core::int?} null : let final core::int #t63 = 0 in self::Extension|[]=(#t62{self::Class2}, #t63, self::Extension|[](#t62{self::Class2}, #t63).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t64 = c1 in #t64 == null ?{core::int?} null : let final self::Class2? #t65 = #t64{self::Class1}.{self::Class1::field}{self::Class2?} in #t65 == null ?{core::int?} null : let final core::int #t66 = 0 in let final core::int #t67 = self::Extension|[](#t65{self::Class2}, #t66).{core::num::+}(1){(core::num) → core::int} in let final void #t68 = self::Extension|[]=(#t65{self::Class2}, #t66, #t67) in #t67;
+  let final self::Class1? #t69 = c1 in #t69 == null ?{core::int?} null : let final self::Class2? #t70 = #t69{self::Class1}.{self::Class1::field}{self::Class2?} in #t70 == null ?{core::int?} null : let final core::int #t71 = 0 in self::Extension|[]=(#t70{self::Class2}, #t71, self::Extension|[](#t70{self::Class2}, #t71).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t72 = c1 in #t72 == null ?{core::int?} null : let final self::Class2? #t73 = #t72{self::Class1}.{self::Class1::field}{self::Class2?} in #t73 == null ?{core::int?} null : let final core::int #t74 = 0 in self::Extension|[](#t73{self::Class2}, #t74) == null ?{core::int} self::Extension|[]=(#t73{self::Class2}, #t74, 1) : null;
+  let final self::Class1? #t75 = c1 in #t75 == null ?{core::int?} null : let final self::Class2? #t76 = #t75{self::Class1}.{self::Class1::field}{self::Class2?} in #t76 == null ?{core::int?} null : let final core::int #t77 = 0 in self::Extension|[](#t76{self::Class2}, #t77) == null ?{core::int} self::Extension|[]=(#t76{self::Class2}, #t77, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1){(core::int) → core::int}){(core::num) → core::int}) : null;
+  let final self::Class1? #t78 = c1 in #t78 == null ?{core::int?} null : let final self::Class2? #t79 = #t78{self::Class1}.{self::Class1::field}{self::Class2?} in #t79 == null ?{core::int?} null : self::Extension|[](#t79{self::Class2}, 0);
+  let final self::Class1? #t80 = c1 in #t80 == null ?{void} null : let final self::Class2? #t81 = #t80{self::Class1}.{self::Class1::field}{self::Class2?} in #t81 == null ?{void} null : self::Extension|[]=(#t81{self::Class2}, 0, 1);
+  let final self::Class1? #t82 = c1 in #t82 == null ?{void} null : let final self::Class2? #t83 = #t82{self::Class1}.{self::Class1::field}{self::Class2?} in #t83 == null ?{void} null : self::Extension|[]=(#t83{self::Class2}, 0, 1.{core::num::+}((let final self::Class2? #t84 = c2 in #t84 == null ?{core::int?} null : self::Extension|[](#t84{self::Class2}, 0)!) as{ForNonNullableByDefault} core::int){(core::num) → core::int});
+  let final self::Class1? #t85 = c1 in #t85 == null ?{core::int?} null : let final self::Class2? #t86 = #t85{self::Class1}.{self::Class1::field}{self::Class2?} in #t86 == null ?{core::int?} null : let final core::int #t87 = 0 in self::Extension|[]=(#t86{self::Class2}, #t87, self::Extension|[](#t86{self::Class2}, #t87).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t88 = c1 in #t88 == null ?{core::int?} null : let final self::Class2? #t89 = #t88{self::Class1}.{self::Class1::field}{self::Class2?} in #t89 == null ?{core::int?} null : let final core::int #t90 = 0 in self::Extension|[]=(#t89{self::Class2}, #t90, self::Extension|[](#t89{self::Class2}, #t90).{core::num::+}(1.{core::num::+}((let final self::Class2? #t91 = c2 in #t91 == null ?{core::int?} null : self::Extension|[](#t91{self::Class2}, 0)!) as{ForNonNullableByDefault} core::int){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t92 = c1 in #t92 == null ?{core::int?} null : let final self::Class2? #t93 = #t92{self::Class1}.{self::Class1::field}{self::Class2?} in #t93 == null ?{core::int?} null : let final core::int #t94 = 0 in let final core::int #t95 = self::Extension|[](#t93{self::Class2}, #t94).{core::num::+}(1){(core::num) → core::int} in let final void #t96 = self::Extension|[]=(#t93{self::Class2}, #t94, #t95) in #t95;
+  let final self::Class1? #t97 = c1 in #t97 == null ?{core::int?} null : let final self::Class2? #t98 = #t97{self::Class1}.{self::Class1::field}{self::Class2?} in #t98 == null ?{core::int?} null : let final core::int #t99 = 0 in self::Extension|[]=(#t98{self::Class2}, #t99, self::Extension|[](#t98{self::Class2}, #t99).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t100 = c1 in #t100 == null ?{core::int?} null : let final self::Class2? #t101 = #t100{self::Class1}.{self::Class1::field}{self::Class2?} in #t101 == null ?{core::int?} null : let final core::int #t102 = 0 in self::Extension|[](#t101{self::Class2}, #t102) == null ?{core::int} self::Extension|[]=(#t101{self::Class2}, #t102, 1) : null;
+  let final self::Class1? #t103 = c1 in #t103 == null ?{core::int?} null : let final self::Class2? #t104 = #t103{self::Class1}.{self::Class1::field}{self::Class2?} in #t104 == null ?{core::int?} null : let final core::int #t105 = 0 in self::Extension|[](#t104{self::Class2}, #t105) == null ?{core::int} self::Extension|[]=(#t104{self::Class2}, #t105, 1.{core::num::+}((let final self::Class2? #t106 = c2 in #t106 == null ?{core::int?} null : self::Extension|[](#t106{self::Class2}, 1)!) as{ForNonNullableByDefault} core::int){(core::num) → core::int}) : null;
 }
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.transformed.expect
index 5b7b144..7c865b5 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.strong.transformed.expect
@@ -78,58 +78,58 @@
   operator []= = self::Extension|[]=;
 }
 static method Extension|[](lowered final self::Class2 #this, core::int index) → core::int
-  return #this.{self::Class2::field};
+  return #this.{self::Class2::field}{core::int};
 static method Extension|[]=(lowered final self::Class2 #this, core::int index, core::int value) → void {
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
   self::Class1? c1;
-  let final self::Class1? #t1 = c1 in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::Class1}.{self::Class1::[]}(0);
-  let final self::Class1? #t2 = c1 in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::Class1}.{self::Class1::[]=}(0, 1);
-  let final self::Class1? #t3 = c1 in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Class1}.{self::Class1::[]=}(0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0)));
-  let final self::Class1? #t4 = c1 in #t4.{core::Object::==}(null) ?{core::int?} null : let final core::int #t5 = 0 in #t4{self::Class1}.{self::Class1::[]=}(#t5, #t4{self::Class1}.{self::Class1::[]}(#t5).{core::num::+}(1));
-  let final self::Class1? #t6 = c1 in #t6.{core::Object::==}(null) ?{core::int?} null : let final core::int #t7 = 0 in #t6{self::Class1}.{self::Class1::[]=}(#t7, #t6{self::Class1}.{self::Class1::[]}(#t7).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0))));
-  let final self::Class1? #t8 = c1 in #t8.{core::Object::==}(null) ?{core::int?} null : let final core::int #t9 = 0 in let final core::int #t10 = #t8{self::Class1}.{self::Class1::[]}(#t9).{core::num::+}(1) in let final void #t11 = #t8{self::Class1}.{self::Class1::[]=}(#t9, #t10) in #t10;
-  let final self::Class1? #t12 = c1 in #t12.{core::Object::==}(null) ?{core::int?} null : let final core::int #t13 = 0 in #t12{self::Class1}.{self::Class1::[]=}(#t13, #t12{self::Class1}.{self::Class1::[]}(#t13).{core::num::+}(1));
-  let final self::Class1? #t14 = c1 in #t14.{core::Object::==}(null) ?{core::int?} null : let final core::int #t15 = 0 in #t14{self::Class1}.{self::Class1::[]}(#t15).{core::num::==}(null) ?{core::int} #t14{self::Class1}.{self::Class1::[]=}(#t15, 1) : null;
-  let final self::Class1? #t16 = c1 in #t16.{core::Object::==}(null) ?{core::int?} null : let final core::int #t17 = 0 in #t16{self::Class1}.{self::Class1::[]}(#t17).{core::num::==}(null) ?{core::int} #t16{self::Class1}.{self::Class1::[]=}(#t17, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1))) : null;
+  let final self::Class1? #t1 = c1 in #t1 == null ?{core::int?} null : #t1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int};
+  let final self::Class1? #t2 = c1 in #t2 == null ?{core::int?} null : #t2{self::Class1}.{self::Class1::[]=}(0, 1){(core::int, core::int) → void};
+  let final self::Class1? #t3 = c1 in #t3 == null ?{core::int?} null : #t3{self::Class1}.{self::Class1::[]=}(0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t4 = c1 in #t4 == null ?{core::int?} null : let final core::int #t5 = 0 in #t4{self::Class1}.{self::Class1::[]=}(#t5, #t4{self::Class1}.{self::Class1::[]}(#t5){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t6 = c1 in #t6 == null ?{core::int?} null : let final core::int #t7 = 0 in #t6{self::Class1}.{self::Class1::[]=}(#t7, #t6{self::Class1}.{self::Class1::[]}(#t7){(core::int) → core::int}.{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t8 = c1 in #t8 == null ?{core::int?} null : let final core::int #t9 = 0 in let final core::int #t10 = #t8{self::Class1}.{self::Class1::[]}(#t9){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t11 = #t8{self::Class1}.{self::Class1::[]=}(#t9, #t10){(core::int, core::int) → void} in #t10;
+  let final self::Class1? #t12 = c1 in #t12 == null ?{core::int?} null : let final core::int #t13 = 0 in #t12{self::Class1}.{self::Class1::[]=}(#t13, #t12{self::Class1}.{self::Class1::[]}(#t13){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t14 = c1 in #t14 == null ?{core::int?} null : let final core::int #t15 = 0 in #t14{self::Class1}.{self::Class1::[]}(#t15){(core::int) → core::int} == null ?{core::int} #t14{self::Class1}.{self::Class1::[]=}(#t15, 1){(core::int, core::int) → void} : null;
+  let final self::Class1? #t16 = c1 in #t16 == null ?{core::int?} null : let final core::int #t17 = 0 in #t16{self::Class1}.{self::Class1::[]}(#t17){(core::int) → core::int} == null ?{core::int} #t16{self::Class1}.{self::Class1::[]=}(#t17, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1){(core::int) → core::int}){(core::num) → core::int}){(core::int, core::int) → void} : null;
   self::Class2? c2;
-  let final self::Class2? #t18 = c2 in #t18.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t18{self::Class2}, 0);
-  let final self::Class2? #t19 = c2 in #t19.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t19{self::Class2}, 0, 1);
-  let final self::Class2? #t20 = c2 in #t20.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t20{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)));
-  let final self::Class2? #t21 = c2 in #t21.{core::Object::==}(null) ?{core::int?} null : let final core::int #t22 = 0 in self::Extension|[]=(#t21{self::Class2}, #t22, self::Extension|[](#t21{self::Class2}, #t22).{core::num::+}(1));
-  let final self::Class2? #t23 = c2 in #t23.{core::Object::==}(null) ?{core::int?} null : let final core::int #t24 = 0 in self::Extension|[]=(#t23{self::Class2}, #t24, self::Extension|[](#t23{self::Class2}, #t24).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0))));
-  let final self::Class2? #t25 = c2 in #t25.{core::Object::==}(null) ?{core::int?} null : let final core::int #t26 = 0 in let final core::int #t27 = self::Extension|[](#t25{self::Class2}, #t26).{core::num::+}(1) in let final void #t28 = self::Extension|[]=(#t25{self::Class2}, #t26, #t27) in #t27;
-  let final self::Class2? #t29 = c2 in #t29.{core::Object::==}(null) ?{core::int?} null : let final core::int #t30 = 0 in self::Extension|[]=(#t29{self::Class2}, #t30, self::Extension|[](#t29{self::Class2}, #t30).{core::num::+}(1));
-  let final self::Class2? #t31 = c2 in #t31.{core::Object::==}(null) ?{core::int?} null : let final core::int #t32 = 0 in self::Extension|[](#t31{self::Class2}, #t32).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t31{self::Class2}, #t32, 1) : null;
-  let final self::Class2? #t33 = c2 in #t33.{core::Object::==}(null) ?{core::int?} null : let final core::int #t34 = 0 in self::Extension|[](#t33{self::Class2}, #t34).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t33{self::Class2}, #t34, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1))) : null;
-  let final self::Class2? #t35 = c2 in #t35.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t35{self::Class2}, 0);
-  let final self::Class2? #t36 = c2 in #t36.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t36{self::Class2}, 0, 1);
-  let final self::Class2? #t37 = c2 in #t37.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t37{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)));
-  let final self::Class2? #t38 = c2 in #t38.{core::Object::==}(null) ?{core::int?} null : let final core::int #t39 = 0 in self::Extension|[]=(#t38{self::Class2}, #t39, self::Extension|[](#t38{self::Class2}, #t39).{core::num::+}(1));
-  let final self::Class2? #t40 = c2 in #t40.{core::Object::==}(null) ?{core::int?} null : let final core::int #t41 = 0 in self::Extension|[]=(#t40{self::Class2}, #t41, self::Extension|[](#t40{self::Class2}, #t41).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0))));
-  let final self::Class2? #t42 = c2 in #t42.{core::Object::==}(null) ?{core::int?} null : let final core::int #t43 = 0 in let final core::int #t44 = self::Extension|[](#t42{self::Class2}, #t43).{core::num::+}(1) in let final void #t45 = self::Extension|[]=(#t42{self::Class2}, #t43, #t44) in #t44;
-  let final self::Class2? #t46 = c2 in #t46.{core::Object::==}(null) ?{core::int?} null : let final core::int #t47 = 0 in self::Extension|[]=(#t46{self::Class2}, #t47, self::Extension|[](#t46{self::Class2}, #t47).{core::num::+}(1));
-  let final self::Class2? #t48 = c2 in #t48.{core::Object::==}(null) ?{core::int?} null : let final core::int #t49 = 0 in self::Extension|[](#t48{self::Class2}, #t49).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t48{self::Class2}, #t49, 1) : null;
-  let final self::Class2? #t50 = c2 in #t50.{core::Object::==}(null) ?{core::int?} null : let final core::int #t51 = 0 in self::Extension|[](#t50{self::Class2}, #t51).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t50{self::Class2}, #t51, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1))) : null;
-  let final self::Class1? #t52 = c1 in #t52.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t53 = #t52{self::Class1}.{self::Class1::field} in #t53.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t53{self::Class2}, 0);
-  let final self::Class1? #t54 = c1 in #t54.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t55 = #t54{self::Class1}.{self::Class1::field} in #t55.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t55{self::Class2}, 0, 1);
-  let final self::Class1? #t56 = c1 in #t56.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t57 = #t56{self::Class1}.{self::Class1::field} in #t57.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t57{self::Class2}, 0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0)));
-  let final self::Class1? #t58 = c1 in #t58.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t59 = #t58{self::Class1}.{self::Class1::field} in #t59.{core::Object::==}(null) ?{core::int?} null : let final core::int #t60 = 0 in self::Extension|[]=(#t59{self::Class2}, #t60, self::Extension|[](#t59{self::Class2}, #t60).{core::num::+}(1));
-  let final self::Class1? #t61 = c1 in #t61.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t62 = #t61{self::Class1}.{self::Class1::field} in #t62.{core::Object::==}(null) ?{core::int?} null : let final core::int #t63 = 0 in self::Extension|[]=(#t62{self::Class2}, #t63, self::Extension|[](#t62{self::Class2}, #t63).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0))));
-  let final self::Class1? #t64 = c1 in #t64.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t65 = #t64{self::Class1}.{self::Class1::field} in #t65.{core::Object::==}(null) ?{core::int?} null : let final core::int #t66 = 0 in let final core::int #t67 = self::Extension|[](#t65{self::Class2}, #t66).{core::num::+}(1) in let final void #t68 = self::Extension|[]=(#t65{self::Class2}, #t66, #t67) in #t67;
-  let final self::Class1? #t69 = c1 in #t69.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t70 = #t69{self::Class1}.{self::Class1::field} in #t70.{core::Object::==}(null) ?{core::int?} null : let final core::int #t71 = 0 in self::Extension|[]=(#t70{self::Class2}, #t71, self::Extension|[](#t70{self::Class2}, #t71).{core::num::+}(1));
-  let final self::Class1? #t72 = c1 in #t72.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t73 = #t72{self::Class1}.{self::Class1::field} in #t73.{core::Object::==}(null) ?{core::int?} null : let final core::int #t74 = 0 in self::Extension|[](#t73{self::Class2}, #t74).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t73{self::Class2}, #t74, 1) : null;
-  let final self::Class1? #t75 = c1 in #t75.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t76 = #t75{self::Class1}.{self::Class1::field} in #t76.{core::Object::==}(null) ?{core::int?} null : let final core::int #t77 = 0 in self::Extension|[](#t76{self::Class2}, #t77).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t76{self::Class2}, #t77, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1))) : null;
-  let final self::Class1? #t78 = c1 in #t78.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t79 = #t78{self::Class1}.{self::Class1::field} in #t79.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t79{self::Class2}, 0);
-  let final self::Class1? #t80 = c1 in #t80.{core::Object::==}(null) ?{void} null : let final self::Class2? #t81 = #t80{self::Class1}.{self::Class1::field} in #t81.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t81{self::Class2}, 0, 1);
-  let final self::Class1? #t82 = c1 in #t82.{core::Object::==}(null) ?{void} null : let final self::Class2? #t83 = #t82{self::Class1}.{self::Class1::field} in #t83.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t83{self::Class2}, 0, 1.{core::num::+}(let core::int? #t84 = let final self::Class2? #t85 = c2 in #t85.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t85{self::Class2}, 0)! in #t84.==(null) ?{core::int} #t84 as{ForNonNullableByDefault} core::int : #t84{core::int}));
-  let final self::Class1? #t86 = c1 in #t86.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t87 = #t86{self::Class1}.{self::Class1::field} in #t87.{core::Object::==}(null) ?{core::int?} null : let final core::int #t88 = 0 in self::Extension|[]=(#t87{self::Class2}, #t88, self::Extension|[](#t87{self::Class2}, #t88).{core::num::+}(1));
-  let final self::Class1? #t89 = c1 in #t89.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t90 = #t89{self::Class1}.{self::Class1::field} in #t90.{core::Object::==}(null) ?{core::int?} null : let final core::int #t91 = 0 in self::Extension|[]=(#t90{self::Class2}, #t91, self::Extension|[](#t90{self::Class2}, #t91).{core::num::+}(1.{core::num::+}(let core::int? #t92 = let final self::Class2? #t93 = c2 in #t93.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t93{self::Class2}, 0)! in #t92.==(null) ?{core::int} #t92 as{ForNonNullableByDefault} core::int : #t92{core::int})));
-  let final self::Class1? #t94 = c1 in #t94.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t95 = #t94{self::Class1}.{self::Class1::field} in #t95.{core::Object::==}(null) ?{core::int?} null : let final core::int #t96 = 0 in let final core::int #t97 = self::Extension|[](#t95{self::Class2}, #t96).{core::num::+}(1) in let final void #t98 = self::Extension|[]=(#t95{self::Class2}, #t96, #t97) in #t97;
-  let final self::Class1? #t99 = c1 in #t99.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t100 = #t99{self::Class1}.{self::Class1::field} in #t100.{core::Object::==}(null) ?{core::int?} null : let final core::int #t101 = 0 in self::Extension|[]=(#t100{self::Class2}, #t101, self::Extension|[](#t100{self::Class2}, #t101).{core::num::+}(1));
-  let final self::Class1? #t102 = c1 in #t102.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t103 = #t102{self::Class1}.{self::Class1::field} in #t103.{core::Object::==}(null) ?{core::int?} null : let final core::int #t104 = 0 in self::Extension|[](#t103{self::Class2}, #t104).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t103{self::Class2}, #t104, 1) : null;
-  let final self::Class1? #t105 = c1 in #t105.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t106 = #t105{self::Class1}.{self::Class1::field} in #t106.{core::Object::==}(null) ?{core::int?} null : let final core::int #t107 = 0 in self::Extension|[](#t106{self::Class2}, #t107).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t106{self::Class2}, #t107, 1.{core::num::+}(let core::int? #t108 = let final self::Class2? #t109 = c2 in #t109.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t109{self::Class2}, 1)! in #t108.==(null) ?{core::int} #t108 as{ForNonNullableByDefault} core::int : #t108{core::int})) : null;
+  let final self::Class2? #t18 = c2 in #t18 == null ?{core::int?} null : self::Extension|[](#t18{self::Class2}, 0);
+  let final self::Class2? #t19 = c2 in #t19 == null ?{core::int?} null : self::Extension|[]=(#t19{self::Class2}, 0, 1);
+  let final self::Class2? #t20 = c2 in #t20 == null ?{core::int?} null : self::Extension|[]=(#t20{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int});
+  let final self::Class2? #t21 = c2 in #t21 == null ?{core::int?} null : let final core::int #t22 = 0 in self::Extension|[]=(#t21{self::Class2}, #t22, self::Extension|[](#t21{self::Class2}, #t22).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t23 = c2 in #t23 == null ?{core::int?} null : let final core::int #t24 = 0 in self::Extension|[]=(#t23{self::Class2}, #t24, self::Extension|[](#t23{self::Class2}, #t24).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class2? #t25 = c2 in #t25 == null ?{core::int?} null : let final core::int #t26 = 0 in let final core::int #t27 = self::Extension|[](#t25{self::Class2}, #t26).{core::num::+}(1){(core::num) → core::int} in let final void #t28 = self::Extension|[]=(#t25{self::Class2}, #t26, #t27) in #t27;
+  let final self::Class2? #t29 = c2 in #t29 == null ?{core::int?} null : let final core::int #t30 = 0 in self::Extension|[]=(#t29{self::Class2}, #t30, self::Extension|[](#t29{self::Class2}, #t30).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t31 = c2 in #t31 == null ?{core::int?} null : let final core::int #t32 = 0 in self::Extension|[](#t31{self::Class2}, #t32) == null ?{core::int} self::Extension|[]=(#t31{self::Class2}, #t32, 1) : null;
+  let final self::Class2? #t33 = c2 in #t33 == null ?{core::int?} null : let final core::int #t34 = 0 in self::Extension|[](#t33{self::Class2}, #t34) == null ?{core::int} self::Extension|[]=(#t33{self::Class2}, #t34, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1)){(core::num) → core::int}) : null;
+  let final self::Class2? #t35 = c2 in #t35 == null ?{core::int?} null : self::Extension|[](#t35{self::Class2}, 0);
+  let final self::Class2? #t36 = c2 in #t36 == null ?{void} null : self::Extension|[]=(#t36{self::Class2}, 0, 1);
+  let final self::Class2? #t37 = c2 in #t37 == null ?{void} null : self::Extension|[]=(#t37{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int});
+  let final self::Class2? #t38 = c2 in #t38 == null ?{core::int?} null : let final core::int #t39 = 0 in self::Extension|[]=(#t38{self::Class2}, #t39, self::Extension|[](#t38{self::Class2}, #t39).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t40 = c2 in #t40 == null ?{core::int?} null : let final core::int #t41 = 0 in self::Extension|[]=(#t40{self::Class2}, #t41, self::Extension|[](#t40{self::Class2}, #t41).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class2? #t42 = c2 in #t42 == null ?{core::int?} null : let final core::int #t43 = 0 in let final core::int #t44 = self::Extension|[](#t42{self::Class2}, #t43).{core::num::+}(1){(core::num) → core::int} in let final void #t45 = self::Extension|[]=(#t42{self::Class2}, #t43, #t44) in #t44;
+  let final self::Class2? #t46 = c2 in #t46 == null ?{core::int?} null : let final core::int #t47 = 0 in self::Extension|[]=(#t46{self::Class2}, #t47, self::Extension|[](#t46{self::Class2}, #t47).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t48 = c2 in #t48 == null ?{core::int?} null : let final core::int #t49 = 0 in self::Extension|[](#t48{self::Class2}, #t49) == null ?{core::int} self::Extension|[]=(#t48{self::Class2}, #t49, 1) : null;
+  let final self::Class2? #t50 = c2 in #t50 == null ?{core::int?} null : let final core::int #t51 = 0 in self::Extension|[](#t50{self::Class2}, #t51) == null ?{core::int} self::Extension|[]=(#t50{self::Class2}, #t51, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1)){(core::num) → core::int}) : null;
+  let final self::Class1? #t52 = c1 in #t52 == null ?{core::int?} null : let final self::Class2? #t53 = #t52{self::Class1}.{self::Class1::field}{self::Class2?} in #t53 == null ?{core::int?} null : self::Extension|[](#t53{self::Class2}, 0);
+  let final self::Class1? #t54 = c1 in #t54 == null ?{core::int?} null : let final self::Class2? #t55 = #t54{self::Class1}.{self::Class1::field}{self::Class2?} in #t55 == null ?{core::int?} null : self::Extension|[]=(#t55{self::Class2}, 0, 1);
+  let final self::Class1? #t56 = c1 in #t56 == null ?{core::int?} null : let final self::Class2? #t57 = #t56{self::Class1}.{self::Class1::field}{self::Class2?} in #t57 == null ?{core::int?} null : self::Extension|[]=(#t57{self::Class2}, 0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t58 = c1 in #t58 == null ?{core::int?} null : let final self::Class2? #t59 = #t58{self::Class1}.{self::Class1::field}{self::Class2?} in #t59 == null ?{core::int?} null : let final core::int #t60 = 0 in self::Extension|[]=(#t59{self::Class2}, #t60, self::Extension|[](#t59{self::Class2}, #t60).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t61 = c1 in #t61 == null ?{core::int?} null : let final self::Class2? #t62 = #t61{self::Class1}.{self::Class1::field}{self::Class2?} in #t62 == null ?{core::int?} null : let final core::int #t63 = 0 in self::Extension|[]=(#t62{self::Class2}, #t63, self::Extension|[](#t62{self::Class2}, #t63).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t64 = c1 in #t64 == null ?{core::int?} null : let final self::Class2? #t65 = #t64{self::Class1}.{self::Class1::field}{self::Class2?} in #t65 == null ?{core::int?} null : let final core::int #t66 = 0 in let final core::int #t67 = self::Extension|[](#t65{self::Class2}, #t66).{core::num::+}(1){(core::num) → core::int} in let final void #t68 = self::Extension|[]=(#t65{self::Class2}, #t66, #t67) in #t67;
+  let final self::Class1? #t69 = c1 in #t69 == null ?{core::int?} null : let final self::Class2? #t70 = #t69{self::Class1}.{self::Class1::field}{self::Class2?} in #t70 == null ?{core::int?} null : let final core::int #t71 = 0 in self::Extension|[]=(#t70{self::Class2}, #t71, self::Extension|[](#t70{self::Class2}, #t71).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t72 = c1 in #t72 == null ?{core::int?} null : let final self::Class2? #t73 = #t72{self::Class1}.{self::Class1::field}{self::Class2?} in #t73 == null ?{core::int?} null : let final core::int #t74 = 0 in self::Extension|[](#t73{self::Class2}, #t74) == null ?{core::int} self::Extension|[]=(#t73{self::Class2}, #t74, 1) : null;
+  let final self::Class1? #t75 = c1 in #t75 == null ?{core::int?} null : let final self::Class2? #t76 = #t75{self::Class1}.{self::Class1::field}{self::Class2?} in #t76 == null ?{core::int?} null : let final core::int #t77 = 0 in self::Extension|[](#t76{self::Class2}, #t77) == null ?{core::int} self::Extension|[]=(#t76{self::Class2}, #t77, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1){(core::int) → core::int}){(core::num) → core::int}) : null;
+  let final self::Class1? #t78 = c1 in #t78 == null ?{core::int?} null : let final self::Class2? #t79 = #t78{self::Class1}.{self::Class1::field}{self::Class2?} in #t79 == null ?{core::int?} null : self::Extension|[](#t79{self::Class2}, 0);
+  let final self::Class1? #t80 = c1 in #t80 == null ?{void} null : let final self::Class2? #t81 = #t80{self::Class1}.{self::Class1::field}{self::Class2?} in #t81 == null ?{void} null : self::Extension|[]=(#t81{self::Class2}, 0, 1);
+  let final self::Class1? #t82 = c1 in #t82 == null ?{void} null : let final self::Class2? #t83 = #t82{self::Class1}.{self::Class1::field}{self::Class2?} in #t83 == null ?{void} null : self::Extension|[]=(#t83{self::Class2}, 0, 1.{core::num::+}(let core::int? #t84 = let final self::Class2? #t85 = c2 in #t85 == null ?{core::int?} null : self::Extension|[](#t85{self::Class2}, 0)! in #t84.==(null) ?{core::int} #t84 as{ForNonNullableByDefault} core::int : #t84{core::int}){(core::num) → core::int});
+  let final self::Class1? #t86 = c1 in #t86 == null ?{core::int?} null : let final self::Class2? #t87 = #t86{self::Class1}.{self::Class1::field}{self::Class2?} in #t87 == null ?{core::int?} null : let final core::int #t88 = 0 in self::Extension|[]=(#t87{self::Class2}, #t88, self::Extension|[](#t87{self::Class2}, #t88).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t89 = c1 in #t89 == null ?{core::int?} null : let final self::Class2? #t90 = #t89{self::Class1}.{self::Class1::field}{self::Class2?} in #t90 == null ?{core::int?} null : let final core::int #t91 = 0 in self::Extension|[]=(#t90{self::Class2}, #t91, self::Extension|[](#t90{self::Class2}, #t91).{core::num::+}(1.{core::num::+}(let core::int? #t92 = let final self::Class2? #t93 = c2 in #t93 == null ?{core::int?} null : self::Extension|[](#t93{self::Class2}, 0)! in #t92.==(null) ?{core::int} #t92 as{ForNonNullableByDefault} core::int : #t92{core::int}){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t94 = c1 in #t94 == null ?{core::int?} null : let final self::Class2? #t95 = #t94{self::Class1}.{self::Class1::field}{self::Class2?} in #t95 == null ?{core::int?} null : let final core::int #t96 = 0 in let final core::int #t97 = self::Extension|[](#t95{self::Class2}, #t96).{core::num::+}(1){(core::num) → core::int} in let final void #t98 = self::Extension|[]=(#t95{self::Class2}, #t96, #t97) in #t97;
+  let final self::Class1? #t99 = c1 in #t99 == null ?{core::int?} null : let final self::Class2? #t100 = #t99{self::Class1}.{self::Class1::field}{self::Class2?} in #t100 == null ?{core::int?} null : let final core::int #t101 = 0 in self::Extension|[]=(#t100{self::Class2}, #t101, self::Extension|[](#t100{self::Class2}, #t101).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t102 = c1 in #t102 == null ?{core::int?} null : let final self::Class2? #t103 = #t102{self::Class1}.{self::Class1::field}{self::Class2?} in #t103 == null ?{core::int?} null : let final core::int #t104 = 0 in self::Extension|[](#t103{self::Class2}, #t104) == null ?{core::int} self::Extension|[]=(#t103{self::Class2}, #t104, 1) : null;
+  let final self::Class1? #t105 = c1 in #t105 == null ?{core::int?} null : let final self::Class2? #t106 = #t105{self::Class1}.{self::Class1::field}{self::Class2?} in #t106 == null ?{core::int?} null : let final core::int #t107 = 0 in self::Extension|[](#t106{self::Class2}, #t107) == null ?{core::int} self::Extension|[]=(#t106{self::Class2}, #t107, 1.{core::num::+}(let core::int? #t108 = let final self::Class2? #t109 = c2 in #t109 == null ?{core::int?} null : self::Extension|[](#t109{self::Class2}, 1)! in #t108.==(null) ?{core::int} #t108 as{ForNonNullableByDefault} core::int : #t108{core::int}){(core::num) → core::int}) : null;
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.expect
index dc52187..438791b 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.expect
@@ -78,56 +78,56 @@
   operator []= = self::Extension|[]=;
 }
 static method Extension|[](lowered final self::Class2 #this, core::int index) → core::int
-  return #this.{self::Class2::field};
+  return #this.{self::Class2::field}{core::int};
 static method Extension|[]=(lowered final self::Class2 #this, core::int index, core::int value) → void {
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
   self::Class1? c1;
-  let final self::Class1? #t1 = c1 in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::Class1}.{self::Class1::[]}(0);
-  let final self::Class1? #t2 = c1 in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::Class1}.{self::Class1::[]=}(0, 1);
-  let final self::Class1? #t3 = c1 in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Class1}.{self::Class1::[]=}(0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0)));
-  let final self::Class1? #t4 = c1 in #t4.{core::Object::==}(null) ?{core::int?} null : let final core::int #t5 = 0 in #t4{self::Class1}.{self::Class1::[]=}(#t5, #t4{self::Class1}.{self::Class1::[]}(#t5).{core::num::+}(1));
-  let final self::Class1? #t6 = c1 in #t6.{core::Object::==}(null) ?{core::int?} null : let final core::int #t7 = 0 in #t6{self::Class1}.{self::Class1::[]=}(#t7, #t6{self::Class1}.{self::Class1::[]}(#t7).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0))));
-  let final self::Class1? #t8 = c1 in #t8.{core::Object::==}(null) ?{core::int?} null : let final core::int #t9 = 0 in let final core::int #t10 = #t8{self::Class1}.{self::Class1::[]}(#t9).{core::num::+}(1) in let final void #t11 = #t8{self::Class1}.{self::Class1::[]=}(#t9, #t10) in #t10;
-  let final self::Class1? #t12 = c1 in #t12.{core::Object::==}(null) ?{core::int?} null : let final core::int #t13 = 0 in #t12{self::Class1}.{self::Class1::[]=}(#t13, #t12{self::Class1}.{self::Class1::[]}(#t13).{core::num::+}(1));
-  let final self::Class1? #t14 = c1 in #t14.{core::Object::==}(null) ?{core::int?} null : let final core::int #t15 = 0 in #t14{self::Class1}.{self::Class1::[]}(#t15).{core::num::==}(null) ?{core::int} #t14{self::Class1}.{self::Class1::[]=}(#t15, 1) : null;
-  let final self::Class1? #t16 = c1 in #t16.{core::Object::==}(null) ?{core::int?} null : let final core::int #t17 = 0 in #t16{self::Class1}.{self::Class1::[]}(#t17).{core::num::==}(null) ?{core::int} #t16{self::Class1}.{self::Class1::[]=}(#t17, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1))) : null;
+  let final self::Class1? #t1 = c1 in #t1 == null ?{core::int?} null : #t1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int};
+  let final self::Class1? #t2 = c1 in #t2 == null ?{core::int?} null : #t2{self::Class1}.{self::Class1::[]=}(0, 1){(core::int, core::int) → void};
+  let final self::Class1? #t3 = c1 in #t3 == null ?{core::int?} null : #t3{self::Class1}.{self::Class1::[]=}(0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t4 = c1 in #t4 == null ?{core::int?} null : let final core::int #t5 = 0 in #t4{self::Class1}.{self::Class1::[]=}(#t5, #t4{self::Class1}.{self::Class1::[]}(#t5){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t6 = c1 in #t6 == null ?{core::int?} null : let final core::int #t7 = 0 in #t6{self::Class1}.{self::Class1::[]=}(#t7, #t6{self::Class1}.{self::Class1::[]}(#t7){(core::int) → core::int}.{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t8 = c1 in #t8 == null ?{core::int?} null : let final core::int #t9 = 0 in let final core::int #t10 = #t8{self::Class1}.{self::Class1::[]}(#t9){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t11 = #t8{self::Class1}.{self::Class1::[]=}(#t9, #t10){(core::int, core::int) → void} in #t10;
+  let final self::Class1? #t12 = c1 in #t12 == null ?{core::int?} null : let final core::int #t13 = 0 in #t12{self::Class1}.{self::Class1::[]=}(#t13, #t12{self::Class1}.{self::Class1::[]}(#t13){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t14 = c1 in #t14 == null ?{core::int?} null : let final core::int #t15 = 0 in #t14{self::Class1}.{self::Class1::[]}(#t15){(core::int) → core::int} == null ?{core::int} #t14{self::Class1}.{self::Class1::[]=}(#t15, 1){(core::int, core::int) → void} : null;
+  let final self::Class1? #t16 = c1 in #t16 == null ?{core::int?} null : let final core::int #t17 = 0 in #t16{self::Class1}.{self::Class1::[]}(#t17){(core::int) → core::int} == null ?{core::int} #t16{self::Class1}.{self::Class1::[]=}(#t17, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1){(core::int) → core::int}){(core::num) → core::int}){(core::int, core::int) → void} : null;
   self::Class2? c2;
-  let final self::Class2? #t18 = c2 in #t18.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t18{self::Class2}, 0);
-  let final self::Class2? #t19 = c2 in #t19.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t19{self::Class2}, 0, 1);
-  let final self::Class2? #t20 = c2 in #t20.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t20{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)));
-  let final self::Class2? #t21 = c2 in #t21.{core::Object::==}(null) ?{core::int?} null : let final core::int #t22 = 0 in self::Extension|[]=(#t21{self::Class2}, #t22, self::Extension|[](#t21{self::Class2}, #t22).{core::num::+}(1));
-  let final self::Class2? #t23 = c2 in #t23.{core::Object::==}(null) ?{core::int?} null : let final core::int #t24 = 0 in self::Extension|[]=(#t23{self::Class2}, #t24, self::Extension|[](#t23{self::Class2}, #t24).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0))));
-  let final self::Class2? #t25 = c2 in #t25.{core::Object::==}(null) ?{core::int?} null : let final core::int #t26 = 0 in let final core::int #t27 = self::Extension|[](#t25{self::Class2}, #t26).{core::num::+}(1) in let final void #t28 = self::Extension|[]=(#t25{self::Class2}, #t26, #t27) in #t27;
-  let final self::Class2? #t29 = c2 in #t29.{core::Object::==}(null) ?{core::int?} null : let final core::int #t30 = 0 in self::Extension|[]=(#t29{self::Class2}, #t30, self::Extension|[](#t29{self::Class2}, #t30).{core::num::+}(1));
-  let final self::Class2? #t31 = c2 in #t31.{core::Object::==}(null) ?{core::int?} null : let final core::int #t32 = 0 in self::Extension|[](#t31{self::Class2}, #t32).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t31{self::Class2}, #t32, 1) : null;
-  let final self::Class2? #t33 = c2 in #t33.{core::Object::==}(null) ?{core::int?} null : let final core::int #t34 = 0 in self::Extension|[](#t33{self::Class2}, #t34).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t33{self::Class2}, #t34, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1))) : null;
-  let final self::Class2? #t35 = c2 in #t35.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t35{self::Class2}, 0);
-  let final self::Class2? #t36 = c2 in #t36.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t36{self::Class2}, 0, 1);
-  let final self::Class2? #t37 = c2 in #t37.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t37{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)));
-  let final self::Class2? #t38 = c2 in #t38.{core::Object::==}(null) ?{core::int?} null : let final core::int #t39 = 0 in self::Extension|[]=(#t38{self::Class2}, #t39, self::Extension|[](#t38{self::Class2}, #t39).{core::num::+}(1));
-  let final self::Class2? #t40 = c2 in #t40.{core::Object::==}(null) ?{core::int?} null : let final core::int #t41 = 0 in self::Extension|[]=(#t40{self::Class2}, #t41, self::Extension|[](#t40{self::Class2}, #t41).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0))));
-  let final self::Class2? #t42 = c2 in #t42.{core::Object::==}(null) ?{core::int?} null : let final core::int #t43 = 0 in let final core::int #t44 = self::Extension|[](#t42{self::Class2}, #t43).{core::num::+}(1) in let final void #t45 = self::Extension|[]=(#t42{self::Class2}, #t43, #t44) in #t44;
-  let final self::Class2? #t46 = c2 in #t46.{core::Object::==}(null) ?{core::int?} null : let final core::int #t47 = 0 in self::Extension|[]=(#t46{self::Class2}, #t47, self::Extension|[](#t46{self::Class2}, #t47).{core::num::+}(1));
-  let final self::Class2? #t48 = c2 in #t48.{core::Object::==}(null) ?{core::int?} null : let final core::int #t49 = 0 in self::Extension|[](#t48{self::Class2}, #t49).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t48{self::Class2}, #t49, 1) : null;
-  let final self::Class2? #t50 = c2 in #t50.{core::Object::==}(null) ?{core::int?} null : let final core::int #t51 = 0 in self::Extension|[](#t50{self::Class2}, #t51).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t50{self::Class2}, #t51, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1))) : null;
-  let final self::Class1? #t52 = c1 in #t52.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t53 = #t52{self::Class1}.{self::Class1::field} in #t53.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t53{self::Class2}, 0);
-  let final self::Class1? #t54 = c1 in #t54.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t55 = #t54{self::Class1}.{self::Class1::field} in #t55.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t55{self::Class2}, 0, 1);
-  let final self::Class1? #t56 = c1 in #t56.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t57 = #t56{self::Class1}.{self::Class1::field} in #t57.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t57{self::Class2}, 0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0)));
-  let final self::Class1? #t58 = c1 in #t58.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t59 = #t58{self::Class1}.{self::Class1::field} in #t59.{core::Object::==}(null) ?{core::int?} null : let final core::int #t60 = 0 in self::Extension|[]=(#t59{self::Class2}, #t60, self::Extension|[](#t59{self::Class2}, #t60).{core::num::+}(1));
-  let final self::Class1? #t61 = c1 in #t61.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t62 = #t61{self::Class1}.{self::Class1::field} in #t62.{core::Object::==}(null) ?{core::int?} null : let final core::int #t63 = 0 in self::Extension|[]=(#t62{self::Class2}, #t63, self::Extension|[](#t62{self::Class2}, #t63).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0))));
-  let final self::Class1? #t64 = c1 in #t64.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t65 = #t64{self::Class1}.{self::Class1::field} in #t65.{core::Object::==}(null) ?{core::int?} null : let final core::int #t66 = 0 in let final core::int #t67 = self::Extension|[](#t65{self::Class2}, #t66).{core::num::+}(1) in let final void #t68 = self::Extension|[]=(#t65{self::Class2}, #t66, #t67) in #t67;
-  let final self::Class1? #t69 = c1 in #t69.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t70 = #t69{self::Class1}.{self::Class1::field} in #t70.{core::Object::==}(null) ?{core::int?} null : let final core::int #t71 = 0 in self::Extension|[]=(#t70{self::Class2}, #t71, self::Extension|[](#t70{self::Class2}, #t71).{core::num::+}(1));
-  let final self::Class1? #t72 = c1 in #t72.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t73 = #t72{self::Class1}.{self::Class1::field} in #t73.{core::Object::==}(null) ?{core::int?} null : let final core::int #t74 = 0 in self::Extension|[](#t73{self::Class2}, #t74).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t73{self::Class2}, #t74, 1) : null;
-  let final self::Class1? #t75 = c1 in #t75.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t76 = #t75{self::Class1}.{self::Class1::field} in #t76.{core::Object::==}(null) ?{core::int?} null : let final core::int #t77 = 0 in self::Extension|[](#t76{self::Class2}, #t77).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t76{self::Class2}, #t77, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1))) : null;
-  let final self::Class1? #t78 = c1 in #t78.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t79 = #t78{self::Class1}.{self::Class1::field} in #t79.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t79{self::Class2}, 0);
-  let final self::Class1? #t80 = c1 in #t80.{core::Object::==}(null) ?{void} null : let final self::Class2? #t81 = #t80{self::Class1}.{self::Class1::field} in #t81.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t81{self::Class2}, 0, 1);
-  let final self::Class1? #t82 = c1 in #t82.{core::Object::==}(null) ?{void} null : let final self::Class2? #t83 = #t82{self::Class1}.{self::Class1::field} in #t83.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t83{self::Class2}, 0, 1.{core::num::+}((let final self::Class2? #t84 = c2 in #t84.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t84{self::Class2}, 0)!) as{ForNonNullableByDefault} core::int));
-  let final self::Class1? #t85 = c1 in #t85.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t86 = #t85{self::Class1}.{self::Class1::field} in #t86.{core::Object::==}(null) ?{core::int?} null : let final core::int #t87 = 0 in self::Extension|[]=(#t86{self::Class2}, #t87, self::Extension|[](#t86{self::Class2}, #t87).{core::num::+}(1));
-  let final self::Class1? #t88 = c1 in #t88.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t89 = #t88{self::Class1}.{self::Class1::field} in #t89.{core::Object::==}(null) ?{core::int?} null : let final core::int #t90 = 0 in self::Extension|[]=(#t89{self::Class2}, #t90, self::Extension|[](#t89{self::Class2}, #t90).{core::num::+}(1.{core::num::+}((let final self::Class2? #t91 = c2 in #t91.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t91{self::Class2}, 0)!) as{ForNonNullableByDefault} core::int)));
-  let final self::Class1? #t92 = c1 in #t92.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t93 = #t92{self::Class1}.{self::Class1::field} in #t93.{core::Object::==}(null) ?{core::int?} null : let final core::int #t94 = 0 in let final core::int #t95 = self::Extension|[](#t93{self::Class2}, #t94).{core::num::+}(1) in let final void #t96 = self::Extension|[]=(#t93{self::Class2}, #t94, #t95) in #t95;
-  let final self::Class1? #t97 = c1 in #t97.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t98 = #t97{self::Class1}.{self::Class1::field} in #t98.{core::Object::==}(null) ?{core::int?} null : let final core::int #t99 = 0 in self::Extension|[]=(#t98{self::Class2}, #t99, self::Extension|[](#t98{self::Class2}, #t99).{core::num::+}(1));
-  let final self::Class1? #t100 = c1 in #t100.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t101 = #t100{self::Class1}.{self::Class1::field} in #t101.{core::Object::==}(null) ?{core::int?} null : let final core::int #t102 = 0 in self::Extension|[](#t101{self::Class2}, #t102).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t101{self::Class2}, #t102, 1) : null;
-  let final self::Class1? #t103 = c1 in #t103.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t104 = #t103{self::Class1}.{self::Class1::field} in #t104.{core::Object::==}(null) ?{core::int?} null : let final core::int #t105 = 0 in self::Extension|[](#t104{self::Class2}, #t105).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t104{self::Class2}, #t105, 1.{core::num::+}((let final self::Class2? #t106 = c2 in #t106.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t106{self::Class2}, 1)!) as{ForNonNullableByDefault} core::int)) : null;
+  let final self::Class2? #t18 = c2 in #t18 == null ?{core::int?} null : self::Extension|[](#t18{self::Class2}, 0);
+  let final self::Class2? #t19 = c2 in #t19 == null ?{core::int?} null : self::Extension|[]=(#t19{self::Class2}, 0, 1);
+  let final self::Class2? #t20 = c2 in #t20 == null ?{core::int?} null : self::Extension|[]=(#t20{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int});
+  let final self::Class2? #t21 = c2 in #t21 == null ?{core::int?} null : let final core::int #t22 = 0 in self::Extension|[]=(#t21{self::Class2}, #t22, self::Extension|[](#t21{self::Class2}, #t22).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t23 = c2 in #t23 == null ?{core::int?} null : let final core::int #t24 = 0 in self::Extension|[]=(#t23{self::Class2}, #t24, self::Extension|[](#t23{self::Class2}, #t24).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class2? #t25 = c2 in #t25 == null ?{core::int?} null : let final core::int #t26 = 0 in let final core::int #t27 = self::Extension|[](#t25{self::Class2}, #t26).{core::num::+}(1){(core::num) → core::int} in let final void #t28 = self::Extension|[]=(#t25{self::Class2}, #t26, #t27) in #t27;
+  let final self::Class2? #t29 = c2 in #t29 == null ?{core::int?} null : let final core::int #t30 = 0 in self::Extension|[]=(#t29{self::Class2}, #t30, self::Extension|[](#t29{self::Class2}, #t30).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t31 = c2 in #t31 == null ?{core::int?} null : let final core::int #t32 = 0 in self::Extension|[](#t31{self::Class2}, #t32) == null ?{core::int} self::Extension|[]=(#t31{self::Class2}, #t32, 1) : null;
+  let final self::Class2? #t33 = c2 in #t33 == null ?{core::int?} null : let final core::int #t34 = 0 in self::Extension|[](#t33{self::Class2}, #t34) == null ?{core::int} self::Extension|[]=(#t33{self::Class2}, #t34, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1)){(core::num) → core::int}) : null;
+  let final self::Class2? #t35 = c2 in #t35 == null ?{core::int?} null : self::Extension|[](#t35{self::Class2}, 0);
+  let final self::Class2? #t36 = c2 in #t36 == null ?{void} null : self::Extension|[]=(#t36{self::Class2}, 0, 1);
+  let final self::Class2? #t37 = c2 in #t37 == null ?{void} null : self::Extension|[]=(#t37{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int});
+  let final self::Class2? #t38 = c2 in #t38 == null ?{core::int?} null : let final core::int #t39 = 0 in self::Extension|[]=(#t38{self::Class2}, #t39, self::Extension|[](#t38{self::Class2}, #t39).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t40 = c2 in #t40 == null ?{core::int?} null : let final core::int #t41 = 0 in self::Extension|[]=(#t40{self::Class2}, #t41, self::Extension|[](#t40{self::Class2}, #t41).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class2? #t42 = c2 in #t42 == null ?{core::int?} null : let final core::int #t43 = 0 in let final core::int #t44 = self::Extension|[](#t42{self::Class2}, #t43).{core::num::+}(1){(core::num) → core::int} in let final void #t45 = self::Extension|[]=(#t42{self::Class2}, #t43, #t44) in #t44;
+  let final self::Class2? #t46 = c2 in #t46 == null ?{core::int?} null : let final core::int #t47 = 0 in self::Extension|[]=(#t46{self::Class2}, #t47, self::Extension|[](#t46{self::Class2}, #t47).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t48 = c2 in #t48 == null ?{core::int?} null : let final core::int #t49 = 0 in self::Extension|[](#t48{self::Class2}, #t49) == null ?{core::int} self::Extension|[]=(#t48{self::Class2}, #t49, 1) : null;
+  let final self::Class2? #t50 = c2 in #t50 == null ?{core::int?} null : let final core::int #t51 = 0 in self::Extension|[](#t50{self::Class2}, #t51) == null ?{core::int} self::Extension|[]=(#t50{self::Class2}, #t51, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1)){(core::num) → core::int}) : null;
+  let final self::Class1? #t52 = c1 in #t52 == null ?{core::int?} null : let final self::Class2? #t53 = #t52{self::Class1}.{self::Class1::field}{self::Class2?} in #t53 == null ?{core::int?} null : self::Extension|[](#t53{self::Class2}, 0);
+  let final self::Class1? #t54 = c1 in #t54 == null ?{core::int?} null : let final self::Class2? #t55 = #t54{self::Class1}.{self::Class1::field}{self::Class2?} in #t55 == null ?{core::int?} null : self::Extension|[]=(#t55{self::Class2}, 0, 1);
+  let final self::Class1? #t56 = c1 in #t56 == null ?{core::int?} null : let final self::Class2? #t57 = #t56{self::Class1}.{self::Class1::field}{self::Class2?} in #t57 == null ?{core::int?} null : self::Extension|[]=(#t57{self::Class2}, 0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t58 = c1 in #t58 == null ?{core::int?} null : let final self::Class2? #t59 = #t58{self::Class1}.{self::Class1::field}{self::Class2?} in #t59 == null ?{core::int?} null : let final core::int #t60 = 0 in self::Extension|[]=(#t59{self::Class2}, #t60, self::Extension|[](#t59{self::Class2}, #t60).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t61 = c1 in #t61 == null ?{core::int?} null : let final self::Class2? #t62 = #t61{self::Class1}.{self::Class1::field}{self::Class2?} in #t62 == null ?{core::int?} null : let final core::int #t63 = 0 in self::Extension|[]=(#t62{self::Class2}, #t63, self::Extension|[](#t62{self::Class2}, #t63).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t64 = c1 in #t64 == null ?{core::int?} null : let final self::Class2? #t65 = #t64{self::Class1}.{self::Class1::field}{self::Class2?} in #t65 == null ?{core::int?} null : let final core::int #t66 = 0 in let final core::int #t67 = self::Extension|[](#t65{self::Class2}, #t66).{core::num::+}(1){(core::num) → core::int} in let final void #t68 = self::Extension|[]=(#t65{self::Class2}, #t66, #t67) in #t67;
+  let final self::Class1? #t69 = c1 in #t69 == null ?{core::int?} null : let final self::Class2? #t70 = #t69{self::Class1}.{self::Class1::field}{self::Class2?} in #t70 == null ?{core::int?} null : let final core::int #t71 = 0 in self::Extension|[]=(#t70{self::Class2}, #t71, self::Extension|[](#t70{self::Class2}, #t71).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t72 = c1 in #t72 == null ?{core::int?} null : let final self::Class2? #t73 = #t72{self::Class1}.{self::Class1::field}{self::Class2?} in #t73 == null ?{core::int?} null : let final core::int #t74 = 0 in self::Extension|[](#t73{self::Class2}, #t74) == null ?{core::int} self::Extension|[]=(#t73{self::Class2}, #t74, 1) : null;
+  let final self::Class1? #t75 = c1 in #t75 == null ?{core::int?} null : let final self::Class2? #t76 = #t75{self::Class1}.{self::Class1::field}{self::Class2?} in #t76 == null ?{core::int?} null : let final core::int #t77 = 0 in self::Extension|[](#t76{self::Class2}, #t77) == null ?{core::int} self::Extension|[]=(#t76{self::Class2}, #t77, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1){(core::int) → core::int}){(core::num) → core::int}) : null;
+  let final self::Class1? #t78 = c1 in #t78 == null ?{core::int?} null : let final self::Class2? #t79 = #t78{self::Class1}.{self::Class1::field}{self::Class2?} in #t79 == null ?{core::int?} null : self::Extension|[](#t79{self::Class2}, 0);
+  let final self::Class1? #t80 = c1 in #t80 == null ?{void} null : let final self::Class2? #t81 = #t80{self::Class1}.{self::Class1::field}{self::Class2?} in #t81 == null ?{void} null : self::Extension|[]=(#t81{self::Class2}, 0, 1);
+  let final self::Class1? #t82 = c1 in #t82 == null ?{void} null : let final self::Class2? #t83 = #t82{self::Class1}.{self::Class1::field}{self::Class2?} in #t83 == null ?{void} null : self::Extension|[]=(#t83{self::Class2}, 0, 1.{core::num::+}((let final self::Class2? #t84 = c2 in #t84 == null ?{core::int?} null : self::Extension|[](#t84{self::Class2}, 0)!) as{ForNonNullableByDefault} core::int){(core::num) → core::int});
+  let final self::Class1? #t85 = c1 in #t85 == null ?{core::int?} null : let final self::Class2? #t86 = #t85{self::Class1}.{self::Class1::field}{self::Class2?} in #t86 == null ?{core::int?} null : let final core::int #t87 = 0 in self::Extension|[]=(#t86{self::Class2}, #t87, self::Extension|[](#t86{self::Class2}, #t87).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t88 = c1 in #t88 == null ?{core::int?} null : let final self::Class2? #t89 = #t88{self::Class1}.{self::Class1::field}{self::Class2?} in #t89 == null ?{core::int?} null : let final core::int #t90 = 0 in self::Extension|[]=(#t89{self::Class2}, #t90, self::Extension|[](#t89{self::Class2}, #t90).{core::num::+}(1.{core::num::+}((let final self::Class2? #t91 = c2 in #t91 == null ?{core::int?} null : self::Extension|[](#t91{self::Class2}, 0)!) as{ForNonNullableByDefault} core::int){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t92 = c1 in #t92 == null ?{core::int?} null : let final self::Class2? #t93 = #t92{self::Class1}.{self::Class1::field}{self::Class2?} in #t93 == null ?{core::int?} null : let final core::int #t94 = 0 in let final core::int #t95 = self::Extension|[](#t93{self::Class2}, #t94).{core::num::+}(1){(core::num) → core::int} in let final void #t96 = self::Extension|[]=(#t93{self::Class2}, #t94, #t95) in #t95;
+  let final self::Class1? #t97 = c1 in #t97 == null ?{core::int?} null : let final self::Class2? #t98 = #t97{self::Class1}.{self::Class1::field}{self::Class2?} in #t98 == null ?{core::int?} null : let final core::int #t99 = 0 in self::Extension|[]=(#t98{self::Class2}, #t99, self::Extension|[](#t98{self::Class2}, #t99).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t100 = c1 in #t100 == null ?{core::int?} null : let final self::Class2? #t101 = #t100{self::Class1}.{self::Class1::field}{self::Class2?} in #t101 == null ?{core::int?} null : let final core::int #t102 = 0 in self::Extension|[](#t101{self::Class2}, #t102) == null ?{core::int} self::Extension|[]=(#t101{self::Class2}, #t102, 1) : null;
+  let final self::Class1? #t103 = c1 in #t103 == null ?{core::int?} null : let final self::Class2? #t104 = #t103{self::Class1}.{self::Class1::field}{self::Class2?} in #t104 == null ?{core::int?} null : let final core::int #t105 = 0 in self::Extension|[](#t104{self::Class2}, #t105) == null ?{core::int} self::Extension|[]=(#t104{self::Class2}, #t105, 1.{core::num::+}((let final self::Class2? #t106 = c2 in #t106 == null ?{core::int?} null : self::Extension|[](#t106{self::Class2}, 1)!) as{ForNonNullableByDefault} core::int){(core::num) → core::int}) : null;
 }
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.transformed.expect
index e604a49..4ddf30e 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.transformed.expect
@@ -78,58 +78,58 @@
   operator []= = self::Extension|[]=;
 }
 static method Extension|[](lowered final self::Class2 #this, core::int index) → core::int
-  return #this.{self::Class2::field};
+  return #this.{self::Class2::field}{core::int};
 static method Extension|[]=(lowered final self::Class2 #this, core::int index, core::int value) → void {
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
   self::Class1? c1;
-  let final self::Class1? #t1 = c1 in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::Class1}.{self::Class1::[]}(0);
-  let final self::Class1? #t2 = c1 in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::Class1}.{self::Class1::[]=}(0, 1);
-  let final self::Class1? #t3 = c1 in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Class1}.{self::Class1::[]=}(0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0)));
-  let final self::Class1? #t4 = c1 in #t4.{core::Object::==}(null) ?{core::int?} null : let final core::int #t5 = 0 in #t4{self::Class1}.{self::Class1::[]=}(#t5, #t4{self::Class1}.{self::Class1::[]}(#t5).{core::num::+}(1));
-  let final self::Class1? #t6 = c1 in #t6.{core::Object::==}(null) ?{core::int?} null : let final core::int #t7 = 0 in #t6{self::Class1}.{self::Class1::[]=}(#t7, #t6{self::Class1}.{self::Class1::[]}(#t7).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0))));
-  let final self::Class1? #t8 = c1 in #t8.{core::Object::==}(null) ?{core::int?} null : let final core::int #t9 = 0 in let final core::int #t10 = #t8{self::Class1}.{self::Class1::[]}(#t9).{core::num::+}(1) in let final void #t11 = #t8{self::Class1}.{self::Class1::[]=}(#t9, #t10) in #t10;
-  let final self::Class1? #t12 = c1 in #t12.{core::Object::==}(null) ?{core::int?} null : let final core::int #t13 = 0 in #t12{self::Class1}.{self::Class1::[]=}(#t13, #t12{self::Class1}.{self::Class1::[]}(#t13).{core::num::+}(1));
-  let final self::Class1? #t14 = c1 in #t14.{core::Object::==}(null) ?{core::int?} null : let final core::int #t15 = 0 in #t14{self::Class1}.{self::Class1::[]}(#t15).{core::num::==}(null) ?{core::int} #t14{self::Class1}.{self::Class1::[]=}(#t15, 1) : null;
-  let final self::Class1? #t16 = c1 in #t16.{core::Object::==}(null) ?{core::int?} null : let final core::int #t17 = 0 in #t16{self::Class1}.{self::Class1::[]}(#t17).{core::num::==}(null) ?{core::int} #t16{self::Class1}.{self::Class1::[]=}(#t17, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1))) : null;
+  let final self::Class1? #t1 = c1 in #t1 == null ?{core::int?} null : #t1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int};
+  let final self::Class1? #t2 = c1 in #t2 == null ?{core::int?} null : #t2{self::Class1}.{self::Class1::[]=}(0, 1){(core::int, core::int) → void};
+  let final self::Class1? #t3 = c1 in #t3 == null ?{core::int?} null : #t3{self::Class1}.{self::Class1::[]=}(0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t4 = c1 in #t4 == null ?{core::int?} null : let final core::int #t5 = 0 in #t4{self::Class1}.{self::Class1::[]=}(#t5, #t4{self::Class1}.{self::Class1::[]}(#t5){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t6 = c1 in #t6 == null ?{core::int?} null : let final core::int #t7 = 0 in #t6{self::Class1}.{self::Class1::[]=}(#t7, #t6{self::Class1}.{self::Class1::[]}(#t7){(core::int) → core::int}.{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t8 = c1 in #t8 == null ?{core::int?} null : let final core::int #t9 = 0 in let final core::int #t10 = #t8{self::Class1}.{self::Class1::[]}(#t9){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t11 = #t8{self::Class1}.{self::Class1::[]=}(#t9, #t10){(core::int, core::int) → void} in #t10;
+  let final self::Class1? #t12 = c1 in #t12 == null ?{core::int?} null : let final core::int #t13 = 0 in #t12{self::Class1}.{self::Class1::[]=}(#t13, #t12{self::Class1}.{self::Class1::[]}(#t13){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t14 = c1 in #t14 == null ?{core::int?} null : let final core::int #t15 = 0 in #t14{self::Class1}.{self::Class1::[]}(#t15){(core::int) → core::int} == null ?{core::int} #t14{self::Class1}.{self::Class1::[]=}(#t15, 1){(core::int, core::int) → void} : null;
+  let final self::Class1? #t16 = c1 in #t16 == null ?{core::int?} null : let final core::int #t17 = 0 in #t16{self::Class1}.{self::Class1::[]}(#t17){(core::int) → core::int} == null ?{core::int} #t16{self::Class1}.{self::Class1::[]=}(#t17, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1){(core::int) → core::int}){(core::num) → core::int}){(core::int, core::int) → void} : null;
   self::Class2? c2;
-  let final self::Class2? #t18 = c2 in #t18.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t18{self::Class2}, 0);
-  let final self::Class2? #t19 = c2 in #t19.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t19{self::Class2}, 0, 1);
-  let final self::Class2? #t20 = c2 in #t20.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t20{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)));
-  let final self::Class2? #t21 = c2 in #t21.{core::Object::==}(null) ?{core::int?} null : let final core::int #t22 = 0 in self::Extension|[]=(#t21{self::Class2}, #t22, self::Extension|[](#t21{self::Class2}, #t22).{core::num::+}(1));
-  let final self::Class2? #t23 = c2 in #t23.{core::Object::==}(null) ?{core::int?} null : let final core::int #t24 = 0 in self::Extension|[]=(#t23{self::Class2}, #t24, self::Extension|[](#t23{self::Class2}, #t24).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0))));
-  let final self::Class2? #t25 = c2 in #t25.{core::Object::==}(null) ?{core::int?} null : let final core::int #t26 = 0 in let final core::int #t27 = self::Extension|[](#t25{self::Class2}, #t26).{core::num::+}(1) in let final void #t28 = self::Extension|[]=(#t25{self::Class2}, #t26, #t27) in #t27;
-  let final self::Class2? #t29 = c2 in #t29.{core::Object::==}(null) ?{core::int?} null : let final core::int #t30 = 0 in self::Extension|[]=(#t29{self::Class2}, #t30, self::Extension|[](#t29{self::Class2}, #t30).{core::num::+}(1));
-  let final self::Class2? #t31 = c2 in #t31.{core::Object::==}(null) ?{core::int?} null : let final core::int #t32 = 0 in self::Extension|[](#t31{self::Class2}, #t32).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t31{self::Class2}, #t32, 1) : null;
-  let final self::Class2? #t33 = c2 in #t33.{core::Object::==}(null) ?{core::int?} null : let final core::int #t34 = 0 in self::Extension|[](#t33{self::Class2}, #t34).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t33{self::Class2}, #t34, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1))) : null;
-  let final self::Class2? #t35 = c2 in #t35.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t35{self::Class2}, 0);
-  let final self::Class2? #t36 = c2 in #t36.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t36{self::Class2}, 0, 1);
-  let final self::Class2? #t37 = c2 in #t37.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t37{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)));
-  let final self::Class2? #t38 = c2 in #t38.{core::Object::==}(null) ?{core::int?} null : let final core::int #t39 = 0 in self::Extension|[]=(#t38{self::Class2}, #t39, self::Extension|[](#t38{self::Class2}, #t39).{core::num::+}(1));
-  let final self::Class2? #t40 = c2 in #t40.{core::Object::==}(null) ?{core::int?} null : let final core::int #t41 = 0 in self::Extension|[]=(#t40{self::Class2}, #t41, self::Extension|[](#t40{self::Class2}, #t41).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0))));
-  let final self::Class2? #t42 = c2 in #t42.{core::Object::==}(null) ?{core::int?} null : let final core::int #t43 = 0 in let final core::int #t44 = self::Extension|[](#t42{self::Class2}, #t43).{core::num::+}(1) in let final void #t45 = self::Extension|[]=(#t42{self::Class2}, #t43, #t44) in #t44;
-  let final self::Class2? #t46 = c2 in #t46.{core::Object::==}(null) ?{core::int?} null : let final core::int #t47 = 0 in self::Extension|[]=(#t46{self::Class2}, #t47, self::Extension|[](#t46{self::Class2}, #t47).{core::num::+}(1));
-  let final self::Class2? #t48 = c2 in #t48.{core::Object::==}(null) ?{core::int?} null : let final core::int #t49 = 0 in self::Extension|[](#t48{self::Class2}, #t49).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t48{self::Class2}, #t49, 1) : null;
-  let final self::Class2? #t50 = c2 in #t50.{core::Object::==}(null) ?{core::int?} null : let final core::int #t51 = 0 in self::Extension|[](#t50{self::Class2}, #t51).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t50{self::Class2}, #t51, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1))) : null;
-  let final self::Class1? #t52 = c1 in #t52.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t53 = #t52{self::Class1}.{self::Class1::field} in #t53.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t53{self::Class2}, 0);
-  let final self::Class1? #t54 = c1 in #t54.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t55 = #t54{self::Class1}.{self::Class1::field} in #t55.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t55{self::Class2}, 0, 1);
-  let final self::Class1? #t56 = c1 in #t56.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t57 = #t56{self::Class1}.{self::Class1::field} in #t57.{core::Object::==}(null) ?{core::int?} null : self::Extension|[]=(#t57{self::Class2}, 0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0)));
-  let final self::Class1? #t58 = c1 in #t58.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t59 = #t58{self::Class1}.{self::Class1::field} in #t59.{core::Object::==}(null) ?{core::int?} null : let final core::int #t60 = 0 in self::Extension|[]=(#t59{self::Class2}, #t60, self::Extension|[](#t59{self::Class2}, #t60).{core::num::+}(1));
-  let final self::Class1? #t61 = c1 in #t61.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t62 = #t61{self::Class1}.{self::Class1::field} in #t62.{core::Object::==}(null) ?{core::int?} null : let final core::int #t63 = 0 in self::Extension|[]=(#t62{self::Class2}, #t63, self::Extension|[](#t62{self::Class2}, #t63).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0))));
-  let final self::Class1? #t64 = c1 in #t64.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t65 = #t64{self::Class1}.{self::Class1::field} in #t65.{core::Object::==}(null) ?{core::int?} null : let final core::int #t66 = 0 in let final core::int #t67 = self::Extension|[](#t65{self::Class2}, #t66).{core::num::+}(1) in let final void #t68 = self::Extension|[]=(#t65{self::Class2}, #t66, #t67) in #t67;
-  let final self::Class1? #t69 = c1 in #t69.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t70 = #t69{self::Class1}.{self::Class1::field} in #t70.{core::Object::==}(null) ?{core::int?} null : let final core::int #t71 = 0 in self::Extension|[]=(#t70{self::Class2}, #t71, self::Extension|[](#t70{self::Class2}, #t71).{core::num::+}(1));
-  let final self::Class1? #t72 = c1 in #t72.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t73 = #t72{self::Class1}.{self::Class1::field} in #t73.{core::Object::==}(null) ?{core::int?} null : let final core::int #t74 = 0 in self::Extension|[](#t73{self::Class2}, #t74).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t73{self::Class2}, #t74, 1) : null;
-  let final self::Class1? #t75 = c1 in #t75.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t76 = #t75{self::Class1}.{self::Class1::field} in #t76.{core::Object::==}(null) ?{core::int?} null : let final core::int #t77 = 0 in self::Extension|[](#t76{self::Class2}, #t77).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t76{self::Class2}, #t77, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1))) : null;
-  let final self::Class1? #t78 = c1 in #t78.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t79 = #t78{self::Class1}.{self::Class1::field} in #t79.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t79{self::Class2}, 0);
-  let final self::Class1? #t80 = c1 in #t80.{core::Object::==}(null) ?{void} null : let final self::Class2? #t81 = #t80{self::Class1}.{self::Class1::field} in #t81.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t81{self::Class2}, 0, 1);
-  let final self::Class1? #t82 = c1 in #t82.{core::Object::==}(null) ?{void} null : let final self::Class2? #t83 = #t82{self::Class1}.{self::Class1::field} in #t83.{core::Object::==}(null) ?{void} null : self::Extension|[]=(#t83{self::Class2}, 0, 1.{core::num::+}(let final self::Class2? #t84 = c2 in #t84.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t84{self::Class2}, 0)!));
-  let final self::Class1? #t85 = c1 in #t85.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t86 = #t85{self::Class1}.{self::Class1::field} in #t86.{core::Object::==}(null) ?{core::int?} null : let final core::int #t87 = 0 in self::Extension|[]=(#t86{self::Class2}, #t87, self::Extension|[](#t86{self::Class2}, #t87).{core::num::+}(1));
-  let final self::Class1? #t88 = c1 in #t88.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t89 = #t88{self::Class1}.{self::Class1::field} in #t89.{core::Object::==}(null) ?{core::int?} null : let final core::int #t90 = 0 in self::Extension|[]=(#t89{self::Class2}, #t90, self::Extension|[](#t89{self::Class2}, #t90).{core::num::+}(1.{core::num::+}(let final self::Class2? #t91 = c2 in #t91.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t91{self::Class2}, 0)!)));
-  let final self::Class1? #t92 = c1 in #t92.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t93 = #t92{self::Class1}.{self::Class1::field} in #t93.{core::Object::==}(null) ?{core::int?} null : let final core::int #t94 = 0 in let final core::int #t95 = self::Extension|[](#t93{self::Class2}, #t94).{core::num::+}(1) in let final void #t96 = self::Extension|[]=(#t93{self::Class2}, #t94, #t95) in #t95;
-  let final self::Class1? #t97 = c1 in #t97.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t98 = #t97{self::Class1}.{self::Class1::field} in #t98.{core::Object::==}(null) ?{core::int?} null : let final core::int #t99 = 0 in self::Extension|[]=(#t98{self::Class2}, #t99, self::Extension|[](#t98{self::Class2}, #t99).{core::num::+}(1));
-  let final self::Class1? #t100 = c1 in #t100.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t101 = #t100{self::Class1}.{self::Class1::field} in #t101.{core::Object::==}(null) ?{core::int?} null : let final core::int #t102 = 0 in self::Extension|[](#t101{self::Class2}, #t102).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t101{self::Class2}, #t102, 1) : null;
-  let final self::Class1? #t103 = c1 in #t103.{core::Object::==}(null) ?{core::int?} null : let final self::Class2? #t104 = #t103{self::Class1}.{self::Class1::field} in #t104.{core::Object::==}(null) ?{core::int?} null : let final core::int #t105 = 0 in self::Extension|[](#t104{self::Class2}, #t105).{core::num::==}(null) ?{core::int} self::Extension|[]=(#t104{self::Class2}, #t105, 1.{core::num::+}(let final self::Class2? #t106 = c2 in #t106.{core::Object::==}(null) ?{core::int?} null : self::Extension|[](#t106{self::Class2}, 1)!)) : null;
+  let final self::Class2? #t18 = c2 in #t18 == null ?{core::int?} null : self::Extension|[](#t18{self::Class2}, 0);
+  let final self::Class2? #t19 = c2 in #t19 == null ?{core::int?} null : self::Extension|[]=(#t19{self::Class2}, 0, 1);
+  let final self::Class2? #t20 = c2 in #t20 == null ?{core::int?} null : self::Extension|[]=(#t20{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int});
+  let final self::Class2? #t21 = c2 in #t21 == null ?{core::int?} null : let final core::int #t22 = 0 in self::Extension|[]=(#t21{self::Class2}, #t22, self::Extension|[](#t21{self::Class2}, #t22).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t23 = c2 in #t23 == null ?{core::int?} null : let final core::int #t24 = 0 in self::Extension|[]=(#t23{self::Class2}, #t24, self::Extension|[](#t23{self::Class2}, #t24).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class2? #t25 = c2 in #t25 == null ?{core::int?} null : let final core::int #t26 = 0 in let final core::int #t27 = self::Extension|[](#t25{self::Class2}, #t26).{core::num::+}(1){(core::num) → core::int} in let final void #t28 = self::Extension|[]=(#t25{self::Class2}, #t26, #t27) in #t27;
+  let final self::Class2? #t29 = c2 in #t29 == null ?{core::int?} null : let final core::int #t30 = 0 in self::Extension|[]=(#t29{self::Class2}, #t30, self::Extension|[](#t29{self::Class2}, #t30).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t31 = c2 in #t31 == null ?{core::int?} null : let final core::int #t32 = 0 in self::Extension|[](#t31{self::Class2}, #t32) == null ?{core::int} self::Extension|[]=(#t31{self::Class2}, #t32, 1) : null;
+  let final self::Class2? #t33 = c2 in #t33 == null ?{core::int?} null : let final core::int #t34 = 0 in self::Extension|[](#t33{self::Class2}, #t34) == null ?{core::int} self::Extension|[]=(#t33{self::Class2}, #t34, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1)){(core::num) → core::int}) : null;
+  let final self::Class2? #t35 = c2 in #t35 == null ?{core::int?} null : self::Extension|[](#t35{self::Class2}, 0);
+  let final self::Class2? #t36 = c2 in #t36 == null ?{void} null : self::Extension|[]=(#t36{self::Class2}, 0, 1);
+  let final self::Class2? #t37 = c2 in #t37 == null ?{void} null : self::Extension|[]=(#t37{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int});
+  let final self::Class2? #t38 = c2 in #t38 == null ?{core::int?} null : let final core::int #t39 = 0 in self::Extension|[]=(#t38{self::Class2}, #t39, self::Extension|[](#t38{self::Class2}, #t39).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t40 = c2 in #t40 == null ?{core::int?} null : let final core::int #t41 = 0 in self::Extension|[]=(#t40{self::Class2}, #t41, self::Extension|[](#t40{self::Class2}, #t41).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class2? #t42 = c2 in #t42 == null ?{core::int?} null : let final core::int #t43 = 0 in let final core::int #t44 = self::Extension|[](#t42{self::Class2}, #t43).{core::num::+}(1){(core::num) → core::int} in let final void #t45 = self::Extension|[]=(#t42{self::Class2}, #t43, #t44) in #t44;
+  let final self::Class2? #t46 = c2 in #t46 == null ?{core::int?} null : let final core::int #t47 = 0 in self::Extension|[]=(#t46{self::Class2}, #t47, self::Extension|[](#t46{self::Class2}, #t47).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t48 = c2 in #t48 == null ?{core::int?} null : let final core::int #t49 = 0 in self::Extension|[](#t48{self::Class2}, #t49) == null ?{core::int} self::Extension|[]=(#t48{self::Class2}, #t49, 1) : null;
+  let final self::Class2? #t50 = c2 in #t50 == null ?{core::int?} null : let final core::int #t51 = 0 in self::Extension|[](#t50{self::Class2}, #t51) == null ?{core::int} self::Extension|[]=(#t50{self::Class2}, #t51, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1)){(core::num) → core::int}) : null;
+  let final self::Class1? #t52 = c1 in #t52 == null ?{core::int?} null : let final self::Class2? #t53 = #t52{self::Class1}.{self::Class1::field}{self::Class2?} in #t53 == null ?{core::int?} null : self::Extension|[](#t53{self::Class2}, 0);
+  let final self::Class1? #t54 = c1 in #t54 == null ?{core::int?} null : let final self::Class2? #t55 = #t54{self::Class1}.{self::Class1::field}{self::Class2?} in #t55 == null ?{core::int?} null : self::Extension|[]=(#t55{self::Class2}, 0, 1);
+  let final self::Class1? #t56 = c1 in #t56 == null ?{core::int?} null : let final self::Class2? #t57 = #t56{self::Class1}.{self::Class1::field}{self::Class2?} in #t57 == null ?{core::int?} null : self::Extension|[]=(#t57{self::Class2}, 0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t58 = c1 in #t58 == null ?{core::int?} null : let final self::Class2? #t59 = #t58{self::Class1}.{self::Class1::field}{self::Class2?} in #t59 == null ?{core::int?} null : let final core::int #t60 = 0 in self::Extension|[]=(#t59{self::Class2}, #t60, self::Extension|[](#t59{self::Class2}, #t60).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t61 = c1 in #t61 == null ?{core::int?} null : let final self::Class2? #t62 = #t61{self::Class1}.{self::Class1::field}{self::Class2?} in #t62 == null ?{core::int?} null : let final core::int #t63 = 0 in self::Extension|[]=(#t62{self::Class2}, #t63, self::Extension|[](#t62{self::Class2}, #t63).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t64 = c1 in #t64 == null ?{core::int?} null : let final self::Class2? #t65 = #t64{self::Class1}.{self::Class1::field}{self::Class2?} in #t65 == null ?{core::int?} null : let final core::int #t66 = 0 in let final core::int #t67 = self::Extension|[](#t65{self::Class2}, #t66).{core::num::+}(1){(core::num) → core::int} in let final void #t68 = self::Extension|[]=(#t65{self::Class2}, #t66, #t67) in #t67;
+  let final self::Class1? #t69 = c1 in #t69 == null ?{core::int?} null : let final self::Class2? #t70 = #t69{self::Class1}.{self::Class1::field}{self::Class2?} in #t70 == null ?{core::int?} null : let final core::int #t71 = 0 in self::Extension|[]=(#t70{self::Class2}, #t71, self::Extension|[](#t70{self::Class2}, #t71).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t72 = c1 in #t72 == null ?{core::int?} null : let final self::Class2? #t73 = #t72{self::Class1}.{self::Class1::field}{self::Class2?} in #t73 == null ?{core::int?} null : let final core::int #t74 = 0 in self::Extension|[](#t73{self::Class2}, #t74) == null ?{core::int} self::Extension|[]=(#t73{self::Class2}, #t74, 1) : null;
+  let final self::Class1? #t75 = c1 in #t75 == null ?{core::int?} null : let final self::Class2? #t76 = #t75{self::Class1}.{self::Class1::field}{self::Class2?} in #t76 == null ?{core::int?} null : let final core::int #t77 = 0 in self::Extension|[](#t76{self::Class2}, #t77) == null ?{core::int} self::Extension|[]=(#t76{self::Class2}, #t77, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1){(core::int) → core::int}){(core::num) → core::int}) : null;
+  let final self::Class1? #t78 = c1 in #t78 == null ?{core::int?} null : let final self::Class2? #t79 = #t78{self::Class1}.{self::Class1::field}{self::Class2?} in #t79 == null ?{core::int?} null : self::Extension|[](#t79{self::Class2}, 0);
+  let final self::Class1? #t80 = c1 in #t80 == null ?{void} null : let final self::Class2? #t81 = #t80{self::Class1}.{self::Class1::field}{self::Class2?} in #t81 == null ?{void} null : self::Extension|[]=(#t81{self::Class2}, 0, 1);
+  let final self::Class1? #t82 = c1 in #t82 == null ?{void} null : let final self::Class2? #t83 = #t82{self::Class1}.{self::Class1::field}{self::Class2?} in #t83 == null ?{void} null : self::Extension|[]=(#t83{self::Class2}, 0, 1.{core::num::+}(let final self::Class2? #t84 = c2 in #t84 == null ?{core::int?} null : self::Extension|[](#t84{self::Class2}, 0)!){(core::num) → core::int});
+  let final self::Class1? #t85 = c1 in #t85 == null ?{core::int?} null : let final self::Class2? #t86 = #t85{self::Class1}.{self::Class1::field}{self::Class2?} in #t86 == null ?{core::int?} null : let final core::int #t87 = 0 in self::Extension|[]=(#t86{self::Class2}, #t87, self::Extension|[](#t86{self::Class2}, #t87).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t88 = c1 in #t88 == null ?{core::int?} null : let final self::Class2? #t89 = #t88{self::Class1}.{self::Class1::field}{self::Class2?} in #t89 == null ?{core::int?} null : let final core::int #t90 = 0 in self::Extension|[]=(#t89{self::Class2}, #t90, self::Extension|[](#t89{self::Class2}, #t90).{core::num::+}(1.{core::num::+}(let final self::Class2? #t91 = c2 in #t91 == null ?{core::int?} null : self::Extension|[](#t91{self::Class2}, 0)!){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t92 = c1 in #t92 == null ?{core::int?} null : let final self::Class2? #t93 = #t92{self::Class1}.{self::Class1::field}{self::Class2?} in #t93 == null ?{core::int?} null : let final core::int #t94 = 0 in let final core::int #t95 = self::Extension|[](#t93{self::Class2}, #t94).{core::num::+}(1){(core::num) → core::int} in let final void #t96 = self::Extension|[]=(#t93{self::Class2}, #t94, #t95) in #t95;
+  let final self::Class1? #t97 = c1 in #t97 == null ?{core::int?} null : let final self::Class2? #t98 = #t97{self::Class1}.{self::Class1::field}{self::Class2?} in #t98 == null ?{core::int?} null : let final core::int #t99 = 0 in self::Extension|[]=(#t98{self::Class2}, #t99, self::Extension|[](#t98{self::Class2}, #t99).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t100 = c1 in #t100 == null ?{core::int?} null : let final self::Class2? #t101 = #t100{self::Class1}.{self::Class1::field}{self::Class2?} in #t101 == null ?{core::int?} null : let final core::int #t102 = 0 in self::Extension|[](#t101{self::Class2}, #t102) == null ?{core::int} self::Extension|[]=(#t101{self::Class2}, #t102, 1) : null;
+  let final self::Class1? #t103 = c1 in #t103 == null ?{core::int?} null : let final self::Class2? #t104 = #t103{self::Class1}.{self::Class1::field}{self::Class2?} in #t104 == null ?{core::int?} null : let final core::int #t105 = 0 in self::Extension|[](#t104{self::Class2}, #t105) == null ?{core::int} self::Extension|[]=(#t104{self::Class2}, #t105, 1.{core::num::+}(let final self::Class2? #t106 = c2 in #t106 == null ?{core::int?} null : self::Extension|[](#t106{self::Class2}, 1)!){(core::num) → core::int}) : null;
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.expect
index 40de06c..e0b2ca8 100644
--- a/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.expect
@@ -17,12 +17,12 @@
     : super core::Object::•()
     ;
   get nonNullableProperty() → self::A
-    return this.{self::Class::nonNullableField};
+    return this.{self::Class::nonNullableField}{self::A};
   set nonNullableProperty(self::A value) → void {
     this.{self::Class::nonNullableField} = value;
   }
   method nonNullableMethod() → self::A
-    return this.{self::Class::nonNullableField};
+    return this.{self::Class::nonNullableField}{self::A};
 }
 class A extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::A
@@ -37,17 +37,17 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
 Try accessing using ?. instead.
   throws(() => c.nonNullableField);
-                 ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField});
-  self::expect(null, let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField});
-  self::expect(null, let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}.{self::A::nonNullableProperty});
+                 ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField}{<nullable>}.{self::A});
+  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A});
+  self::expect(null, let final self::Class? #t3 = c in #t3 == null ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object e) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.transformed.expect
index 40de06c..e0b2ca8 100644
--- a/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_access.dart.strong.transformed.expect
@@ -17,12 +17,12 @@
     : super core::Object::•()
     ;
   get nonNullableProperty() → self::A
-    return this.{self::Class::nonNullableField};
+    return this.{self::Class::nonNullableField}{self::A};
   set nonNullableProperty(self::A value) → void {
     this.{self::Class::nonNullableField} = value;
   }
   method nonNullableMethod() → self::A
-    return this.{self::Class::nonNullableField};
+    return this.{self::Class::nonNullableField}{self::A};
 }
 class A extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::A
@@ -37,17 +37,17 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
 Try accessing using ?. instead.
   throws(() => c.nonNullableField);
-                 ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField});
-  self::expect(null, let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField});
-  self::expect(null, let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}.{self::A::nonNullableProperty});
+                 ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField}{<nullable>}.{self::A});
+  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A});
+  self::expect(null, let final self::Class? #t3 = c in #t3 == null ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object e) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.expect
index 40de06c..e0b2ca8 100644
--- a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.expect
@@ -17,12 +17,12 @@
     : super core::Object::•()
     ;
   get nonNullableProperty() → self::A
-    return this.{self::Class::nonNullableField};
+    return this.{self::Class::nonNullableField}{self::A};
   set nonNullableProperty(self::A value) → void {
     this.{self::Class::nonNullableField} = value;
   }
   method nonNullableMethod() → self::A
-    return this.{self::Class::nonNullableField};
+    return this.{self::Class::nonNullableField}{self::A};
 }
 class A extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::A
@@ -37,17 +37,17 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
 Try accessing using ?. instead.
   throws(() => c.nonNullableField);
-                 ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField});
-  self::expect(null, let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField});
-  self::expect(null, let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}.{self::A::nonNullableProperty});
+                 ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField}{<nullable>}.{self::A});
+  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A});
+  self::expect(null, let final self::Class? #t3 = c in #t3 == null ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object e) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.transformed.expect
index 40de06c..e0b2ca8 100644
--- a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.transformed.expect
@@ -17,12 +17,12 @@
     : super core::Object::•()
     ;
   get nonNullableProperty() → self::A
-    return this.{self::Class::nonNullableField};
+    return this.{self::Class::nonNullableField}{self::A};
   set nonNullableProperty(self::A value) → void {
     this.{self::Class::nonNullableField} = value;
   }
   method nonNullableMethod() → self::A
-    return this.{self::Class::nonNullableField};
+    return this.{self::Class::nonNullableField}{self::A};
 }
 class A extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::A
@@ -37,17 +37,17 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
 Try accessing using ?. instead.
   throws(() => c.nonNullableField);
-                 ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField});
-  self::expect(null, let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField});
-  self::expect(null, let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}.{self::A::nonNullableProperty});
+                 ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField}{<nullable>}.{self::A});
+  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A});
+  self::expect(null, let final self::Class? #t3 = c in #t3 == null ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object e) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.expect
index a732aa4..62d3a21 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.expect
@@ -18,6 +18,6 @@
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.transformed.expect
index a732aa4..62d3a21 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.transformed.expect
@@ -18,6 +18,6 @@
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.expect
index a732aa4..62d3a21 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.expect
@@ -18,6 +18,6 @@
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.transformed.expect
index a732aa4..62d3a21 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.transformed.expect
@@ -18,6 +18,6 @@
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.expect
index db3769e..fd1b424 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.expect
@@ -70,32 +70,32 @@
 }
 static method main() → dynamic {}
 static method test(self::Class c1, self::Class? c2, core::Invocation invocation, self::CustomInvocation customInvocation) → void {
-  self::CustomType runtimeType1 = c1.{self::Class::runtimeType};
-  self::CustomType runtimeTypeVariable1 = c1.{self::Class::runtimeType};
-  c1.{self::Class::runtimeType}.{self::CustomType::call}();
-  (self::CustomInvocation) → core::String noSuchMethodTearOff1 = c1.{self::Class::noSuchMethod};
-  (self::CustomInvocation) → core::String noSuchMethodTearOffVariable1 = c1.{self::Class::noSuchMethod};
-  core::String noSuchMethod1a = c1.{self::Class::noSuchMethod}(customInvocation);
+  self::CustomType runtimeType1 = c1.{self::Class::runtimeType}{self::CustomType};
+  self::CustomType runtimeTypeVariable1 = c1.{self::Class::runtimeType}{self::CustomType};
+  c1.{self::Class::runtimeType}{self::CustomType}.{self::CustomType::call}(){() → void};
+  (self::CustomInvocation) → core::String noSuchMethodTearOff1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
+  (self::CustomInvocation) → core::String noSuchMethodTearOffVariable1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
+  core::String noSuchMethod1a = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
   core::String noSuchMethod1b = c1.{self::Class::noSuchMethod}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:31:43: Error: The argument type 'Invocation' can't be assigned to the parameter type 'CustomInvocation'.
  - 'Invocation' is from 'dart:core'.
  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   String noSuchMethod1b = c1.noSuchMethod(invocation); // error
-                                          ^" in invocation as{TypeError,ForNonNullableByDefault} self::CustomInvocation);
-  core::String noSuchMethodVariable1 = c1.{self::Class::noSuchMethod}(customInvocation);
-  c1.{self::Class::==}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+                                          ^" in invocation as{TypeError,ForNonNullableByDefault} self::CustomInvocation){(self::CustomInvocation) → core::String};
+  core::String noSuchMethodVariable1 = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
+  c1 =={self::Class::==}{(self::Class) → core::bool} (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   c1 == ''; // error
         ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?);
-  c1.{self::Class::==}(c2);
-  ({o: core::Object}) → core::String toStringTearOff1 = c1.{self::Class::toString};
-  ({o: core::Object}) → core::String toStringTearOffVariable1 = c1.{self::Class::toString};
-  c1.{self::Class::toString}(o: c1);
+  c1 =={self::Class::==}{(self::Class) → core::bool} c2;
+  ({o: core::Object}) → core::String toStringTearOff1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
+  ({o: core::Object}) → core::String toStringTearOffVariable1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
+  c1.{self::Class::toString}(o: c1){({o: core::Object}) → core::String};
   self::CustomType runtimeType2 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:42:32: Error: A value of type 'Type' can't be assigned to a variable of type 'CustomType'.
  - 'Type' is from 'dart:core'.
  - 'CustomType' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   CustomType runtimeType2 = c2.runtimeType; // error
-                               ^" in c2.{core::Object::runtimeType} as{TypeError,ForNonNullableByDefault} self::CustomType;
-  core::Type runtimeTypeVariable2 = c2.{core::Object::runtimeType};
+                               ^" in c2.{core::Object::runtimeType}{core::Type} as{TypeError,ForNonNullableByDefault} self::CustomType;
+  core::Type runtimeTypeVariable2 = c2.{core::Object::runtimeType}{core::Type};
   invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:44:17: Error: 'runtimeType' isn't a function or method and can't be invoked.
   c2.runtimeType(); // error
                 ^^^^^^^^^^^";
@@ -103,23 +103,23 @@
  - 'Invocation' is from 'dart:core'.
  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
       c2.noSuchMethod; // error
-         ^" in c2.{core::Object::noSuchMethod} as{TypeError,ForNonNullableByDefault} (self::CustomInvocation) → core::String;
-  (core::Invocation) → dynamic noSuchMethodTearOffVariable2 = c2.{core::Object::noSuchMethod};
-  core::int noSuchMethod2 = c2.{core::Object::noSuchMethod}(invocation) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-  dynamic noSuchMethodVariable2 = c2.{core::Object::noSuchMethod}(invocation);
-  c2.{self::Class::==}(let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+         ^" in c2.{core::Object::noSuchMethod}{(core::Invocation) → dynamic} as{TypeError,ForNonNullableByDefault} (self::CustomInvocation) → core::String;
+  (core::Invocation) → dynamic noSuchMethodTearOffVariable2 = c2.{core::Object::noSuchMethod}{(core::Invocation) → dynamic};
+  core::int noSuchMethod2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  dynamic noSuchMethodVariable2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic};
+  c2 =={self::Class::==}{(self::Class) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   c2 == ''; // ok or error?
         ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?);
-  c2.{self::Class::==}(c1);
+  c2 =={self::Class::==}{(self::Class) → core::bool} c1;
   ({o: core::Object}) → core::String toStringTearOff2 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:59:53: Error: A value of type 'String Function()' can't be assigned to a variable of type 'String Function({Object o})'.
  - 'Object' is from 'dart:core'.
   String Function({Object o}) toStringTearOff2 = c2.toString; // error
-                                                    ^" in c2.{core::Object::toString} as{TypeError,ForNonNullableByDefault} ({o: core::Object}) → core::String;
-  () → core::String toStringTearOffVariable2 = c2.{core::Object::toString};
+                                                    ^" in c2.{core::Object::toString}{() → core::String} as{TypeError,ForNonNullableByDefault} ({o: core::Object}) → core::String;
+  () → core::String toStringTearOffVariable2 = c2.{core::Object::toString}{() → core::String};
   let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:62:15: Error: No named parameter with the name 'o'.
   c2.toString(o: c1); // error
-              ^" in c2.{core::Object::toString}(o: c1);
+              ^" in c2.{core::Object::toString}{<inapplicable>}.(o: c1){({o: invalid-type}) → invalid-type};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.expect
index db3769e..fd1b424 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.expect
@@ -70,32 +70,32 @@
 }
 static method main() → dynamic {}
 static method test(self::Class c1, self::Class? c2, core::Invocation invocation, self::CustomInvocation customInvocation) → void {
-  self::CustomType runtimeType1 = c1.{self::Class::runtimeType};
-  self::CustomType runtimeTypeVariable1 = c1.{self::Class::runtimeType};
-  c1.{self::Class::runtimeType}.{self::CustomType::call}();
-  (self::CustomInvocation) → core::String noSuchMethodTearOff1 = c1.{self::Class::noSuchMethod};
-  (self::CustomInvocation) → core::String noSuchMethodTearOffVariable1 = c1.{self::Class::noSuchMethod};
-  core::String noSuchMethod1a = c1.{self::Class::noSuchMethod}(customInvocation);
+  self::CustomType runtimeType1 = c1.{self::Class::runtimeType}{self::CustomType};
+  self::CustomType runtimeTypeVariable1 = c1.{self::Class::runtimeType}{self::CustomType};
+  c1.{self::Class::runtimeType}{self::CustomType}.{self::CustomType::call}(){() → void};
+  (self::CustomInvocation) → core::String noSuchMethodTearOff1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
+  (self::CustomInvocation) → core::String noSuchMethodTearOffVariable1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
+  core::String noSuchMethod1a = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
   core::String noSuchMethod1b = c1.{self::Class::noSuchMethod}(let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:31:43: Error: The argument type 'Invocation' can't be assigned to the parameter type 'CustomInvocation'.
  - 'Invocation' is from 'dart:core'.
  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   String noSuchMethod1b = c1.noSuchMethod(invocation); // error
-                                          ^" in invocation as{TypeError,ForNonNullableByDefault} self::CustomInvocation);
-  core::String noSuchMethodVariable1 = c1.{self::Class::noSuchMethod}(customInvocation);
-  c1.{self::Class::==}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+                                          ^" in invocation as{TypeError,ForNonNullableByDefault} self::CustomInvocation){(self::CustomInvocation) → core::String};
+  core::String noSuchMethodVariable1 = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
+  c1 =={self::Class::==}{(self::Class) → core::bool} (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   c1 == ''; // error
         ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?);
-  c1.{self::Class::==}(c2);
-  ({o: core::Object}) → core::String toStringTearOff1 = c1.{self::Class::toString};
-  ({o: core::Object}) → core::String toStringTearOffVariable1 = c1.{self::Class::toString};
-  c1.{self::Class::toString}(o: c1);
+  c1 =={self::Class::==}{(self::Class) → core::bool} c2;
+  ({o: core::Object}) → core::String toStringTearOff1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
+  ({o: core::Object}) → core::String toStringTearOffVariable1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
+  c1.{self::Class::toString}(o: c1){({o: core::Object}) → core::String};
   self::CustomType runtimeType2 = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:42:32: Error: A value of type 'Type' can't be assigned to a variable of type 'CustomType'.
  - 'Type' is from 'dart:core'.
  - 'CustomType' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   CustomType runtimeType2 = c2.runtimeType; // error
-                               ^" in c2.{core::Object::runtimeType} as{TypeError,ForNonNullableByDefault} self::CustomType;
-  core::Type runtimeTypeVariable2 = c2.{core::Object::runtimeType};
+                               ^" in c2.{core::Object::runtimeType}{core::Type} as{TypeError,ForNonNullableByDefault} self::CustomType;
+  core::Type runtimeTypeVariable2 = c2.{core::Object::runtimeType}{core::Type};
   invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:44:17: Error: 'runtimeType' isn't a function or method and can't be invoked.
   c2.runtimeType(); // error
                 ^^^^^^^^^^^";
@@ -103,23 +103,23 @@
  - 'Invocation' is from 'dart:core'.
  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
       c2.noSuchMethod; // error
-         ^" in c2.{core::Object::noSuchMethod} as{TypeError,ForNonNullableByDefault} (self::CustomInvocation) → core::String;
-  (core::Invocation) → dynamic noSuchMethodTearOffVariable2 = c2.{core::Object::noSuchMethod};
-  core::int noSuchMethod2 = c2.{core::Object::noSuchMethod}(invocation) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-  dynamic noSuchMethodVariable2 = c2.{core::Object::noSuchMethod}(invocation);
-  c2.{self::Class::==}(let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+         ^" in c2.{core::Object::noSuchMethod}{(core::Invocation) → dynamic} as{TypeError,ForNonNullableByDefault} (self::CustomInvocation) → core::String;
+  (core::Invocation) → dynamic noSuchMethodTearOffVariable2 = c2.{core::Object::noSuchMethod}{(core::Invocation) → dynamic};
+  core::int noSuchMethod2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  dynamic noSuchMethodVariable2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic};
+  c2 =={self::Class::==}{(self::Class) → core::bool} (let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
   c2 == ''; // ok or error?
         ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?);
-  c2.{self::Class::==}(c1);
+  c2 =={self::Class::==}{(self::Class) → core::bool} c1;
   ({o: core::Object}) → core::String toStringTearOff2 = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:59:53: Error: A value of type 'String Function()' can't be assigned to a variable of type 'String Function({Object o})'.
  - 'Object' is from 'dart:core'.
   String Function({Object o}) toStringTearOff2 = c2.toString; // error
-                                                    ^" in c2.{core::Object::toString} as{TypeError,ForNonNullableByDefault} ({o: core::Object}) → core::String;
-  () → core::String toStringTearOffVariable2 = c2.{core::Object::toString};
+                                                    ^" in c2.{core::Object::toString}{() → core::String} as{TypeError,ForNonNullableByDefault} ({o: core::Object}) → core::String;
+  () → core::String toStringTearOffVariable2 = c2.{core::Object::toString}{() → core::String};
   let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:62:15: Error: No named parameter with the name 'o'.
   c2.toString(o: c1); // error
-              ^" in c2.{core::Object::toString}(o: c1);
+              ^" in c2.{core::Object::toString}{<inapplicable>}.(o: c1){({o: invalid-type}) → invalid-type};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.expect
index 701d5d6..1d7f270 100644
--- a/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.expect
@@ -12,11 +12,11 @@
 static method main() → dynamic {
   self::Foo foo = new self::Foo::•();
   foo.{self::Foo::field} = 5;
-  foo.{self::Foo::bar}(6);
+  foo.{self::Foo::bar}(6){(core::int?) → core::int?};
   self::test_nullable_function_type_formal_param(f: () → core::int => 2);
 }
 static method test_nullable_function_type_formal_param({() →? core::int f = #C1}) → core::int {
-  return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{() → core::int}.call() in #t1.{core::num::==}(null) ?{core::int} 1.{core::int::unary-}() : #t1{core::int};
+  return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2 == null ?{core::int?} null : #t2{() → core::int}(){() → core::int} in #t1 == null ?{core::int} 1.{core::int::unary-}(){() → core::int} : #t1{core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.transformed.expect
index 49de6f1..492b1de 100644
--- a/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.transformed.expect
@@ -12,11 +12,11 @@
 static method main() → dynamic {
   self::Foo foo = new self::Foo::•();
   foo.{self::Foo::field} = 5;
-  foo.{self::Foo::bar}(6);
+  foo.{self::Foo::bar}(6){(core::int?) → core::int?};
   self::test_nullable_function_type_formal_param(f: () → core::int => 2);
 }
 static method test_nullable_function_type_formal_param({() →? core::int f = #C1}) → core::int {
-  return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{() → core::int}.call() in #t1.{core::num::==}(null) ?{core::int} 1.{core::int::unary-}() : #t1{core::int};
+  return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2 == null ?{core::int?} null : #t2{() → core::int}(){() → core::int} in #t1 == null ?{core::int} 1.{core::int::unary-}(){() → core::int} : #t1{core::int};
 }
 
 constants  {
@@ -24,5 +24,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///nullable_param.dart:19:23 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///nullable_param.dart:19:23 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 20, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.expect
index 701d5d6..1d7f270 100644
--- a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.expect
@@ -12,11 +12,11 @@
 static method main() → dynamic {
   self::Foo foo = new self::Foo::•();
   foo.{self::Foo::field} = 5;
-  foo.{self::Foo::bar}(6);
+  foo.{self::Foo::bar}(6){(core::int?) → core::int?};
   self::test_nullable_function_type_formal_param(f: () → core::int => 2);
 }
 static method test_nullable_function_type_formal_param({() →? core::int f = #C1}) → core::int {
-  return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{() → core::int}.call() in #t1.{core::num::==}(null) ?{core::int} 1.{core::int::unary-}() : #t1{core::int};
+  return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2 == null ?{core::int?} null : #t2{() → core::int}(){() → core::int} in #t1 == null ?{core::int} 1.{core::int::unary-}(){() → core::int} : #t1{core::int};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.transformed.expect
index 49de6f1..492b1de 100644
--- a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.transformed.expect
@@ -12,11 +12,11 @@
 static method main() → dynamic {
   self::Foo foo = new self::Foo::•();
   foo.{self::Foo::field} = 5;
-  foo.{self::Foo::bar}(6);
+  foo.{self::Foo::bar}(6){(core::int?) → core::int?};
   self::test_nullable_function_type_formal_param(f: () → core::int => 2);
 }
 static method test_nullable_function_type_formal_param({() →? core::int f = #C1}) → core::int {
-  return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{() → core::int}.call() in #t1.{core::num::==}(null) ?{core::int} 1.{core::int::unary-}() : #t1{core::int};
+  return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2 == null ?{core::int?} null : #t2{() → core::int}(){() → core::int} in #t1 == null ?{core::int} 1.{core::int::unary-}(){() → core::int} : #t1{core::int};
 }
 
 constants  {
@@ -24,5 +24,5 @@
 }
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///nullable_param.dart:19:23 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///nullable_param.dart:19:23 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 20, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect
index 2c6ff57..f1e425b 100644
--- a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect
@@ -77,35 +77,35 @@
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 Try accessing using ?. instead.
   s.length;
-    ^^^^^^" in s.{core::String::length};
+    ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
 Try calling using ?. instead.
   s.substring(1, 1);
-    ^^^^^^^^^" in s.{core::String::substring}(1, 1);
+    ^^^^^^^^^" in s.{core::String::substring}{<nullable>}.(1, 1){(core::int, [core::int?]) → core::String};
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try calling using ?. instead.
   a.foo();
-    ^^^" in a.{self::A::foo}();
+    ^^^" in a.{self::A::foo}{<nullable>}.(){() → dynamic};
   let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try accessing using ?. instead.
   a.bar;
-    ^^^" in a.{self::A::bar};
+    ^^^" in a.{self::A::bar}{<nullable>}.{core::int};
   let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try accessing using ?. instead.
   a.baz = 42;
-    ^^^" in a.{self::A::baz} = 42;
+    ^^^" in a.{self::A::baz}{<nullable>}. = 42;
   let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try calling using ?.call instead.
   a();
-   ^" in a.{self::A::call}();
+   ^" in a.{self::A::call}{<nullable>}.(){() → void};
   let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:13: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   b.toString(0);
-            ^" in b.{core::Object::toString}(0);
+            ^" in b.{core::Object::toString}{<inapplicable>}.(0){(invalid-type) → invalid-type};
   core::Function f1 = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
   Function f1 = a;
                 ^" in a as{TypeError} core::Function;
@@ -117,42 +117,42 @@
                         ^" in a as{TypeError} () →? void;
 }
 static method ok<T extends core::Object?>(core::String? s, self::A? a, self::ok::T% t, self::B? b, core::Invocation i) → dynamic {
-  s.{core::String::==}(s);
-  a.{core::Object::==}(a);
-  t.{core::Object::==}(t);
-  b.{core::Object::==}(b);
-  s.{core::Object::hashCode};
-  a.{core::Object::hashCode};
-  t.{core::Object::hashCode};
-  b.{core::Object::hashCode};
-  s.{core::Object::toString}();
-  a.{core::Object::toString}();
-  t.{core::Object::toString}();
-  b.{core::Object::toString}();
+  s =={core::String::==}{(core::Object) → core::bool} s;
+  a =={core::Object::==}{(core::Object) → core::bool} a;
+  t =={core::Object::==}{(core::Object) → core::bool} t;
+  b =={core::Object::==}{(core::Object) → core::bool} b;
+  s.{core::Object::hashCode}{core::int};
+  a.{core::Object::hashCode}{core::int};
+  t.{core::Object::hashCode}{core::int};
+  b.{core::Object::hashCode}{core::int};
+  s.{core::Object::toString}(){() → core::String};
+  a.{core::Object::toString}(){() → core::String};
+  t.{core::Object::toString}(){() → core::String};
+  b.{core::Object::toString}(){() → core::String};
   try {
-    s.{core::Object::noSuchMethod}(i);
+    s.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
   }
   on core::Object catch(final core::Object e, final core::StackTrace t) {
   }
   try {
-    a.{core::Object::noSuchMethod}(i);
+    a.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
   }
   on core::Object catch(final core::Object e, final core::StackTrace t) {
   }
   try {
-    t.{core::Object::noSuchMethod}(i);
+    t.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
   }
   on core::Object catch(final core::Object e, final core::StackTrace t) {
   }
   try {
-    b.{core::Object::noSuchMethod}(i);
+    b.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
   }
   on core::Object catch(final core::Object e, final core::StackTrace t) {
   }
-  s.{core::Object::runtimeType};
-  a.{core::Object::runtimeType};
-  t.{core::Object::runtimeType};
-  b.{core::Object::runtimeType};
+  s.{core::Object::runtimeType}{core::Type};
+  a.{core::Object::runtimeType}{core::Type};
+  t.{core::Object::runtimeType}{core::Type};
+  b.{core::Object::runtimeType}{core::Type};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect
index 2c6ff57..f1e425b 100644
--- a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect
@@ -77,35 +77,35 @@
   let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 Try accessing using ?. instead.
   s.length;
-    ^^^^^^" in s.{core::String::length};
+    ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
   let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
 Try calling using ?. instead.
   s.substring(1, 1);
-    ^^^^^^^^^" in s.{core::String::substring}(1, 1);
+    ^^^^^^^^^" in s.{core::String::substring}{<nullable>}.(1, 1){(core::int, [core::int?]) → core::String};
   let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try calling using ?. instead.
   a.foo();
-    ^^^" in a.{self::A::foo}();
+    ^^^" in a.{self::A::foo}{<nullable>}.(){() → dynamic};
   let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try accessing using ?. instead.
   a.bar;
-    ^^^" in a.{self::A::bar};
+    ^^^" in a.{self::A::bar}{<nullable>}.{core::int};
   let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try accessing using ?. instead.
   a.baz = 42;
-    ^^^" in a.{self::A::baz} = 42;
+    ^^^" in a.{self::A::baz}{<nullable>}. = 42;
   let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try calling using ?.call instead.
   a();
-   ^" in a.{self::A::call}();
+   ^" in a.{self::A::call}{<nullable>}.(){() → void};
   let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:13: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   b.toString(0);
-            ^" in b.{core::Object::toString}(0);
+            ^" in b.{core::Object::toString}{<inapplicable>}.(0){(invalid-type) → invalid-type};
   core::Function f1 = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
   Function f1 = a;
                 ^" in a as{TypeError} core::Function;
@@ -117,42 +117,42 @@
                         ^" in a as{TypeError} () →? void;
 }
 static method ok<T extends core::Object?>(core::String? s, self::A? a, self::ok::T% t, self::B? b, core::Invocation i) → dynamic {
-  s.{core::String::==}(s);
-  a.{core::Object::==}(a);
-  t.{core::Object::==}(t);
-  b.{core::Object::==}(b);
-  s.{core::Object::hashCode};
-  a.{core::Object::hashCode};
-  t.{core::Object::hashCode};
-  b.{core::Object::hashCode};
-  s.{core::Object::toString}();
-  a.{core::Object::toString}();
-  t.{core::Object::toString}();
-  b.{core::Object::toString}();
+  s =={core::String::==}{(core::Object) → core::bool} s;
+  a =={core::Object::==}{(core::Object) → core::bool} a;
+  t =={core::Object::==}{(core::Object) → core::bool} t;
+  b =={core::Object::==}{(core::Object) → core::bool} b;
+  s.{core::Object::hashCode}{core::int};
+  a.{core::Object::hashCode}{core::int};
+  t.{core::Object::hashCode}{core::int};
+  b.{core::Object::hashCode}{core::int};
+  s.{core::Object::toString}(){() → core::String};
+  a.{core::Object::toString}(){() → core::String};
+  t.{core::Object::toString}(){() → core::String};
+  b.{core::Object::toString}(){() → core::String};
   try {
-    s.{core::Object::noSuchMethod}(i);
+    s.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
   }
   on core::Object catch(final core::Object e, final core::StackTrace t) {
   }
   try {
-    a.{core::Object::noSuchMethod}(i);
+    a.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
   }
   on core::Object catch(final core::Object e, final core::StackTrace t) {
   }
   try {
-    t.{core::Object::noSuchMethod}(i);
+    t.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
   }
   on core::Object catch(final core::Object e, final core::StackTrace t) {
   }
   try {
-    b.{core::Object::noSuchMethod}(i);
+    b.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
   }
   on core::Object catch(final core::Object e, final core::StackTrace t) {
   }
-  s.{core::Object::runtimeType};
-  a.{core::Object::runtimeType};
-  t.{core::Object::runtimeType};
-  b.{core::Object::runtimeType};
+  s.{core::Object::runtimeType}{core::Type};
+  a.{core::Object::runtimeType}{core::Type};
+  t.{core::Object::runtimeType}{core::Type};
+  b.{core::Object::runtimeType}{core::Type};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.expect
index 4e21e645..297e474 100644
--- a/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.expect
@@ -15,20 +15,20 @@
   set setter = self::_extension#0|set#setter;
 }
 static method _extension#0|set#setter(lowered final self::C? #this, core::String v) → void {
-  let final self::C? #t1 = #this in #t1.{core::Object::==}(null) ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
+  let final self::C? #t1 = #this in #t1 == null ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
 }
 static method _extension#0|[]=(lowered final self::C? #this, core::int index, core::String value) → void {
-  let final self::C? #t2 = #this in #t2.{core::Object::==}(null) ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
+  let final self::C? #t2 = #this in #t2 == null ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
 }
 static method main() → dynamic {
   self::C? c = new self::C::•() as{ForNonNullableByDefault} self::C?;
-  self::expect("", let final self::C? #t3 = c in #t3.{core::Object::==}(null) ?{core::String?} null : #t3{self::C}.{self::C::m});
+  self::expect("", let final self::C? #t3 = c in #t3 == null ?{core::String?} null : #t3{self::C}.{self::C::m}{core::String});
   self::_extension#0|set#setter(c, "42");
-  self::expect("42", let final self::C? #t4 = c in #t4.{core::Object::==}(null) ?{core::String?} null : #t4{self::C}.{self::C::m});
+  self::expect("42", let final self::C? #t4 = c in #t4 == null ?{core::String?} null : #t4{self::C}.{self::C::m}{core::String});
   self::_extension#0|[]=(c, 42, "87");
-  self::expect("4287", let final self::C? #t5 = c in #t5.{core::Object::==}(null) ?{core::String?} null : #t5{self::C}.{self::C::m});
+  self::expect("4287", let final self::C? #t5 = c in #t5 == null ?{core::String?} null : #t5{self::C}.{self::C::m}{core::String});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.transformed.expect
index fdac0fc..321c92b 100644
--- a/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_setter.dart.strong.transformed.expect
@@ -15,20 +15,20 @@
   set setter = self::_extension#0|set#setter;
 }
 static method _extension#0|set#setter(lowered final self::C? #this, core::String v) → void {
-  let final self::C? #t1 = #this in #t1.{core::Object::==}(null) ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
+  let final self::C? #t1 = #this in #t1 == null ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
 }
 static method _extension#0|[]=(lowered final self::C? #this, core::int index, core::String value) → void {
-  let final self::C? #t2 = #this in #t2.{core::Object::==}(null) ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
+  let final self::C? #t2 = #this in #t2 == null ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
 }
 static method main() → dynamic {
   self::C? c = new self::C::•();
-  self::expect("", let final self::C? #t3 = c in #t3.{core::Object::==}(null) ?{core::String?} null : #t3{self::C}.{self::C::m});
+  self::expect("", let final self::C? #t3 = c in #t3 == null ?{core::String?} null : #t3{self::C}.{self::C::m}{core::String});
   self::_extension#0|set#setter(c, "42");
-  self::expect("42", let final self::C? #t4 = c in #t4.{core::Object::==}(null) ?{core::String?} null : #t4{self::C}.{self::C::m});
+  self::expect("42", let final self::C? #t4 = c in #t4 == null ?{core::String?} null : #t4{self::C}.{self::C::m}{core::String});
   self::_extension#0|[]=(c, 42, "87");
-  self::expect("4287", let final self::C? #t5 = c in #t5.{core::Object::==}(null) ?{core::String?} null : #t5{self::C}.{self::C::m});
+  self::expect("4287", let final self::C? #t5 = c in #t5 == null ?{core::String?} null : #t5{self::C}.{self::C::m}{core::String});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.expect
index 4e21e645..297e474 100644
--- a/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.expect
@@ -15,20 +15,20 @@
   set setter = self::_extension#0|set#setter;
 }
 static method _extension#0|set#setter(lowered final self::C? #this, core::String v) → void {
-  let final self::C? #t1 = #this in #t1.{core::Object::==}(null) ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
+  let final self::C? #t1 = #this in #t1 == null ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
 }
 static method _extension#0|[]=(lowered final self::C? #this, core::int index, core::String value) → void {
-  let final self::C? #t2 = #this in #t2.{core::Object::==}(null) ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
+  let final self::C? #t2 = #this in #t2 == null ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
 }
 static method main() → dynamic {
   self::C? c = new self::C::•() as{ForNonNullableByDefault} self::C?;
-  self::expect("", let final self::C? #t3 = c in #t3.{core::Object::==}(null) ?{core::String?} null : #t3{self::C}.{self::C::m});
+  self::expect("", let final self::C? #t3 = c in #t3 == null ?{core::String?} null : #t3{self::C}.{self::C::m}{core::String});
   self::_extension#0|set#setter(c, "42");
-  self::expect("42", let final self::C? #t4 = c in #t4.{core::Object::==}(null) ?{core::String?} null : #t4{self::C}.{self::C::m});
+  self::expect("42", let final self::C? #t4 = c in #t4 == null ?{core::String?} null : #t4{self::C}.{self::C::m}{core::String});
   self::_extension#0|[]=(c, 42, "87");
-  self::expect("4287", let final self::C? #t5 = c in #t5.{core::Object::==}(null) ?{core::String?} null : #t5{self::C}.{self::C::m});
+  self::expect("4287", let final self::C? #t5 = c in #t5 == null ?{core::String?} null : #t5{self::C}.{self::C::m}{core::String});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.transformed.expect
index fdac0fc..321c92b 100644
--- a/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.transformed.expect
@@ -15,20 +15,20 @@
   set setter = self::_extension#0|set#setter;
 }
 static method _extension#0|set#setter(lowered final self::C? #this, core::String v) → void {
-  let final self::C? #t1 = #this in #t1.{core::Object::==}(null) ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
+  let final self::C? #t1 = #this in #t1 == null ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
 }
 static method _extension#0|[]=(lowered final self::C? #this, core::int index, core::String value) → void {
-  let final self::C? #t2 = #this in #t2.{core::Object::==}(null) ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
+  let final self::C? #t2 = #this in #t2 == null ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
 }
 static method main() → dynamic {
   self::C? c = new self::C::•();
-  self::expect("", let final self::C? #t3 = c in #t3.{core::Object::==}(null) ?{core::String?} null : #t3{self::C}.{self::C::m});
+  self::expect("", let final self::C? #t3 = c in #t3 == null ?{core::String?} null : #t3{self::C}.{self::C::m}{core::String});
   self::_extension#0|set#setter(c, "42");
-  self::expect("42", let final self::C? #t4 = c in #t4.{core::Object::==}(null) ?{core::String?} null : #t4{self::C}.{self::C::m});
+  self::expect("42", let final self::C? #t4 = c in #t4 == null ?{core::String?} null : #t4{self::C}.{self::C::m}{core::String});
   self::_extension#0|[]=(c, 42, "87");
-  self::expect("4287", let final self::C? #t5 = c in #t5.{core::Object::==}(null) ?{core::String?} null : #t5{self::C}.{self::C::m});
+  self::expect("4287", let final self::C? #t5 = c in #t5 == null ?{core::String?} null : #t5{self::C}.{self::C::m}{core::String});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/numbers.dart.strong.expect b/pkg/front_end/testcases/nnbd/numbers.dart.strong.expect
index d52aac2..babfb04 100644
--- a/pkg/front_end/testcases/nnbd/numbers.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/numbers.dart.strong.expect
@@ -3,411 +3,411 @@
 import "dart:core" as core;
 
 static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
-  core::num n_n = n.{core::num::+}(n);
-  core::num n_i = n.{core::num::+}(i);
-  core::double n_d = n.{core::num::+}(d);
-  core::num n_x = n.{core::num::+}(x);
-  core::num n_y = n.{core::num::+}(y);
-  core::double n_z = n.{core::num::+}(z);
-  core::num i_n = i.{core::num::+}(n);
-  core::int i_i = i.{core::num::+}(i);
-  core::double i_d = i.{core::num::+}(d);
-  core::num i_x = i.{core::num::+}(x);
-  core::int i_y = i.{core::num::+}(y);
-  core::double i_z = i.{core::num::+}(z);
-  core::double d_n = d.{core::double::+}(n);
-  core::double d_i = d.{core::double::+}(i);
-  core::double d_d = d.{core::double::+}(d);
-  core::double d_x = d.{core::double::+}(x);
-  core::double d_y = d.{core::double::+}(y);
-  core::double d_z = d.{core::double::+}(z);
-  core::num x_n = x.{core::num::+}(n);
-  core::num x_i = x.{core::num::+}(i);
-  core::double x_d = x.{core::num::+}(d);
-  core::num x_x = x.{core::num::+}(x);
-  core::num x_y = x.{core::num::+}(y);
-  core::double x_z = x.{core::num::+}(z);
-  core::num y_n = y.{core::num::+}(n);
-  core::int y_i = y.{core::num::+}(i);
-  core::double y_d = y.{core::num::+}(d);
-  core::num y_x = y.{core::num::+}(x);
-  core::int y_y = y.{core::num::+}(y);
-  core::double y_z = y.{core::num::+}(z);
-  core::double z_n = z.{core::double::+}(n);
-  core::double z_i = z.{core::double::+}(i);
-  core::double z_d = z.{core::double::+}(d);
-  core::double z_x = z.{core::double::+}(x);
-  core::double z_y = z.{core::double::+}(y);
-  core::double z_z = z.{core::double::+}(z);
+  core::num n_n = n.{core::num::+}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::+}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::+}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::+}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::+}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::+}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::+}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::+}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::+}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::+}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::+}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::+}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::+}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::+}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::+}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::+}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::+}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::+}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::+}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::+}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::+}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::+}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::+}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::+}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::+}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::+}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::+}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::+}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::+}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::+}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::+}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::+}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::+}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::+}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::+}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::+}(z){(core::num) → core::double};
 }
 static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
-  core::num n_n = n.{core::num::-}(n);
-  core::num n_i = n.{core::num::-}(i);
-  core::double n_d = n.{core::num::-}(d);
-  core::num n_x = n.{core::num::-}(x);
-  core::num n_y = n.{core::num::-}(y);
-  core::double n_z = n.{core::num::-}(z);
-  core::num i_n = i.{core::num::-}(n);
-  core::int i_i = i.{core::num::-}(i);
-  core::double i_d = i.{core::num::-}(d);
-  core::num i_x = i.{core::num::-}(x);
-  core::int i_y = i.{core::num::-}(y);
-  core::double i_z = i.{core::num::-}(z);
-  core::double d_n = d.{core::double::-}(n);
-  core::double d_i = d.{core::double::-}(i);
-  core::double d_d = d.{core::double::-}(d);
-  core::double d_x = d.{core::double::-}(x);
-  core::double d_y = d.{core::double::-}(y);
-  core::double d_z = d.{core::double::-}(z);
-  core::num x_n = x.{core::num::-}(n);
-  core::num x_i = x.{core::num::-}(i);
-  core::double x_d = x.{core::num::-}(d);
-  core::num x_x = x.{core::num::-}(x);
-  core::num x_y = x.{core::num::-}(y);
-  core::double x_z = x.{core::num::-}(z);
-  core::num y_n = y.{core::num::-}(n);
-  core::int y_i = y.{core::num::-}(i);
-  core::double y_d = y.{core::num::-}(d);
-  core::num y_x = y.{core::num::-}(x);
-  core::int y_y = y.{core::num::-}(y);
-  core::double y_z = y.{core::num::-}(z);
-  core::double z_n = z.{core::double::-}(n);
-  core::double z_i = z.{core::double::-}(i);
-  core::double z_d = z.{core::double::-}(d);
-  core::double z_x = z.{core::double::-}(x);
-  core::double z_y = z.{core::double::-}(y);
-  core::double z_z = z.{core::double::-}(z);
+  core::num n_n = n.{core::num::-}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::-}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::-}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::-}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::-}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::-}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::-}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::-}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::-}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::-}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::-}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::-}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::-}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::-}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::-}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::-}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::-}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::-}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::-}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::-}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::-}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::-}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::-}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::-}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::-}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::-}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::-}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::-}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::-}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::-}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::-}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::-}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::-}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::-}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::-}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::-}(z){(core::num) → core::double};
 }
 static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
-  core::num n_n = n.{core::num::*}(n);
-  core::num n_i = n.{core::num::*}(i);
-  core::double n_d = n.{core::num::*}(d);
-  core::num n_x = n.{core::num::*}(x);
-  core::num n_y = n.{core::num::*}(y);
-  core::double n_z = n.{core::num::*}(z);
-  core::num i_n = i.{core::num::*}(n);
-  core::int i_i = i.{core::num::*}(i);
-  core::double i_d = i.{core::num::*}(d);
-  core::num i_x = i.{core::num::*}(x);
-  core::int i_y = i.{core::num::*}(y);
-  core::double i_z = i.{core::num::*}(z);
-  core::double d_n = d.{core::double::*}(n);
-  core::double d_i = d.{core::double::*}(i);
-  core::double d_d = d.{core::double::*}(d);
-  core::double d_x = d.{core::double::*}(x);
-  core::double d_y = d.{core::double::*}(y);
-  core::double d_z = d.{core::double::*}(z);
-  core::num x_n = x.{core::num::*}(n);
-  core::num x_i = x.{core::num::*}(i);
-  core::double x_d = x.{core::num::*}(d);
-  core::num x_x = x.{core::num::*}(x);
-  core::num x_y = x.{core::num::*}(y);
-  core::double x_z = x.{core::num::*}(z);
-  core::num y_n = y.{core::num::*}(n);
-  core::int y_i = y.{core::num::*}(i);
-  core::double y_d = y.{core::num::*}(d);
-  core::num y_x = y.{core::num::*}(x);
-  core::int y_y = y.{core::num::*}(y);
-  core::double y_z = y.{core::num::*}(z);
-  core::double z_n = z.{core::double::*}(n);
-  core::double z_i = z.{core::double::*}(i);
-  core::double z_d = z.{core::double::*}(d);
-  core::double z_x = z.{core::double::*}(x);
-  core::double z_y = z.{core::double::*}(y);
-  core::double z_z = z.{core::double::*}(z);
+  core::num n_n = n.{core::num::*}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::*}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::*}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::*}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::*}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::*}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::*}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::*}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::*}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::*}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::*}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::*}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::*}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::*}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::*}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::*}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::*}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::*}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::*}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::*}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::*}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::*}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::*}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::*}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::*}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::*}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::*}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::*}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::*}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::*}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::*}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::*}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::*}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::*}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::*}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::*}(z){(core::num) → core::double};
 }
 static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
-  core::num n_n = n.{core::num::%}(n);
-  core::num n_i = n.{core::num::%}(i);
-  core::double n_d = n.{core::num::%}(d);
-  core::num n_x = n.{core::num::%}(x);
-  core::num n_y = n.{core::num::%}(y);
-  core::double n_z = n.{core::num::%}(z);
-  core::num i_n = i.{core::num::%}(n);
-  core::int i_i = i.{core::num::%}(i);
-  core::double i_d = i.{core::num::%}(d);
-  core::num i_x = i.{core::num::%}(x);
-  core::int i_y = i.{core::num::%}(y);
-  core::double i_z = i.{core::num::%}(z);
-  core::double d_n = d.{core::double::%}(n);
-  core::double d_i = d.{core::double::%}(i);
-  core::double d_d = d.{core::double::%}(d);
-  core::double d_x = d.{core::double::%}(x);
-  core::double d_y = d.{core::double::%}(y);
-  core::double d_z = d.{core::double::%}(z);
-  core::num x_n = x.{core::num::%}(n);
-  core::num x_i = x.{core::num::%}(i);
-  core::double x_d = x.{core::num::%}(d);
-  core::num x_x = x.{core::num::%}(x);
-  core::num x_y = x.{core::num::%}(y);
-  core::double x_z = x.{core::num::%}(z);
-  core::num y_n = y.{core::num::%}(n);
-  core::int y_i = y.{core::num::%}(i);
-  core::double y_d = y.{core::num::%}(d);
-  core::num y_x = y.{core::num::%}(x);
-  core::int y_y = y.{core::num::%}(y);
-  core::double y_z = y.{core::num::%}(z);
-  core::double z_n = z.{core::double::%}(n);
-  core::double z_i = z.{core::double::%}(i);
-  core::double z_d = z.{core::double::%}(d);
-  core::double z_x = z.{core::double::%}(x);
-  core::double z_y = z.{core::double::%}(y);
-  core::double z_z = z.{core::double::%}(z);
+  core::num n_n = n.{core::num::%}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::%}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::%}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::%}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::%}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::%}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::%}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::%}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::%}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::%}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::%}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::%}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::%}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::%}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::%}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::%}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::%}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::%}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::%}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::%}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::%}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::%}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::%}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::%}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::%}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::%}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::%}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::%}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::%}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::%}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::%}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::%}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::%}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::%}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::%}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::%}(z){(core::num) → core::double};
 }
 static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
-  core::num n_n = n.{core::num::remainder}(n);
-  core::num n_i = n.{core::num::remainder}(i);
-  core::double n_d = n.{core::num::remainder}(d);
-  core::num n_x = n.{core::num::remainder}(x);
-  core::num n_y = n.{core::num::remainder}(y);
-  core::double n_z = n.{core::num::remainder}(z);
-  core::num i_n = i.{core::num::remainder}(n);
-  core::int i_i = i.{core::num::remainder}(i);
-  core::double i_d = i.{core::num::remainder}(d);
-  core::num i_x = i.{core::num::remainder}(x);
-  core::int i_y = i.{core::num::remainder}(y);
-  core::double i_z = i.{core::num::remainder}(z);
-  core::double d_n = d.{core::double::remainder}(n);
-  core::double d_i = d.{core::double::remainder}(i);
-  core::double d_d = d.{core::double::remainder}(d);
-  core::double d_x = d.{core::double::remainder}(x);
-  core::double d_y = d.{core::double::remainder}(y);
-  core::double d_z = d.{core::double::remainder}(z);
-  core::num x_n = x.{core::num::remainder}(n);
-  core::num x_i = x.{core::num::remainder}(i);
-  core::double x_d = x.{core::num::remainder}(d);
-  core::num x_x = x.{core::num::remainder}(x);
-  core::num x_y = x.{core::num::remainder}(y);
-  core::double x_z = x.{core::num::remainder}(z);
-  core::num y_n = y.{core::num::remainder}(n);
-  core::int y_i = y.{core::num::remainder}(i);
-  core::double y_d = y.{core::num::remainder}(d);
-  core::num y_x = y.{core::num::remainder}(x);
-  core::int y_y = y.{core::num::remainder}(y);
-  core::double y_z = y.{core::num::remainder}(z);
-  core::double z_n = z.{core::double::remainder}(n);
-  core::double z_i = z.{core::double::remainder}(i);
-  core::double z_d = z.{core::double::remainder}(d);
-  core::double z_x = z.{core::double::remainder}(x);
-  core::double z_y = z.{core::double::remainder}(y);
-  core::double z_z = z.{core::double::remainder}(z);
+  core::num n_n = n.{core::num::remainder}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::remainder}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::remainder}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::remainder}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::remainder}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::remainder}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::remainder}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::remainder}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::remainder}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::remainder}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::remainder}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::remainder}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::remainder}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::remainder}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::remainder}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::remainder}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::remainder}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::remainder}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::remainder}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::remainder}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::remainder}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::remainder}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::remainder}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::remainder}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::remainder}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::remainder}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::remainder}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::remainder}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::remainder}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::remainder}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::remainder}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::remainder}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::remainder}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::remainder}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::remainder}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::remainder}(z){(core::num) → core::double};
 }
 static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
-  core::num n_n_n = n.{core::num::clamp}(n, n);
-  core::num n_i_n = n.{core::num::clamp}(i, n);
-  core::num n_d_n = n.{core::num::clamp}(d, n);
-  core::num n_x_n = n.{core::num::clamp}(x, n);
-  core::num n_y_n = n.{core::num::clamp}(y, n);
-  core::num n_z_n = n.{core::num::clamp}(z, n);
-  core::num n_n_i = n.{core::num::clamp}(n, i);
-  core::num n_i_i = n.{core::num::clamp}(i, i);
-  core::num n_d_i = n.{core::num::clamp}(d, i);
-  core::num n_x_i = n.{core::num::clamp}(x, i);
-  core::num n_y_i = n.{core::num::clamp}(y, i);
-  core::num n_z_i = n.{core::num::clamp}(z, i);
-  core::num n_n_d = n.{core::num::clamp}(n, d);
-  core::num n_i_d = n.{core::num::clamp}(i, d);
-  core::num n_d_d = n.{core::num::clamp}(d, d);
-  core::num n_x_d = n.{core::num::clamp}(x, d);
-  core::num n_y_d = n.{core::num::clamp}(y, d);
-  core::num n_z_d = n.{core::num::clamp}(z, d);
-  core::num n_n_x = n.{core::num::clamp}(n, x);
-  core::num n_i_x = n.{core::num::clamp}(i, x);
-  core::num n_d_x = n.{core::num::clamp}(d, x);
-  core::num n_x_x = n.{core::num::clamp}(x, x);
-  core::num n_y_x = n.{core::num::clamp}(y, x);
-  core::num n_z_x = n.{core::num::clamp}(z, x);
-  core::num n_n_y = n.{core::num::clamp}(n, y);
-  core::num n_i_y = n.{core::num::clamp}(i, y);
-  core::num n_d_y = n.{core::num::clamp}(d, y);
-  core::num n_x_y = n.{core::num::clamp}(x, y);
-  core::num n_y_y = n.{core::num::clamp}(y, y);
-  core::num n_z_y = n.{core::num::clamp}(z, y);
-  core::num n_n_z = n.{core::num::clamp}(n, z);
-  core::num n_i_z = n.{core::num::clamp}(i, z);
-  core::num n_d_z = n.{core::num::clamp}(d, z);
-  core::num n_x_z = n.{core::num::clamp}(x, z);
-  core::num n_y_z = n.{core::num::clamp}(y, z);
-  core::num n_z_z = n.{core::num::clamp}(z, z);
-  core::num i_n_n = i.{core::num::clamp}(n, n);
-  core::num i_i_n = i.{core::num::clamp}(i, n);
-  core::num i_d_n = i.{core::num::clamp}(d, n);
-  core::num i_x_n = i.{core::num::clamp}(x, n);
-  core::num i_y_n = i.{core::num::clamp}(y, n);
-  core::num i_z_n = i.{core::num::clamp}(z, n);
-  core::num i_n_i = i.{core::num::clamp}(n, i);
-  core::int i_i_i = i.{core::num::clamp}(i, i);
-  core::num i_d_i = i.{core::num::clamp}(d, i);
-  core::num i_x_i = i.{core::num::clamp}(x, i);
-  core::int i_y_i = i.{core::num::clamp}(y, i);
-  core::num i_z_i = i.{core::num::clamp}(z, i);
-  core::num i_n_d = i.{core::num::clamp}(n, d);
-  core::num i_i_d = i.{core::num::clamp}(i, d);
-  core::num i_d_d = i.{core::num::clamp}(d, d);
-  core::num i_x_d = i.{core::num::clamp}(x, d);
-  core::num i_y_d = i.{core::num::clamp}(y, d);
-  core::num i_z_d = i.{core::num::clamp}(z, d);
-  core::num i_n_x = i.{core::num::clamp}(n, x);
-  core::num i_i_x = i.{core::num::clamp}(i, x);
-  core::num i_d_x = i.{core::num::clamp}(d, x);
-  core::num i_x_x = i.{core::num::clamp}(x, x);
-  core::num i_y_x = i.{core::num::clamp}(y, x);
-  core::num i_z_x = i.{core::num::clamp}(z, x);
-  core::num i_n_y = i.{core::num::clamp}(n, y);
-  core::int i_i_y = i.{core::num::clamp}(i, y);
-  core::num i_d_y = i.{core::num::clamp}(d, y);
-  core::num i_x_y = i.{core::num::clamp}(x, y);
-  core::int i_y_y = i.{core::num::clamp}(y, y);
-  core::num i_z_y = i.{core::num::clamp}(z, y);
-  core::num i_n_z = i.{core::num::clamp}(n, z);
-  core::num i_i_z = i.{core::num::clamp}(i, z);
-  core::num i_d_z = i.{core::num::clamp}(d, z);
-  core::num i_x_z = i.{core::num::clamp}(x, z);
-  core::num i_y_z = i.{core::num::clamp}(y, z);
-  core::num i_z_z = i.{core::num::clamp}(z, z);
-  core::num d_n_n = d.{core::num::clamp}(n, n);
-  core::num d_i_n = d.{core::num::clamp}(i, n);
-  core::num d_d_n = d.{core::num::clamp}(d, n);
-  core::num d_x_n = d.{core::num::clamp}(x, n);
-  core::num d_y_n = d.{core::num::clamp}(y, n);
-  core::num d_z_n = d.{core::num::clamp}(z, n);
-  core::num d_n_i = d.{core::num::clamp}(n, i);
-  core::num d_i_i = d.{core::num::clamp}(i, i);
-  core::num d_d_i = d.{core::num::clamp}(d, i);
-  core::num d_x_i = d.{core::num::clamp}(x, i);
-  core::num d_y_i = d.{core::num::clamp}(y, i);
-  core::num d_z_i = d.{core::num::clamp}(z, i);
-  core::num d_n_d = d.{core::num::clamp}(n, d);
-  core::num d_i_d = d.{core::num::clamp}(i, d);
-  core::double d_d_d = d.{core::num::clamp}(d, d);
-  core::num d_x_d = d.{core::num::clamp}(x, d);
-  core::num d_y_d = d.{core::num::clamp}(y, d);
-  core::double d_z_d = d.{core::num::clamp}(z, d);
-  core::num d_n_x = d.{core::num::clamp}(n, x);
-  core::num d_i_x = d.{core::num::clamp}(i, x);
-  core::num d_d_x = d.{core::num::clamp}(d, x);
-  core::num d_x_x = d.{core::num::clamp}(x, x);
-  core::num d_y_x = d.{core::num::clamp}(y, x);
-  core::num d_z_x = d.{core::num::clamp}(z, x);
-  core::num d_n_y = d.{core::num::clamp}(n, y);
-  core::num d_i_y = d.{core::num::clamp}(i, y);
-  core::num d_d_y = d.{core::num::clamp}(d, y);
-  core::num d_x_y = d.{core::num::clamp}(x, y);
-  core::num d_y_y = d.{core::num::clamp}(y, y);
-  core::num d_z_y = d.{core::num::clamp}(z, y);
-  core::num d_n_z = d.{core::num::clamp}(n, z);
-  core::num d_i_z = d.{core::num::clamp}(i, z);
-  core::double d_d_z = d.{core::num::clamp}(d, z);
-  core::num d_x_z = d.{core::num::clamp}(x, z);
-  core::num d_y_z = d.{core::num::clamp}(y, z);
-  core::double d_z_z = d.{core::num::clamp}(z, z);
-  core::num x_n_n = x.{core::num::clamp}(n, n);
-  core::num x_i_n = x.{core::num::clamp}(i, n);
-  core::num x_d_n = x.{core::num::clamp}(d, n);
-  core::num x_x_n = x.{core::num::clamp}(x, n);
-  core::num x_y_n = x.{core::num::clamp}(y, n);
-  core::num x_z_n = x.{core::num::clamp}(z, n);
-  core::num x_n_i = x.{core::num::clamp}(n, i);
-  core::num x_i_i = x.{core::num::clamp}(i, i);
-  core::num x_d_i = x.{core::num::clamp}(d, i);
-  core::num x_x_i = x.{core::num::clamp}(x, i);
-  core::num x_y_i = x.{core::num::clamp}(y, i);
-  core::num x_z_i = x.{core::num::clamp}(z, i);
-  core::num x_n_d = x.{core::num::clamp}(n, d);
-  core::num x_i_d = x.{core::num::clamp}(i, d);
-  core::num x_d_d = x.{core::num::clamp}(d, d);
-  core::num x_x_d = x.{core::num::clamp}(x, d);
-  core::num x_y_d = x.{core::num::clamp}(y, d);
-  core::num x_z_d = x.{core::num::clamp}(z, d);
-  core::num x_n_x = x.{core::num::clamp}(n, x);
-  core::num x_i_x = x.{core::num::clamp}(i, x);
-  core::num x_d_x = x.{core::num::clamp}(d, x);
-  core::num x_x_x = x.{core::num::clamp}(x, x);
-  core::num x_y_x = x.{core::num::clamp}(y, x);
-  core::num x_z_x = x.{core::num::clamp}(z, x);
-  core::num x_n_y = x.{core::num::clamp}(n, y);
-  core::num x_i_y = x.{core::num::clamp}(i, y);
-  core::num x_d_y = x.{core::num::clamp}(d, y);
-  core::num x_x_y = x.{core::num::clamp}(x, y);
-  core::num x_y_y = x.{core::num::clamp}(y, y);
-  core::num x_z_y = x.{core::num::clamp}(z, y);
-  core::num x_n_z = x.{core::num::clamp}(n, z);
-  core::num x_i_z = x.{core::num::clamp}(i, z);
-  core::num x_d_z = x.{core::num::clamp}(d, z);
-  core::num x_x_z = x.{core::num::clamp}(x, z);
-  core::num x_y_z = x.{core::num::clamp}(y, z);
-  core::num x_z_z = x.{core::num::clamp}(z, z);
-  core::num y_n_n = y.{core::num::clamp}(n, n);
-  core::num y_i_n = y.{core::num::clamp}(i, n);
-  core::num y_d_n = y.{core::num::clamp}(d, n);
-  core::num y_x_n = y.{core::num::clamp}(x, n);
-  core::num y_y_n = y.{core::num::clamp}(y, n);
-  core::num y_z_n = y.{core::num::clamp}(z, n);
-  core::num y_n_i = y.{core::num::clamp}(n, i);
-  core::int y_i_i = y.{core::num::clamp}(i, i);
-  core::num y_d_i = y.{core::num::clamp}(d, i);
-  core::num y_x_i = y.{core::num::clamp}(x, i);
-  core::int y_y_i = y.{core::num::clamp}(y, i);
-  core::num y_z_i = y.{core::num::clamp}(z, i);
-  core::num y_n_d = y.{core::num::clamp}(n, d);
-  core::num y_i_d = y.{core::num::clamp}(i, d);
-  core::num y_d_d = y.{core::num::clamp}(d, d);
-  core::num y_x_d = y.{core::num::clamp}(x, d);
-  core::num y_y_d = y.{core::num::clamp}(y, d);
-  core::num y_z_d = y.{core::num::clamp}(z, d);
-  core::num y_n_x = y.{core::num::clamp}(n, x);
-  core::num y_i_x = y.{core::num::clamp}(i, x);
-  core::num y_d_x = y.{core::num::clamp}(d, x);
-  core::num y_x_x = y.{core::num::clamp}(x, x);
-  core::num y_y_x = y.{core::num::clamp}(y, x);
-  core::num y_z_x = y.{core::num::clamp}(z, x);
-  core::num y_n_y = y.{core::num::clamp}(n, y);
-  core::int y_i_y = y.{core::num::clamp}(i, y);
-  core::num y_d_y = y.{core::num::clamp}(d, y);
-  core::num y_x_y = y.{core::num::clamp}(x, y);
-  core::int y_y_y = y.{core::num::clamp}(y, y);
-  core::num y_z_y = y.{core::num::clamp}(z, y);
-  core::num y_n_z = y.{core::num::clamp}(n, z);
-  core::num y_i_z = y.{core::num::clamp}(i, z);
-  core::num y_d_z = y.{core::num::clamp}(d, z);
-  core::num y_x_z = y.{core::num::clamp}(x, z);
-  core::num y_y_z = y.{core::num::clamp}(y, z);
-  core::num y_z_z = y.{core::num::clamp}(z, z);
-  core::num z_n_n = z.{core::num::clamp}(n, n);
-  core::num z_i_n = z.{core::num::clamp}(i, n);
-  core::num z_d_n = z.{core::num::clamp}(d, n);
-  core::num z_x_n = z.{core::num::clamp}(x, n);
-  core::num z_y_n = z.{core::num::clamp}(y, n);
-  core::num z_z_n = z.{core::num::clamp}(z, n);
-  core::num z_n_i = z.{core::num::clamp}(n, i);
-  core::num z_i_i = z.{core::num::clamp}(i, i);
-  core::num z_d_i = z.{core::num::clamp}(d, i);
-  core::num z_x_i = z.{core::num::clamp}(x, i);
-  core::num z_y_i = z.{core::num::clamp}(y, i);
-  core::num z_z_i = z.{core::num::clamp}(z, i);
-  core::num z_n_d = z.{core::num::clamp}(n, d);
-  core::num z_i_d = z.{core::num::clamp}(i, d);
-  core::double z_d_d = z.{core::num::clamp}(d, d);
-  core::num z_x_d = z.{core::num::clamp}(x, d);
-  core::num z_y_d = z.{core::num::clamp}(y, d);
-  core::double z_z_d = z.{core::num::clamp}(z, d);
-  core::num z_n_x = z.{core::num::clamp}(n, x);
-  core::num z_i_x = z.{core::num::clamp}(i, x);
-  core::num z_d_x = z.{core::num::clamp}(d, x);
-  core::num z_x_x = z.{core::num::clamp}(x, x);
-  core::num z_y_x = z.{core::num::clamp}(y, x);
-  core::num z_z_x = z.{core::num::clamp}(z, x);
-  core::num z_n_y = z.{core::num::clamp}(n, y);
-  core::num z_i_y = z.{core::num::clamp}(i, y);
-  core::num z_d_y = z.{core::num::clamp}(d, y);
-  core::num z_x_y = z.{core::num::clamp}(x, y);
-  core::num z_y_y = z.{core::num::clamp}(y, y);
-  core::num z_z_y = z.{core::num::clamp}(z, y);
-  core::num z_n_z = z.{core::num::clamp}(n, z);
-  core::num z_i_z = z.{core::num::clamp}(i, z);
-  core::double z_d_z = z.{core::num::clamp}(d, z);
-  core::num z_x_z = z.{core::num::clamp}(x, z);
-  core::num z_y_z = z.{core::num::clamp}(y, z);
-  core::double z_z_z = z.{core::num::clamp}(z, z);
+  core::num n_n_n = n.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num n_i_n = n.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num n_d_n = n.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num n_x_n = n.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num n_y_n = n.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num n_z_n = n.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num n_n_i = n.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num n_i_i = n.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num n_d_i = n.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num n_x_i = n.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num n_y_i = n.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num n_z_i = n.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num n_n_d = n.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num n_i_d = n.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num n_d_d = n.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num n_x_d = n.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num n_y_d = n.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num n_z_d = n.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num n_n_x = n.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num n_i_x = n.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num n_d_x = n.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num n_x_x = n.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num n_y_x = n.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num n_z_x = n.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num n_n_y = n.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num n_i_y = n.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num n_d_y = n.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num n_x_y = n.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num n_y_y = n.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num n_z_y = n.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num n_n_z = n.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num n_i_z = n.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num n_d_z = n.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num n_x_z = n.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num n_y_z = n.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num n_z_z = n.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num i_n_n = i.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num i_i_n = i.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num i_d_n = i.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num i_x_n = i.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num i_y_n = i.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num i_z_n = i.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num i_n_i = i.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::int i_i_i = i.{core::num::clamp}(i, i){(core::num, core::num) → core::int};
+  core::num i_d_i = i.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num i_x_i = i.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::int i_y_i = i.{core::num::clamp}(y, i){(core::num, core::num) → core::int};
+  core::num i_z_i = i.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num i_n_d = i.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num i_i_d = i.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num i_d_d = i.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num i_x_d = i.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num i_y_d = i.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num i_z_d = i.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num i_n_x = i.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num i_i_x = i.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num i_d_x = i.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num i_x_x = i.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num i_y_x = i.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num i_z_x = i.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num i_n_y = i.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::int i_i_y = i.{core::num::clamp}(i, y){(core::num, core::num) → core::int};
+  core::num i_d_y = i.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num i_x_y = i.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::int i_y_y = i.{core::num::clamp}(y, y){(core::num, core::num) → core::int};
+  core::num i_z_y = i.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num i_n_z = i.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num i_i_z = i.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num i_d_z = i.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num i_x_z = i.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num i_y_z = i.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num i_z_z = i.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num d_n_n = d.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num d_i_n = d.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num d_d_n = d.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num d_x_n = d.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num d_y_n = d.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num d_z_n = d.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num d_n_i = d.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num d_i_i = d.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num d_d_i = d.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num d_x_i = d.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num d_y_i = d.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num d_z_i = d.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num d_n_d = d.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num d_i_d = d.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::double d_d_d = d.{core::num::clamp}(d, d){(core::num, core::num) → core::double};
+  core::num d_x_d = d.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num d_y_d = d.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::double d_z_d = d.{core::num::clamp}(z, d){(core::num, core::num) → core::double};
+  core::num d_n_x = d.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num d_i_x = d.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num d_d_x = d.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num d_x_x = d.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num d_y_x = d.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num d_z_x = d.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num d_n_y = d.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num d_i_y = d.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num d_d_y = d.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num d_x_y = d.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num d_y_y = d.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num d_z_y = d.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num d_n_z = d.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num d_i_z = d.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::double d_d_z = d.{core::num::clamp}(d, z){(core::num, core::num) → core::double};
+  core::num d_x_z = d.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num d_y_z = d.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::double d_z_z = d.{core::num::clamp}(z, z){(core::num, core::num) → core::double};
+  core::num x_n_n = x.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num x_i_n = x.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num x_d_n = x.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num x_x_n = x.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num x_y_n = x.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num x_z_n = x.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num x_n_i = x.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num x_i_i = x.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num x_d_i = x.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num x_x_i = x.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num x_y_i = x.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num x_z_i = x.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num x_n_d = x.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num x_i_d = x.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num x_d_d = x.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num x_x_d = x.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num x_y_d = x.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num x_z_d = x.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num x_n_x = x.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num x_i_x = x.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num x_d_x = x.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num x_x_x = x.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num x_y_x = x.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num x_z_x = x.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num x_n_y = x.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num x_i_y = x.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num x_d_y = x.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num x_x_y = x.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num x_y_y = x.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num x_z_y = x.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num x_n_z = x.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num x_i_z = x.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num x_d_z = x.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num x_x_z = x.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num x_y_z = x.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num x_z_z = x.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num y_n_n = y.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num y_i_n = y.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num y_d_n = y.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num y_x_n = y.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num y_y_n = y.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num y_z_n = y.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num y_n_i = y.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::int y_i_i = y.{core::num::clamp}(i, i){(core::num, core::num) → core::int};
+  core::num y_d_i = y.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num y_x_i = y.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::int y_y_i = y.{core::num::clamp}(y, i){(core::num, core::num) → core::int};
+  core::num y_z_i = y.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num y_n_d = y.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num y_i_d = y.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num y_d_d = y.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num y_x_d = y.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num y_y_d = y.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num y_z_d = y.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num y_n_x = y.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num y_i_x = y.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num y_d_x = y.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num y_x_x = y.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num y_y_x = y.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num y_z_x = y.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num y_n_y = y.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::int y_i_y = y.{core::num::clamp}(i, y){(core::num, core::num) → core::int};
+  core::num y_d_y = y.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num y_x_y = y.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::int y_y_y = y.{core::num::clamp}(y, y){(core::num, core::num) → core::int};
+  core::num y_z_y = y.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num y_n_z = y.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num y_i_z = y.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num y_d_z = y.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num y_x_z = y.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num y_y_z = y.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num y_z_z = y.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num z_n_n = z.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num z_i_n = z.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num z_d_n = z.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num z_x_n = z.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num z_y_n = z.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num z_z_n = z.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num z_n_i = z.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num z_i_i = z.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num z_d_i = z.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num z_x_i = z.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num z_y_i = z.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num z_z_i = z.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num z_n_d = z.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num z_i_d = z.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::double z_d_d = z.{core::num::clamp}(d, d){(core::num, core::num) → core::double};
+  core::num z_x_d = z.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num z_y_d = z.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::double z_z_d = z.{core::num::clamp}(z, d){(core::num, core::num) → core::double};
+  core::num z_n_x = z.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num z_i_x = z.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num z_d_x = z.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num z_x_x = z.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num z_y_x = z.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num z_z_x = z.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num z_n_y = z.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num z_i_y = z.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num z_d_y = z.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num z_x_y = z.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num z_y_y = z.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num z_z_y = z.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num z_n_z = z.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num z_i_z = z.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::double z_d_z = z.{core::num::clamp}(d, z){(core::num, core::num) → core::double};
+  core::num z_x_z = z.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num z_y_z = z.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::double z_z_z = z.{core::num::clamp}(z, z){(core::num, core::num) → core::double};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/numbers.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/numbers.dart.strong.transformed.expect
index d52aac2..babfb04 100644
--- a/pkg/front_end/testcases/nnbd/numbers.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/numbers.dart.strong.transformed.expect
@@ -3,411 +3,411 @@
 import "dart:core" as core;
 
 static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
-  core::num n_n = n.{core::num::+}(n);
-  core::num n_i = n.{core::num::+}(i);
-  core::double n_d = n.{core::num::+}(d);
-  core::num n_x = n.{core::num::+}(x);
-  core::num n_y = n.{core::num::+}(y);
-  core::double n_z = n.{core::num::+}(z);
-  core::num i_n = i.{core::num::+}(n);
-  core::int i_i = i.{core::num::+}(i);
-  core::double i_d = i.{core::num::+}(d);
-  core::num i_x = i.{core::num::+}(x);
-  core::int i_y = i.{core::num::+}(y);
-  core::double i_z = i.{core::num::+}(z);
-  core::double d_n = d.{core::double::+}(n);
-  core::double d_i = d.{core::double::+}(i);
-  core::double d_d = d.{core::double::+}(d);
-  core::double d_x = d.{core::double::+}(x);
-  core::double d_y = d.{core::double::+}(y);
-  core::double d_z = d.{core::double::+}(z);
-  core::num x_n = x.{core::num::+}(n);
-  core::num x_i = x.{core::num::+}(i);
-  core::double x_d = x.{core::num::+}(d);
-  core::num x_x = x.{core::num::+}(x);
-  core::num x_y = x.{core::num::+}(y);
-  core::double x_z = x.{core::num::+}(z);
-  core::num y_n = y.{core::num::+}(n);
-  core::int y_i = y.{core::num::+}(i);
-  core::double y_d = y.{core::num::+}(d);
-  core::num y_x = y.{core::num::+}(x);
-  core::int y_y = y.{core::num::+}(y);
-  core::double y_z = y.{core::num::+}(z);
-  core::double z_n = z.{core::double::+}(n);
-  core::double z_i = z.{core::double::+}(i);
-  core::double z_d = z.{core::double::+}(d);
-  core::double z_x = z.{core::double::+}(x);
-  core::double z_y = z.{core::double::+}(y);
-  core::double z_z = z.{core::double::+}(z);
+  core::num n_n = n.{core::num::+}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::+}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::+}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::+}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::+}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::+}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::+}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::+}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::+}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::+}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::+}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::+}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::+}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::+}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::+}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::+}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::+}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::+}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::+}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::+}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::+}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::+}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::+}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::+}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::+}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::+}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::+}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::+}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::+}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::+}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::+}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::+}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::+}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::+}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::+}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::+}(z){(core::num) → core::double};
 }
 static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
-  core::num n_n = n.{core::num::-}(n);
-  core::num n_i = n.{core::num::-}(i);
-  core::double n_d = n.{core::num::-}(d);
-  core::num n_x = n.{core::num::-}(x);
-  core::num n_y = n.{core::num::-}(y);
-  core::double n_z = n.{core::num::-}(z);
-  core::num i_n = i.{core::num::-}(n);
-  core::int i_i = i.{core::num::-}(i);
-  core::double i_d = i.{core::num::-}(d);
-  core::num i_x = i.{core::num::-}(x);
-  core::int i_y = i.{core::num::-}(y);
-  core::double i_z = i.{core::num::-}(z);
-  core::double d_n = d.{core::double::-}(n);
-  core::double d_i = d.{core::double::-}(i);
-  core::double d_d = d.{core::double::-}(d);
-  core::double d_x = d.{core::double::-}(x);
-  core::double d_y = d.{core::double::-}(y);
-  core::double d_z = d.{core::double::-}(z);
-  core::num x_n = x.{core::num::-}(n);
-  core::num x_i = x.{core::num::-}(i);
-  core::double x_d = x.{core::num::-}(d);
-  core::num x_x = x.{core::num::-}(x);
-  core::num x_y = x.{core::num::-}(y);
-  core::double x_z = x.{core::num::-}(z);
-  core::num y_n = y.{core::num::-}(n);
-  core::int y_i = y.{core::num::-}(i);
-  core::double y_d = y.{core::num::-}(d);
-  core::num y_x = y.{core::num::-}(x);
-  core::int y_y = y.{core::num::-}(y);
-  core::double y_z = y.{core::num::-}(z);
-  core::double z_n = z.{core::double::-}(n);
-  core::double z_i = z.{core::double::-}(i);
-  core::double z_d = z.{core::double::-}(d);
-  core::double z_x = z.{core::double::-}(x);
-  core::double z_y = z.{core::double::-}(y);
-  core::double z_z = z.{core::double::-}(z);
+  core::num n_n = n.{core::num::-}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::-}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::-}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::-}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::-}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::-}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::-}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::-}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::-}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::-}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::-}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::-}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::-}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::-}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::-}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::-}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::-}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::-}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::-}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::-}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::-}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::-}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::-}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::-}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::-}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::-}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::-}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::-}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::-}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::-}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::-}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::-}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::-}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::-}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::-}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::-}(z){(core::num) → core::double};
 }
 static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
-  core::num n_n = n.{core::num::*}(n);
-  core::num n_i = n.{core::num::*}(i);
-  core::double n_d = n.{core::num::*}(d);
-  core::num n_x = n.{core::num::*}(x);
-  core::num n_y = n.{core::num::*}(y);
-  core::double n_z = n.{core::num::*}(z);
-  core::num i_n = i.{core::num::*}(n);
-  core::int i_i = i.{core::num::*}(i);
-  core::double i_d = i.{core::num::*}(d);
-  core::num i_x = i.{core::num::*}(x);
-  core::int i_y = i.{core::num::*}(y);
-  core::double i_z = i.{core::num::*}(z);
-  core::double d_n = d.{core::double::*}(n);
-  core::double d_i = d.{core::double::*}(i);
-  core::double d_d = d.{core::double::*}(d);
-  core::double d_x = d.{core::double::*}(x);
-  core::double d_y = d.{core::double::*}(y);
-  core::double d_z = d.{core::double::*}(z);
-  core::num x_n = x.{core::num::*}(n);
-  core::num x_i = x.{core::num::*}(i);
-  core::double x_d = x.{core::num::*}(d);
-  core::num x_x = x.{core::num::*}(x);
-  core::num x_y = x.{core::num::*}(y);
-  core::double x_z = x.{core::num::*}(z);
-  core::num y_n = y.{core::num::*}(n);
-  core::int y_i = y.{core::num::*}(i);
-  core::double y_d = y.{core::num::*}(d);
-  core::num y_x = y.{core::num::*}(x);
-  core::int y_y = y.{core::num::*}(y);
-  core::double y_z = y.{core::num::*}(z);
-  core::double z_n = z.{core::double::*}(n);
-  core::double z_i = z.{core::double::*}(i);
-  core::double z_d = z.{core::double::*}(d);
-  core::double z_x = z.{core::double::*}(x);
-  core::double z_y = z.{core::double::*}(y);
-  core::double z_z = z.{core::double::*}(z);
+  core::num n_n = n.{core::num::*}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::*}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::*}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::*}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::*}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::*}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::*}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::*}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::*}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::*}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::*}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::*}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::*}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::*}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::*}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::*}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::*}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::*}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::*}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::*}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::*}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::*}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::*}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::*}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::*}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::*}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::*}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::*}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::*}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::*}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::*}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::*}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::*}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::*}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::*}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::*}(z){(core::num) → core::double};
 }
 static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
-  core::num n_n = n.{core::num::%}(n);
-  core::num n_i = n.{core::num::%}(i);
-  core::double n_d = n.{core::num::%}(d);
-  core::num n_x = n.{core::num::%}(x);
-  core::num n_y = n.{core::num::%}(y);
-  core::double n_z = n.{core::num::%}(z);
-  core::num i_n = i.{core::num::%}(n);
-  core::int i_i = i.{core::num::%}(i);
-  core::double i_d = i.{core::num::%}(d);
-  core::num i_x = i.{core::num::%}(x);
-  core::int i_y = i.{core::num::%}(y);
-  core::double i_z = i.{core::num::%}(z);
-  core::double d_n = d.{core::double::%}(n);
-  core::double d_i = d.{core::double::%}(i);
-  core::double d_d = d.{core::double::%}(d);
-  core::double d_x = d.{core::double::%}(x);
-  core::double d_y = d.{core::double::%}(y);
-  core::double d_z = d.{core::double::%}(z);
-  core::num x_n = x.{core::num::%}(n);
-  core::num x_i = x.{core::num::%}(i);
-  core::double x_d = x.{core::num::%}(d);
-  core::num x_x = x.{core::num::%}(x);
-  core::num x_y = x.{core::num::%}(y);
-  core::double x_z = x.{core::num::%}(z);
-  core::num y_n = y.{core::num::%}(n);
-  core::int y_i = y.{core::num::%}(i);
-  core::double y_d = y.{core::num::%}(d);
-  core::num y_x = y.{core::num::%}(x);
-  core::int y_y = y.{core::num::%}(y);
-  core::double y_z = y.{core::num::%}(z);
-  core::double z_n = z.{core::double::%}(n);
-  core::double z_i = z.{core::double::%}(i);
-  core::double z_d = z.{core::double::%}(d);
-  core::double z_x = z.{core::double::%}(x);
-  core::double z_y = z.{core::double::%}(y);
-  core::double z_z = z.{core::double::%}(z);
+  core::num n_n = n.{core::num::%}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::%}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::%}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::%}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::%}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::%}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::%}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::%}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::%}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::%}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::%}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::%}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::%}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::%}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::%}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::%}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::%}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::%}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::%}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::%}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::%}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::%}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::%}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::%}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::%}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::%}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::%}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::%}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::%}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::%}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::%}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::%}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::%}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::%}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::%}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::%}(z){(core::num) → core::double};
 }
 static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
-  core::num n_n = n.{core::num::remainder}(n);
-  core::num n_i = n.{core::num::remainder}(i);
-  core::double n_d = n.{core::num::remainder}(d);
-  core::num n_x = n.{core::num::remainder}(x);
-  core::num n_y = n.{core::num::remainder}(y);
-  core::double n_z = n.{core::num::remainder}(z);
-  core::num i_n = i.{core::num::remainder}(n);
-  core::int i_i = i.{core::num::remainder}(i);
-  core::double i_d = i.{core::num::remainder}(d);
-  core::num i_x = i.{core::num::remainder}(x);
-  core::int i_y = i.{core::num::remainder}(y);
-  core::double i_z = i.{core::num::remainder}(z);
-  core::double d_n = d.{core::double::remainder}(n);
-  core::double d_i = d.{core::double::remainder}(i);
-  core::double d_d = d.{core::double::remainder}(d);
-  core::double d_x = d.{core::double::remainder}(x);
-  core::double d_y = d.{core::double::remainder}(y);
-  core::double d_z = d.{core::double::remainder}(z);
-  core::num x_n = x.{core::num::remainder}(n);
-  core::num x_i = x.{core::num::remainder}(i);
-  core::double x_d = x.{core::num::remainder}(d);
-  core::num x_x = x.{core::num::remainder}(x);
-  core::num x_y = x.{core::num::remainder}(y);
-  core::double x_z = x.{core::num::remainder}(z);
-  core::num y_n = y.{core::num::remainder}(n);
-  core::int y_i = y.{core::num::remainder}(i);
-  core::double y_d = y.{core::num::remainder}(d);
-  core::num y_x = y.{core::num::remainder}(x);
-  core::int y_y = y.{core::num::remainder}(y);
-  core::double y_z = y.{core::num::remainder}(z);
-  core::double z_n = z.{core::double::remainder}(n);
-  core::double z_i = z.{core::double::remainder}(i);
-  core::double z_d = z.{core::double::remainder}(d);
-  core::double z_x = z.{core::double::remainder}(x);
-  core::double z_y = z.{core::double::remainder}(y);
-  core::double z_z = z.{core::double::remainder}(z);
+  core::num n_n = n.{core::num::remainder}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::remainder}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::remainder}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::remainder}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::remainder}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::remainder}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::remainder}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::remainder}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::remainder}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::remainder}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::remainder}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::remainder}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::remainder}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::remainder}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::remainder}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::remainder}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::remainder}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::remainder}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::remainder}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::remainder}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::remainder}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::remainder}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::remainder}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::remainder}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::remainder}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::remainder}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::remainder}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::remainder}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::remainder}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::remainder}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::remainder}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::remainder}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::remainder}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::remainder}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::remainder}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::remainder}(z){(core::num) → core::double};
 }
 static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
-  core::num n_n_n = n.{core::num::clamp}(n, n);
-  core::num n_i_n = n.{core::num::clamp}(i, n);
-  core::num n_d_n = n.{core::num::clamp}(d, n);
-  core::num n_x_n = n.{core::num::clamp}(x, n);
-  core::num n_y_n = n.{core::num::clamp}(y, n);
-  core::num n_z_n = n.{core::num::clamp}(z, n);
-  core::num n_n_i = n.{core::num::clamp}(n, i);
-  core::num n_i_i = n.{core::num::clamp}(i, i);
-  core::num n_d_i = n.{core::num::clamp}(d, i);
-  core::num n_x_i = n.{core::num::clamp}(x, i);
-  core::num n_y_i = n.{core::num::clamp}(y, i);
-  core::num n_z_i = n.{core::num::clamp}(z, i);
-  core::num n_n_d = n.{core::num::clamp}(n, d);
-  core::num n_i_d = n.{core::num::clamp}(i, d);
-  core::num n_d_d = n.{core::num::clamp}(d, d);
-  core::num n_x_d = n.{core::num::clamp}(x, d);
-  core::num n_y_d = n.{core::num::clamp}(y, d);
-  core::num n_z_d = n.{core::num::clamp}(z, d);
-  core::num n_n_x = n.{core::num::clamp}(n, x);
-  core::num n_i_x = n.{core::num::clamp}(i, x);
-  core::num n_d_x = n.{core::num::clamp}(d, x);
-  core::num n_x_x = n.{core::num::clamp}(x, x);
-  core::num n_y_x = n.{core::num::clamp}(y, x);
-  core::num n_z_x = n.{core::num::clamp}(z, x);
-  core::num n_n_y = n.{core::num::clamp}(n, y);
-  core::num n_i_y = n.{core::num::clamp}(i, y);
-  core::num n_d_y = n.{core::num::clamp}(d, y);
-  core::num n_x_y = n.{core::num::clamp}(x, y);
-  core::num n_y_y = n.{core::num::clamp}(y, y);
-  core::num n_z_y = n.{core::num::clamp}(z, y);
-  core::num n_n_z = n.{core::num::clamp}(n, z);
-  core::num n_i_z = n.{core::num::clamp}(i, z);
-  core::num n_d_z = n.{core::num::clamp}(d, z);
-  core::num n_x_z = n.{core::num::clamp}(x, z);
-  core::num n_y_z = n.{core::num::clamp}(y, z);
-  core::num n_z_z = n.{core::num::clamp}(z, z);
-  core::num i_n_n = i.{core::num::clamp}(n, n);
-  core::num i_i_n = i.{core::num::clamp}(i, n);
-  core::num i_d_n = i.{core::num::clamp}(d, n);
-  core::num i_x_n = i.{core::num::clamp}(x, n);
-  core::num i_y_n = i.{core::num::clamp}(y, n);
-  core::num i_z_n = i.{core::num::clamp}(z, n);
-  core::num i_n_i = i.{core::num::clamp}(n, i);
-  core::int i_i_i = i.{core::num::clamp}(i, i);
-  core::num i_d_i = i.{core::num::clamp}(d, i);
-  core::num i_x_i = i.{core::num::clamp}(x, i);
-  core::int i_y_i = i.{core::num::clamp}(y, i);
-  core::num i_z_i = i.{core::num::clamp}(z, i);
-  core::num i_n_d = i.{core::num::clamp}(n, d);
-  core::num i_i_d = i.{core::num::clamp}(i, d);
-  core::num i_d_d = i.{core::num::clamp}(d, d);
-  core::num i_x_d = i.{core::num::clamp}(x, d);
-  core::num i_y_d = i.{core::num::clamp}(y, d);
-  core::num i_z_d = i.{core::num::clamp}(z, d);
-  core::num i_n_x = i.{core::num::clamp}(n, x);
-  core::num i_i_x = i.{core::num::clamp}(i, x);
-  core::num i_d_x = i.{core::num::clamp}(d, x);
-  core::num i_x_x = i.{core::num::clamp}(x, x);
-  core::num i_y_x = i.{core::num::clamp}(y, x);
-  core::num i_z_x = i.{core::num::clamp}(z, x);
-  core::num i_n_y = i.{core::num::clamp}(n, y);
-  core::int i_i_y = i.{core::num::clamp}(i, y);
-  core::num i_d_y = i.{core::num::clamp}(d, y);
-  core::num i_x_y = i.{core::num::clamp}(x, y);
-  core::int i_y_y = i.{core::num::clamp}(y, y);
-  core::num i_z_y = i.{core::num::clamp}(z, y);
-  core::num i_n_z = i.{core::num::clamp}(n, z);
-  core::num i_i_z = i.{core::num::clamp}(i, z);
-  core::num i_d_z = i.{core::num::clamp}(d, z);
-  core::num i_x_z = i.{core::num::clamp}(x, z);
-  core::num i_y_z = i.{core::num::clamp}(y, z);
-  core::num i_z_z = i.{core::num::clamp}(z, z);
-  core::num d_n_n = d.{core::num::clamp}(n, n);
-  core::num d_i_n = d.{core::num::clamp}(i, n);
-  core::num d_d_n = d.{core::num::clamp}(d, n);
-  core::num d_x_n = d.{core::num::clamp}(x, n);
-  core::num d_y_n = d.{core::num::clamp}(y, n);
-  core::num d_z_n = d.{core::num::clamp}(z, n);
-  core::num d_n_i = d.{core::num::clamp}(n, i);
-  core::num d_i_i = d.{core::num::clamp}(i, i);
-  core::num d_d_i = d.{core::num::clamp}(d, i);
-  core::num d_x_i = d.{core::num::clamp}(x, i);
-  core::num d_y_i = d.{core::num::clamp}(y, i);
-  core::num d_z_i = d.{core::num::clamp}(z, i);
-  core::num d_n_d = d.{core::num::clamp}(n, d);
-  core::num d_i_d = d.{core::num::clamp}(i, d);
-  core::double d_d_d = d.{core::num::clamp}(d, d);
-  core::num d_x_d = d.{core::num::clamp}(x, d);
-  core::num d_y_d = d.{core::num::clamp}(y, d);
-  core::double d_z_d = d.{core::num::clamp}(z, d);
-  core::num d_n_x = d.{core::num::clamp}(n, x);
-  core::num d_i_x = d.{core::num::clamp}(i, x);
-  core::num d_d_x = d.{core::num::clamp}(d, x);
-  core::num d_x_x = d.{core::num::clamp}(x, x);
-  core::num d_y_x = d.{core::num::clamp}(y, x);
-  core::num d_z_x = d.{core::num::clamp}(z, x);
-  core::num d_n_y = d.{core::num::clamp}(n, y);
-  core::num d_i_y = d.{core::num::clamp}(i, y);
-  core::num d_d_y = d.{core::num::clamp}(d, y);
-  core::num d_x_y = d.{core::num::clamp}(x, y);
-  core::num d_y_y = d.{core::num::clamp}(y, y);
-  core::num d_z_y = d.{core::num::clamp}(z, y);
-  core::num d_n_z = d.{core::num::clamp}(n, z);
-  core::num d_i_z = d.{core::num::clamp}(i, z);
-  core::double d_d_z = d.{core::num::clamp}(d, z);
-  core::num d_x_z = d.{core::num::clamp}(x, z);
-  core::num d_y_z = d.{core::num::clamp}(y, z);
-  core::double d_z_z = d.{core::num::clamp}(z, z);
-  core::num x_n_n = x.{core::num::clamp}(n, n);
-  core::num x_i_n = x.{core::num::clamp}(i, n);
-  core::num x_d_n = x.{core::num::clamp}(d, n);
-  core::num x_x_n = x.{core::num::clamp}(x, n);
-  core::num x_y_n = x.{core::num::clamp}(y, n);
-  core::num x_z_n = x.{core::num::clamp}(z, n);
-  core::num x_n_i = x.{core::num::clamp}(n, i);
-  core::num x_i_i = x.{core::num::clamp}(i, i);
-  core::num x_d_i = x.{core::num::clamp}(d, i);
-  core::num x_x_i = x.{core::num::clamp}(x, i);
-  core::num x_y_i = x.{core::num::clamp}(y, i);
-  core::num x_z_i = x.{core::num::clamp}(z, i);
-  core::num x_n_d = x.{core::num::clamp}(n, d);
-  core::num x_i_d = x.{core::num::clamp}(i, d);
-  core::num x_d_d = x.{core::num::clamp}(d, d);
-  core::num x_x_d = x.{core::num::clamp}(x, d);
-  core::num x_y_d = x.{core::num::clamp}(y, d);
-  core::num x_z_d = x.{core::num::clamp}(z, d);
-  core::num x_n_x = x.{core::num::clamp}(n, x);
-  core::num x_i_x = x.{core::num::clamp}(i, x);
-  core::num x_d_x = x.{core::num::clamp}(d, x);
-  core::num x_x_x = x.{core::num::clamp}(x, x);
-  core::num x_y_x = x.{core::num::clamp}(y, x);
-  core::num x_z_x = x.{core::num::clamp}(z, x);
-  core::num x_n_y = x.{core::num::clamp}(n, y);
-  core::num x_i_y = x.{core::num::clamp}(i, y);
-  core::num x_d_y = x.{core::num::clamp}(d, y);
-  core::num x_x_y = x.{core::num::clamp}(x, y);
-  core::num x_y_y = x.{core::num::clamp}(y, y);
-  core::num x_z_y = x.{core::num::clamp}(z, y);
-  core::num x_n_z = x.{core::num::clamp}(n, z);
-  core::num x_i_z = x.{core::num::clamp}(i, z);
-  core::num x_d_z = x.{core::num::clamp}(d, z);
-  core::num x_x_z = x.{core::num::clamp}(x, z);
-  core::num x_y_z = x.{core::num::clamp}(y, z);
-  core::num x_z_z = x.{core::num::clamp}(z, z);
-  core::num y_n_n = y.{core::num::clamp}(n, n);
-  core::num y_i_n = y.{core::num::clamp}(i, n);
-  core::num y_d_n = y.{core::num::clamp}(d, n);
-  core::num y_x_n = y.{core::num::clamp}(x, n);
-  core::num y_y_n = y.{core::num::clamp}(y, n);
-  core::num y_z_n = y.{core::num::clamp}(z, n);
-  core::num y_n_i = y.{core::num::clamp}(n, i);
-  core::int y_i_i = y.{core::num::clamp}(i, i);
-  core::num y_d_i = y.{core::num::clamp}(d, i);
-  core::num y_x_i = y.{core::num::clamp}(x, i);
-  core::int y_y_i = y.{core::num::clamp}(y, i);
-  core::num y_z_i = y.{core::num::clamp}(z, i);
-  core::num y_n_d = y.{core::num::clamp}(n, d);
-  core::num y_i_d = y.{core::num::clamp}(i, d);
-  core::num y_d_d = y.{core::num::clamp}(d, d);
-  core::num y_x_d = y.{core::num::clamp}(x, d);
-  core::num y_y_d = y.{core::num::clamp}(y, d);
-  core::num y_z_d = y.{core::num::clamp}(z, d);
-  core::num y_n_x = y.{core::num::clamp}(n, x);
-  core::num y_i_x = y.{core::num::clamp}(i, x);
-  core::num y_d_x = y.{core::num::clamp}(d, x);
-  core::num y_x_x = y.{core::num::clamp}(x, x);
-  core::num y_y_x = y.{core::num::clamp}(y, x);
-  core::num y_z_x = y.{core::num::clamp}(z, x);
-  core::num y_n_y = y.{core::num::clamp}(n, y);
-  core::int y_i_y = y.{core::num::clamp}(i, y);
-  core::num y_d_y = y.{core::num::clamp}(d, y);
-  core::num y_x_y = y.{core::num::clamp}(x, y);
-  core::int y_y_y = y.{core::num::clamp}(y, y);
-  core::num y_z_y = y.{core::num::clamp}(z, y);
-  core::num y_n_z = y.{core::num::clamp}(n, z);
-  core::num y_i_z = y.{core::num::clamp}(i, z);
-  core::num y_d_z = y.{core::num::clamp}(d, z);
-  core::num y_x_z = y.{core::num::clamp}(x, z);
-  core::num y_y_z = y.{core::num::clamp}(y, z);
-  core::num y_z_z = y.{core::num::clamp}(z, z);
-  core::num z_n_n = z.{core::num::clamp}(n, n);
-  core::num z_i_n = z.{core::num::clamp}(i, n);
-  core::num z_d_n = z.{core::num::clamp}(d, n);
-  core::num z_x_n = z.{core::num::clamp}(x, n);
-  core::num z_y_n = z.{core::num::clamp}(y, n);
-  core::num z_z_n = z.{core::num::clamp}(z, n);
-  core::num z_n_i = z.{core::num::clamp}(n, i);
-  core::num z_i_i = z.{core::num::clamp}(i, i);
-  core::num z_d_i = z.{core::num::clamp}(d, i);
-  core::num z_x_i = z.{core::num::clamp}(x, i);
-  core::num z_y_i = z.{core::num::clamp}(y, i);
-  core::num z_z_i = z.{core::num::clamp}(z, i);
-  core::num z_n_d = z.{core::num::clamp}(n, d);
-  core::num z_i_d = z.{core::num::clamp}(i, d);
-  core::double z_d_d = z.{core::num::clamp}(d, d);
-  core::num z_x_d = z.{core::num::clamp}(x, d);
-  core::num z_y_d = z.{core::num::clamp}(y, d);
-  core::double z_z_d = z.{core::num::clamp}(z, d);
-  core::num z_n_x = z.{core::num::clamp}(n, x);
-  core::num z_i_x = z.{core::num::clamp}(i, x);
-  core::num z_d_x = z.{core::num::clamp}(d, x);
-  core::num z_x_x = z.{core::num::clamp}(x, x);
-  core::num z_y_x = z.{core::num::clamp}(y, x);
-  core::num z_z_x = z.{core::num::clamp}(z, x);
-  core::num z_n_y = z.{core::num::clamp}(n, y);
-  core::num z_i_y = z.{core::num::clamp}(i, y);
-  core::num z_d_y = z.{core::num::clamp}(d, y);
-  core::num z_x_y = z.{core::num::clamp}(x, y);
-  core::num z_y_y = z.{core::num::clamp}(y, y);
-  core::num z_z_y = z.{core::num::clamp}(z, y);
-  core::num z_n_z = z.{core::num::clamp}(n, z);
-  core::num z_i_z = z.{core::num::clamp}(i, z);
-  core::double z_d_z = z.{core::num::clamp}(d, z);
-  core::num z_x_z = z.{core::num::clamp}(x, z);
-  core::num z_y_z = z.{core::num::clamp}(y, z);
-  core::double z_z_z = z.{core::num::clamp}(z, z);
+  core::num n_n_n = n.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num n_i_n = n.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num n_d_n = n.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num n_x_n = n.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num n_y_n = n.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num n_z_n = n.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num n_n_i = n.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num n_i_i = n.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num n_d_i = n.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num n_x_i = n.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num n_y_i = n.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num n_z_i = n.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num n_n_d = n.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num n_i_d = n.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num n_d_d = n.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num n_x_d = n.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num n_y_d = n.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num n_z_d = n.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num n_n_x = n.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num n_i_x = n.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num n_d_x = n.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num n_x_x = n.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num n_y_x = n.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num n_z_x = n.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num n_n_y = n.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num n_i_y = n.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num n_d_y = n.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num n_x_y = n.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num n_y_y = n.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num n_z_y = n.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num n_n_z = n.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num n_i_z = n.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num n_d_z = n.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num n_x_z = n.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num n_y_z = n.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num n_z_z = n.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num i_n_n = i.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num i_i_n = i.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num i_d_n = i.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num i_x_n = i.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num i_y_n = i.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num i_z_n = i.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num i_n_i = i.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::int i_i_i = i.{core::num::clamp}(i, i){(core::num, core::num) → core::int};
+  core::num i_d_i = i.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num i_x_i = i.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::int i_y_i = i.{core::num::clamp}(y, i){(core::num, core::num) → core::int};
+  core::num i_z_i = i.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num i_n_d = i.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num i_i_d = i.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num i_d_d = i.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num i_x_d = i.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num i_y_d = i.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num i_z_d = i.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num i_n_x = i.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num i_i_x = i.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num i_d_x = i.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num i_x_x = i.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num i_y_x = i.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num i_z_x = i.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num i_n_y = i.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::int i_i_y = i.{core::num::clamp}(i, y){(core::num, core::num) → core::int};
+  core::num i_d_y = i.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num i_x_y = i.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::int i_y_y = i.{core::num::clamp}(y, y){(core::num, core::num) → core::int};
+  core::num i_z_y = i.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num i_n_z = i.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num i_i_z = i.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num i_d_z = i.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num i_x_z = i.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num i_y_z = i.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num i_z_z = i.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num d_n_n = d.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num d_i_n = d.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num d_d_n = d.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num d_x_n = d.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num d_y_n = d.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num d_z_n = d.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num d_n_i = d.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num d_i_i = d.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num d_d_i = d.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num d_x_i = d.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num d_y_i = d.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num d_z_i = d.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num d_n_d = d.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num d_i_d = d.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::double d_d_d = d.{core::num::clamp}(d, d){(core::num, core::num) → core::double};
+  core::num d_x_d = d.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num d_y_d = d.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::double d_z_d = d.{core::num::clamp}(z, d){(core::num, core::num) → core::double};
+  core::num d_n_x = d.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num d_i_x = d.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num d_d_x = d.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num d_x_x = d.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num d_y_x = d.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num d_z_x = d.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num d_n_y = d.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num d_i_y = d.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num d_d_y = d.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num d_x_y = d.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num d_y_y = d.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num d_z_y = d.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num d_n_z = d.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num d_i_z = d.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::double d_d_z = d.{core::num::clamp}(d, z){(core::num, core::num) → core::double};
+  core::num d_x_z = d.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num d_y_z = d.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::double d_z_z = d.{core::num::clamp}(z, z){(core::num, core::num) → core::double};
+  core::num x_n_n = x.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num x_i_n = x.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num x_d_n = x.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num x_x_n = x.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num x_y_n = x.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num x_z_n = x.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num x_n_i = x.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num x_i_i = x.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num x_d_i = x.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num x_x_i = x.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num x_y_i = x.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num x_z_i = x.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num x_n_d = x.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num x_i_d = x.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num x_d_d = x.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num x_x_d = x.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num x_y_d = x.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num x_z_d = x.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num x_n_x = x.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num x_i_x = x.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num x_d_x = x.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num x_x_x = x.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num x_y_x = x.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num x_z_x = x.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num x_n_y = x.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num x_i_y = x.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num x_d_y = x.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num x_x_y = x.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num x_y_y = x.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num x_z_y = x.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num x_n_z = x.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num x_i_z = x.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num x_d_z = x.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num x_x_z = x.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num x_y_z = x.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num x_z_z = x.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num y_n_n = y.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num y_i_n = y.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num y_d_n = y.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num y_x_n = y.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num y_y_n = y.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num y_z_n = y.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num y_n_i = y.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::int y_i_i = y.{core::num::clamp}(i, i){(core::num, core::num) → core::int};
+  core::num y_d_i = y.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num y_x_i = y.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::int y_y_i = y.{core::num::clamp}(y, i){(core::num, core::num) → core::int};
+  core::num y_z_i = y.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num y_n_d = y.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num y_i_d = y.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num y_d_d = y.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num y_x_d = y.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num y_y_d = y.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num y_z_d = y.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num y_n_x = y.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num y_i_x = y.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num y_d_x = y.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num y_x_x = y.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num y_y_x = y.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num y_z_x = y.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num y_n_y = y.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::int y_i_y = y.{core::num::clamp}(i, y){(core::num, core::num) → core::int};
+  core::num y_d_y = y.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num y_x_y = y.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::int y_y_y = y.{core::num::clamp}(y, y){(core::num, core::num) → core::int};
+  core::num y_z_y = y.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num y_n_z = y.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num y_i_z = y.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num y_d_z = y.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num y_x_z = y.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num y_y_z = y.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num y_z_z = y.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num z_n_n = z.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num z_i_n = z.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num z_d_n = z.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num z_x_n = z.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num z_y_n = z.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num z_z_n = z.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num z_n_i = z.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num z_i_i = z.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num z_d_i = z.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num z_x_i = z.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num z_y_i = z.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num z_z_i = z.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num z_n_d = z.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num z_i_d = z.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::double z_d_d = z.{core::num::clamp}(d, d){(core::num, core::num) → core::double};
+  core::num z_x_d = z.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num z_y_d = z.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::double z_z_d = z.{core::num::clamp}(z, d){(core::num, core::num) → core::double};
+  core::num z_n_x = z.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num z_i_x = z.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num z_d_x = z.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num z_x_x = z.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num z_y_x = z.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num z_z_x = z.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num z_n_y = z.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num z_i_y = z.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num z_d_y = z.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num z_x_y = z.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num z_y_y = z.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num z_z_y = z.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num z_n_z = z.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num z_i_z = z.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::double z_d_z = z.{core::num::clamp}(d, z){(core::num, core::num) → core::double};
+  core::num z_x_z = z.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num z_y_z = z.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::double z_z_z = z.{core::num::clamp}(z, z){(core::num, core::num) → core::double};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/numbers.dart.weak.expect b/pkg/front_end/testcases/nnbd/numbers.dart.weak.expect
index d52aac2..babfb04 100644
--- a/pkg/front_end/testcases/nnbd/numbers.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/numbers.dart.weak.expect
@@ -3,411 +3,411 @@
 import "dart:core" as core;
 
 static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
-  core::num n_n = n.{core::num::+}(n);
-  core::num n_i = n.{core::num::+}(i);
-  core::double n_d = n.{core::num::+}(d);
-  core::num n_x = n.{core::num::+}(x);
-  core::num n_y = n.{core::num::+}(y);
-  core::double n_z = n.{core::num::+}(z);
-  core::num i_n = i.{core::num::+}(n);
-  core::int i_i = i.{core::num::+}(i);
-  core::double i_d = i.{core::num::+}(d);
-  core::num i_x = i.{core::num::+}(x);
-  core::int i_y = i.{core::num::+}(y);
-  core::double i_z = i.{core::num::+}(z);
-  core::double d_n = d.{core::double::+}(n);
-  core::double d_i = d.{core::double::+}(i);
-  core::double d_d = d.{core::double::+}(d);
-  core::double d_x = d.{core::double::+}(x);
-  core::double d_y = d.{core::double::+}(y);
-  core::double d_z = d.{core::double::+}(z);
-  core::num x_n = x.{core::num::+}(n);
-  core::num x_i = x.{core::num::+}(i);
-  core::double x_d = x.{core::num::+}(d);
-  core::num x_x = x.{core::num::+}(x);
-  core::num x_y = x.{core::num::+}(y);
-  core::double x_z = x.{core::num::+}(z);
-  core::num y_n = y.{core::num::+}(n);
-  core::int y_i = y.{core::num::+}(i);
-  core::double y_d = y.{core::num::+}(d);
-  core::num y_x = y.{core::num::+}(x);
-  core::int y_y = y.{core::num::+}(y);
-  core::double y_z = y.{core::num::+}(z);
-  core::double z_n = z.{core::double::+}(n);
-  core::double z_i = z.{core::double::+}(i);
-  core::double z_d = z.{core::double::+}(d);
-  core::double z_x = z.{core::double::+}(x);
-  core::double z_y = z.{core::double::+}(y);
-  core::double z_z = z.{core::double::+}(z);
+  core::num n_n = n.{core::num::+}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::+}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::+}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::+}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::+}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::+}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::+}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::+}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::+}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::+}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::+}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::+}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::+}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::+}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::+}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::+}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::+}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::+}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::+}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::+}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::+}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::+}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::+}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::+}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::+}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::+}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::+}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::+}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::+}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::+}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::+}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::+}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::+}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::+}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::+}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::+}(z){(core::num) → core::double};
 }
 static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
-  core::num n_n = n.{core::num::-}(n);
-  core::num n_i = n.{core::num::-}(i);
-  core::double n_d = n.{core::num::-}(d);
-  core::num n_x = n.{core::num::-}(x);
-  core::num n_y = n.{core::num::-}(y);
-  core::double n_z = n.{core::num::-}(z);
-  core::num i_n = i.{core::num::-}(n);
-  core::int i_i = i.{core::num::-}(i);
-  core::double i_d = i.{core::num::-}(d);
-  core::num i_x = i.{core::num::-}(x);
-  core::int i_y = i.{core::num::-}(y);
-  core::double i_z = i.{core::num::-}(z);
-  core::double d_n = d.{core::double::-}(n);
-  core::double d_i = d.{core::double::-}(i);
-  core::double d_d = d.{core::double::-}(d);
-  core::double d_x = d.{core::double::-}(x);
-  core::double d_y = d.{core::double::-}(y);
-  core::double d_z = d.{core::double::-}(z);
-  core::num x_n = x.{core::num::-}(n);
-  core::num x_i = x.{core::num::-}(i);
-  core::double x_d = x.{core::num::-}(d);
-  core::num x_x = x.{core::num::-}(x);
-  core::num x_y = x.{core::num::-}(y);
-  core::double x_z = x.{core::num::-}(z);
-  core::num y_n = y.{core::num::-}(n);
-  core::int y_i = y.{core::num::-}(i);
-  core::double y_d = y.{core::num::-}(d);
-  core::num y_x = y.{core::num::-}(x);
-  core::int y_y = y.{core::num::-}(y);
-  core::double y_z = y.{core::num::-}(z);
-  core::double z_n = z.{core::double::-}(n);
-  core::double z_i = z.{core::double::-}(i);
-  core::double z_d = z.{core::double::-}(d);
-  core::double z_x = z.{core::double::-}(x);
-  core::double z_y = z.{core::double::-}(y);
-  core::double z_z = z.{core::double::-}(z);
+  core::num n_n = n.{core::num::-}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::-}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::-}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::-}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::-}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::-}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::-}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::-}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::-}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::-}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::-}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::-}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::-}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::-}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::-}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::-}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::-}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::-}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::-}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::-}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::-}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::-}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::-}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::-}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::-}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::-}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::-}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::-}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::-}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::-}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::-}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::-}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::-}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::-}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::-}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::-}(z){(core::num) → core::double};
 }
 static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
-  core::num n_n = n.{core::num::*}(n);
-  core::num n_i = n.{core::num::*}(i);
-  core::double n_d = n.{core::num::*}(d);
-  core::num n_x = n.{core::num::*}(x);
-  core::num n_y = n.{core::num::*}(y);
-  core::double n_z = n.{core::num::*}(z);
-  core::num i_n = i.{core::num::*}(n);
-  core::int i_i = i.{core::num::*}(i);
-  core::double i_d = i.{core::num::*}(d);
-  core::num i_x = i.{core::num::*}(x);
-  core::int i_y = i.{core::num::*}(y);
-  core::double i_z = i.{core::num::*}(z);
-  core::double d_n = d.{core::double::*}(n);
-  core::double d_i = d.{core::double::*}(i);
-  core::double d_d = d.{core::double::*}(d);
-  core::double d_x = d.{core::double::*}(x);
-  core::double d_y = d.{core::double::*}(y);
-  core::double d_z = d.{core::double::*}(z);
-  core::num x_n = x.{core::num::*}(n);
-  core::num x_i = x.{core::num::*}(i);
-  core::double x_d = x.{core::num::*}(d);
-  core::num x_x = x.{core::num::*}(x);
-  core::num x_y = x.{core::num::*}(y);
-  core::double x_z = x.{core::num::*}(z);
-  core::num y_n = y.{core::num::*}(n);
-  core::int y_i = y.{core::num::*}(i);
-  core::double y_d = y.{core::num::*}(d);
-  core::num y_x = y.{core::num::*}(x);
-  core::int y_y = y.{core::num::*}(y);
-  core::double y_z = y.{core::num::*}(z);
-  core::double z_n = z.{core::double::*}(n);
-  core::double z_i = z.{core::double::*}(i);
-  core::double z_d = z.{core::double::*}(d);
-  core::double z_x = z.{core::double::*}(x);
-  core::double z_y = z.{core::double::*}(y);
-  core::double z_z = z.{core::double::*}(z);
+  core::num n_n = n.{core::num::*}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::*}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::*}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::*}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::*}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::*}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::*}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::*}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::*}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::*}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::*}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::*}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::*}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::*}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::*}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::*}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::*}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::*}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::*}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::*}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::*}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::*}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::*}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::*}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::*}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::*}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::*}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::*}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::*}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::*}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::*}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::*}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::*}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::*}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::*}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::*}(z){(core::num) → core::double};
 }
 static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
-  core::num n_n = n.{core::num::%}(n);
-  core::num n_i = n.{core::num::%}(i);
-  core::double n_d = n.{core::num::%}(d);
-  core::num n_x = n.{core::num::%}(x);
-  core::num n_y = n.{core::num::%}(y);
-  core::double n_z = n.{core::num::%}(z);
-  core::num i_n = i.{core::num::%}(n);
-  core::int i_i = i.{core::num::%}(i);
-  core::double i_d = i.{core::num::%}(d);
-  core::num i_x = i.{core::num::%}(x);
-  core::int i_y = i.{core::num::%}(y);
-  core::double i_z = i.{core::num::%}(z);
-  core::double d_n = d.{core::double::%}(n);
-  core::double d_i = d.{core::double::%}(i);
-  core::double d_d = d.{core::double::%}(d);
-  core::double d_x = d.{core::double::%}(x);
-  core::double d_y = d.{core::double::%}(y);
-  core::double d_z = d.{core::double::%}(z);
-  core::num x_n = x.{core::num::%}(n);
-  core::num x_i = x.{core::num::%}(i);
-  core::double x_d = x.{core::num::%}(d);
-  core::num x_x = x.{core::num::%}(x);
-  core::num x_y = x.{core::num::%}(y);
-  core::double x_z = x.{core::num::%}(z);
-  core::num y_n = y.{core::num::%}(n);
-  core::int y_i = y.{core::num::%}(i);
-  core::double y_d = y.{core::num::%}(d);
-  core::num y_x = y.{core::num::%}(x);
-  core::int y_y = y.{core::num::%}(y);
-  core::double y_z = y.{core::num::%}(z);
-  core::double z_n = z.{core::double::%}(n);
-  core::double z_i = z.{core::double::%}(i);
-  core::double z_d = z.{core::double::%}(d);
-  core::double z_x = z.{core::double::%}(x);
-  core::double z_y = z.{core::double::%}(y);
-  core::double z_z = z.{core::double::%}(z);
+  core::num n_n = n.{core::num::%}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::%}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::%}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::%}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::%}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::%}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::%}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::%}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::%}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::%}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::%}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::%}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::%}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::%}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::%}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::%}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::%}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::%}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::%}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::%}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::%}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::%}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::%}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::%}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::%}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::%}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::%}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::%}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::%}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::%}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::%}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::%}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::%}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::%}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::%}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::%}(z){(core::num) → core::double};
 }
 static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
-  core::num n_n = n.{core::num::remainder}(n);
-  core::num n_i = n.{core::num::remainder}(i);
-  core::double n_d = n.{core::num::remainder}(d);
-  core::num n_x = n.{core::num::remainder}(x);
-  core::num n_y = n.{core::num::remainder}(y);
-  core::double n_z = n.{core::num::remainder}(z);
-  core::num i_n = i.{core::num::remainder}(n);
-  core::int i_i = i.{core::num::remainder}(i);
-  core::double i_d = i.{core::num::remainder}(d);
-  core::num i_x = i.{core::num::remainder}(x);
-  core::int i_y = i.{core::num::remainder}(y);
-  core::double i_z = i.{core::num::remainder}(z);
-  core::double d_n = d.{core::double::remainder}(n);
-  core::double d_i = d.{core::double::remainder}(i);
-  core::double d_d = d.{core::double::remainder}(d);
-  core::double d_x = d.{core::double::remainder}(x);
-  core::double d_y = d.{core::double::remainder}(y);
-  core::double d_z = d.{core::double::remainder}(z);
-  core::num x_n = x.{core::num::remainder}(n);
-  core::num x_i = x.{core::num::remainder}(i);
-  core::double x_d = x.{core::num::remainder}(d);
-  core::num x_x = x.{core::num::remainder}(x);
-  core::num x_y = x.{core::num::remainder}(y);
-  core::double x_z = x.{core::num::remainder}(z);
-  core::num y_n = y.{core::num::remainder}(n);
-  core::int y_i = y.{core::num::remainder}(i);
-  core::double y_d = y.{core::num::remainder}(d);
-  core::num y_x = y.{core::num::remainder}(x);
-  core::int y_y = y.{core::num::remainder}(y);
-  core::double y_z = y.{core::num::remainder}(z);
-  core::double z_n = z.{core::double::remainder}(n);
-  core::double z_i = z.{core::double::remainder}(i);
-  core::double z_d = z.{core::double::remainder}(d);
-  core::double z_x = z.{core::double::remainder}(x);
-  core::double z_y = z.{core::double::remainder}(y);
-  core::double z_z = z.{core::double::remainder}(z);
+  core::num n_n = n.{core::num::remainder}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::remainder}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::remainder}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::remainder}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::remainder}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::remainder}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::remainder}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::remainder}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::remainder}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::remainder}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::remainder}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::remainder}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::remainder}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::remainder}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::remainder}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::remainder}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::remainder}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::remainder}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::remainder}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::remainder}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::remainder}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::remainder}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::remainder}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::remainder}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::remainder}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::remainder}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::remainder}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::remainder}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::remainder}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::remainder}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::remainder}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::remainder}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::remainder}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::remainder}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::remainder}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::remainder}(z){(core::num) → core::double};
 }
 static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
-  core::num n_n_n = n.{core::num::clamp}(n, n);
-  core::num n_i_n = n.{core::num::clamp}(i, n);
-  core::num n_d_n = n.{core::num::clamp}(d, n);
-  core::num n_x_n = n.{core::num::clamp}(x, n);
-  core::num n_y_n = n.{core::num::clamp}(y, n);
-  core::num n_z_n = n.{core::num::clamp}(z, n);
-  core::num n_n_i = n.{core::num::clamp}(n, i);
-  core::num n_i_i = n.{core::num::clamp}(i, i);
-  core::num n_d_i = n.{core::num::clamp}(d, i);
-  core::num n_x_i = n.{core::num::clamp}(x, i);
-  core::num n_y_i = n.{core::num::clamp}(y, i);
-  core::num n_z_i = n.{core::num::clamp}(z, i);
-  core::num n_n_d = n.{core::num::clamp}(n, d);
-  core::num n_i_d = n.{core::num::clamp}(i, d);
-  core::num n_d_d = n.{core::num::clamp}(d, d);
-  core::num n_x_d = n.{core::num::clamp}(x, d);
-  core::num n_y_d = n.{core::num::clamp}(y, d);
-  core::num n_z_d = n.{core::num::clamp}(z, d);
-  core::num n_n_x = n.{core::num::clamp}(n, x);
-  core::num n_i_x = n.{core::num::clamp}(i, x);
-  core::num n_d_x = n.{core::num::clamp}(d, x);
-  core::num n_x_x = n.{core::num::clamp}(x, x);
-  core::num n_y_x = n.{core::num::clamp}(y, x);
-  core::num n_z_x = n.{core::num::clamp}(z, x);
-  core::num n_n_y = n.{core::num::clamp}(n, y);
-  core::num n_i_y = n.{core::num::clamp}(i, y);
-  core::num n_d_y = n.{core::num::clamp}(d, y);
-  core::num n_x_y = n.{core::num::clamp}(x, y);
-  core::num n_y_y = n.{core::num::clamp}(y, y);
-  core::num n_z_y = n.{core::num::clamp}(z, y);
-  core::num n_n_z = n.{core::num::clamp}(n, z);
-  core::num n_i_z = n.{core::num::clamp}(i, z);
-  core::num n_d_z = n.{core::num::clamp}(d, z);
-  core::num n_x_z = n.{core::num::clamp}(x, z);
-  core::num n_y_z = n.{core::num::clamp}(y, z);
-  core::num n_z_z = n.{core::num::clamp}(z, z);
-  core::num i_n_n = i.{core::num::clamp}(n, n);
-  core::num i_i_n = i.{core::num::clamp}(i, n);
-  core::num i_d_n = i.{core::num::clamp}(d, n);
-  core::num i_x_n = i.{core::num::clamp}(x, n);
-  core::num i_y_n = i.{core::num::clamp}(y, n);
-  core::num i_z_n = i.{core::num::clamp}(z, n);
-  core::num i_n_i = i.{core::num::clamp}(n, i);
-  core::int i_i_i = i.{core::num::clamp}(i, i);
-  core::num i_d_i = i.{core::num::clamp}(d, i);
-  core::num i_x_i = i.{core::num::clamp}(x, i);
-  core::int i_y_i = i.{core::num::clamp}(y, i);
-  core::num i_z_i = i.{core::num::clamp}(z, i);
-  core::num i_n_d = i.{core::num::clamp}(n, d);
-  core::num i_i_d = i.{core::num::clamp}(i, d);
-  core::num i_d_d = i.{core::num::clamp}(d, d);
-  core::num i_x_d = i.{core::num::clamp}(x, d);
-  core::num i_y_d = i.{core::num::clamp}(y, d);
-  core::num i_z_d = i.{core::num::clamp}(z, d);
-  core::num i_n_x = i.{core::num::clamp}(n, x);
-  core::num i_i_x = i.{core::num::clamp}(i, x);
-  core::num i_d_x = i.{core::num::clamp}(d, x);
-  core::num i_x_x = i.{core::num::clamp}(x, x);
-  core::num i_y_x = i.{core::num::clamp}(y, x);
-  core::num i_z_x = i.{core::num::clamp}(z, x);
-  core::num i_n_y = i.{core::num::clamp}(n, y);
-  core::int i_i_y = i.{core::num::clamp}(i, y);
-  core::num i_d_y = i.{core::num::clamp}(d, y);
-  core::num i_x_y = i.{core::num::clamp}(x, y);
-  core::int i_y_y = i.{core::num::clamp}(y, y);
-  core::num i_z_y = i.{core::num::clamp}(z, y);
-  core::num i_n_z = i.{core::num::clamp}(n, z);
-  core::num i_i_z = i.{core::num::clamp}(i, z);
-  core::num i_d_z = i.{core::num::clamp}(d, z);
-  core::num i_x_z = i.{core::num::clamp}(x, z);
-  core::num i_y_z = i.{core::num::clamp}(y, z);
-  core::num i_z_z = i.{core::num::clamp}(z, z);
-  core::num d_n_n = d.{core::num::clamp}(n, n);
-  core::num d_i_n = d.{core::num::clamp}(i, n);
-  core::num d_d_n = d.{core::num::clamp}(d, n);
-  core::num d_x_n = d.{core::num::clamp}(x, n);
-  core::num d_y_n = d.{core::num::clamp}(y, n);
-  core::num d_z_n = d.{core::num::clamp}(z, n);
-  core::num d_n_i = d.{core::num::clamp}(n, i);
-  core::num d_i_i = d.{core::num::clamp}(i, i);
-  core::num d_d_i = d.{core::num::clamp}(d, i);
-  core::num d_x_i = d.{core::num::clamp}(x, i);
-  core::num d_y_i = d.{core::num::clamp}(y, i);
-  core::num d_z_i = d.{core::num::clamp}(z, i);
-  core::num d_n_d = d.{core::num::clamp}(n, d);
-  core::num d_i_d = d.{core::num::clamp}(i, d);
-  core::double d_d_d = d.{core::num::clamp}(d, d);
-  core::num d_x_d = d.{core::num::clamp}(x, d);
-  core::num d_y_d = d.{core::num::clamp}(y, d);
-  core::double d_z_d = d.{core::num::clamp}(z, d);
-  core::num d_n_x = d.{core::num::clamp}(n, x);
-  core::num d_i_x = d.{core::num::clamp}(i, x);
-  core::num d_d_x = d.{core::num::clamp}(d, x);
-  core::num d_x_x = d.{core::num::clamp}(x, x);
-  core::num d_y_x = d.{core::num::clamp}(y, x);
-  core::num d_z_x = d.{core::num::clamp}(z, x);
-  core::num d_n_y = d.{core::num::clamp}(n, y);
-  core::num d_i_y = d.{core::num::clamp}(i, y);
-  core::num d_d_y = d.{core::num::clamp}(d, y);
-  core::num d_x_y = d.{core::num::clamp}(x, y);
-  core::num d_y_y = d.{core::num::clamp}(y, y);
-  core::num d_z_y = d.{core::num::clamp}(z, y);
-  core::num d_n_z = d.{core::num::clamp}(n, z);
-  core::num d_i_z = d.{core::num::clamp}(i, z);
-  core::double d_d_z = d.{core::num::clamp}(d, z);
-  core::num d_x_z = d.{core::num::clamp}(x, z);
-  core::num d_y_z = d.{core::num::clamp}(y, z);
-  core::double d_z_z = d.{core::num::clamp}(z, z);
-  core::num x_n_n = x.{core::num::clamp}(n, n);
-  core::num x_i_n = x.{core::num::clamp}(i, n);
-  core::num x_d_n = x.{core::num::clamp}(d, n);
-  core::num x_x_n = x.{core::num::clamp}(x, n);
-  core::num x_y_n = x.{core::num::clamp}(y, n);
-  core::num x_z_n = x.{core::num::clamp}(z, n);
-  core::num x_n_i = x.{core::num::clamp}(n, i);
-  core::num x_i_i = x.{core::num::clamp}(i, i);
-  core::num x_d_i = x.{core::num::clamp}(d, i);
-  core::num x_x_i = x.{core::num::clamp}(x, i);
-  core::num x_y_i = x.{core::num::clamp}(y, i);
-  core::num x_z_i = x.{core::num::clamp}(z, i);
-  core::num x_n_d = x.{core::num::clamp}(n, d);
-  core::num x_i_d = x.{core::num::clamp}(i, d);
-  core::num x_d_d = x.{core::num::clamp}(d, d);
-  core::num x_x_d = x.{core::num::clamp}(x, d);
-  core::num x_y_d = x.{core::num::clamp}(y, d);
-  core::num x_z_d = x.{core::num::clamp}(z, d);
-  core::num x_n_x = x.{core::num::clamp}(n, x);
-  core::num x_i_x = x.{core::num::clamp}(i, x);
-  core::num x_d_x = x.{core::num::clamp}(d, x);
-  core::num x_x_x = x.{core::num::clamp}(x, x);
-  core::num x_y_x = x.{core::num::clamp}(y, x);
-  core::num x_z_x = x.{core::num::clamp}(z, x);
-  core::num x_n_y = x.{core::num::clamp}(n, y);
-  core::num x_i_y = x.{core::num::clamp}(i, y);
-  core::num x_d_y = x.{core::num::clamp}(d, y);
-  core::num x_x_y = x.{core::num::clamp}(x, y);
-  core::num x_y_y = x.{core::num::clamp}(y, y);
-  core::num x_z_y = x.{core::num::clamp}(z, y);
-  core::num x_n_z = x.{core::num::clamp}(n, z);
-  core::num x_i_z = x.{core::num::clamp}(i, z);
-  core::num x_d_z = x.{core::num::clamp}(d, z);
-  core::num x_x_z = x.{core::num::clamp}(x, z);
-  core::num x_y_z = x.{core::num::clamp}(y, z);
-  core::num x_z_z = x.{core::num::clamp}(z, z);
-  core::num y_n_n = y.{core::num::clamp}(n, n);
-  core::num y_i_n = y.{core::num::clamp}(i, n);
-  core::num y_d_n = y.{core::num::clamp}(d, n);
-  core::num y_x_n = y.{core::num::clamp}(x, n);
-  core::num y_y_n = y.{core::num::clamp}(y, n);
-  core::num y_z_n = y.{core::num::clamp}(z, n);
-  core::num y_n_i = y.{core::num::clamp}(n, i);
-  core::int y_i_i = y.{core::num::clamp}(i, i);
-  core::num y_d_i = y.{core::num::clamp}(d, i);
-  core::num y_x_i = y.{core::num::clamp}(x, i);
-  core::int y_y_i = y.{core::num::clamp}(y, i);
-  core::num y_z_i = y.{core::num::clamp}(z, i);
-  core::num y_n_d = y.{core::num::clamp}(n, d);
-  core::num y_i_d = y.{core::num::clamp}(i, d);
-  core::num y_d_d = y.{core::num::clamp}(d, d);
-  core::num y_x_d = y.{core::num::clamp}(x, d);
-  core::num y_y_d = y.{core::num::clamp}(y, d);
-  core::num y_z_d = y.{core::num::clamp}(z, d);
-  core::num y_n_x = y.{core::num::clamp}(n, x);
-  core::num y_i_x = y.{core::num::clamp}(i, x);
-  core::num y_d_x = y.{core::num::clamp}(d, x);
-  core::num y_x_x = y.{core::num::clamp}(x, x);
-  core::num y_y_x = y.{core::num::clamp}(y, x);
-  core::num y_z_x = y.{core::num::clamp}(z, x);
-  core::num y_n_y = y.{core::num::clamp}(n, y);
-  core::int y_i_y = y.{core::num::clamp}(i, y);
-  core::num y_d_y = y.{core::num::clamp}(d, y);
-  core::num y_x_y = y.{core::num::clamp}(x, y);
-  core::int y_y_y = y.{core::num::clamp}(y, y);
-  core::num y_z_y = y.{core::num::clamp}(z, y);
-  core::num y_n_z = y.{core::num::clamp}(n, z);
-  core::num y_i_z = y.{core::num::clamp}(i, z);
-  core::num y_d_z = y.{core::num::clamp}(d, z);
-  core::num y_x_z = y.{core::num::clamp}(x, z);
-  core::num y_y_z = y.{core::num::clamp}(y, z);
-  core::num y_z_z = y.{core::num::clamp}(z, z);
-  core::num z_n_n = z.{core::num::clamp}(n, n);
-  core::num z_i_n = z.{core::num::clamp}(i, n);
-  core::num z_d_n = z.{core::num::clamp}(d, n);
-  core::num z_x_n = z.{core::num::clamp}(x, n);
-  core::num z_y_n = z.{core::num::clamp}(y, n);
-  core::num z_z_n = z.{core::num::clamp}(z, n);
-  core::num z_n_i = z.{core::num::clamp}(n, i);
-  core::num z_i_i = z.{core::num::clamp}(i, i);
-  core::num z_d_i = z.{core::num::clamp}(d, i);
-  core::num z_x_i = z.{core::num::clamp}(x, i);
-  core::num z_y_i = z.{core::num::clamp}(y, i);
-  core::num z_z_i = z.{core::num::clamp}(z, i);
-  core::num z_n_d = z.{core::num::clamp}(n, d);
-  core::num z_i_d = z.{core::num::clamp}(i, d);
-  core::double z_d_d = z.{core::num::clamp}(d, d);
-  core::num z_x_d = z.{core::num::clamp}(x, d);
-  core::num z_y_d = z.{core::num::clamp}(y, d);
-  core::double z_z_d = z.{core::num::clamp}(z, d);
-  core::num z_n_x = z.{core::num::clamp}(n, x);
-  core::num z_i_x = z.{core::num::clamp}(i, x);
-  core::num z_d_x = z.{core::num::clamp}(d, x);
-  core::num z_x_x = z.{core::num::clamp}(x, x);
-  core::num z_y_x = z.{core::num::clamp}(y, x);
-  core::num z_z_x = z.{core::num::clamp}(z, x);
-  core::num z_n_y = z.{core::num::clamp}(n, y);
-  core::num z_i_y = z.{core::num::clamp}(i, y);
-  core::num z_d_y = z.{core::num::clamp}(d, y);
-  core::num z_x_y = z.{core::num::clamp}(x, y);
-  core::num z_y_y = z.{core::num::clamp}(y, y);
-  core::num z_z_y = z.{core::num::clamp}(z, y);
-  core::num z_n_z = z.{core::num::clamp}(n, z);
-  core::num z_i_z = z.{core::num::clamp}(i, z);
-  core::double z_d_z = z.{core::num::clamp}(d, z);
-  core::num z_x_z = z.{core::num::clamp}(x, z);
-  core::num z_y_z = z.{core::num::clamp}(y, z);
-  core::double z_z_z = z.{core::num::clamp}(z, z);
+  core::num n_n_n = n.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num n_i_n = n.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num n_d_n = n.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num n_x_n = n.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num n_y_n = n.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num n_z_n = n.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num n_n_i = n.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num n_i_i = n.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num n_d_i = n.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num n_x_i = n.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num n_y_i = n.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num n_z_i = n.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num n_n_d = n.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num n_i_d = n.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num n_d_d = n.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num n_x_d = n.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num n_y_d = n.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num n_z_d = n.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num n_n_x = n.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num n_i_x = n.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num n_d_x = n.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num n_x_x = n.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num n_y_x = n.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num n_z_x = n.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num n_n_y = n.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num n_i_y = n.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num n_d_y = n.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num n_x_y = n.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num n_y_y = n.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num n_z_y = n.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num n_n_z = n.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num n_i_z = n.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num n_d_z = n.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num n_x_z = n.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num n_y_z = n.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num n_z_z = n.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num i_n_n = i.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num i_i_n = i.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num i_d_n = i.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num i_x_n = i.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num i_y_n = i.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num i_z_n = i.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num i_n_i = i.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::int i_i_i = i.{core::num::clamp}(i, i){(core::num, core::num) → core::int};
+  core::num i_d_i = i.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num i_x_i = i.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::int i_y_i = i.{core::num::clamp}(y, i){(core::num, core::num) → core::int};
+  core::num i_z_i = i.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num i_n_d = i.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num i_i_d = i.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num i_d_d = i.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num i_x_d = i.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num i_y_d = i.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num i_z_d = i.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num i_n_x = i.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num i_i_x = i.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num i_d_x = i.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num i_x_x = i.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num i_y_x = i.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num i_z_x = i.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num i_n_y = i.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::int i_i_y = i.{core::num::clamp}(i, y){(core::num, core::num) → core::int};
+  core::num i_d_y = i.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num i_x_y = i.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::int i_y_y = i.{core::num::clamp}(y, y){(core::num, core::num) → core::int};
+  core::num i_z_y = i.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num i_n_z = i.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num i_i_z = i.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num i_d_z = i.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num i_x_z = i.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num i_y_z = i.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num i_z_z = i.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num d_n_n = d.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num d_i_n = d.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num d_d_n = d.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num d_x_n = d.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num d_y_n = d.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num d_z_n = d.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num d_n_i = d.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num d_i_i = d.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num d_d_i = d.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num d_x_i = d.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num d_y_i = d.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num d_z_i = d.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num d_n_d = d.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num d_i_d = d.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::double d_d_d = d.{core::num::clamp}(d, d){(core::num, core::num) → core::double};
+  core::num d_x_d = d.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num d_y_d = d.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::double d_z_d = d.{core::num::clamp}(z, d){(core::num, core::num) → core::double};
+  core::num d_n_x = d.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num d_i_x = d.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num d_d_x = d.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num d_x_x = d.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num d_y_x = d.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num d_z_x = d.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num d_n_y = d.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num d_i_y = d.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num d_d_y = d.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num d_x_y = d.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num d_y_y = d.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num d_z_y = d.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num d_n_z = d.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num d_i_z = d.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::double d_d_z = d.{core::num::clamp}(d, z){(core::num, core::num) → core::double};
+  core::num d_x_z = d.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num d_y_z = d.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::double d_z_z = d.{core::num::clamp}(z, z){(core::num, core::num) → core::double};
+  core::num x_n_n = x.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num x_i_n = x.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num x_d_n = x.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num x_x_n = x.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num x_y_n = x.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num x_z_n = x.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num x_n_i = x.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num x_i_i = x.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num x_d_i = x.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num x_x_i = x.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num x_y_i = x.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num x_z_i = x.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num x_n_d = x.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num x_i_d = x.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num x_d_d = x.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num x_x_d = x.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num x_y_d = x.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num x_z_d = x.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num x_n_x = x.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num x_i_x = x.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num x_d_x = x.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num x_x_x = x.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num x_y_x = x.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num x_z_x = x.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num x_n_y = x.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num x_i_y = x.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num x_d_y = x.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num x_x_y = x.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num x_y_y = x.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num x_z_y = x.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num x_n_z = x.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num x_i_z = x.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num x_d_z = x.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num x_x_z = x.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num x_y_z = x.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num x_z_z = x.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num y_n_n = y.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num y_i_n = y.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num y_d_n = y.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num y_x_n = y.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num y_y_n = y.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num y_z_n = y.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num y_n_i = y.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::int y_i_i = y.{core::num::clamp}(i, i){(core::num, core::num) → core::int};
+  core::num y_d_i = y.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num y_x_i = y.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::int y_y_i = y.{core::num::clamp}(y, i){(core::num, core::num) → core::int};
+  core::num y_z_i = y.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num y_n_d = y.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num y_i_d = y.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num y_d_d = y.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num y_x_d = y.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num y_y_d = y.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num y_z_d = y.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num y_n_x = y.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num y_i_x = y.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num y_d_x = y.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num y_x_x = y.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num y_y_x = y.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num y_z_x = y.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num y_n_y = y.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::int y_i_y = y.{core::num::clamp}(i, y){(core::num, core::num) → core::int};
+  core::num y_d_y = y.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num y_x_y = y.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::int y_y_y = y.{core::num::clamp}(y, y){(core::num, core::num) → core::int};
+  core::num y_z_y = y.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num y_n_z = y.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num y_i_z = y.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num y_d_z = y.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num y_x_z = y.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num y_y_z = y.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num y_z_z = y.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num z_n_n = z.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num z_i_n = z.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num z_d_n = z.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num z_x_n = z.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num z_y_n = z.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num z_z_n = z.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num z_n_i = z.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num z_i_i = z.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num z_d_i = z.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num z_x_i = z.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num z_y_i = z.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num z_z_i = z.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num z_n_d = z.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num z_i_d = z.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::double z_d_d = z.{core::num::clamp}(d, d){(core::num, core::num) → core::double};
+  core::num z_x_d = z.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num z_y_d = z.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::double z_z_d = z.{core::num::clamp}(z, d){(core::num, core::num) → core::double};
+  core::num z_n_x = z.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num z_i_x = z.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num z_d_x = z.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num z_x_x = z.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num z_y_x = z.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num z_z_x = z.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num z_n_y = z.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num z_i_y = z.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num z_d_y = z.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num z_x_y = z.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num z_y_y = z.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num z_z_y = z.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num z_n_z = z.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num z_i_z = z.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::double z_d_z = z.{core::num::clamp}(d, z){(core::num, core::num) → core::double};
+  core::num z_x_z = z.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num z_y_z = z.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::double z_z_z = z.{core::num::clamp}(z, z){(core::num, core::num) → core::double};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/numbers.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/numbers.dart.weak.transformed.expect
index d52aac2..babfb04 100644
--- a/pkg/front_end/testcases/nnbd/numbers.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/numbers.dart.weak.transformed.expect
@@ -3,411 +3,411 @@
 import "dart:core" as core;
 
 static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
-  core::num n_n = n.{core::num::+}(n);
-  core::num n_i = n.{core::num::+}(i);
-  core::double n_d = n.{core::num::+}(d);
-  core::num n_x = n.{core::num::+}(x);
-  core::num n_y = n.{core::num::+}(y);
-  core::double n_z = n.{core::num::+}(z);
-  core::num i_n = i.{core::num::+}(n);
-  core::int i_i = i.{core::num::+}(i);
-  core::double i_d = i.{core::num::+}(d);
-  core::num i_x = i.{core::num::+}(x);
-  core::int i_y = i.{core::num::+}(y);
-  core::double i_z = i.{core::num::+}(z);
-  core::double d_n = d.{core::double::+}(n);
-  core::double d_i = d.{core::double::+}(i);
-  core::double d_d = d.{core::double::+}(d);
-  core::double d_x = d.{core::double::+}(x);
-  core::double d_y = d.{core::double::+}(y);
-  core::double d_z = d.{core::double::+}(z);
-  core::num x_n = x.{core::num::+}(n);
-  core::num x_i = x.{core::num::+}(i);
-  core::double x_d = x.{core::num::+}(d);
-  core::num x_x = x.{core::num::+}(x);
-  core::num x_y = x.{core::num::+}(y);
-  core::double x_z = x.{core::num::+}(z);
-  core::num y_n = y.{core::num::+}(n);
-  core::int y_i = y.{core::num::+}(i);
-  core::double y_d = y.{core::num::+}(d);
-  core::num y_x = y.{core::num::+}(x);
-  core::int y_y = y.{core::num::+}(y);
-  core::double y_z = y.{core::num::+}(z);
-  core::double z_n = z.{core::double::+}(n);
-  core::double z_i = z.{core::double::+}(i);
-  core::double z_d = z.{core::double::+}(d);
-  core::double z_x = z.{core::double::+}(x);
-  core::double z_y = z.{core::double::+}(y);
-  core::double z_z = z.{core::double::+}(z);
+  core::num n_n = n.{core::num::+}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::+}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::+}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::+}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::+}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::+}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::+}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::+}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::+}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::+}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::+}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::+}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::+}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::+}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::+}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::+}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::+}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::+}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::+}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::+}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::+}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::+}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::+}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::+}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::+}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::+}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::+}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::+}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::+}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::+}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::+}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::+}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::+}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::+}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::+}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::+}(z){(core::num) → core::double};
 }
 static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
-  core::num n_n = n.{core::num::-}(n);
-  core::num n_i = n.{core::num::-}(i);
-  core::double n_d = n.{core::num::-}(d);
-  core::num n_x = n.{core::num::-}(x);
-  core::num n_y = n.{core::num::-}(y);
-  core::double n_z = n.{core::num::-}(z);
-  core::num i_n = i.{core::num::-}(n);
-  core::int i_i = i.{core::num::-}(i);
-  core::double i_d = i.{core::num::-}(d);
-  core::num i_x = i.{core::num::-}(x);
-  core::int i_y = i.{core::num::-}(y);
-  core::double i_z = i.{core::num::-}(z);
-  core::double d_n = d.{core::double::-}(n);
-  core::double d_i = d.{core::double::-}(i);
-  core::double d_d = d.{core::double::-}(d);
-  core::double d_x = d.{core::double::-}(x);
-  core::double d_y = d.{core::double::-}(y);
-  core::double d_z = d.{core::double::-}(z);
-  core::num x_n = x.{core::num::-}(n);
-  core::num x_i = x.{core::num::-}(i);
-  core::double x_d = x.{core::num::-}(d);
-  core::num x_x = x.{core::num::-}(x);
-  core::num x_y = x.{core::num::-}(y);
-  core::double x_z = x.{core::num::-}(z);
-  core::num y_n = y.{core::num::-}(n);
-  core::int y_i = y.{core::num::-}(i);
-  core::double y_d = y.{core::num::-}(d);
-  core::num y_x = y.{core::num::-}(x);
-  core::int y_y = y.{core::num::-}(y);
-  core::double y_z = y.{core::num::-}(z);
-  core::double z_n = z.{core::double::-}(n);
-  core::double z_i = z.{core::double::-}(i);
-  core::double z_d = z.{core::double::-}(d);
-  core::double z_x = z.{core::double::-}(x);
-  core::double z_y = z.{core::double::-}(y);
-  core::double z_z = z.{core::double::-}(z);
+  core::num n_n = n.{core::num::-}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::-}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::-}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::-}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::-}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::-}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::-}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::-}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::-}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::-}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::-}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::-}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::-}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::-}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::-}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::-}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::-}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::-}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::-}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::-}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::-}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::-}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::-}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::-}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::-}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::-}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::-}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::-}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::-}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::-}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::-}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::-}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::-}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::-}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::-}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::-}(z){(core::num) → core::double};
 }
 static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
-  core::num n_n = n.{core::num::*}(n);
-  core::num n_i = n.{core::num::*}(i);
-  core::double n_d = n.{core::num::*}(d);
-  core::num n_x = n.{core::num::*}(x);
-  core::num n_y = n.{core::num::*}(y);
-  core::double n_z = n.{core::num::*}(z);
-  core::num i_n = i.{core::num::*}(n);
-  core::int i_i = i.{core::num::*}(i);
-  core::double i_d = i.{core::num::*}(d);
-  core::num i_x = i.{core::num::*}(x);
-  core::int i_y = i.{core::num::*}(y);
-  core::double i_z = i.{core::num::*}(z);
-  core::double d_n = d.{core::double::*}(n);
-  core::double d_i = d.{core::double::*}(i);
-  core::double d_d = d.{core::double::*}(d);
-  core::double d_x = d.{core::double::*}(x);
-  core::double d_y = d.{core::double::*}(y);
-  core::double d_z = d.{core::double::*}(z);
-  core::num x_n = x.{core::num::*}(n);
-  core::num x_i = x.{core::num::*}(i);
-  core::double x_d = x.{core::num::*}(d);
-  core::num x_x = x.{core::num::*}(x);
-  core::num x_y = x.{core::num::*}(y);
-  core::double x_z = x.{core::num::*}(z);
-  core::num y_n = y.{core::num::*}(n);
-  core::int y_i = y.{core::num::*}(i);
-  core::double y_d = y.{core::num::*}(d);
-  core::num y_x = y.{core::num::*}(x);
-  core::int y_y = y.{core::num::*}(y);
-  core::double y_z = y.{core::num::*}(z);
-  core::double z_n = z.{core::double::*}(n);
-  core::double z_i = z.{core::double::*}(i);
-  core::double z_d = z.{core::double::*}(d);
-  core::double z_x = z.{core::double::*}(x);
-  core::double z_y = z.{core::double::*}(y);
-  core::double z_z = z.{core::double::*}(z);
+  core::num n_n = n.{core::num::*}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::*}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::*}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::*}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::*}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::*}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::*}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::*}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::*}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::*}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::*}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::*}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::*}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::*}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::*}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::*}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::*}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::*}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::*}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::*}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::*}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::*}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::*}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::*}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::*}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::*}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::*}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::*}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::*}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::*}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::*}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::*}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::*}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::*}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::*}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::*}(z){(core::num) → core::double};
 }
 static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
-  core::num n_n = n.{core::num::%}(n);
-  core::num n_i = n.{core::num::%}(i);
-  core::double n_d = n.{core::num::%}(d);
-  core::num n_x = n.{core::num::%}(x);
-  core::num n_y = n.{core::num::%}(y);
-  core::double n_z = n.{core::num::%}(z);
-  core::num i_n = i.{core::num::%}(n);
-  core::int i_i = i.{core::num::%}(i);
-  core::double i_d = i.{core::num::%}(d);
-  core::num i_x = i.{core::num::%}(x);
-  core::int i_y = i.{core::num::%}(y);
-  core::double i_z = i.{core::num::%}(z);
-  core::double d_n = d.{core::double::%}(n);
-  core::double d_i = d.{core::double::%}(i);
-  core::double d_d = d.{core::double::%}(d);
-  core::double d_x = d.{core::double::%}(x);
-  core::double d_y = d.{core::double::%}(y);
-  core::double d_z = d.{core::double::%}(z);
-  core::num x_n = x.{core::num::%}(n);
-  core::num x_i = x.{core::num::%}(i);
-  core::double x_d = x.{core::num::%}(d);
-  core::num x_x = x.{core::num::%}(x);
-  core::num x_y = x.{core::num::%}(y);
-  core::double x_z = x.{core::num::%}(z);
-  core::num y_n = y.{core::num::%}(n);
-  core::int y_i = y.{core::num::%}(i);
-  core::double y_d = y.{core::num::%}(d);
-  core::num y_x = y.{core::num::%}(x);
-  core::int y_y = y.{core::num::%}(y);
-  core::double y_z = y.{core::num::%}(z);
-  core::double z_n = z.{core::double::%}(n);
-  core::double z_i = z.{core::double::%}(i);
-  core::double z_d = z.{core::double::%}(d);
-  core::double z_x = z.{core::double::%}(x);
-  core::double z_y = z.{core::double::%}(y);
-  core::double z_z = z.{core::double::%}(z);
+  core::num n_n = n.{core::num::%}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::%}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::%}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::%}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::%}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::%}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::%}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::%}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::%}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::%}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::%}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::%}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::%}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::%}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::%}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::%}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::%}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::%}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::%}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::%}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::%}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::%}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::%}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::%}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::%}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::%}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::%}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::%}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::%}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::%}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::%}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::%}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::%}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::%}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::%}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::%}(z){(core::num) → core::double};
 }
 static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
-  core::num n_n = n.{core::num::remainder}(n);
-  core::num n_i = n.{core::num::remainder}(i);
-  core::double n_d = n.{core::num::remainder}(d);
-  core::num n_x = n.{core::num::remainder}(x);
-  core::num n_y = n.{core::num::remainder}(y);
-  core::double n_z = n.{core::num::remainder}(z);
-  core::num i_n = i.{core::num::remainder}(n);
-  core::int i_i = i.{core::num::remainder}(i);
-  core::double i_d = i.{core::num::remainder}(d);
-  core::num i_x = i.{core::num::remainder}(x);
-  core::int i_y = i.{core::num::remainder}(y);
-  core::double i_z = i.{core::num::remainder}(z);
-  core::double d_n = d.{core::double::remainder}(n);
-  core::double d_i = d.{core::double::remainder}(i);
-  core::double d_d = d.{core::double::remainder}(d);
-  core::double d_x = d.{core::double::remainder}(x);
-  core::double d_y = d.{core::double::remainder}(y);
-  core::double d_z = d.{core::double::remainder}(z);
-  core::num x_n = x.{core::num::remainder}(n);
-  core::num x_i = x.{core::num::remainder}(i);
-  core::double x_d = x.{core::num::remainder}(d);
-  core::num x_x = x.{core::num::remainder}(x);
-  core::num x_y = x.{core::num::remainder}(y);
-  core::double x_z = x.{core::num::remainder}(z);
-  core::num y_n = y.{core::num::remainder}(n);
-  core::int y_i = y.{core::num::remainder}(i);
-  core::double y_d = y.{core::num::remainder}(d);
-  core::num y_x = y.{core::num::remainder}(x);
-  core::int y_y = y.{core::num::remainder}(y);
-  core::double y_z = y.{core::num::remainder}(z);
-  core::double z_n = z.{core::double::remainder}(n);
-  core::double z_i = z.{core::double::remainder}(i);
-  core::double z_d = z.{core::double::remainder}(d);
-  core::double z_x = z.{core::double::remainder}(x);
-  core::double z_y = z.{core::double::remainder}(y);
-  core::double z_z = z.{core::double::remainder}(z);
+  core::num n_n = n.{core::num::remainder}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::remainder}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::remainder}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::remainder}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::remainder}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::remainder}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::remainder}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::remainder}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::remainder}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::remainder}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::remainder}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::remainder}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::remainder}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::remainder}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::remainder}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::remainder}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::remainder}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::remainder}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::remainder}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::remainder}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::remainder}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::remainder}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::remainder}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::remainder}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::remainder}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::remainder}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::remainder}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::remainder}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::remainder}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::remainder}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::remainder}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::remainder}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::remainder}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::remainder}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::remainder}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::remainder}(z){(core::num) → core::double};
 }
 static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
-  core::num n_n_n = n.{core::num::clamp}(n, n);
-  core::num n_i_n = n.{core::num::clamp}(i, n);
-  core::num n_d_n = n.{core::num::clamp}(d, n);
-  core::num n_x_n = n.{core::num::clamp}(x, n);
-  core::num n_y_n = n.{core::num::clamp}(y, n);
-  core::num n_z_n = n.{core::num::clamp}(z, n);
-  core::num n_n_i = n.{core::num::clamp}(n, i);
-  core::num n_i_i = n.{core::num::clamp}(i, i);
-  core::num n_d_i = n.{core::num::clamp}(d, i);
-  core::num n_x_i = n.{core::num::clamp}(x, i);
-  core::num n_y_i = n.{core::num::clamp}(y, i);
-  core::num n_z_i = n.{core::num::clamp}(z, i);
-  core::num n_n_d = n.{core::num::clamp}(n, d);
-  core::num n_i_d = n.{core::num::clamp}(i, d);
-  core::num n_d_d = n.{core::num::clamp}(d, d);
-  core::num n_x_d = n.{core::num::clamp}(x, d);
-  core::num n_y_d = n.{core::num::clamp}(y, d);
-  core::num n_z_d = n.{core::num::clamp}(z, d);
-  core::num n_n_x = n.{core::num::clamp}(n, x);
-  core::num n_i_x = n.{core::num::clamp}(i, x);
-  core::num n_d_x = n.{core::num::clamp}(d, x);
-  core::num n_x_x = n.{core::num::clamp}(x, x);
-  core::num n_y_x = n.{core::num::clamp}(y, x);
-  core::num n_z_x = n.{core::num::clamp}(z, x);
-  core::num n_n_y = n.{core::num::clamp}(n, y);
-  core::num n_i_y = n.{core::num::clamp}(i, y);
-  core::num n_d_y = n.{core::num::clamp}(d, y);
-  core::num n_x_y = n.{core::num::clamp}(x, y);
-  core::num n_y_y = n.{core::num::clamp}(y, y);
-  core::num n_z_y = n.{core::num::clamp}(z, y);
-  core::num n_n_z = n.{core::num::clamp}(n, z);
-  core::num n_i_z = n.{core::num::clamp}(i, z);
-  core::num n_d_z = n.{core::num::clamp}(d, z);
-  core::num n_x_z = n.{core::num::clamp}(x, z);
-  core::num n_y_z = n.{core::num::clamp}(y, z);
-  core::num n_z_z = n.{core::num::clamp}(z, z);
-  core::num i_n_n = i.{core::num::clamp}(n, n);
-  core::num i_i_n = i.{core::num::clamp}(i, n);
-  core::num i_d_n = i.{core::num::clamp}(d, n);
-  core::num i_x_n = i.{core::num::clamp}(x, n);
-  core::num i_y_n = i.{core::num::clamp}(y, n);
-  core::num i_z_n = i.{core::num::clamp}(z, n);
-  core::num i_n_i = i.{core::num::clamp}(n, i);
-  core::int i_i_i = i.{core::num::clamp}(i, i);
-  core::num i_d_i = i.{core::num::clamp}(d, i);
-  core::num i_x_i = i.{core::num::clamp}(x, i);
-  core::int i_y_i = i.{core::num::clamp}(y, i);
-  core::num i_z_i = i.{core::num::clamp}(z, i);
-  core::num i_n_d = i.{core::num::clamp}(n, d);
-  core::num i_i_d = i.{core::num::clamp}(i, d);
-  core::num i_d_d = i.{core::num::clamp}(d, d);
-  core::num i_x_d = i.{core::num::clamp}(x, d);
-  core::num i_y_d = i.{core::num::clamp}(y, d);
-  core::num i_z_d = i.{core::num::clamp}(z, d);
-  core::num i_n_x = i.{core::num::clamp}(n, x);
-  core::num i_i_x = i.{core::num::clamp}(i, x);
-  core::num i_d_x = i.{core::num::clamp}(d, x);
-  core::num i_x_x = i.{core::num::clamp}(x, x);
-  core::num i_y_x = i.{core::num::clamp}(y, x);
-  core::num i_z_x = i.{core::num::clamp}(z, x);
-  core::num i_n_y = i.{core::num::clamp}(n, y);
-  core::int i_i_y = i.{core::num::clamp}(i, y);
-  core::num i_d_y = i.{core::num::clamp}(d, y);
-  core::num i_x_y = i.{core::num::clamp}(x, y);
-  core::int i_y_y = i.{core::num::clamp}(y, y);
-  core::num i_z_y = i.{core::num::clamp}(z, y);
-  core::num i_n_z = i.{core::num::clamp}(n, z);
-  core::num i_i_z = i.{core::num::clamp}(i, z);
-  core::num i_d_z = i.{core::num::clamp}(d, z);
-  core::num i_x_z = i.{core::num::clamp}(x, z);
-  core::num i_y_z = i.{core::num::clamp}(y, z);
-  core::num i_z_z = i.{core::num::clamp}(z, z);
-  core::num d_n_n = d.{core::num::clamp}(n, n);
-  core::num d_i_n = d.{core::num::clamp}(i, n);
-  core::num d_d_n = d.{core::num::clamp}(d, n);
-  core::num d_x_n = d.{core::num::clamp}(x, n);
-  core::num d_y_n = d.{core::num::clamp}(y, n);
-  core::num d_z_n = d.{core::num::clamp}(z, n);
-  core::num d_n_i = d.{core::num::clamp}(n, i);
-  core::num d_i_i = d.{core::num::clamp}(i, i);
-  core::num d_d_i = d.{core::num::clamp}(d, i);
-  core::num d_x_i = d.{core::num::clamp}(x, i);
-  core::num d_y_i = d.{core::num::clamp}(y, i);
-  core::num d_z_i = d.{core::num::clamp}(z, i);
-  core::num d_n_d = d.{core::num::clamp}(n, d);
-  core::num d_i_d = d.{core::num::clamp}(i, d);
-  core::double d_d_d = d.{core::num::clamp}(d, d);
-  core::num d_x_d = d.{core::num::clamp}(x, d);
-  core::num d_y_d = d.{core::num::clamp}(y, d);
-  core::double d_z_d = d.{core::num::clamp}(z, d);
-  core::num d_n_x = d.{core::num::clamp}(n, x);
-  core::num d_i_x = d.{core::num::clamp}(i, x);
-  core::num d_d_x = d.{core::num::clamp}(d, x);
-  core::num d_x_x = d.{core::num::clamp}(x, x);
-  core::num d_y_x = d.{core::num::clamp}(y, x);
-  core::num d_z_x = d.{core::num::clamp}(z, x);
-  core::num d_n_y = d.{core::num::clamp}(n, y);
-  core::num d_i_y = d.{core::num::clamp}(i, y);
-  core::num d_d_y = d.{core::num::clamp}(d, y);
-  core::num d_x_y = d.{core::num::clamp}(x, y);
-  core::num d_y_y = d.{core::num::clamp}(y, y);
-  core::num d_z_y = d.{core::num::clamp}(z, y);
-  core::num d_n_z = d.{core::num::clamp}(n, z);
-  core::num d_i_z = d.{core::num::clamp}(i, z);
-  core::double d_d_z = d.{core::num::clamp}(d, z);
-  core::num d_x_z = d.{core::num::clamp}(x, z);
-  core::num d_y_z = d.{core::num::clamp}(y, z);
-  core::double d_z_z = d.{core::num::clamp}(z, z);
-  core::num x_n_n = x.{core::num::clamp}(n, n);
-  core::num x_i_n = x.{core::num::clamp}(i, n);
-  core::num x_d_n = x.{core::num::clamp}(d, n);
-  core::num x_x_n = x.{core::num::clamp}(x, n);
-  core::num x_y_n = x.{core::num::clamp}(y, n);
-  core::num x_z_n = x.{core::num::clamp}(z, n);
-  core::num x_n_i = x.{core::num::clamp}(n, i);
-  core::num x_i_i = x.{core::num::clamp}(i, i);
-  core::num x_d_i = x.{core::num::clamp}(d, i);
-  core::num x_x_i = x.{core::num::clamp}(x, i);
-  core::num x_y_i = x.{core::num::clamp}(y, i);
-  core::num x_z_i = x.{core::num::clamp}(z, i);
-  core::num x_n_d = x.{core::num::clamp}(n, d);
-  core::num x_i_d = x.{core::num::clamp}(i, d);
-  core::num x_d_d = x.{core::num::clamp}(d, d);
-  core::num x_x_d = x.{core::num::clamp}(x, d);
-  core::num x_y_d = x.{core::num::clamp}(y, d);
-  core::num x_z_d = x.{core::num::clamp}(z, d);
-  core::num x_n_x = x.{core::num::clamp}(n, x);
-  core::num x_i_x = x.{core::num::clamp}(i, x);
-  core::num x_d_x = x.{core::num::clamp}(d, x);
-  core::num x_x_x = x.{core::num::clamp}(x, x);
-  core::num x_y_x = x.{core::num::clamp}(y, x);
-  core::num x_z_x = x.{core::num::clamp}(z, x);
-  core::num x_n_y = x.{core::num::clamp}(n, y);
-  core::num x_i_y = x.{core::num::clamp}(i, y);
-  core::num x_d_y = x.{core::num::clamp}(d, y);
-  core::num x_x_y = x.{core::num::clamp}(x, y);
-  core::num x_y_y = x.{core::num::clamp}(y, y);
-  core::num x_z_y = x.{core::num::clamp}(z, y);
-  core::num x_n_z = x.{core::num::clamp}(n, z);
-  core::num x_i_z = x.{core::num::clamp}(i, z);
-  core::num x_d_z = x.{core::num::clamp}(d, z);
-  core::num x_x_z = x.{core::num::clamp}(x, z);
-  core::num x_y_z = x.{core::num::clamp}(y, z);
-  core::num x_z_z = x.{core::num::clamp}(z, z);
-  core::num y_n_n = y.{core::num::clamp}(n, n);
-  core::num y_i_n = y.{core::num::clamp}(i, n);
-  core::num y_d_n = y.{core::num::clamp}(d, n);
-  core::num y_x_n = y.{core::num::clamp}(x, n);
-  core::num y_y_n = y.{core::num::clamp}(y, n);
-  core::num y_z_n = y.{core::num::clamp}(z, n);
-  core::num y_n_i = y.{core::num::clamp}(n, i);
-  core::int y_i_i = y.{core::num::clamp}(i, i);
-  core::num y_d_i = y.{core::num::clamp}(d, i);
-  core::num y_x_i = y.{core::num::clamp}(x, i);
-  core::int y_y_i = y.{core::num::clamp}(y, i);
-  core::num y_z_i = y.{core::num::clamp}(z, i);
-  core::num y_n_d = y.{core::num::clamp}(n, d);
-  core::num y_i_d = y.{core::num::clamp}(i, d);
-  core::num y_d_d = y.{core::num::clamp}(d, d);
-  core::num y_x_d = y.{core::num::clamp}(x, d);
-  core::num y_y_d = y.{core::num::clamp}(y, d);
-  core::num y_z_d = y.{core::num::clamp}(z, d);
-  core::num y_n_x = y.{core::num::clamp}(n, x);
-  core::num y_i_x = y.{core::num::clamp}(i, x);
-  core::num y_d_x = y.{core::num::clamp}(d, x);
-  core::num y_x_x = y.{core::num::clamp}(x, x);
-  core::num y_y_x = y.{core::num::clamp}(y, x);
-  core::num y_z_x = y.{core::num::clamp}(z, x);
-  core::num y_n_y = y.{core::num::clamp}(n, y);
-  core::int y_i_y = y.{core::num::clamp}(i, y);
-  core::num y_d_y = y.{core::num::clamp}(d, y);
-  core::num y_x_y = y.{core::num::clamp}(x, y);
-  core::int y_y_y = y.{core::num::clamp}(y, y);
-  core::num y_z_y = y.{core::num::clamp}(z, y);
-  core::num y_n_z = y.{core::num::clamp}(n, z);
-  core::num y_i_z = y.{core::num::clamp}(i, z);
-  core::num y_d_z = y.{core::num::clamp}(d, z);
-  core::num y_x_z = y.{core::num::clamp}(x, z);
-  core::num y_y_z = y.{core::num::clamp}(y, z);
-  core::num y_z_z = y.{core::num::clamp}(z, z);
-  core::num z_n_n = z.{core::num::clamp}(n, n);
-  core::num z_i_n = z.{core::num::clamp}(i, n);
-  core::num z_d_n = z.{core::num::clamp}(d, n);
-  core::num z_x_n = z.{core::num::clamp}(x, n);
-  core::num z_y_n = z.{core::num::clamp}(y, n);
-  core::num z_z_n = z.{core::num::clamp}(z, n);
-  core::num z_n_i = z.{core::num::clamp}(n, i);
-  core::num z_i_i = z.{core::num::clamp}(i, i);
-  core::num z_d_i = z.{core::num::clamp}(d, i);
-  core::num z_x_i = z.{core::num::clamp}(x, i);
-  core::num z_y_i = z.{core::num::clamp}(y, i);
-  core::num z_z_i = z.{core::num::clamp}(z, i);
-  core::num z_n_d = z.{core::num::clamp}(n, d);
-  core::num z_i_d = z.{core::num::clamp}(i, d);
-  core::double z_d_d = z.{core::num::clamp}(d, d);
-  core::num z_x_d = z.{core::num::clamp}(x, d);
-  core::num z_y_d = z.{core::num::clamp}(y, d);
-  core::double z_z_d = z.{core::num::clamp}(z, d);
-  core::num z_n_x = z.{core::num::clamp}(n, x);
-  core::num z_i_x = z.{core::num::clamp}(i, x);
-  core::num z_d_x = z.{core::num::clamp}(d, x);
-  core::num z_x_x = z.{core::num::clamp}(x, x);
-  core::num z_y_x = z.{core::num::clamp}(y, x);
-  core::num z_z_x = z.{core::num::clamp}(z, x);
-  core::num z_n_y = z.{core::num::clamp}(n, y);
-  core::num z_i_y = z.{core::num::clamp}(i, y);
-  core::num z_d_y = z.{core::num::clamp}(d, y);
-  core::num z_x_y = z.{core::num::clamp}(x, y);
-  core::num z_y_y = z.{core::num::clamp}(y, y);
-  core::num z_z_y = z.{core::num::clamp}(z, y);
-  core::num z_n_z = z.{core::num::clamp}(n, z);
-  core::num z_i_z = z.{core::num::clamp}(i, z);
-  core::double z_d_z = z.{core::num::clamp}(d, z);
-  core::num z_x_z = z.{core::num::clamp}(x, z);
-  core::num z_y_z = z.{core::num::clamp}(y, z);
-  core::double z_z_z = z.{core::num::clamp}(z, z);
+  core::num n_n_n = n.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num n_i_n = n.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num n_d_n = n.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num n_x_n = n.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num n_y_n = n.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num n_z_n = n.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num n_n_i = n.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num n_i_i = n.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num n_d_i = n.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num n_x_i = n.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num n_y_i = n.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num n_z_i = n.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num n_n_d = n.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num n_i_d = n.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num n_d_d = n.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num n_x_d = n.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num n_y_d = n.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num n_z_d = n.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num n_n_x = n.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num n_i_x = n.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num n_d_x = n.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num n_x_x = n.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num n_y_x = n.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num n_z_x = n.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num n_n_y = n.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num n_i_y = n.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num n_d_y = n.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num n_x_y = n.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num n_y_y = n.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num n_z_y = n.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num n_n_z = n.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num n_i_z = n.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num n_d_z = n.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num n_x_z = n.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num n_y_z = n.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num n_z_z = n.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num i_n_n = i.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num i_i_n = i.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num i_d_n = i.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num i_x_n = i.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num i_y_n = i.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num i_z_n = i.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num i_n_i = i.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::int i_i_i = i.{core::num::clamp}(i, i){(core::num, core::num) → core::int};
+  core::num i_d_i = i.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num i_x_i = i.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::int i_y_i = i.{core::num::clamp}(y, i){(core::num, core::num) → core::int};
+  core::num i_z_i = i.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num i_n_d = i.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num i_i_d = i.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num i_d_d = i.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num i_x_d = i.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num i_y_d = i.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num i_z_d = i.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num i_n_x = i.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num i_i_x = i.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num i_d_x = i.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num i_x_x = i.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num i_y_x = i.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num i_z_x = i.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num i_n_y = i.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::int i_i_y = i.{core::num::clamp}(i, y){(core::num, core::num) → core::int};
+  core::num i_d_y = i.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num i_x_y = i.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::int i_y_y = i.{core::num::clamp}(y, y){(core::num, core::num) → core::int};
+  core::num i_z_y = i.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num i_n_z = i.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num i_i_z = i.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num i_d_z = i.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num i_x_z = i.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num i_y_z = i.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num i_z_z = i.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num d_n_n = d.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num d_i_n = d.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num d_d_n = d.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num d_x_n = d.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num d_y_n = d.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num d_z_n = d.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num d_n_i = d.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num d_i_i = d.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num d_d_i = d.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num d_x_i = d.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num d_y_i = d.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num d_z_i = d.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num d_n_d = d.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num d_i_d = d.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::double d_d_d = d.{core::num::clamp}(d, d){(core::num, core::num) → core::double};
+  core::num d_x_d = d.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num d_y_d = d.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::double d_z_d = d.{core::num::clamp}(z, d){(core::num, core::num) → core::double};
+  core::num d_n_x = d.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num d_i_x = d.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num d_d_x = d.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num d_x_x = d.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num d_y_x = d.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num d_z_x = d.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num d_n_y = d.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num d_i_y = d.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num d_d_y = d.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num d_x_y = d.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num d_y_y = d.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num d_z_y = d.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num d_n_z = d.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num d_i_z = d.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::double d_d_z = d.{core::num::clamp}(d, z){(core::num, core::num) → core::double};
+  core::num d_x_z = d.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num d_y_z = d.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::double d_z_z = d.{core::num::clamp}(z, z){(core::num, core::num) → core::double};
+  core::num x_n_n = x.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num x_i_n = x.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num x_d_n = x.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num x_x_n = x.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num x_y_n = x.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num x_z_n = x.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num x_n_i = x.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num x_i_i = x.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num x_d_i = x.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num x_x_i = x.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num x_y_i = x.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num x_z_i = x.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num x_n_d = x.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num x_i_d = x.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num x_d_d = x.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num x_x_d = x.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num x_y_d = x.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num x_z_d = x.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num x_n_x = x.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num x_i_x = x.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num x_d_x = x.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num x_x_x = x.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num x_y_x = x.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num x_z_x = x.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num x_n_y = x.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num x_i_y = x.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num x_d_y = x.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num x_x_y = x.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num x_y_y = x.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num x_z_y = x.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num x_n_z = x.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num x_i_z = x.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num x_d_z = x.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num x_x_z = x.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num x_y_z = x.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num x_z_z = x.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num y_n_n = y.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num y_i_n = y.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num y_d_n = y.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num y_x_n = y.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num y_y_n = y.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num y_z_n = y.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num y_n_i = y.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::int y_i_i = y.{core::num::clamp}(i, i){(core::num, core::num) → core::int};
+  core::num y_d_i = y.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num y_x_i = y.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::int y_y_i = y.{core::num::clamp}(y, i){(core::num, core::num) → core::int};
+  core::num y_z_i = y.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num y_n_d = y.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num y_i_d = y.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num y_d_d = y.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num y_x_d = y.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num y_y_d = y.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num y_z_d = y.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num y_n_x = y.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num y_i_x = y.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num y_d_x = y.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num y_x_x = y.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num y_y_x = y.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num y_z_x = y.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num y_n_y = y.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::int y_i_y = y.{core::num::clamp}(i, y){(core::num, core::num) → core::int};
+  core::num y_d_y = y.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num y_x_y = y.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::int y_y_y = y.{core::num::clamp}(y, y){(core::num, core::num) → core::int};
+  core::num y_z_y = y.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num y_n_z = y.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num y_i_z = y.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num y_d_z = y.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num y_x_z = y.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num y_y_z = y.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num y_z_z = y.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num z_n_n = z.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num z_i_n = z.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num z_d_n = z.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num z_x_n = z.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num z_y_n = z.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num z_z_n = z.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num z_n_i = z.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num z_i_i = z.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num z_d_i = z.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num z_x_i = z.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num z_y_i = z.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num z_z_i = z.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num z_n_d = z.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num z_i_d = z.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::double z_d_d = z.{core::num::clamp}(d, d){(core::num, core::num) → core::double};
+  core::num z_x_d = z.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num z_y_d = z.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::double z_z_d = z.{core::num::clamp}(z, d){(core::num, core::num) → core::double};
+  core::num z_n_x = z.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num z_i_x = z.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num z_d_x = z.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num z_x_x = z.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num z_y_x = z.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num z_z_x = z.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num z_n_y = z.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num z_i_y = z.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num z_d_y = z.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num z_x_y = z.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num z_y_y = z.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num z_z_y = z.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num z_n_z = z.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num z_i_z = z.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::double z_d_z = z.{core::num::clamp}(d, z){(core::num, core::num) → core::double};
+  core::num z_x_z = z.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num z_y_z = z.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::double z_z_z = z.{core::num::clamp}(z, z){(core::num, core::num) → core::double};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.expect b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.expect
index cdda24f..43aba38 100644
--- a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.expect
@@ -552,503 +552,503 @@
 static method f<T extends core::Object? = dynamic>() → self::f::T%
   return throw "Unsupported";
 static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
-  core::num n_n = n.{core::num::+}(self::f<core::num>());
+  core::num n_n = n.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n + f();
-              ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::+}(self::f<core::double>());
+              ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X n_x = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n + f();
-            ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y n_y = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n + f();
-            ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z n_z = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n + f();
-            ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::+}(self::f<core::num>());
-  core::int i_i = i.{core::num::+}(self::f<core::int>());
-  core::double i_d = i.{core::num::+}(self::f<core::double>());
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X i_x = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i + f();
-            ^" in i.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y i_y = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i + f();
-            ^" in i.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z i_z = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i + f();
-            ^" in i.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::+}(self::f<core::num>());
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d + f();
-              ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::+}(self::f<core::num>());
+              ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   self::add::X d_x = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d + f();
-            ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y d_y = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d + f();
-            ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z d_z = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d + f();
-            ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::+}(self::f<core::num>());
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x + f();
-              ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::+}(self::f<core::double>());
+              ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X x_x = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x + f();
-            ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y x_y = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x + f();
-            ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z x_z = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x + f();
-            ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::+}(self::f<core::num>());
-  core::int y_i = y.{core::num::+}(self::f<core::int>());
-  core::double y_d = y.{core::num::+}(self::f<core::double>());
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X y_x = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y + f();
-            ^" in y.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y y_y = let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y + f();
-            ^" in y.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z y_z = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y + f();
-            ^" in y.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::+}(self::f<core::num>());
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z + f();
-              ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::+}(self::f<core::num>());
+              ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   self::add::X z_x = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z + f();
-            ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y z_y = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z + f();
-            ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z z_z = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z + f();
-            ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
-  core::num n_n = n.{core::num::-}(self::f<core::num>());
+  core::num n_n = n.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n - f();
-              ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::-}(self::f<core::double>());
+              ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X n_x = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n - f();
-            ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y n_y = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n - f();
-            ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z n_z = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n - f();
-            ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::-}(self::f<core::num>());
-  core::int i_i = i.{core::num::-}(self::f<core::int>());
-  core::double i_d = i.{core::num::-}(self::f<core::double>());
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X i_x = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i - f();
-            ^" in i.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y i_y = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i - f();
-            ^" in i.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z i_z = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i - f();
-            ^" in i.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::-}(self::f<core::num>());
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d - f();
-              ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::-}(self::f<core::num>());
+              ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   self::sub::X d_x = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d - f();
-            ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y d_y = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d - f();
-            ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z d_z = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d - f();
-            ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::-}(self::f<core::num>());
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x - f();
-              ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::-}(self::f<core::double>());
+              ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X x_x = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x - f();
-            ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y x_y = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x - f();
-            ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z x_z = let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x - f();
-            ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::-}(self::f<core::num>());
-  core::int y_i = y.{core::num::-}(self::f<core::int>());
-  core::double y_d = y.{core::num::-}(self::f<core::double>());
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X y_x = let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y - f();
-            ^" in y.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y y_y = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y - f();
-            ^" in y.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z y_z = let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y - f();
-            ^" in y.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::-}(self::f<core::num>());
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z - f();
-              ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::-}(self::f<core::num>());
+              ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   self::sub::X z_x = let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z - f();
-            ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y z_y = let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z - f();
-            ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z z_z = let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z - f();
-            ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
-  core::num n_n = n.{core::num::*}(self::f<core::num>());
+  core::num n_n = n.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n * f();
-              ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::*}(self::f<core::double>());
+              ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X n_x = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n * f();
-            ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y n_y = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n * f();
-            ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z n_z = let final Never #t48 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n * f();
-            ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::*}(self::f<core::num>());
-  core::int i_i = i.{core::num::*}(self::f<core::int>());
-  core::double i_d = i.{core::num::*}(self::f<core::double>());
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X i_x = let final Never #t49 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i * f();
-            ^" in i.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y i_y = let final Never #t50 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i * f();
-            ^" in i.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z i_z = let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i * f();
-            ^" in i.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::*}(self::f<core::num>());
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t52 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d * f();
-              ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::*}(self::f<core::num>());
+              ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   self::mul::X d_x = let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d * f();
-            ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y d_y = let final Never #t54 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d * f();
-            ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z d_z = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d * f();
-            ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::*}(self::f<core::num>());
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x * f();
-              ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::*}(self::f<core::double>());
+              ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X x_x = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x * f();
-            ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y x_y = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x * f();
-            ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z x_z = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x * f();
-            ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::*}(self::f<core::num>());
-  core::int y_i = y.{core::num::*}(self::f<core::int>());
-  core::double y_d = y.{core::num::*}(self::f<core::double>());
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X y_x = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y * f();
-            ^" in y.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y y_y = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y * f();
-            ^" in y.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z y_z = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y * f();
-            ^" in y.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::*}(self::f<core::num>());
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z * f();
-              ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::*}(self::f<core::num>());
+              ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   self::mul::X z_x = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z * f();
-            ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y z_y = let final Never #t65 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z * f();
-            ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z z_z = let final Never #t66 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z * f();
-            ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
-  core::num n_n = n.{core::num::%}(self::f<core::num>());
+  core::num n_n = n.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t67 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n % f();
-              ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::%}(self::f<core::double>());
+              ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X n_x = let final Never #t68 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n % f();
-            ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y n_y = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n % f();
-            ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z n_z = let final Never #t70 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n % f();
-            ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::%}(self::f<core::num>());
-  core::int i_i = i.{core::num::%}(self::f<core::int>());
-  core::double i_d = i.{core::num::%}(self::f<core::double>());
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X i_x = let final Never #t71 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i % f();
-            ^" in i.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y i_y = let final Never #t72 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i % f();
-            ^" in i.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z i_z = let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i % f();
-            ^" in i.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::%}(self::f<core::num>());
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t74 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d % f();
-              ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::%}(self::f<core::num>());
+              ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   self::mod::X d_x = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d % f();
-            ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y d_y = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d % f();
-            ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z d_z = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d % f();
-            ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::%}(self::f<core::num>());
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t78 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x % f();
-              ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::%}(self::f<core::double>());
+              ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X x_x = let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x % f();
-            ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y x_y = let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x % f();
-            ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z x_z = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x % f();
-            ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::%}(self::f<core::num>());
-  core::int y_i = y.{core::num::%}(self::f<core::int>());
-  core::double y_d = y.{core::num::%}(self::f<core::double>());
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X y_x = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y % f();
-            ^" in y.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y y_y = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y % f();
-            ^" in y.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z y_z = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y % f();
-            ^" in y.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::%}(self::f<core::num>());
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z % f();
-              ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::%}(self::f<core::num>());
+              ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   self::mod::X z_x = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z % f();
-            ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y z_y = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z % f();
-            ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z z_z = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z % f();
-            ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
-  core::num n_n = n.{core::num::remainder}(self::f<core::num>());
+  core::num n_n = n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.remainder(f());
-              ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::remainder}(self::f<core::double>());
+              ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X n_x = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.remainder(f());
-            ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y n_y = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.remainder(f());
-            ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z n_z = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.remainder(f());
-            ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::remainder}(self::f<core::num>());
-  core::int i_i = i.{core::num::remainder}(self::f<core::int>());
-  core::double i_d = i.{core::num::remainder}(self::f<core::double>());
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X i_x = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.remainder(f());
-            ^" in i.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y i_y = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.remainder(f());
-            ^" in i.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z i_z = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.remainder(f());
-            ^" in i.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::double d_n = d.{core::double::remainder}(self::f<core::num>());
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::double d_n = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t96 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d.remainder(f());
-              ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::remainder}(self::f<core::num>());
+              ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   self::remainder::X d_x = let final Never #t97 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d.remainder(f());
-            ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y d_y = let final Never #t98 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d.remainder(f());
-            ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z d_z = let final Never #t99 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d.remainder(f());
-            ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::remainder}(self::f<core::num>());
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.remainder(f());
-              ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::remainder}(self::f<core::double>());
+              ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X x_x = let final Never #t101 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.remainder(f());
-            ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y x_y = let final Never #t102 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.remainder(f());
-            ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z x_z = let final Never #t103 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.remainder(f());
-            ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::remainder}(self::f<core::num>());
-  core::int y_i = y.{core::num::remainder}(self::f<core::int>());
-  core::double y_d = y.{core::num::remainder}(self::f<core::double>());
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X y_x = let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.remainder(f());
-            ^" in y.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y y_y = let final Never #t105 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.remainder(f());
-            ^" in y.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z y_z = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.remainder(f());
-            ^" in y.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::double z_n = z.{core::double::remainder}(self::f<core::num>());
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::double z_n = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z.remainder(f());
-              ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::remainder}(self::f<core::num>());
+              ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   self::remainder::X z_x = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z.remainder(f());
-            ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y z_y = let final Never #t109 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z.remainder(f());
-            ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z z_z = let final Never #t110 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z.remainder(f());
-            ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
-  core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+  core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int n_i = let final Never #t111 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.clamp(f(), f());
-              ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
+              ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double n_d = n.clamp(f(), f());
-                 ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X n_x = let final Never #t113 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.clamp(f(), f());
-            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y n_y = let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.clamp(f(), f());
-            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z n_z = let final Never #t115 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.clamp(f(), f());
-            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
-  core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>());
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
   core::double i_d = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double i_d = i.clamp(f(), f());
-                 ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X i_x = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.clamp(f(), f());
-            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y i_y = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.clamp(f(), f());
-            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z i_z = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.clamp(f(), f());
-            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int d_i = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int d_i = d.clamp(f(), f());
-              ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>());
+              ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
   self::clamp::X d_x = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X d_x = d.clamp(f(), f());
-            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y d_y = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y d_y = d.clamp(f(), f());
-            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z d_z = let final Never #t123 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z d_z = d.clamp(f(), f());
-            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int x_i = let final Never #t124 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.clamp(f(), f());
-              ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
+              ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = let final Never #t125 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double x_d = x.clamp(f(), f());
-                 ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X x_x = let final Never #t126 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.clamp(f(), f());
-            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y x_y = let final Never #t127 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.clamp(f(), f());
-            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z x_z = let final Never #t128 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.clamp(f(), f());
-            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
-  core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>());
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
   core::double y_d = let final Never #t129 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double y_d = y.clamp(f(), f());
-                 ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X y_x = let final Never #t130 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.clamp(f(), f());
-            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y y_y = let final Never #t131 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.clamp(f(), f());
-            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z y_z = let final Never #t132 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.clamp(f(), f());
-            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int z_i = let final Never #t133 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int z_i = z.clamp(f(), f());
-              ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>());
+              ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
   self::clamp::X z_x = let final Never #t134 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X z_x = z.clamp(f(), f());
-            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y z_y = let final Never #t135 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y z_y = z.clamp(f(), f());
-            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z z_z = let final Never #t136 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z z_z = z.clamp(f(), f());
-            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.transformed.expect
index cdda24f..43aba38 100644
--- a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.strong.transformed.expect
@@ -552,503 +552,503 @@
 static method f<T extends core::Object? = dynamic>() → self::f::T%
   return throw "Unsupported";
 static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
-  core::num n_n = n.{core::num::+}(self::f<core::num>());
+  core::num n_n = n.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n + f();
-              ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::+}(self::f<core::double>());
+              ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X n_x = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n + f();
-            ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y n_y = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n + f();
-            ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z n_z = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n + f();
-            ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::+}(self::f<core::num>());
-  core::int i_i = i.{core::num::+}(self::f<core::int>());
-  core::double i_d = i.{core::num::+}(self::f<core::double>());
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X i_x = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i + f();
-            ^" in i.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y i_y = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i + f();
-            ^" in i.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z i_z = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i + f();
-            ^" in i.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::+}(self::f<core::num>());
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d + f();
-              ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::+}(self::f<core::num>());
+              ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   self::add::X d_x = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d + f();
-            ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y d_y = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d + f();
-            ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z d_z = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d + f();
-            ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::+}(self::f<core::num>());
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x + f();
-              ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::+}(self::f<core::double>());
+              ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X x_x = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x + f();
-            ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y x_y = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x + f();
-            ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z x_z = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x + f();
-            ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::+}(self::f<core::num>());
-  core::int y_i = y.{core::num::+}(self::f<core::int>());
-  core::double y_d = y.{core::num::+}(self::f<core::double>());
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X y_x = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y + f();
-            ^" in y.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y y_y = let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y + f();
-            ^" in y.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z y_z = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y + f();
-            ^" in y.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::+}(self::f<core::num>());
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z + f();
-              ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::+}(self::f<core::num>());
+              ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   self::add::X z_x = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z + f();
-            ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y z_y = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z + f();
-            ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z z_z = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z + f();
-            ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
-  core::num n_n = n.{core::num::-}(self::f<core::num>());
+  core::num n_n = n.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n - f();
-              ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::-}(self::f<core::double>());
+              ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X n_x = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n - f();
-            ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y n_y = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n - f();
-            ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z n_z = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n - f();
-            ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::-}(self::f<core::num>());
-  core::int i_i = i.{core::num::-}(self::f<core::int>());
-  core::double i_d = i.{core::num::-}(self::f<core::double>());
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X i_x = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i - f();
-            ^" in i.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y i_y = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i - f();
-            ^" in i.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z i_z = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i - f();
-            ^" in i.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::-}(self::f<core::num>());
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d - f();
-              ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::-}(self::f<core::num>());
+              ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   self::sub::X d_x = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d - f();
-            ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y d_y = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d - f();
-            ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z d_z = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d - f();
-            ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::-}(self::f<core::num>());
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x - f();
-              ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::-}(self::f<core::double>());
+              ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X x_x = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x - f();
-            ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y x_y = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x - f();
-            ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z x_z = let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x - f();
-            ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::-}(self::f<core::num>());
-  core::int y_i = y.{core::num::-}(self::f<core::int>());
-  core::double y_d = y.{core::num::-}(self::f<core::double>());
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X y_x = let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y - f();
-            ^" in y.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y y_y = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y - f();
-            ^" in y.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z y_z = let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y - f();
-            ^" in y.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::-}(self::f<core::num>());
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z - f();
-              ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::-}(self::f<core::num>());
+              ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   self::sub::X z_x = let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z - f();
-            ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y z_y = let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z - f();
-            ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z z_z = let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z - f();
-            ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
-  core::num n_n = n.{core::num::*}(self::f<core::num>());
+  core::num n_n = n.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n * f();
-              ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::*}(self::f<core::double>());
+              ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X n_x = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n * f();
-            ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y n_y = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n * f();
-            ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z n_z = let final Never #t48 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n * f();
-            ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::*}(self::f<core::num>());
-  core::int i_i = i.{core::num::*}(self::f<core::int>());
-  core::double i_d = i.{core::num::*}(self::f<core::double>());
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X i_x = let final Never #t49 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i * f();
-            ^" in i.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y i_y = let final Never #t50 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i * f();
-            ^" in i.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z i_z = let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i * f();
-            ^" in i.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::*}(self::f<core::num>());
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t52 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d * f();
-              ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::*}(self::f<core::num>());
+              ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   self::mul::X d_x = let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d * f();
-            ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y d_y = let final Never #t54 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d * f();
-            ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z d_z = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d * f();
-            ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::*}(self::f<core::num>());
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x * f();
-              ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::*}(self::f<core::double>());
+              ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X x_x = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x * f();
-            ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y x_y = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x * f();
-            ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z x_z = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x * f();
-            ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::*}(self::f<core::num>());
-  core::int y_i = y.{core::num::*}(self::f<core::int>());
-  core::double y_d = y.{core::num::*}(self::f<core::double>());
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X y_x = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y * f();
-            ^" in y.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y y_y = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y * f();
-            ^" in y.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z y_z = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y * f();
-            ^" in y.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::*}(self::f<core::num>());
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z * f();
-              ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::*}(self::f<core::num>());
+              ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   self::mul::X z_x = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z * f();
-            ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y z_y = let final Never #t65 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z * f();
-            ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z z_z = let final Never #t66 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z * f();
-            ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
-  core::num n_n = n.{core::num::%}(self::f<core::num>());
+  core::num n_n = n.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t67 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n % f();
-              ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::%}(self::f<core::double>());
+              ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X n_x = let final Never #t68 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n % f();
-            ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y n_y = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n % f();
-            ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z n_z = let final Never #t70 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n % f();
-            ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::%}(self::f<core::num>());
-  core::int i_i = i.{core::num::%}(self::f<core::int>());
-  core::double i_d = i.{core::num::%}(self::f<core::double>());
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X i_x = let final Never #t71 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i % f();
-            ^" in i.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y i_y = let final Never #t72 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i % f();
-            ^" in i.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z i_z = let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i % f();
-            ^" in i.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::%}(self::f<core::num>());
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t74 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d % f();
-              ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::%}(self::f<core::num>());
+              ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   self::mod::X d_x = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d % f();
-            ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y d_y = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d % f();
-            ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z d_z = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d % f();
-            ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::%}(self::f<core::num>());
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t78 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x % f();
-              ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::%}(self::f<core::double>());
+              ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X x_x = let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x % f();
-            ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y x_y = let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x % f();
-            ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z x_z = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x % f();
-            ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::%}(self::f<core::num>());
-  core::int y_i = y.{core::num::%}(self::f<core::int>());
-  core::double y_d = y.{core::num::%}(self::f<core::double>());
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X y_x = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y % f();
-            ^" in y.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y y_y = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y % f();
-            ^" in y.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z y_z = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y % f();
-            ^" in y.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::%}(self::f<core::num>());
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z % f();
-              ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::%}(self::f<core::num>());
+              ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   self::mod::X z_x = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z % f();
-            ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y z_y = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z % f();
-            ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z z_z = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z % f();
-            ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
-  core::num n_n = n.{core::num::remainder}(self::f<core::num>());
+  core::num n_n = n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.remainder(f());
-              ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::remainder}(self::f<core::double>());
+              ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X n_x = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.remainder(f());
-            ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y n_y = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.remainder(f());
-            ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z n_z = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.remainder(f());
-            ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::remainder}(self::f<core::num>());
-  core::int i_i = i.{core::num::remainder}(self::f<core::int>());
-  core::double i_d = i.{core::num::remainder}(self::f<core::double>());
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X i_x = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.remainder(f());
-            ^" in i.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y i_y = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.remainder(f());
-            ^" in i.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z i_z = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.remainder(f());
-            ^" in i.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::double d_n = d.{core::double::remainder}(self::f<core::num>());
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::double d_n = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t96 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d.remainder(f());
-              ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::remainder}(self::f<core::num>());
+              ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   self::remainder::X d_x = let final Never #t97 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d.remainder(f());
-            ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y d_y = let final Never #t98 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d.remainder(f());
-            ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z d_z = let final Never #t99 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d.remainder(f());
-            ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::remainder}(self::f<core::num>());
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.remainder(f());
-              ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::remainder}(self::f<core::double>());
+              ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X x_x = let final Never #t101 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.remainder(f());
-            ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y x_y = let final Never #t102 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.remainder(f());
-            ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z x_z = let final Never #t103 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.remainder(f());
-            ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::remainder}(self::f<core::num>());
-  core::int y_i = y.{core::num::remainder}(self::f<core::int>());
-  core::double y_d = y.{core::num::remainder}(self::f<core::double>());
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X y_x = let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.remainder(f());
-            ^" in y.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y y_y = let final Never #t105 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.remainder(f());
-            ^" in y.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z y_z = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.remainder(f());
-            ^" in y.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::double z_n = z.{core::double::remainder}(self::f<core::num>());
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::double z_n = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z.remainder(f());
-              ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::remainder}(self::f<core::num>());
+              ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   self::remainder::X z_x = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z.remainder(f());
-            ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y z_y = let final Never #t109 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z.remainder(f());
-            ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z z_z = let final Never #t110 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z.remainder(f());
-            ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
-  core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+  core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int n_i = let final Never #t111 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.clamp(f(), f());
-              ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
+              ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double n_d = n.clamp(f(), f());
-                 ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X n_x = let final Never #t113 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.clamp(f(), f());
-            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y n_y = let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.clamp(f(), f());
-            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z n_z = let final Never #t115 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.clamp(f(), f());
-            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
-  core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>());
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
   core::double i_d = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double i_d = i.clamp(f(), f());
-                 ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X i_x = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.clamp(f(), f());
-            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y i_y = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.clamp(f(), f());
-            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z i_z = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.clamp(f(), f());
-            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int d_i = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int d_i = d.clamp(f(), f());
-              ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>());
+              ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
   self::clamp::X d_x = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X d_x = d.clamp(f(), f());
-            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y d_y = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y d_y = d.clamp(f(), f());
-            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z d_z = let final Never #t123 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z d_z = d.clamp(f(), f());
-            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int x_i = let final Never #t124 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.clamp(f(), f());
-              ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
+              ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = let final Never #t125 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double x_d = x.clamp(f(), f());
-                 ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X x_x = let final Never #t126 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.clamp(f(), f());
-            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y x_y = let final Never #t127 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.clamp(f(), f());
-            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z x_z = let final Never #t128 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.clamp(f(), f());
-            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
-  core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>());
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
   core::double y_d = let final Never #t129 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double y_d = y.clamp(f(), f());
-                 ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X y_x = let final Never #t130 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.clamp(f(), f());
-            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y y_y = let final Never #t131 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.clamp(f(), f());
-            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z y_z = let final Never #t132 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.clamp(f(), f());
-            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int z_i = let final Never #t133 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int z_i = z.clamp(f(), f());
-              ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>());
+              ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
   self::clamp::X z_x = let final Never #t134 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X z_x = z.clamp(f(), f());
-            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y z_y = let final Never #t135 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y z_y = z.clamp(f(), f());
-            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z z_z = let final Never #t136 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z z_z = z.clamp(f(), f());
-            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.expect b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.expect
index cdda24f..43aba38 100644
--- a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.expect
@@ -552,503 +552,503 @@
 static method f<T extends core::Object? = dynamic>() → self::f::T%
   return throw "Unsupported";
 static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
-  core::num n_n = n.{core::num::+}(self::f<core::num>());
+  core::num n_n = n.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n + f();
-              ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::+}(self::f<core::double>());
+              ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X n_x = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n + f();
-            ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y n_y = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n + f();
-            ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z n_z = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n + f();
-            ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::+}(self::f<core::num>());
-  core::int i_i = i.{core::num::+}(self::f<core::int>());
-  core::double i_d = i.{core::num::+}(self::f<core::double>());
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X i_x = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i + f();
-            ^" in i.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y i_y = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i + f();
-            ^" in i.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z i_z = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i + f();
-            ^" in i.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::+}(self::f<core::num>());
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d + f();
-              ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::+}(self::f<core::num>());
+              ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   self::add::X d_x = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d + f();
-            ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y d_y = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d + f();
-            ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z d_z = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d + f();
-            ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::+}(self::f<core::num>());
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x + f();
-              ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::+}(self::f<core::double>());
+              ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X x_x = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x + f();
-            ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y x_y = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x + f();
-            ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z x_z = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x + f();
-            ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::+}(self::f<core::num>());
-  core::int y_i = y.{core::num::+}(self::f<core::int>());
-  core::double y_d = y.{core::num::+}(self::f<core::double>());
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X y_x = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y + f();
-            ^" in y.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y y_y = let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y + f();
-            ^" in y.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z y_z = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y + f();
-            ^" in y.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::+}(self::f<core::num>());
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z + f();
-              ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::+}(self::f<core::num>());
+              ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   self::add::X z_x = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z + f();
-            ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y z_y = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z + f();
-            ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z z_z = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z + f();
-            ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
-  core::num n_n = n.{core::num::-}(self::f<core::num>());
+  core::num n_n = n.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n - f();
-              ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::-}(self::f<core::double>());
+              ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X n_x = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n - f();
-            ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y n_y = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n - f();
-            ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z n_z = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n - f();
-            ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::-}(self::f<core::num>());
-  core::int i_i = i.{core::num::-}(self::f<core::int>());
-  core::double i_d = i.{core::num::-}(self::f<core::double>());
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X i_x = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i - f();
-            ^" in i.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y i_y = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i - f();
-            ^" in i.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z i_z = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i - f();
-            ^" in i.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::-}(self::f<core::num>());
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d - f();
-              ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::-}(self::f<core::num>());
+              ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   self::sub::X d_x = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d - f();
-            ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y d_y = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d - f();
-            ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z d_z = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d - f();
-            ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::-}(self::f<core::num>());
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x - f();
-              ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::-}(self::f<core::double>());
+              ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X x_x = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x - f();
-            ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y x_y = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x - f();
-            ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z x_z = let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x - f();
-            ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::-}(self::f<core::num>());
-  core::int y_i = y.{core::num::-}(self::f<core::int>());
-  core::double y_d = y.{core::num::-}(self::f<core::double>());
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X y_x = let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y - f();
-            ^" in y.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y y_y = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y - f();
-            ^" in y.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z y_z = let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y - f();
-            ^" in y.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::-}(self::f<core::num>());
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z - f();
-              ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::-}(self::f<core::num>());
+              ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   self::sub::X z_x = let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z - f();
-            ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y z_y = let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z - f();
-            ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z z_z = let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z - f();
-            ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
-  core::num n_n = n.{core::num::*}(self::f<core::num>());
+  core::num n_n = n.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n * f();
-              ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::*}(self::f<core::double>());
+              ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X n_x = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n * f();
-            ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y n_y = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n * f();
-            ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z n_z = let final Never #t48 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n * f();
-            ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::*}(self::f<core::num>());
-  core::int i_i = i.{core::num::*}(self::f<core::int>());
-  core::double i_d = i.{core::num::*}(self::f<core::double>());
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X i_x = let final Never #t49 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i * f();
-            ^" in i.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y i_y = let final Never #t50 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i * f();
-            ^" in i.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z i_z = let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i * f();
-            ^" in i.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::*}(self::f<core::num>());
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t52 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d * f();
-              ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::*}(self::f<core::num>());
+              ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   self::mul::X d_x = let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d * f();
-            ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y d_y = let final Never #t54 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d * f();
-            ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z d_z = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d * f();
-            ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::*}(self::f<core::num>());
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x * f();
-              ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::*}(self::f<core::double>());
+              ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X x_x = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x * f();
-            ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y x_y = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x * f();
-            ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z x_z = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x * f();
-            ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::*}(self::f<core::num>());
-  core::int y_i = y.{core::num::*}(self::f<core::int>());
-  core::double y_d = y.{core::num::*}(self::f<core::double>());
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X y_x = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y * f();
-            ^" in y.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y y_y = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y * f();
-            ^" in y.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z y_z = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y * f();
-            ^" in y.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::*}(self::f<core::num>());
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z * f();
-              ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::*}(self::f<core::num>());
+              ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   self::mul::X z_x = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z * f();
-            ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y z_y = let final Never #t65 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z * f();
-            ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z z_z = let final Never #t66 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z * f();
-            ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
-  core::num n_n = n.{core::num::%}(self::f<core::num>());
+  core::num n_n = n.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t67 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n % f();
-              ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::%}(self::f<core::double>());
+              ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X n_x = let final Never #t68 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n % f();
-            ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y n_y = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n % f();
-            ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z n_z = let final Never #t70 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n % f();
-            ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::%}(self::f<core::num>());
-  core::int i_i = i.{core::num::%}(self::f<core::int>());
-  core::double i_d = i.{core::num::%}(self::f<core::double>());
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X i_x = let final Never #t71 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i % f();
-            ^" in i.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y i_y = let final Never #t72 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i % f();
-            ^" in i.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z i_z = let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i % f();
-            ^" in i.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::%}(self::f<core::num>());
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t74 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d % f();
-              ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::%}(self::f<core::num>());
+              ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   self::mod::X d_x = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d % f();
-            ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y d_y = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d % f();
-            ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z d_z = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d % f();
-            ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::%}(self::f<core::num>());
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t78 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x % f();
-              ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::%}(self::f<core::double>());
+              ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X x_x = let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x % f();
-            ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y x_y = let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x % f();
-            ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z x_z = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x % f();
-            ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::%}(self::f<core::num>());
-  core::int y_i = y.{core::num::%}(self::f<core::int>());
-  core::double y_d = y.{core::num::%}(self::f<core::double>());
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X y_x = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y % f();
-            ^" in y.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y y_y = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y % f();
-            ^" in y.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z y_z = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y % f();
-            ^" in y.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::%}(self::f<core::num>());
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z % f();
-              ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::%}(self::f<core::num>());
+              ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   self::mod::X z_x = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z % f();
-            ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y z_y = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z % f();
-            ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z z_z = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z % f();
-            ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
-  core::num n_n = n.{core::num::remainder}(self::f<core::num>());
+  core::num n_n = n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.remainder(f());
-              ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::remainder}(self::f<core::double>());
+              ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X n_x = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.remainder(f());
-            ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y n_y = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.remainder(f());
-            ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z n_z = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.remainder(f());
-            ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::remainder}(self::f<core::num>());
-  core::int i_i = i.{core::num::remainder}(self::f<core::int>());
-  core::double i_d = i.{core::num::remainder}(self::f<core::double>());
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X i_x = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.remainder(f());
-            ^" in i.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y i_y = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.remainder(f());
-            ^" in i.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z i_z = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.remainder(f());
-            ^" in i.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::double d_n = d.{core::double::remainder}(self::f<core::num>());
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::double d_n = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t96 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d.remainder(f());
-              ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::remainder}(self::f<core::num>());
+              ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   self::remainder::X d_x = let final Never #t97 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d.remainder(f());
-            ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y d_y = let final Never #t98 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d.remainder(f());
-            ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z d_z = let final Never #t99 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d.remainder(f());
-            ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::remainder}(self::f<core::num>());
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.remainder(f());
-              ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::remainder}(self::f<core::double>());
+              ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X x_x = let final Never #t101 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.remainder(f());
-            ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y x_y = let final Never #t102 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.remainder(f());
-            ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z x_z = let final Never #t103 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.remainder(f());
-            ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::remainder}(self::f<core::num>());
-  core::int y_i = y.{core::num::remainder}(self::f<core::int>());
-  core::double y_d = y.{core::num::remainder}(self::f<core::double>());
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X y_x = let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.remainder(f());
-            ^" in y.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y y_y = let final Never #t105 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.remainder(f());
-            ^" in y.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z y_z = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.remainder(f());
-            ^" in y.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::double z_n = z.{core::double::remainder}(self::f<core::num>());
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::double z_n = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z.remainder(f());
-              ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::remainder}(self::f<core::num>());
+              ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   self::remainder::X z_x = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z.remainder(f());
-            ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y z_y = let final Never #t109 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z.remainder(f());
-            ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z z_z = let final Never #t110 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z.remainder(f());
-            ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
-  core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+  core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int n_i = let final Never #t111 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.clamp(f(), f());
-              ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
+              ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double n_d = n.clamp(f(), f());
-                 ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X n_x = let final Never #t113 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.clamp(f(), f());
-            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y n_y = let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.clamp(f(), f());
-            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z n_z = let final Never #t115 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.clamp(f(), f());
-            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
-  core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>());
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
   core::double i_d = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double i_d = i.clamp(f(), f());
-                 ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X i_x = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.clamp(f(), f());
-            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y i_y = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.clamp(f(), f());
-            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z i_z = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.clamp(f(), f());
-            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int d_i = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int d_i = d.clamp(f(), f());
-              ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>());
+              ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
   self::clamp::X d_x = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X d_x = d.clamp(f(), f());
-            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y d_y = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y d_y = d.clamp(f(), f());
-            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z d_z = let final Never #t123 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z d_z = d.clamp(f(), f());
-            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int x_i = let final Never #t124 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.clamp(f(), f());
-              ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
+              ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = let final Never #t125 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double x_d = x.clamp(f(), f());
-                 ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X x_x = let final Never #t126 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.clamp(f(), f());
-            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y x_y = let final Never #t127 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.clamp(f(), f());
-            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z x_z = let final Never #t128 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.clamp(f(), f());
-            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
-  core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>());
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
   core::double y_d = let final Never #t129 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double y_d = y.clamp(f(), f());
-                 ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X y_x = let final Never #t130 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.clamp(f(), f());
-            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y y_y = let final Never #t131 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.clamp(f(), f());
-            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z y_z = let final Never #t132 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.clamp(f(), f());
-            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int z_i = let final Never #t133 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int z_i = z.clamp(f(), f());
-              ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>());
+              ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
   self::clamp::X z_x = let final Never #t134 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X z_x = z.clamp(f(), f());
-            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y z_y = let final Never #t135 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y z_y = z.clamp(f(), f());
-            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z z_z = let final Never #t136 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z z_z = z.clamp(f(), f());
-            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.transformed.expect
index cdda24f..43aba38 100644
--- a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.transformed.expect
@@ -552,503 +552,503 @@
 static method f<T extends core::Object? = dynamic>() → self::f::T%
   return throw "Unsupported";
 static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
-  core::num n_n = n.{core::num::+}(self::f<core::num>());
+  core::num n_n = n.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n + f();
-              ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::+}(self::f<core::double>());
+              ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X n_x = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n + f();
-            ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y n_y = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n + f();
-            ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z n_z = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n + f();
-            ^" in n.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::+}(self::f<core::num>());
-  core::int i_i = i.{core::num::+}(self::f<core::int>());
-  core::double i_d = i.{core::num::+}(self::f<core::double>());
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X i_x = let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i + f();
-            ^" in i.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y i_y = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i + f();
-            ^" in i.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z i_z = let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i + f();
-            ^" in i.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::+}(self::f<core::num>());
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d + f();
-              ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::+}(self::f<core::num>());
+              ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   self::add::X d_x = let final Never #t9 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d + f();
-            ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y d_y = let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d + f();
-            ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z d_z = let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d + f();
-            ^" in d.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::+}(self::f<core::num>());
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x + f();
-              ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::+}(self::f<core::double>());
+              ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X x_x = let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x + f();
-            ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y x_y = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x + f();
-            ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z x_z = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x + f();
-            ^" in x.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::+}(self::f<core::num>());
-  core::int y_i = y.{core::num::+}(self::f<core::int>());
-  core::double y_d = y.{core::num::+}(self::f<core::double>());
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
   self::add::X y_x = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y + f();
-            ^" in y.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y y_y = let final Never #t17 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y + f();
-            ^" in y.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z y_z = let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y + f();
-            ^" in y.{core::num::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::+}(self::f<core::num>());
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z + f();
-              ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::+}(self::f<core::num>());
+              ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
   self::add::X z_x = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z + f();
-            ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Y z_y = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z + f();
-            ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::add::Z z_z = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z + f();
-            ^" in z.{core::double::+}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
-  core::num n_n = n.{core::num::-}(self::f<core::num>());
+  core::num n_n = n.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n - f();
-              ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::-}(self::f<core::double>());
+              ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X n_x = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n - f();
-            ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y n_y = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n - f();
-            ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z n_z = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n - f();
-            ^" in n.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::-}(self::f<core::num>());
-  core::int i_i = i.{core::num::-}(self::f<core::int>());
-  core::double i_d = i.{core::num::-}(self::f<core::double>());
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X i_x = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i - f();
-            ^" in i.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y i_y = let final Never #t28 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i - f();
-            ^" in i.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z i_z = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i - f();
-            ^" in i.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::-}(self::f<core::num>());
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d - f();
-              ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::-}(self::f<core::num>());
+              ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   self::sub::X d_x = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d - f();
-            ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y d_y = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d - f();
-            ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z d_z = let final Never #t33 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d - f();
-            ^" in d.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::-}(self::f<core::num>());
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t34 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x - f();
-              ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::-}(self::f<core::double>());
+              ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X x_x = let final Never #t35 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x - f();
-            ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y x_y = let final Never #t36 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x - f();
-            ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z x_z = let final Never #t37 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x - f();
-            ^" in x.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::-}(self::f<core::num>());
-  core::int y_i = y.{core::num::-}(self::f<core::int>());
-  core::double y_d = y.{core::num::-}(self::f<core::double>());
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
   self::sub::X y_x = let final Never #t38 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y - f();
-            ^" in y.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y y_y = let final Never #t39 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y - f();
-            ^" in y.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z y_z = let final Never #t40 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y - f();
-            ^" in y.{core::num::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::-}(self::f<core::num>());
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t41 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z - f();
-              ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::-}(self::f<core::num>());
+              ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
   self::sub::X z_x = let final Never #t42 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z - f();
-            ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Y z_y = let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z - f();
-            ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::sub::Z z_z = let final Never #t44 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z - f();
-            ^" in z.{core::double::-}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
-  core::num n_n = n.{core::num::*}(self::f<core::num>());
+  core::num n_n = n.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n * f();
-              ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::*}(self::f<core::double>());
+              ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X n_x = let final Never #t46 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n * f();
-            ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y n_y = let final Never #t47 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n * f();
-            ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z n_z = let final Never #t48 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n * f();
-            ^" in n.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::*}(self::f<core::num>());
-  core::int i_i = i.{core::num::*}(self::f<core::int>());
-  core::double i_d = i.{core::num::*}(self::f<core::double>());
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X i_x = let final Never #t49 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i * f();
-            ^" in i.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y i_y = let final Never #t50 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i * f();
-            ^" in i.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z i_z = let final Never #t51 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i * f();
-            ^" in i.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::*}(self::f<core::num>());
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t52 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d * f();
-              ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::*}(self::f<core::num>());
+              ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   self::mul::X d_x = let final Never #t53 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d * f();
-            ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y d_y = let final Never #t54 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d * f();
-            ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z d_z = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d * f();
-            ^" in d.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::*}(self::f<core::num>());
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t56 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x * f();
-              ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::*}(self::f<core::double>());
+              ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X x_x = let final Never #t57 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x * f();
-            ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y x_y = let final Never #t58 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x * f();
-            ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z x_z = let final Never #t59 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x * f();
-            ^" in x.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::*}(self::f<core::num>());
-  core::int y_i = y.{core::num::*}(self::f<core::int>());
-  core::double y_d = y.{core::num::*}(self::f<core::double>());
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
   self::mul::X y_x = let final Never #t60 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y * f();
-            ^" in y.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y y_y = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y * f();
-            ^" in y.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z y_z = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y * f();
-            ^" in y.{core::num::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::*}(self::f<core::num>());
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z * f();
-              ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::*}(self::f<core::num>());
+              ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
   self::mul::X z_x = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z * f();
-            ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Y z_y = let final Never #t65 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z * f();
-            ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mul::Z z_z = let final Never #t66 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z * f();
-            ^" in z.{core::double::*}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
-  core::num n_n = n.{core::num::%}(self::f<core::num>());
+  core::num n_n = n.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t67 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n % f();
-              ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::%}(self::f<core::double>());
+              ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X n_x = let final Never #t68 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n % f();
-            ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y n_y = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n % f();
-            ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z n_z = let final Never #t70 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n % f();
-            ^" in n.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::%}(self::f<core::num>());
-  core::int i_i = i.{core::num::%}(self::f<core::int>());
-  core::double i_d = i.{core::num::%}(self::f<core::double>());
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X i_x = let final Never #t71 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i % f();
-            ^" in i.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y i_y = let final Never #t72 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i % f();
-            ^" in i.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z i_z = let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i % f();
-            ^" in i.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::double::%}(self::f<core::num>());
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t74 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d % f();
-              ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::%}(self::f<core::num>());
+              ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   self::mod::X d_x = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d % f();
-            ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y d_y = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d % f();
-            ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z d_z = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d % f();
-            ^" in d.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::%}(self::f<core::num>());
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t78 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x % f();
-              ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::%}(self::f<core::double>());
+              ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X x_x = let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x % f();
-            ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y x_y = let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x % f();
-            ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z x_z = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x % f();
-            ^" in x.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::%}(self::f<core::num>());
-  core::int y_i = y.{core::num::%}(self::f<core::int>());
-  core::double y_d = y.{core::num::%}(self::f<core::double>());
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
   self::mod::X y_x = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y % f();
-            ^" in y.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y y_y = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y % f();
-            ^" in y.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z y_z = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y % f();
-            ^" in y.{core::num::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::double::%}(self::f<core::num>());
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z % f();
-              ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::%}(self::f<core::num>());
+              ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
   self::mod::X z_x = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z % f();
-            ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Y z_y = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z % f();
-            ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::mod::Z z_z = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z % f();
-            ^" in z.{core::double::%}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
-  core::num n_n = n.{core::num::remainder}(self::f<core::num>());
+  core::num n_n = n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int n_i = let final Never #t89 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.remainder(f());
-              ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double n_d = n.{core::num::remainder}(self::f<core::double>());
+              ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X n_x = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.remainder(f());
-            ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y n_y = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.remainder(f());
-            ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z n_z = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.remainder(f());
-            ^" in n.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::remainder}(self::f<core::num>());
-  core::int i_i = i.{core::num::remainder}(self::f<core::int>());
-  core::double i_d = i.{core::num::remainder}(self::f<core::double>());
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X i_x = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.remainder(f());
-            ^" in i.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y i_y = let final Never #t94 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.remainder(f());
-            ^" in i.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z i_z = let final Never #t95 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.remainder(f());
-            ^" in i.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::double d_n = d.{core::double::remainder}(self::f<core::num>());
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::double d_n = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   core::int d_i = let final Never #t96 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int d_i = d.remainder(f());
-              ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::double::remainder}(self::f<core::num>());
+              ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   self::remainder::X d_x = let final Never #t97 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X d_x = d.remainder(f());
-            ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y d_y = let final Never #t98 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y d_y = d.remainder(f());
-            ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z d_z = let final Never #t99 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z d_z = d.remainder(f());
-            ^" in d.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::remainder}(self::f<core::num>());
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
   core::int x_i = let final Never #t100 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.remainder(f());
-              ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double x_d = x.{core::num::remainder}(self::f<core::double>());
+              ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X x_x = let final Never #t101 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.remainder(f());
-            ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y x_y = let final Never #t102 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.remainder(f());
-            ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z x_z = let final Never #t103 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.remainder(f());
-            ^" in x.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::remainder}(self::f<core::num>());
-  core::int y_i = y.{core::num::remainder}(self::f<core::int>());
-  core::double y_d = y.{core::num::remainder}(self::f<core::double>());
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
   self::remainder::X y_x = let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.remainder(f());
-            ^" in y.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y y_y = let final Never #t105 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.remainder(f());
-            ^" in y.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z y_z = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.remainder(f());
-            ^" in y.{core::num::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::double z_n = z.{core::double::remainder}(self::f<core::num>());
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::double z_n = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   core::int z_i = let final Never #t107 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   int z_i = z.remainder(f());
-              ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::double::remainder}(self::f<core::num>());
+              ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
   self::remainder::X z_x = let final Never #t108 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
   X z_x = z.remainder(f());
-            ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Y z_y = let final Never #t109 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
   Y z_y = z.remainder(f());
-            ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
   self::remainder::Z z_z = let final Never #t110 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
   Z z_z = z.remainder(f());
-            ^" in z.{core::double::remainder}(self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
-  core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+  core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int n_i = let final Never #t111 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int n_i = n.clamp(f(), f());
-              ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
+              ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double n_d = let final Never #t112 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double n_d = n.clamp(f(), f());
-                 ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X n_x = let final Never #t113 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X n_x = n.clamp(f(), f());
-            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y n_y = let final Never #t114 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y n_y = n.clamp(f(), f());
-            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z n_z = let final Never #t115 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z n_z = n.clamp(f(), f());
-            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
-  core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>());
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
   core::double i_d = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double i_d = i.clamp(f(), f());
-                 ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X i_x = let final Never #t117 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X i_x = i.clamp(f(), f());
-            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y i_y = let final Never #t118 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y i_y = i.clamp(f(), f());
-            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z i_z = let final Never #t119 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z i_z = i.clamp(f(), f());
-            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int d_i = let final Never #t120 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int d_i = d.clamp(f(), f());
-              ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>());
+              ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
   self::clamp::X d_x = let final Never #t121 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X d_x = d.clamp(f(), f());
-            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y d_y = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y d_y = d.clamp(f(), f());
-            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z d_z = let final Never #t123 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z d_z = d.clamp(f(), f());
-            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int x_i = let final Never #t124 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int x_i = x.clamp(f(), f());
-              ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
+              ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
   core::double x_d = let final Never #t125 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double x_d = x.clamp(f(), f());
-                 ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X x_x = let final Never #t126 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X x_x = x.clamp(f(), f());
-            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y x_y = let final Never #t127 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y x_y = x.clamp(f(), f());
-            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z x_z = let final Never #t128 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z x_z = x.clamp(f(), f());
-            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
-  core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>());
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
   core::double y_d = let final Never #t129 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   double y_d = y.clamp(f(), f());
-                 ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::double;
+                 ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
   self::clamp::X y_x = let final Never #t130 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X y_x = y.clamp(f(), f());
-            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y y_y = let final Never #t131 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y y_y = y.clamp(f(), f());
-            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z y_z = let final Never #t132 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z y_z = y.clamp(f(), f());
-            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
-  core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>());
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
   core::int z_i = let final Never #t133 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   int z_i = z.clamp(f(), f());
-              ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} core::int;
-  core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>());
+              ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
   self::clamp::X z_x = let final Never #t134 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
   X z_x = z.clamp(f(), f());
-            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Y z_y = let final Never #t135 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
   Y z_y = z.clamp(f(), f());
-            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
   self::clamp::Z z_z = let final Never #t136 = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
   Z z_z = z.clamp(f(), f());
-            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()) as{TypeError,ForNonNullableByDefault} Never;
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.expect
index 8c3e68c..d77513d 100644
--- a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.strong.expect
@@ -445,64 +445,64 @@
 }
 static field core::num topLevelBinary = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:37:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 var topLevelBinary = nullableInt + 0;
-                                 ^" in self::nullableInt.{core::num::+}(0);
+                                 ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
 static field core::int topLevelUnary = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:38:21: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 var topLevelUnary = -nullableInt;
-                    ^" in self::nullableInt.{core::int::unary-}();
+                    ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
 static field dynamic topLevelIndexGet = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:39:35: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexGet = nullableMap[0];
-                                  ^" in self::nullableMap.{core::Map::[]}(0);
+                                  ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
 static field core::int topLevelIndexSet = let final core::Map<dynamic, dynamic>? #t4 = self::nullableMap in let final core::int #t5 = 0 in let final core::int #t6 = 1 in let final void #t7 = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:40:35: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexSet = nullableMap[0] = 1;
-                                  ^" in #t4.{core::Map::[]=}(#t5, #t6) in #t6;
+                                  ^" in #t4.{core::Map::[]=}{<nullable>}.(#t5, #t6){(dynamic, dynamic) → void} in #t6;
 static field dynamic topLevelIndexGetSet = let final core::Map<dynamic, dynamic>? #t9 = self::nullableMap in let final core::int #t10 = 0 in let final dynamic #t11 = (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexGetSet = nullableMap[0] += 1;
-                                     ^" in #t9.{core::Map::[]}(#t10)).+(1) in let final void #t13 = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+                                     ^" in #t9.{core::Map::[]}{<nullable>}.(#t10){(core::Object?) → dynamic}){dynamic}.+(1) in let final void #t13 = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexGetSet = nullableMap[0] += 1;
-                                     ^" in #t9.{core::Map::[]=}(#t10, #t11) in #t11;
+                                     ^" in #t9.{core::Map::[]=}{<nullable>}.(#t10, #t11){(dynamic, dynamic) → void} in #t11;
 static field core::int topLevelPropertyGet = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:42:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertyGet = nullableClass.property;
-                                        ^^^^^^^^" in self::nullableClass.{self::Class::property};
+                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
 static field core::int topLevelPropertySet = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:43:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertySet = nullableClass.property = 1;
-                                        ^^^^^^^^" in self::nullableClass.{self::Class::property} = 1;
+                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
 static field core::int topLevelPropertyGetSet = let final self::Class? #t17 = self::nullableClass in let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertyGetSet = nullableClass.property += 1;
-                                           ^^^^^^^^" in #t17.{self::Class::property} = (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+                                           ^^^^^^^^" in #t17.{self::Class::property}{<nullable>}. = (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertyGetSet = nullableClass.property += 1;
-                                           ^^^^^^^^" in #t17.{self::Class::property}).{core::num::+}(1);
+                                           ^^^^^^^^" in #t17.{self::Class::property}{<nullable>}.{core::int}).{core::num::+}(1){(core::num) → core::int};
 static field core::int topLevelMethodInvocation = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:45:46: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
 var topLevelMethodInvocation = nullableClass.method();
-                                             ^^^^^^" in self::nullableClass.{self::Class::method}();
+                                             ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
 static field () → core::int topLevelMethodTearOff = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:46:43: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelMethodTearOff = nullableClass.method;
-                                          ^^^^^^" in self::nullableClass.{self::Class::method};
+                                          ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
 static field dynamic topLevelFunctionImplicitCall = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:47:52: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
 var topLevelFunctionImplicitCall = nullableFunction();
-                                                   ^" in self::nullableFunction.call();
+                                                   ^" in self::nullableFunction{<nullable>}.();
 static field dynamic topLevelFunctionExplicitCall = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:48:53: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?. instead.
 var topLevelFunctionExplicitCall = nullableFunction.call();
-                                                    ^^^^" in self::nullableFunction.call();
+                                                    ^^^^" in self::nullableFunction{<nullable>}.();
 static field core::Function? topLevelFunctionTearOff = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:49:48: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try accessing using ?. instead.
@@ -511,11 +511,11 @@
 static field void topLevelFunctionTypeImplicitCall = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:50:60: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
 var topLevelFunctionTypeImplicitCall = nullableFunctionType();
-                                                           ^" in self::nullableFunctionType.call();
+                                                           ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
 static field void topLevelFunctionTypeExplicitCall = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:51:61: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
 var topLevelFunctionTypeExplicitCall = nullableFunctionType.call();
-                                                            ^^^^" in self::nullableFunctionType.call();
+                                                            ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
 static field () →? void topLevelFunctionTypeTearOff = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:52:56: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
 Try accessing using ?. instead.
 var topLevelFunctionTypeTearOff = nullableFunctionType.call;
@@ -524,22 +524,22 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionField = nullableClass.functionField();
-                                          ^" in self::nullableClass.{self::Class::functionField}.call();
+                                          ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
 static field void topLevelFunctionTypeField = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:54:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionTypeField = nullableClass.functionTypeField();
-                                              ^" in self::nullableClass.{self::Class::functionTypeField}.call();
+                                              ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
 static field dynamic topLevelFunctionGetter = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:55:44: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionGetter = nullableClass.functionGetter();
-                                           ^" in self::nullableClass.{self::Class::functionGetter}.call();
+                                           ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
 static field void topLevelFunctionTypeGetter = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:56:48: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionTypeGetter = nullableClass.functionTypeGetter();
-                                               ^" in self::nullableClass.{self::Class::functionTypeGetter}.call();
+                                               ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
 static field core::int topLevelExtensionBinary = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:58:45: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionBinary = nullableClass + 0;
@@ -559,7 +559,7 @@
 static field core::int topLevelExtensionIndexGetSet = let final self::Class? #t40 = self::nullableClass in let final core::int #t41 = 0 in let final core::int #t42 = (let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
-                                                ^" in self::Extension|[](#t40, #t41)).{core::num::+}(1) in let final void #t44 = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+                                                ^" in self::Extension|[](#t40, #t41)).{core::num::+}(1){(core::num) → core::int} in let final void #t44 = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
                                                 ^" in self::Extension|[]=(#t40, #t41, #t42) in #t42;
@@ -581,7 +581,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
-                                                    ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t50)).{core::num::+}(1) in let final void #t54 = self::Extension|set#extensionProperty(#t50, #t52) in #t52;
+                                                    ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t50)).{core::num::+}(1){(core::num) → core::int} in let final void #t54 = self::Extension|set#extensionProperty(#t50, #t52) in #t52;
 static field core::int topLevelExtensionMethodInvocation = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:66:55: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
@@ -611,12 +611,12 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
-                                                    ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass).call();
+                                                    ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
 static field void topLevelExtensionFunctionTypeGetter = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:73:19: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
     nullableClass.extensionFunctionTypeGetter();
-                  ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass).call();
+                  ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass)(){() → void};
 static method Extension|+(lowered final self::Class #this, core::int value) → core::int
   return 0;
 static method Extension|unary-(lowered final self::Class #this) → core::int
@@ -652,64 +652,64 @@
 static method test() → dynamic {
   core::num localBinary = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:76:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   var localBinary = nullableInt + 0;
-                                ^" in self::nullableInt.{core::num::+}(0);
+                                ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
   core::int localUnary = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:77:20: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   var localUnary = -nullableInt;
-                   ^" in self::nullableInt.{core::int::unary-}();
+                   ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
   dynamic localIndexGet = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:78:34: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexGet = nullableMap[0];
-                                 ^" in self::nullableMap.{core::Map::[]}(0);
+                                 ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
   core::int localIndexSet = let final core::Map<dynamic, dynamic>? #t65 = self::nullableMap in let final core::int #t66 = 0 in let final core::int #t67 = 1 in let final void #t68 = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:79:34: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexSet = nullableMap[0] = 1;
-                                 ^" in #t65.{core::Map::[]=}(#t66, #t67) in #t67;
+                                 ^" in #t65.{core::Map::[]=}{<nullable>}.(#t66, #t67){(dynamic, dynamic) → void} in #t67;
   dynamic localIndexGetSet = let final core::Map<dynamic, dynamic>? #t70 = self::nullableMap in let final core::int #t71 = 0 in let final dynamic #t72 = (let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexGetSet = nullableMap[0] += 1;
-                                    ^" in #t70.{core::Map::[]}(#t71)).+(1) in let final void #t74 = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+                                    ^" in #t70.{core::Map::[]}{<nullable>}.(#t71){(core::Object?) → dynamic}){dynamic}.+(1) in let final void #t74 = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexGetSet = nullableMap[0] += 1;
-                                    ^" in #t70.{core::Map::[]=}(#t71, #t72) in #t72;
+                                    ^" in #t70.{core::Map::[]=}{<nullable>}.(#t71, #t72){(dynamic, dynamic) → void} in #t72;
   core::int localPropertyGet = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:81:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertyGet = nullableClass.property;
-                                       ^^^^^^^^" in self::nullableClass.{self::Class::property};
+                                       ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
   core::int localPropertySet = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:82:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertySet = nullableClass.property = 1;
-                                       ^^^^^^^^" in self::nullableClass.{self::Class::property} = 1;
+                                       ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
   core::int localPropertyGetSet = let final self::Class? #t78 = self::nullableClass in let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertyGetSet = nullableClass.property += 1;
-                                          ^^^^^^^^" in #t78.{self::Class::property} = (let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+                                          ^^^^^^^^" in #t78.{self::Class::property}{<nullable>}. = (let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertyGetSet = nullableClass.property += 1;
-                                          ^^^^^^^^" in #t78.{self::Class::property}).{core::num::+}(1);
+                                          ^^^^^^^^" in #t78.{self::Class::property}{<nullable>}.{core::int}).{core::num::+}(1){(core::num) → core::int};
   core::int localMethodInvocation = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:84:45: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
   var localMethodInvocation = nullableClass.method();
-                                            ^^^^^^" in self::nullableClass.{self::Class::method}();
+                                            ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
   () → core::int localMethodTearOff = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:85:42: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localMethodTearOff = nullableClass.method;
-                                         ^^^^^^" in self::nullableClass.{self::Class::method};
+                                         ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
   dynamic localFunctionImplicitCall = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:86:51: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
   var localFunctionImplicitCall = nullableFunction();
-                                                  ^" in self::nullableFunction.call();
+                                                  ^" in self::nullableFunction{<nullable>}.();
   dynamic localFunctionExplicitCall = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:87:52: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?. instead.
   var localFunctionExplicitCall = nullableFunction.call();
-                                                   ^^^^" in self::nullableFunction.call();
+                                                   ^^^^" in self::nullableFunction{<nullable>}.();
   core::Function? localFunctionTearOff = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:88:47: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try accessing using ?. instead.
@@ -718,11 +718,11 @@
   void localFunctionTypeImplicitCall = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:89:59: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   var localFunctionTypeImplicitCall = nullableFunctionType();
-                                                          ^" in self::nullableFunctionType.call();
+                                                          ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
   void localFunctionTypeExplicitCall = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:90:60: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   var localFunctionTypeExplicitCall = nullableFunctionType.call();
-                                                           ^^^^" in self::nullableFunctionType.call();
+                                                           ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
   () →? void localFunctionTypeTearOff = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:91:55: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
 Try accessing using ?. instead.
   var localFunctionTypeTearOff = nullableFunctionType.call;
@@ -731,22 +731,22 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionField = nullableClass.functionField();
-                                         ^" in self::nullableClass.{self::Class::functionField}.call();
+                                         ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
   void localFunctionTypeField = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:93:46: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionTypeField = nullableClass.functionTypeField();
-                                             ^" in self::nullableClass.{self::Class::functionTypeField}.call();
+                                             ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
   dynamic localFunctionGetter = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:94:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionGetter = nullableClass.functionGetter();
-                                          ^" in self::nullableClass.{self::Class::functionGetter}.call();
+                                          ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
   void localFunctionTypeGetter = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:95:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionTypeGetter = nullableClass.functionTypeGetter();
-                                              ^" in self::nullableClass.{self::Class::functionTypeGetter}.call();
+                                              ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
   core::int localExtensionBinary = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:97:44: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionBinary = nullableClass + 0;
@@ -766,7 +766,7 @@
   core::int localExtensionIndexGetSet = let final self::Class? #t101 = self::nullableClass in let final core::int #t102 = 0 in let final core::int #t103 = (let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionIndexGetSet = nullableClass[0] += 1;
-                                               ^" in self::Extension|[](#t101, #t102)).{core::num::+}(1) in let final void #t105 = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+                                               ^" in self::Extension|[](#t101, #t102)).{core::num::+}(1){(core::num) → core::int} in let final void #t105 = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionIndexGetSet = nullableClass[0] += 1;
                                                ^" in self::Extension|[]=(#t101, #t102, #t103) in #t103;
@@ -788,7 +788,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
-                                                   ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t111)).{core::num::+}(1) in let final void #t115 = self::Extension|set#extensionProperty(#t111, #t113) in #t113;
+                                                   ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t111)).{core::num::+}(1){(core::num) → core::int} in let final void #t115 = self::Extension|set#extensionProperty(#t111, #t113) in #t113;
   core::int localExtensionMethodInvocation = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:105:54: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
@@ -818,11 +818,11 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
-                                                   ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass).call();
+                                                   ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
   void localExtensionFunctionTypeGetter = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:112:21: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
       nullableClass.extensionFunctionTypeGetter();
-                    ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass).call();
+                    ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass)(){() → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.expect
index 8c3e68c..d77513d 100644
--- a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.expect
@@ -445,64 +445,64 @@
 }
 static field core::num topLevelBinary = let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:37:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 var topLevelBinary = nullableInt + 0;
-                                 ^" in self::nullableInt.{core::num::+}(0);
+                                 ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
 static field core::int topLevelUnary = let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:38:21: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 var topLevelUnary = -nullableInt;
-                    ^" in self::nullableInt.{core::int::unary-}();
+                    ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
 static field dynamic topLevelIndexGet = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:39:35: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexGet = nullableMap[0];
-                                  ^" in self::nullableMap.{core::Map::[]}(0);
+                                  ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
 static field core::int topLevelIndexSet = let final core::Map<dynamic, dynamic>? #t4 = self::nullableMap in let final core::int #t5 = 0 in let final core::int #t6 = 1 in let final void #t7 = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:40:35: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexSet = nullableMap[0] = 1;
-                                  ^" in #t4.{core::Map::[]=}(#t5, #t6) in #t6;
+                                  ^" in #t4.{core::Map::[]=}{<nullable>}.(#t5, #t6){(dynamic, dynamic) → void} in #t6;
 static field dynamic topLevelIndexGetSet = let final core::Map<dynamic, dynamic>? #t9 = self::nullableMap in let final core::int #t10 = 0 in let final dynamic #t11 = (let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexGetSet = nullableMap[0] += 1;
-                                     ^" in #t9.{core::Map::[]}(#t10)).+(1) in let final void #t13 = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+                                     ^" in #t9.{core::Map::[]}{<nullable>}.(#t10){(core::Object?) → dynamic}){dynamic}.+(1) in let final void #t13 = let final Never #t14 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
 var topLevelIndexGetSet = nullableMap[0] += 1;
-                                     ^" in #t9.{core::Map::[]=}(#t10, #t11) in #t11;
+                                     ^" in #t9.{core::Map::[]=}{<nullable>}.(#t10, #t11){(dynamic, dynamic) → void} in #t11;
 static field core::int topLevelPropertyGet = let final Never #t15 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:42:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertyGet = nullableClass.property;
-                                        ^^^^^^^^" in self::nullableClass.{self::Class::property};
+                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
 static field core::int topLevelPropertySet = let final Never #t16 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:43:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertySet = nullableClass.property = 1;
-                                        ^^^^^^^^" in self::nullableClass.{self::Class::property} = 1;
+                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
 static field core::int topLevelPropertyGetSet = let final self::Class? #t17 = self::nullableClass in let final Never #t18 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertyGetSet = nullableClass.property += 1;
-                                           ^^^^^^^^" in #t17.{self::Class::property} = (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+                                           ^^^^^^^^" in #t17.{self::Class::property}{<nullable>}. = (let final Never #t19 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelPropertyGetSet = nullableClass.property += 1;
-                                           ^^^^^^^^" in #t17.{self::Class::property}).{core::num::+}(1);
+                                           ^^^^^^^^" in #t17.{self::Class::property}{<nullable>}.{core::int}).{core::num::+}(1){(core::num) → core::int};
 static field core::int topLevelMethodInvocation = let final Never #t20 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:45:46: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
 var topLevelMethodInvocation = nullableClass.method();
-                                             ^^^^^^" in self::nullableClass.{self::Class::method}();
+                                             ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
 static field () → core::int topLevelMethodTearOff = let final Never #t21 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:46:43: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelMethodTearOff = nullableClass.method;
-                                          ^^^^^^" in self::nullableClass.{self::Class::method};
+                                          ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
 static field dynamic topLevelFunctionImplicitCall = let final Never #t22 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:47:52: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
 var topLevelFunctionImplicitCall = nullableFunction();
-                                                   ^" in self::nullableFunction.call();
+                                                   ^" in self::nullableFunction{<nullable>}.();
 static field dynamic topLevelFunctionExplicitCall = let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:48:53: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?. instead.
 var topLevelFunctionExplicitCall = nullableFunction.call();
-                                                    ^^^^" in self::nullableFunction.call();
+                                                    ^^^^" in self::nullableFunction{<nullable>}.();
 static field core::Function? topLevelFunctionTearOff = let final Never #t24 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:49:48: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try accessing using ?. instead.
@@ -511,11 +511,11 @@
 static field void topLevelFunctionTypeImplicitCall = let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:50:60: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
 var topLevelFunctionTypeImplicitCall = nullableFunctionType();
-                                                           ^" in self::nullableFunctionType.call();
+                                                           ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
 static field void topLevelFunctionTypeExplicitCall = let final Never #t26 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:51:61: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
 var topLevelFunctionTypeExplicitCall = nullableFunctionType.call();
-                                                            ^^^^" in self::nullableFunctionType.call();
+                                                            ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
 static field () →? void topLevelFunctionTypeTearOff = let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:52:56: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
 Try accessing using ?. instead.
 var topLevelFunctionTypeTearOff = nullableFunctionType.call;
@@ -524,22 +524,22 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionField = nullableClass.functionField();
-                                          ^" in self::nullableClass.{self::Class::functionField}.call();
+                                          ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
 static field void topLevelFunctionTypeField = let final Never #t29 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:54:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionTypeField = nullableClass.functionTypeField();
-                                              ^" in self::nullableClass.{self::Class::functionTypeField}.call();
+                                              ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
 static field dynamic topLevelFunctionGetter = let final Never #t30 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:55:44: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionGetter = nullableClass.functionGetter();
-                                           ^" in self::nullableClass.{self::Class::functionGetter}.call();
+                                           ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
 static field void topLevelFunctionTypeGetter = let final Never #t31 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:56:48: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelFunctionTypeGetter = nullableClass.functionTypeGetter();
-                                               ^" in self::nullableClass.{self::Class::functionTypeGetter}.call();
+                                               ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
 static field core::int topLevelExtensionBinary = let final Never #t32 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:58:45: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionBinary = nullableClass + 0;
@@ -559,7 +559,7 @@
 static field core::int topLevelExtensionIndexGetSet = let final self::Class? #t40 = self::nullableClass in let final core::int #t41 = 0 in let final core::int #t42 = (let final Never #t43 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
-                                                ^" in self::Extension|[](#t40, #t41)).{core::num::+}(1) in let final void #t44 = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+                                                ^" in self::Extension|[](#t40, #t41)).{core::num::+}(1){(core::num) → core::int} in let final void #t44 = let final Never #t45 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
                                                 ^" in self::Extension|[]=(#t40, #t41, #t42) in #t42;
@@ -581,7 +581,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
 var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
-                                                    ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t50)).{core::num::+}(1) in let final void #t54 = self::Extension|set#extensionProperty(#t50, #t52) in #t52;
+                                                    ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t50)).{core::num::+}(1){(core::num) → core::int} in let final void #t54 = self::Extension|set#extensionProperty(#t50, #t52) in #t52;
 static field core::int topLevelExtensionMethodInvocation = let final Never #t55 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:66:55: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
@@ -611,12 +611,12 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
 var topLevelExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
-                                                    ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass).call();
+                                                    ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
 static field void topLevelExtensionFunctionTypeGetter = let final Never #t61 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:73:19: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
     nullableClass.extensionFunctionTypeGetter();
-                  ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass).call();
+                  ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass)(){() → void};
 static method Extension|+(lowered final self::Class #this, core::int value) → core::int
   return 0;
 static method Extension|unary-(lowered final self::Class #this) → core::int
@@ -652,64 +652,64 @@
 static method test() → dynamic {
   core::num localBinary = let final Never #t62 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:76:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   var localBinary = nullableInt + 0;
-                                ^" in self::nullableInt.{core::num::+}(0);
+                                ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
   core::int localUnary = let final Never #t63 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:77:20: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   var localUnary = -nullableInt;
-                   ^" in self::nullableInt.{core::int::unary-}();
+                   ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
   dynamic localIndexGet = let final Never #t64 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:78:34: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexGet = nullableMap[0];
-                                 ^" in self::nullableMap.{core::Map::[]}(0);
+                                 ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
   core::int localIndexSet = let final core::Map<dynamic, dynamic>? #t65 = self::nullableMap in let final core::int #t66 = 0 in let final core::int #t67 = 1 in let final void #t68 = let final Never #t69 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:79:34: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexSet = nullableMap[0] = 1;
-                                 ^" in #t65.{core::Map::[]=}(#t66, #t67) in #t67;
+                                 ^" in #t65.{core::Map::[]=}{<nullable>}.(#t66, #t67){(dynamic, dynamic) → void} in #t67;
   dynamic localIndexGetSet = let final core::Map<dynamic, dynamic>? #t70 = self::nullableMap in let final core::int #t71 = 0 in let final dynamic #t72 = (let final Never #t73 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexGetSet = nullableMap[0] += 1;
-                                    ^" in #t70.{core::Map::[]}(#t71)).+(1) in let final void #t74 = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+                                    ^" in #t70.{core::Map::[]}{<nullable>}.(#t71){(core::Object?) → dynamic}){dynamic}.+(1) in let final void #t74 = let final Never #t75 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
  - 'Map' is from 'dart:core'.
   var localIndexGetSet = nullableMap[0] += 1;
-                                    ^" in #t70.{core::Map::[]=}(#t71, #t72) in #t72;
+                                    ^" in #t70.{core::Map::[]=}{<nullable>}.(#t71, #t72){(dynamic, dynamic) → void} in #t72;
   core::int localPropertyGet = let final Never #t76 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:81:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertyGet = nullableClass.property;
-                                       ^^^^^^^^" in self::nullableClass.{self::Class::property};
+                                       ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
   core::int localPropertySet = let final Never #t77 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:82:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertySet = nullableClass.property = 1;
-                                       ^^^^^^^^" in self::nullableClass.{self::Class::property} = 1;
+                                       ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
   core::int localPropertyGetSet = let final self::Class? #t78 = self::nullableClass in let final Never #t79 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertyGetSet = nullableClass.property += 1;
-                                          ^^^^^^^^" in #t78.{self::Class::property} = (let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+                                          ^^^^^^^^" in #t78.{self::Class::property}{<nullable>}. = (let final Never #t80 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localPropertyGetSet = nullableClass.property += 1;
-                                          ^^^^^^^^" in #t78.{self::Class::property}).{core::num::+}(1);
+                                          ^^^^^^^^" in #t78.{self::Class::property}{<nullable>}.{core::int}).{core::num::+}(1){(core::num) → core::int};
   core::int localMethodInvocation = let final Never #t81 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:84:45: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
   var localMethodInvocation = nullableClass.method();
-                                            ^^^^^^" in self::nullableClass.{self::Class::method}();
+                                            ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
   () → core::int localMethodTearOff = let final Never #t82 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:85:42: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localMethodTearOff = nullableClass.method;
-                                         ^^^^^^" in self::nullableClass.{self::Class::method};
+                                         ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
   dynamic localFunctionImplicitCall = let final Never #t83 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:86:51: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?.call instead.
   var localFunctionImplicitCall = nullableFunction();
-                                                  ^" in self::nullableFunction.call();
+                                                  ^" in self::nullableFunction{<nullable>}.();
   dynamic localFunctionExplicitCall = let final Never #t84 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:87:52: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try calling using ?. instead.
   var localFunctionExplicitCall = nullableFunction.call();
-                                                   ^^^^" in self::nullableFunction.call();
+                                                   ^^^^" in self::nullableFunction{<nullable>}.();
   core::Function? localFunctionTearOff = let final Never #t85 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:88:47: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
  - 'Function' is from 'dart:core'.
 Try accessing using ?. instead.
@@ -718,11 +718,11 @@
   void localFunctionTypeImplicitCall = let final Never #t86 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:89:59: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   var localFunctionTypeImplicitCall = nullableFunctionType();
-                                                          ^" in self::nullableFunctionType.call();
+                                                          ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
   void localFunctionTypeExplicitCall = let final Never #t87 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:90:60: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   var localFunctionTypeExplicitCall = nullableFunctionType.call();
-                                                           ^^^^" in self::nullableFunctionType.call();
+                                                           ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
   () →? void localFunctionTypeTearOff = let final Never #t88 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:91:55: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
 Try accessing using ?. instead.
   var localFunctionTypeTearOff = nullableFunctionType.call;
@@ -731,22 +731,22 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionField = nullableClass.functionField();
-                                         ^" in self::nullableClass.{self::Class::functionField}.call();
+                                         ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
   void localFunctionTypeField = let final Never #t90 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:93:46: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionTypeField = nullableClass.functionTypeField();
-                                             ^" in self::nullableClass.{self::Class::functionTypeField}.call();
+                                             ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
   dynamic localFunctionGetter = let final Never #t91 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:94:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionGetter = nullableClass.functionGetter();
-                                          ^" in self::nullableClass.{self::Class::functionGetter}.call();
+                                          ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
   void localFunctionTypeGetter = let final Never #t92 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:95:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localFunctionTypeGetter = nullableClass.functionTypeGetter();
-                                              ^" in self::nullableClass.{self::Class::functionTypeGetter}.call();
+                                              ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
   core::int localExtensionBinary = let final Never #t93 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:97:44: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionBinary = nullableClass + 0;
@@ -766,7 +766,7 @@
   core::int localExtensionIndexGetSet = let final self::Class? #t101 = self::nullableClass in let final core::int #t102 = 0 in let final core::int #t103 = (let final Never #t104 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionIndexGetSet = nullableClass[0] += 1;
-                                               ^" in self::Extension|[](#t101, #t102)).{core::num::+}(1) in let final void #t105 = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+                                               ^" in self::Extension|[](#t101, #t102)).{core::num::+}(1){(core::num) → core::int} in let final void #t105 = let final Never #t106 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
   var localExtensionIndexGetSet = nullableClass[0] += 1;
                                                ^" in self::Extension|[]=(#t101, #t102, #t103) in #t103;
@@ -788,7 +788,7 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try accessing using ?. instead.
   var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
-                                                   ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t111)).{core::num::+}(1) in let final void #t115 = self::Extension|set#extensionProperty(#t111, #t113) in #t113;
+                                                   ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t111)).{core::num::+}(1){(core::num) → core::int} in let final void #t115 = self::Extension|set#extensionProperty(#t111, #t113) in #t113;
   core::int localExtensionMethodInvocation = let final Never #t116 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:105:54: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?. instead.
@@ -818,11 +818,11 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
   var localExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
-                                                   ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass).call();
+                                                   ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
   void localExtensionFunctionTypeGetter = let final Never #t122 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:112:21: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
 Try calling using ?.call instead.
       nullableClass.extensionFunctionTypeGetter();
-                    ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass).call();
+                    ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass)(){() → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.expect b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.expect
index 84d1907..987bcb5 100644
--- a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.expect
@@ -145,82 +145,82 @@
     late final self::Class self;
     if(self::b)
       self = this;
-    let final self::Map<self::Class, self::Class> #t1 = map in #t1.{self::Map::[]}(this).{core::Object::==}(null) ?{self::Class} #t1.{self::Map::[]=}(this, this) : null;
-    let final self::Map<self::Class, self::Class> #t2 = map in let final self::Class #t3 = self in #t2.{self::Map::[]}(#t3).{core::Object::==}(null) ?{self::Class} #t2.{self::Map::[]=}(#t3, self) : null;
-    map.{self::Map::[]=}(this, this);
-    map.{self::Map::[]=}(self, self);
-    map.{self::Map::[]}(this);
-    map.{self::Map::[]}(self);
-    let final self::Map<self::Class, self::Class> #t4 = map in #t4.{self::Map::[]=}(this, #t4.{self::Map::[]}(this).{self::Class::+}(this));
-    let final self::Map<self::Class, self::Class> #t5 = map in let final self::Class #t6 = self in #t5.{self::Map::[]=}(#t6, #t5.{self::Map::[]}(#t6).{self::Class::+}(self));
+    let final self::Map<self::Class, self::Class> #t1 = map in #t1.{self::Map::[]}(this){(self::Class) → self::Class} == null ?{self::Class} #t1.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} : null;
+    let final self::Map<self::Class, self::Class> #t2 = map in let final self::Class #t3 = self in #t2.{self::Map::[]}(#t3){(self::Class) → self::Class} == null ?{self::Class} #t2.{self::Map::[]=}(#t3, self){(self::Class, self::Class) → void} : null;
+    map.{self::Map::[]=}(this, this){(self::Class, self::Class) → void};
+    map.{self::Map::[]=}(self, self){(self::Class, self::Class) → void};
+    map.{self::Map::[]}(this){(self::Class) → self::Class};
+    map.{self::Map::[]}(self){(self::Class) → self::Class};
+    let final self::Map<self::Class, self::Class> #t4 = map in #t4.{self::Map::[]=}(this, #t4.{self::Map::[]}(this){(self::Class) → self::Class}.{self::Class::+}(this){(self::Class) → self::Class}){(self::Class, self::Class) → void};
+    let final self::Map<self::Class, self::Class> #t5 = map in let final self::Class #t6 = self in #t5.{self::Map::[]=}(#t6, #t5.{self::Map::[]}(#t6){(self::Class) → self::Class}.{self::Class::+}(self){(self::Class) → self::Class}){(self::Class, self::Class) → void};
   }
   method indexGetSetForValue(self::Map<self::Class, self::Class> map) → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Map<self::Class, self::Class> #t7 = map in let final self::Class #t8 = #t7.{self::Map::[]}(this) in #t8.{core::Object::==}(null) ?{self::Class} let final void #t9 = #t7.{self::Map::[]=}(this, this) in this : #t8;
-    v = let final self::Map<self::Class, self::Class> #t10 = map in let final self::Class #t11 = self in let final self::Class #t12 = #t10.{self::Map::[]}(#t11) in #t12.{core::Object::==}(null) ?{self::Class} let final self::Class #t13 = self in let final void #t14 = #t10.{self::Map::[]=}(#t11, #t13) in #t13 : #t12;
-    v = let final self::Map<self::Class, self::Class> #t15 = map in let final void #t16 = #t15.{self::Map::[]=}(this, this) in this;
-    v = let final self::Map<self::Class, self::Class> #t17 = map in let final self::Class #t18 = self in let final self::Class #t19 = self in let final void #t20 = #t17.{self::Map::[]=}(#t18, #t19) in #t19;
-    v = map.{self::Map::[]}(this);
-    v = map.{self::Map::[]}(self);
-    v = let final self::Map<self::Class, self::Class> #t21 = map in let final self::Class #t22 = #t21.{self::Map::[]}(this).{self::Class::+}(this) in let final void #t23 = #t21.{self::Map::[]=}(this, #t22) in #t22;
-    v = let final self::Map<self::Class, self::Class> #t24 = map in let final self::Class #t25 = self in let final self::Class #t26 = #t24.{self::Map::[]}(#t25).{self::Class::+}(self) in let final void #t27 = #t24.{self::Map::[]=}(#t25, #t26) in #t26;
+    v = let final self::Map<self::Class, self::Class> #t7 = map in let final self::Class #t8 = #t7.{self::Map::[]}(this){(self::Class) → self::Class} in #t8 == null ?{self::Class} let final void #t9 = #t7.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} in this : #t8;
+    v = let final self::Map<self::Class, self::Class> #t10 = map in let final self::Class #t11 = self in let final self::Class #t12 = #t10.{self::Map::[]}(#t11){(self::Class) → self::Class} in #t12 == null ?{self::Class} let final self::Class #t13 = self in let final void #t14 = #t10.{self::Map::[]=}(#t11, #t13){(self::Class, self::Class) → void} in #t13 : #t12;
+    v = let final self::Map<self::Class, self::Class> #t15 = map in let final void #t16 = #t15.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} in this;
+    v = let final self::Map<self::Class, self::Class> #t17 = map in let final self::Class #t18 = self in let final self::Class #t19 = self in let final void #t20 = #t17.{self::Map::[]=}(#t18, #t19){(self::Class, self::Class) → void} in #t19;
+    v = map.{self::Map::[]}(this){(self::Class) → self::Class};
+    v = map.{self::Map::[]}(self){(self::Class) → self::Class};
+    v = let final self::Map<self::Class, self::Class> #t21 = map in let final self::Class #t22 = #t21.{self::Map::[]}(this){(self::Class) → self::Class}.{self::Class::+}(this){(self::Class) → self::Class} in let final void #t23 = #t21.{self::Map::[]=}(this, #t22){(self::Class, self::Class) → void} in #t22;
+    v = let final self::Map<self::Class, self::Class> #t24 = map in let final self::Class #t25 = self in let final self::Class #t26 = #t24.{self::Map::[]}(#t25){(self::Class) → self::Class}.{self::Class::+}(self){(self::Class) → self::Class} in let final void #t27 = #t24.{self::Map::[]=}(#t25, #t26){(self::Class, self::Class) → void} in #t26;
   }
   method implicitExtensionGetSetForEffect(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
-    let final core::int #t28 = i in self::Extension|[](#t28, this).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t28, this, this) : null;
-    let final core::int #t29 = i in let final self::Class #t30 = self in self::Extension|[](#t29, #t30).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t29, #t30, self) : null;
+    let final core::int #t28 = i in self::Extension|[](#t28, this) == null ?{self::Class} self::Extension|[]=(#t28, this, this) : null;
+    let final core::int #t29 = i in let final self::Class #t30 = self in self::Extension|[](#t29, #t30) == null ?{self::Class} self::Extension|[]=(#t29, #t30, self) : null;
     self::Extension|[]=(i, this, this);
     self::Extension|[]=(i, self, self);
     self::Extension|[](i, this);
     self::Extension|[](i, self);
-    let final core::int #t31 = i in self::Extension|[]=(#t31, this, self::Extension|[](#t31, this).{self::Class::+}(this));
-    let final core::int #t32 = i in let final self::Class #t33 = self in self::Extension|[]=(#t32, #t33, self::Extension|[](#t32, #t33).{self::Class::+}(self));
+    let final core::int #t31 = i in self::Extension|[]=(#t31, this, self::Extension|[](#t31, this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final core::int #t32 = i in let final self::Class #t33 = self in self::Extension|[]=(#t32, #t33, self::Extension|[](#t32, #t33).{self::Class::+}(self){(self::Class) → self::Class});
   }
   method implicitExtensionGetSetForValue(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final core::int #t34 = i in let final self::Class #t35 = self::Extension|[](#t34, this) in #t35.{core::Object::==}(null) ?{self::Class} let final void #t36 = self::Extension|[]=(#t34, this, this) in this : #t35;
-    v = let final core::int #t37 = i in let final self::Class #t38 = self in let final self::Class #t39 = self::Extension|[](#t37, #t38) in #t39.{core::Object::==}(null) ?{self::Class} let final self::Class #t40 = self in let final void #t41 = self::Extension|[]=(#t37, #t38, #t40) in #t40 : #t39;
+    v = let final core::int #t34 = i in let final self::Class #t35 = self::Extension|[](#t34, this) in #t35 == null ?{self::Class} let final void #t36 = self::Extension|[]=(#t34, this, this) in this : #t35;
+    v = let final core::int #t37 = i in let final self::Class #t38 = self in let final self::Class #t39 = self::Extension|[](#t37, #t38) in #t39 == null ?{self::Class} let final self::Class #t40 = self in let final void #t41 = self::Extension|[]=(#t37, #t38, #t40) in #t40 : #t39;
     v = let final core::int #t42 = i in let final void #t43 = self::Extension|[]=(#t42, this, this) in this;
     v = let final core::int #t44 = i in let final self::Class #t45 = self in let final self::Class #t46 = self in let final void #t47 = self::Extension|[]=(#t44, #t45, #t46) in #t46;
     v = self::Extension|[](i, this);
     v = self::Extension|[](i, self);
-    v = let final core::int #t48 = i in let final self::Class #t49 = self::Extension|[](#t48, this).{self::Class::+}(this) in let final void #t50 = self::Extension|[]=(#t48, this, #t49) in #t49;
-    v = let final core::int #t51 = i in let final self::Class #t52 = self in let final self::Class #t53 = self::Extension|[](#t51, #t52).{self::Class::+}(self) in let final void #t54 = self::Extension|[]=(#t51, #t52, #t53) in #t53;
+    v = let final core::int #t48 = i in let final self::Class #t49 = self::Extension|[](#t48, this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t50 = self::Extension|[]=(#t48, this, #t49) in #t49;
+    v = let final core::int #t51 = i in let final self::Class #t52 = self in let final self::Class #t53 = self::Extension|[](#t51, #t52).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t54 = self::Extension|[]=(#t51, #t52, #t53) in #t53;
   }
   method explicitExtensionGetSetForEffect(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
-    let final core::int #t55 = i in self::Extension|[](#t55, this).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t55, this, this) : null;
-    let final core::int #t56 = i in let final self::Class #t57 = self in self::Extension|[](#t56, #t57).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t56, #t57, self) : null;
+    let final core::int #t55 = i in self::Extension|[](#t55, this) == null ?{self::Class} self::Extension|[]=(#t55, this, this) : null;
+    let final core::int #t56 = i in let final self::Class #t57 = self in self::Extension|[](#t56, #t57) == null ?{self::Class} self::Extension|[]=(#t56, #t57, self) : null;
     self::Extension|[]=(i, this, this);
     self::Extension|[]=(i, self, self);
     self::Extension|[](i, this);
     self::Extension|[](i, self);
-    let final core::int #t58 = i in self::Extension|[]=(#t58, this, self::Extension|[](#t58, this).{self::Class::+}(this));
-    let final core::int #t59 = i in let final self::Class #t60 = self in self::Extension|[]=(#t59, #t60, self::Extension|[](#t59, #t60).{self::Class::+}(self));
+    let final core::int #t58 = i in self::Extension|[]=(#t58, this, self::Extension|[](#t58, this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final core::int #t59 = i in let final self::Class #t60 = self in self::Extension|[]=(#t59, #t60, self::Extension|[](#t59, #t60).{self::Class::+}(self){(self::Class) → self::Class});
   }
   method explicitExtensionGetSetForValue(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final core::int #t61 = i in let final self::Class #t62 = self::Extension|[](#t61, this) in #t62.{core::Object::==}(null) ?{self::Class} let final void #t63 = self::Extension|[]=(#t61, this, this) in this : #t62;
-    v = let final core::int #t64 = i in let final self::Class #t65 = self in let final self::Class #t66 = self::Extension|[](#t64, #t65) in #t66.{core::Object::==}(null) ?{self::Class} let final self::Class #t67 = self in let final void #t68 = self::Extension|[]=(#t64, #t65, #t67) in #t67 : #t66;
+    v = let final core::int #t61 = i in let final self::Class #t62 = self::Extension|[](#t61, this) in #t62 == null ?{self::Class} let final void #t63 = self::Extension|[]=(#t61, this, this) in this : #t62;
+    v = let final core::int #t64 = i in let final self::Class #t65 = self in let final self::Class #t66 = self::Extension|[](#t64, #t65) in #t66 == null ?{self::Class} let final self::Class #t67 = self in let final void #t68 = self::Extension|[]=(#t64, #t65, #t67) in #t67 : #t66;
     v = let final core::int #t69 = i in let final void #t70 = self::Extension|[]=(#t69, this, this) in this;
     v = let final core::int #t71 = i in let final self::Class #t72 = self in let final void #t73 = self::Extension|[]=(#t71, self, #t72) in #t72;
     v = self::Extension|[](i, this);
     v = self::Extension|[](i, self);
-    v = let final core::int #t74 = i in let final self::Class #t75 = self::Extension|[](#t74, this).{self::Class::+}(this) in let final void #t76 = self::Extension|[]=(#t74, this, #t75) in #t75;
-    v = let final core::int #t77 = i in let final self::Class #t78 = self in let final self::Class #t79 = self::Extension|[](#t77, #t78).{self::Class::+}(self) in let final void #t80 = self::Extension|[]=(#t77, #t78, #t79) in #t79;
+    v = let final core::int #t74 = i in let final self::Class #t75 = self::Extension|[](#t74, this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t76 = self::Extension|[]=(#t74, this, #t75) in #t75;
+    v = let final core::int #t77 = i in let final self::Class #t78 = self in let final self::Class #t79 = self::Extension|[](#t77, #t78).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t80 = self::Extension|[]=(#t77, #t78, #t79) in #t79;
   }
 }
 class Subclass extends self::Class {
@@ -231,28 +231,28 @@
     late final self::Class self;
     if(self::b)
       self = this;
-    super.{self::Class::[]}(this).{core::Object::==}(null) ?{self::Class} super.{self::Class::[]=}(this, this) : null;
-    let final self::Class #t81 = self in super.{self::Class::[]}(#t81).{core::Object::==}(null) ?{self::Class} super.{self::Class::[]=}(#t81, self) : null;
+    super.{self::Class::[]}(this) == null ?{self::Class} super.{self::Class::[]=}(this, this) : null;
+    let final self::Class #t81 = self in super.{self::Class::[]}(#t81) == null ?{self::Class} super.{self::Class::[]=}(#t81, self) : null;
     super.{self::Class::[]=}(this, this);
     super.{self::Class::[]=}(self, self);
     super.{self::Class::[]}(this);
     super.{self::Class::[]}(self);
-    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this));
-    let final self::Class #t82 = self in super.{self::Class::[]=}(#t82, super.{self::Class::[]}(#t82).{self::Class::+}(self));
+    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final self::Class #t82 = self in super.{self::Class::[]=}(#t82, super.{self::Class::[]}(#t82).{self::Class::+}(self){(self::Class) → self::Class});
   }
   method superIndexGetSetForValue() → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Class #t83 = super.{self::Class::[]}(this) in #t83.{core::Object::==}(null) ?{self::Class} let final void #t84 = super.{self::Class::[]=}(this, this) in this : #t83;
-    v = let final self::Class #t85 = self in let final self::Class #t86 = super.{self::Class::[]}(#t85) in #t86.{core::Object::==}(null) ?{self::Class} let final self::Class #t87 = self in let final void #t88 = super.{self::Class::[]=}(#t85, #t87) in #t87 : #t86;
+    v = let final self::Class #t83 = super.{self::Class::[]}(this) in #t83 == null ?{self::Class} let final void #t84 = super.{self::Class::[]=}(this, this) in this : #t83;
+    v = let final self::Class #t85 = self in let final self::Class #t86 = super.{self::Class::[]}(#t85) in #t86 == null ?{self::Class} let final self::Class #t87 = self in let final void #t88 = super.{self::Class::[]=}(#t85, #t87) in #t87 : #t86;
     v = let final void #t89 = super.{self::Class::[]=}(this, this) in this;
     v = let final self::Class #t90 = self in let final self::Class #t91 = self in let final void #t92 = super.{self::Class::[]=}(#t90, #t91) in #t91;
     v = super.{self::Class::[]}(this);
     v = super.{self::Class::[]}(self);
-    v = let final self::Class #t93 = super.{self::Class::[]}(this).{self::Class::+}(this) in let final void #t94 = super.{self::Class::[]=}(this, #t93) in #t93;
-    v = let final self::Class #t95 = self in let final self::Class #t96 = super.{self::Class::[]}(#t95).{self::Class::+}(self) in let final void #t97 = super.{self::Class::[]=}(#t95, #t96) in #t96;
+    v = let final self::Class #t93 = super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t94 = super.{self::Class::[]=}(this, #t93) in #t93;
+    v = let final self::Class #t95 = self in let final self::Class #t96 = super.{self::Class::[]}(#t95).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t97 = super.{self::Class::[]=}(#t95, #t96) in #t96;
   }
 }
 class Class2 extends core::Object {
@@ -265,55 +265,55 @@
     late final self::Class2 self;
     if(self::b)
       self = this;
-    self::Extension2|[](this, this).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
-    let final self::Class2 #t98 = self in let final self::Class2 #t99 = self in self::Extension2|[](#t98, #t99).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(#t98, #t99, self) : null;
+    self::Extension2|[](this, this) == null ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
+    let final self::Class2 #t98 = self in let final self::Class2 #t99 = self in self::Extension2|[](#t98, #t99) == null ?{self::Class2} self::Extension2|[]=(#t98, #t99, self) : null;
     self::Extension2|[]=(this, this, this);
     self::Extension2|[]=(self, self, self);
     self::Extension2|[](this, this);
     self::Extension2|[](self, self);
-    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this));
-    let final self::Class2 #t100 = self in let final self::Class2 #t101 = self in self::Extension2|[]=(#t100, #t101, self::Extension2|[](#t100, #t101).{self::Class2::+}(self));
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2});
+    let final self::Class2 #t100 = self in let final self::Class2 #t101 = self in self::Extension2|[]=(#t100, #t101, self::Extension2|[](#t100, #t101).{self::Class2::+}(self){(self::Class2) → self::Class2});
   }
   method implicitExtensionGetSetForValue() → void {
     late final self::Class2 self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Class2 #t102 = self::Extension2|[](this, this) in #t102.{core::Object::==}(null) ?{self::Class2} let final void #t103 = self::Extension2|[]=(this, this, this) in this : #t102;
-    v = let final self::Class2 #t104 = self in let final self::Class2 #t105 = self in let final self::Class2 #t106 = self::Extension2|[](#t104, #t105) in #t106.{core::Object::==}(null) ?{self::Class2} let final self::Class2 #t107 = self in let final void #t108 = self::Extension2|[]=(#t104, #t105, #t107) in #t107 : #t106;
+    v = let final self::Class2 #t102 = self::Extension2|[](this, this) in #t102 == null ?{self::Class2} let final void #t103 = self::Extension2|[]=(this, this, this) in this : #t102;
+    v = let final self::Class2 #t104 = self in let final self::Class2 #t105 = self in let final self::Class2 #t106 = self::Extension2|[](#t104, #t105) in #t106 == null ?{self::Class2} let final self::Class2 #t107 = self in let final void #t108 = self::Extension2|[]=(#t104, #t105, #t107) in #t107 : #t106;
     v = let final void #t109 = self::Extension2|[]=(this, this, this) in this;
     v = let final self::Class2 #t110 = self in let final self::Class2 #t111 = self in let final self::Class2 #t112 = self in let final void #t113 = self::Extension2|[]=(#t110, #t111, #t112) in #t112;
     v = self::Extension2|[](this, this);
     v = self::Extension2|[](self, self);
-    v = let final self::Class2 #t114 = self::Extension2|[](this, this).{self::Class2::+}(this) in let final void #t115 = self::Extension2|[]=(this, this, #t114) in #t114;
-    v = let final self::Class2 #t116 = self in let final self::Class2 #t117 = self in let final self::Class2 #t118 = self::Extension2|[](#t116, #t117).{self::Class2::+}(self) in let final void #t119 = self::Extension2|[]=(#t116, #t117, #t118) in #t118;
+    v = let final self::Class2 #t114 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2} in let final void #t115 = self::Extension2|[]=(this, this, #t114) in #t114;
+    v = let final self::Class2 #t116 = self in let final self::Class2 #t117 = self in let final self::Class2 #t118 = self::Extension2|[](#t116, #t117).{self::Class2::+}(self){(self::Class2) → self::Class2} in let final void #t119 = self::Extension2|[]=(#t116, #t117, #t118) in #t118;
   }
   method explicitExtensionGetSetForEffect() → void {
     late final self::Class2 self;
     if(self::b)
       self = this;
-    self::Extension2|[](this, this).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
-    let final self::Class2 #t120 = self in let final self::Class2 #t121 = self in self::Extension2|[](#t120, #t121).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(#t120, #t121, self) : null;
+    self::Extension2|[](this, this) == null ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
+    let final self::Class2 #t120 = self in let final self::Class2 #t121 = self in self::Extension2|[](#t120, #t121) == null ?{self::Class2} self::Extension2|[]=(#t120, #t121, self) : null;
     self::Extension2|[]=(this, this, this);
     self::Extension2|[]=(self, self, self);
     self::Extension2|[](this, this);
     self::Extension2|[](self, self);
-    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this));
-    let final self::Class2 #t122 = self in let final self::Class2 #t123 = self in self::Extension2|[]=(#t122, #t123, self::Extension2|[](#t122, #t123).{self::Class2::+}(self));
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2});
+    let final self::Class2 #t122 = self in let final self::Class2 #t123 = self in self::Extension2|[]=(#t122, #t123, self::Extension2|[](#t122, #t123).{self::Class2::+}(self){(self::Class2) → self::Class2});
   }
   method explicitExtensionGetSetForValue() → void {
     late final self::Class2 self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Class2 #t124 = self::Extension2|[](this, this) in #t124.{core::Object::==}(null) ?{self::Class2} let final void #t125 = self::Extension2|[]=(this, this, this) in this : #t124;
-    v = let final self::Class2 #t126 = self in let final self::Class2 #t127 = self in let final self::Class2 #t128 = self::Extension2|[](#t126, #t127) in #t128.{core::Object::==}(null) ?{self::Class2} let final self::Class2 #t129 = self in let final void #t130 = self::Extension2|[]=(#t126, #t127, #t129) in #t129 : #t128;
+    v = let final self::Class2 #t124 = self::Extension2|[](this, this) in #t124 == null ?{self::Class2} let final void #t125 = self::Extension2|[]=(this, this, this) in this : #t124;
+    v = let final self::Class2 #t126 = self in let final self::Class2 #t127 = self in let final self::Class2 #t128 = self::Extension2|[](#t126, #t127) in #t128 == null ?{self::Class2} let final self::Class2 #t129 = self in let final void #t130 = self::Extension2|[]=(#t126, #t127, #t129) in #t129 : #t128;
     v = let final void #t131 = self::Extension2|[]=(this, this, this) in this;
     v = let final self::Class2 #t132 = self in let final self::Class2 #t133 = self in let final void #t134 = self::Extension2|[]=(#t132, self, #t133) in #t133;
     v = self::Extension2|[](this, this);
     v = self::Extension2|[](self, self);
-    v = let final self::Class2 #t135 = self::Extension2|[](this, this).{self::Class2::+}(this) in let final void #t136 = self::Extension2|[]=(this, this, #t135) in #t135;
-    v = let final self::Class2 #t137 = self in let final self::Class2 #t138 = self in let final self::Class2 #t139 = self::Extension2|[](#t137, #t138).{self::Class2::+}(self) in let final void #t140 = self::Extension2|[]=(#t137, #t138, #t139) in #t139;
+    v = let final self::Class2 #t135 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2} in let final void #t136 = self::Extension2|[]=(this, this, #t135) in #t135;
+    v = let final self::Class2 #t137 = self in let final self::Class2 #t138 = self in let final self::Class2 #t139 = self::Extension2|[](#t137, #t138).{self::Class2::+}(self){(self::Class2) → self::Class2} in let final void #t140 = self::Extension2|[]=(#t137, #t138, #t139) in #t139;
   }
 }
 extension Extension on core::int {
diff --git a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.transformed.expect
index 84d1907..987bcb5 100644
--- a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.transformed.expect
@@ -145,82 +145,82 @@
     late final self::Class self;
     if(self::b)
       self = this;
-    let final self::Map<self::Class, self::Class> #t1 = map in #t1.{self::Map::[]}(this).{core::Object::==}(null) ?{self::Class} #t1.{self::Map::[]=}(this, this) : null;
-    let final self::Map<self::Class, self::Class> #t2 = map in let final self::Class #t3 = self in #t2.{self::Map::[]}(#t3).{core::Object::==}(null) ?{self::Class} #t2.{self::Map::[]=}(#t3, self) : null;
-    map.{self::Map::[]=}(this, this);
-    map.{self::Map::[]=}(self, self);
-    map.{self::Map::[]}(this);
-    map.{self::Map::[]}(self);
-    let final self::Map<self::Class, self::Class> #t4 = map in #t4.{self::Map::[]=}(this, #t4.{self::Map::[]}(this).{self::Class::+}(this));
-    let final self::Map<self::Class, self::Class> #t5 = map in let final self::Class #t6 = self in #t5.{self::Map::[]=}(#t6, #t5.{self::Map::[]}(#t6).{self::Class::+}(self));
+    let final self::Map<self::Class, self::Class> #t1 = map in #t1.{self::Map::[]}(this){(self::Class) → self::Class} == null ?{self::Class} #t1.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} : null;
+    let final self::Map<self::Class, self::Class> #t2 = map in let final self::Class #t3 = self in #t2.{self::Map::[]}(#t3){(self::Class) → self::Class} == null ?{self::Class} #t2.{self::Map::[]=}(#t3, self){(self::Class, self::Class) → void} : null;
+    map.{self::Map::[]=}(this, this){(self::Class, self::Class) → void};
+    map.{self::Map::[]=}(self, self){(self::Class, self::Class) → void};
+    map.{self::Map::[]}(this){(self::Class) → self::Class};
+    map.{self::Map::[]}(self){(self::Class) → self::Class};
+    let final self::Map<self::Class, self::Class> #t4 = map in #t4.{self::Map::[]=}(this, #t4.{self::Map::[]}(this){(self::Class) → self::Class}.{self::Class::+}(this){(self::Class) → self::Class}){(self::Class, self::Class) → void};
+    let final self::Map<self::Class, self::Class> #t5 = map in let final self::Class #t6 = self in #t5.{self::Map::[]=}(#t6, #t5.{self::Map::[]}(#t6){(self::Class) → self::Class}.{self::Class::+}(self){(self::Class) → self::Class}){(self::Class, self::Class) → void};
   }
   method indexGetSetForValue(self::Map<self::Class, self::Class> map) → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Map<self::Class, self::Class> #t7 = map in let final self::Class #t8 = #t7.{self::Map::[]}(this) in #t8.{core::Object::==}(null) ?{self::Class} let final void #t9 = #t7.{self::Map::[]=}(this, this) in this : #t8;
-    v = let final self::Map<self::Class, self::Class> #t10 = map in let final self::Class #t11 = self in let final self::Class #t12 = #t10.{self::Map::[]}(#t11) in #t12.{core::Object::==}(null) ?{self::Class} let final self::Class #t13 = self in let final void #t14 = #t10.{self::Map::[]=}(#t11, #t13) in #t13 : #t12;
-    v = let final self::Map<self::Class, self::Class> #t15 = map in let final void #t16 = #t15.{self::Map::[]=}(this, this) in this;
-    v = let final self::Map<self::Class, self::Class> #t17 = map in let final self::Class #t18 = self in let final self::Class #t19 = self in let final void #t20 = #t17.{self::Map::[]=}(#t18, #t19) in #t19;
-    v = map.{self::Map::[]}(this);
-    v = map.{self::Map::[]}(self);
-    v = let final self::Map<self::Class, self::Class> #t21 = map in let final self::Class #t22 = #t21.{self::Map::[]}(this).{self::Class::+}(this) in let final void #t23 = #t21.{self::Map::[]=}(this, #t22) in #t22;
-    v = let final self::Map<self::Class, self::Class> #t24 = map in let final self::Class #t25 = self in let final self::Class #t26 = #t24.{self::Map::[]}(#t25).{self::Class::+}(self) in let final void #t27 = #t24.{self::Map::[]=}(#t25, #t26) in #t26;
+    v = let final self::Map<self::Class, self::Class> #t7 = map in let final self::Class #t8 = #t7.{self::Map::[]}(this){(self::Class) → self::Class} in #t8 == null ?{self::Class} let final void #t9 = #t7.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} in this : #t8;
+    v = let final self::Map<self::Class, self::Class> #t10 = map in let final self::Class #t11 = self in let final self::Class #t12 = #t10.{self::Map::[]}(#t11){(self::Class) → self::Class} in #t12 == null ?{self::Class} let final self::Class #t13 = self in let final void #t14 = #t10.{self::Map::[]=}(#t11, #t13){(self::Class, self::Class) → void} in #t13 : #t12;
+    v = let final self::Map<self::Class, self::Class> #t15 = map in let final void #t16 = #t15.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} in this;
+    v = let final self::Map<self::Class, self::Class> #t17 = map in let final self::Class #t18 = self in let final self::Class #t19 = self in let final void #t20 = #t17.{self::Map::[]=}(#t18, #t19){(self::Class, self::Class) → void} in #t19;
+    v = map.{self::Map::[]}(this){(self::Class) → self::Class};
+    v = map.{self::Map::[]}(self){(self::Class) → self::Class};
+    v = let final self::Map<self::Class, self::Class> #t21 = map in let final self::Class #t22 = #t21.{self::Map::[]}(this){(self::Class) → self::Class}.{self::Class::+}(this){(self::Class) → self::Class} in let final void #t23 = #t21.{self::Map::[]=}(this, #t22){(self::Class, self::Class) → void} in #t22;
+    v = let final self::Map<self::Class, self::Class> #t24 = map in let final self::Class #t25 = self in let final self::Class #t26 = #t24.{self::Map::[]}(#t25){(self::Class) → self::Class}.{self::Class::+}(self){(self::Class) → self::Class} in let final void #t27 = #t24.{self::Map::[]=}(#t25, #t26){(self::Class, self::Class) → void} in #t26;
   }
   method implicitExtensionGetSetForEffect(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
-    let final core::int #t28 = i in self::Extension|[](#t28, this).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t28, this, this) : null;
-    let final core::int #t29 = i in let final self::Class #t30 = self in self::Extension|[](#t29, #t30).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t29, #t30, self) : null;
+    let final core::int #t28 = i in self::Extension|[](#t28, this) == null ?{self::Class} self::Extension|[]=(#t28, this, this) : null;
+    let final core::int #t29 = i in let final self::Class #t30 = self in self::Extension|[](#t29, #t30) == null ?{self::Class} self::Extension|[]=(#t29, #t30, self) : null;
     self::Extension|[]=(i, this, this);
     self::Extension|[]=(i, self, self);
     self::Extension|[](i, this);
     self::Extension|[](i, self);
-    let final core::int #t31 = i in self::Extension|[]=(#t31, this, self::Extension|[](#t31, this).{self::Class::+}(this));
-    let final core::int #t32 = i in let final self::Class #t33 = self in self::Extension|[]=(#t32, #t33, self::Extension|[](#t32, #t33).{self::Class::+}(self));
+    let final core::int #t31 = i in self::Extension|[]=(#t31, this, self::Extension|[](#t31, this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final core::int #t32 = i in let final self::Class #t33 = self in self::Extension|[]=(#t32, #t33, self::Extension|[](#t32, #t33).{self::Class::+}(self){(self::Class) → self::Class});
   }
   method implicitExtensionGetSetForValue(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final core::int #t34 = i in let final self::Class #t35 = self::Extension|[](#t34, this) in #t35.{core::Object::==}(null) ?{self::Class} let final void #t36 = self::Extension|[]=(#t34, this, this) in this : #t35;
-    v = let final core::int #t37 = i in let final self::Class #t38 = self in let final self::Class #t39 = self::Extension|[](#t37, #t38) in #t39.{core::Object::==}(null) ?{self::Class} let final self::Class #t40 = self in let final void #t41 = self::Extension|[]=(#t37, #t38, #t40) in #t40 : #t39;
+    v = let final core::int #t34 = i in let final self::Class #t35 = self::Extension|[](#t34, this) in #t35 == null ?{self::Class} let final void #t36 = self::Extension|[]=(#t34, this, this) in this : #t35;
+    v = let final core::int #t37 = i in let final self::Class #t38 = self in let final self::Class #t39 = self::Extension|[](#t37, #t38) in #t39 == null ?{self::Class} let final self::Class #t40 = self in let final void #t41 = self::Extension|[]=(#t37, #t38, #t40) in #t40 : #t39;
     v = let final core::int #t42 = i in let final void #t43 = self::Extension|[]=(#t42, this, this) in this;
     v = let final core::int #t44 = i in let final self::Class #t45 = self in let final self::Class #t46 = self in let final void #t47 = self::Extension|[]=(#t44, #t45, #t46) in #t46;
     v = self::Extension|[](i, this);
     v = self::Extension|[](i, self);
-    v = let final core::int #t48 = i in let final self::Class #t49 = self::Extension|[](#t48, this).{self::Class::+}(this) in let final void #t50 = self::Extension|[]=(#t48, this, #t49) in #t49;
-    v = let final core::int #t51 = i in let final self::Class #t52 = self in let final self::Class #t53 = self::Extension|[](#t51, #t52).{self::Class::+}(self) in let final void #t54 = self::Extension|[]=(#t51, #t52, #t53) in #t53;
+    v = let final core::int #t48 = i in let final self::Class #t49 = self::Extension|[](#t48, this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t50 = self::Extension|[]=(#t48, this, #t49) in #t49;
+    v = let final core::int #t51 = i in let final self::Class #t52 = self in let final self::Class #t53 = self::Extension|[](#t51, #t52).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t54 = self::Extension|[]=(#t51, #t52, #t53) in #t53;
   }
   method explicitExtensionGetSetForEffect(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
-    let final core::int #t55 = i in self::Extension|[](#t55, this).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t55, this, this) : null;
-    let final core::int #t56 = i in let final self::Class #t57 = self in self::Extension|[](#t56, #t57).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t56, #t57, self) : null;
+    let final core::int #t55 = i in self::Extension|[](#t55, this) == null ?{self::Class} self::Extension|[]=(#t55, this, this) : null;
+    let final core::int #t56 = i in let final self::Class #t57 = self in self::Extension|[](#t56, #t57) == null ?{self::Class} self::Extension|[]=(#t56, #t57, self) : null;
     self::Extension|[]=(i, this, this);
     self::Extension|[]=(i, self, self);
     self::Extension|[](i, this);
     self::Extension|[](i, self);
-    let final core::int #t58 = i in self::Extension|[]=(#t58, this, self::Extension|[](#t58, this).{self::Class::+}(this));
-    let final core::int #t59 = i in let final self::Class #t60 = self in self::Extension|[]=(#t59, #t60, self::Extension|[](#t59, #t60).{self::Class::+}(self));
+    let final core::int #t58 = i in self::Extension|[]=(#t58, this, self::Extension|[](#t58, this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final core::int #t59 = i in let final self::Class #t60 = self in self::Extension|[]=(#t59, #t60, self::Extension|[](#t59, #t60).{self::Class::+}(self){(self::Class) → self::Class});
   }
   method explicitExtensionGetSetForValue(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final core::int #t61 = i in let final self::Class #t62 = self::Extension|[](#t61, this) in #t62.{core::Object::==}(null) ?{self::Class} let final void #t63 = self::Extension|[]=(#t61, this, this) in this : #t62;
-    v = let final core::int #t64 = i in let final self::Class #t65 = self in let final self::Class #t66 = self::Extension|[](#t64, #t65) in #t66.{core::Object::==}(null) ?{self::Class} let final self::Class #t67 = self in let final void #t68 = self::Extension|[]=(#t64, #t65, #t67) in #t67 : #t66;
+    v = let final core::int #t61 = i in let final self::Class #t62 = self::Extension|[](#t61, this) in #t62 == null ?{self::Class} let final void #t63 = self::Extension|[]=(#t61, this, this) in this : #t62;
+    v = let final core::int #t64 = i in let final self::Class #t65 = self in let final self::Class #t66 = self::Extension|[](#t64, #t65) in #t66 == null ?{self::Class} let final self::Class #t67 = self in let final void #t68 = self::Extension|[]=(#t64, #t65, #t67) in #t67 : #t66;
     v = let final core::int #t69 = i in let final void #t70 = self::Extension|[]=(#t69, this, this) in this;
     v = let final core::int #t71 = i in let final self::Class #t72 = self in let final void #t73 = self::Extension|[]=(#t71, self, #t72) in #t72;
     v = self::Extension|[](i, this);
     v = self::Extension|[](i, self);
-    v = let final core::int #t74 = i in let final self::Class #t75 = self::Extension|[](#t74, this).{self::Class::+}(this) in let final void #t76 = self::Extension|[]=(#t74, this, #t75) in #t75;
-    v = let final core::int #t77 = i in let final self::Class #t78 = self in let final self::Class #t79 = self::Extension|[](#t77, #t78).{self::Class::+}(self) in let final void #t80 = self::Extension|[]=(#t77, #t78, #t79) in #t79;
+    v = let final core::int #t74 = i in let final self::Class #t75 = self::Extension|[](#t74, this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t76 = self::Extension|[]=(#t74, this, #t75) in #t75;
+    v = let final core::int #t77 = i in let final self::Class #t78 = self in let final self::Class #t79 = self::Extension|[](#t77, #t78).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t80 = self::Extension|[]=(#t77, #t78, #t79) in #t79;
   }
 }
 class Subclass extends self::Class {
@@ -231,28 +231,28 @@
     late final self::Class self;
     if(self::b)
       self = this;
-    super.{self::Class::[]}(this).{core::Object::==}(null) ?{self::Class} super.{self::Class::[]=}(this, this) : null;
-    let final self::Class #t81 = self in super.{self::Class::[]}(#t81).{core::Object::==}(null) ?{self::Class} super.{self::Class::[]=}(#t81, self) : null;
+    super.{self::Class::[]}(this) == null ?{self::Class} super.{self::Class::[]=}(this, this) : null;
+    let final self::Class #t81 = self in super.{self::Class::[]}(#t81) == null ?{self::Class} super.{self::Class::[]=}(#t81, self) : null;
     super.{self::Class::[]=}(this, this);
     super.{self::Class::[]=}(self, self);
     super.{self::Class::[]}(this);
     super.{self::Class::[]}(self);
-    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this));
-    let final self::Class #t82 = self in super.{self::Class::[]=}(#t82, super.{self::Class::[]}(#t82).{self::Class::+}(self));
+    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final self::Class #t82 = self in super.{self::Class::[]=}(#t82, super.{self::Class::[]}(#t82).{self::Class::+}(self){(self::Class) → self::Class});
   }
   method superIndexGetSetForValue() → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Class #t83 = super.{self::Class::[]}(this) in #t83.{core::Object::==}(null) ?{self::Class} let final void #t84 = super.{self::Class::[]=}(this, this) in this : #t83;
-    v = let final self::Class #t85 = self in let final self::Class #t86 = super.{self::Class::[]}(#t85) in #t86.{core::Object::==}(null) ?{self::Class} let final self::Class #t87 = self in let final void #t88 = super.{self::Class::[]=}(#t85, #t87) in #t87 : #t86;
+    v = let final self::Class #t83 = super.{self::Class::[]}(this) in #t83 == null ?{self::Class} let final void #t84 = super.{self::Class::[]=}(this, this) in this : #t83;
+    v = let final self::Class #t85 = self in let final self::Class #t86 = super.{self::Class::[]}(#t85) in #t86 == null ?{self::Class} let final self::Class #t87 = self in let final void #t88 = super.{self::Class::[]=}(#t85, #t87) in #t87 : #t86;
     v = let final void #t89 = super.{self::Class::[]=}(this, this) in this;
     v = let final self::Class #t90 = self in let final self::Class #t91 = self in let final void #t92 = super.{self::Class::[]=}(#t90, #t91) in #t91;
     v = super.{self::Class::[]}(this);
     v = super.{self::Class::[]}(self);
-    v = let final self::Class #t93 = super.{self::Class::[]}(this).{self::Class::+}(this) in let final void #t94 = super.{self::Class::[]=}(this, #t93) in #t93;
-    v = let final self::Class #t95 = self in let final self::Class #t96 = super.{self::Class::[]}(#t95).{self::Class::+}(self) in let final void #t97 = super.{self::Class::[]=}(#t95, #t96) in #t96;
+    v = let final self::Class #t93 = super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t94 = super.{self::Class::[]=}(this, #t93) in #t93;
+    v = let final self::Class #t95 = self in let final self::Class #t96 = super.{self::Class::[]}(#t95).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t97 = super.{self::Class::[]=}(#t95, #t96) in #t96;
   }
 }
 class Class2 extends core::Object {
@@ -265,55 +265,55 @@
     late final self::Class2 self;
     if(self::b)
       self = this;
-    self::Extension2|[](this, this).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
-    let final self::Class2 #t98 = self in let final self::Class2 #t99 = self in self::Extension2|[](#t98, #t99).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(#t98, #t99, self) : null;
+    self::Extension2|[](this, this) == null ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
+    let final self::Class2 #t98 = self in let final self::Class2 #t99 = self in self::Extension2|[](#t98, #t99) == null ?{self::Class2} self::Extension2|[]=(#t98, #t99, self) : null;
     self::Extension2|[]=(this, this, this);
     self::Extension2|[]=(self, self, self);
     self::Extension2|[](this, this);
     self::Extension2|[](self, self);
-    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this));
-    let final self::Class2 #t100 = self in let final self::Class2 #t101 = self in self::Extension2|[]=(#t100, #t101, self::Extension2|[](#t100, #t101).{self::Class2::+}(self));
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2});
+    let final self::Class2 #t100 = self in let final self::Class2 #t101 = self in self::Extension2|[]=(#t100, #t101, self::Extension2|[](#t100, #t101).{self::Class2::+}(self){(self::Class2) → self::Class2});
   }
   method implicitExtensionGetSetForValue() → void {
     late final self::Class2 self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Class2 #t102 = self::Extension2|[](this, this) in #t102.{core::Object::==}(null) ?{self::Class2} let final void #t103 = self::Extension2|[]=(this, this, this) in this : #t102;
-    v = let final self::Class2 #t104 = self in let final self::Class2 #t105 = self in let final self::Class2 #t106 = self::Extension2|[](#t104, #t105) in #t106.{core::Object::==}(null) ?{self::Class2} let final self::Class2 #t107 = self in let final void #t108 = self::Extension2|[]=(#t104, #t105, #t107) in #t107 : #t106;
+    v = let final self::Class2 #t102 = self::Extension2|[](this, this) in #t102 == null ?{self::Class2} let final void #t103 = self::Extension2|[]=(this, this, this) in this : #t102;
+    v = let final self::Class2 #t104 = self in let final self::Class2 #t105 = self in let final self::Class2 #t106 = self::Extension2|[](#t104, #t105) in #t106 == null ?{self::Class2} let final self::Class2 #t107 = self in let final void #t108 = self::Extension2|[]=(#t104, #t105, #t107) in #t107 : #t106;
     v = let final void #t109 = self::Extension2|[]=(this, this, this) in this;
     v = let final self::Class2 #t110 = self in let final self::Class2 #t111 = self in let final self::Class2 #t112 = self in let final void #t113 = self::Extension2|[]=(#t110, #t111, #t112) in #t112;
     v = self::Extension2|[](this, this);
     v = self::Extension2|[](self, self);
-    v = let final self::Class2 #t114 = self::Extension2|[](this, this).{self::Class2::+}(this) in let final void #t115 = self::Extension2|[]=(this, this, #t114) in #t114;
-    v = let final self::Class2 #t116 = self in let final self::Class2 #t117 = self in let final self::Class2 #t118 = self::Extension2|[](#t116, #t117).{self::Class2::+}(self) in let final void #t119 = self::Extension2|[]=(#t116, #t117, #t118) in #t118;
+    v = let final self::Class2 #t114 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2} in let final void #t115 = self::Extension2|[]=(this, this, #t114) in #t114;
+    v = let final self::Class2 #t116 = self in let final self::Class2 #t117 = self in let final self::Class2 #t118 = self::Extension2|[](#t116, #t117).{self::Class2::+}(self){(self::Class2) → self::Class2} in let final void #t119 = self::Extension2|[]=(#t116, #t117, #t118) in #t118;
   }
   method explicitExtensionGetSetForEffect() → void {
     late final self::Class2 self;
     if(self::b)
       self = this;
-    self::Extension2|[](this, this).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
-    let final self::Class2 #t120 = self in let final self::Class2 #t121 = self in self::Extension2|[](#t120, #t121).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(#t120, #t121, self) : null;
+    self::Extension2|[](this, this) == null ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
+    let final self::Class2 #t120 = self in let final self::Class2 #t121 = self in self::Extension2|[](#t120, #t121) == null ?{self::Class2} self::Extension2|[]=(#t120, #t121, self) : null;
     self::Extension2|[]=(this, this, this);
     self::Extension2|[]=(self, self, self);
     self::Extension2|[](this, this);
     self::Extension2|[](self, self);
-    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this));
-    let final self::Class2 #t122 = self in let final self::Class2 #t123 = self in self::Extension2|[]=(#t122, #t123, self::Extension2|[](#t122, #t123).{self::Class2::+}(self));
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2});
+    let final self::Class2 #t122 = self in let final self::Class2 #t123 = self in self::Extension2|[]=(#t122, #t123, self::Extension2|[](#t122, #t123).{self::Class2::+}(self){(self::Class2) → self::Class2});
   }
   method explicitExtensionGetSetForValue() → void {
     late final self::Class2 self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Class2 #t124 = self::Extension2|[](this, this) in #t124.{core::Object::==}(null) ?{self::Class2} let final void #t125 = self::Extension2|[]=(this, this, this) in this : #t124;
-    v = let final self::Class2 #t126 = self in let final self::Class2 #t127 = self in let final self::Class2 #t128 = self::Extension2|[](#t126, #t127) in #t128.{core::Object::==}(null) ?{self::Class2} let final self::Class2 #t129 = self in let final void #t130 = self::Extension2|[]=(#t126, #t127, #t129) in #t129 : #t128;
+    v = let final self::Class2 #t124 = self::Extension2|[](this, this) in #t124 == null ?{self::Class2} let final void #t125 = self::Extension2|[]=(this, this, this) in this : #t124;
+    v = let final self::Class2 #t126 = self in let final self::Class2 #t127 = self in let final self::Class2 #t128 = self::Extension2|[](#t126, #t127) in #t128 == null ?{self::Class2} let final self::Class2 #t129 = self in let final void #t130 = self::Extension2|[]=(#t126, #t127, #t129) in #t129 : #t128;
     v = let final void #t131 = self::Extension2|[]=(this, this, this) in this;
     v = let final self::Class2 #t132 = self in let final self::Class2 #t133 = self in let final void #t134 = self::Extension2|[]=(#t132, self, #t133) in #t133;
     v = self::Extension2|[](this, this);
     v = self::Extension2|[](self, self);
-    v = let final self::Class2 #t135 = self::Extension2|[](this, this).{self::Class2::+}(this) in let final void #t136 = self::Extension2|[]=(this, this, #t135) in #t135;
-    v = let final self::Class2 #t137 = self in let final self::Class2 #t138 = self in let final self::Class2 #t139 = self::Extension2|[](#t137, #t138).{self::Class2::+}(self) in let final void #t140 = self::Extension2|[]=(#t137, #t138, #t139) in #t139;
+    v = let final self::Class2 #t135 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2} in let final void #t136 = self::Extension2|[]=(this, this, #t135) in #t135;
+    v = let final self::Class2 #t137 = self in let final self::Class2 #t138 = self in let final self::Class2 #t139 = self::Extension2|[](#t137, #t138).{self::Class2::+}(self){(self::Class2) → self::Class2} in let final void #t140 = self::Extension2|[]=(#t137, #t138, #t139) in #t139;
   }
 }
 extension Extension on core::int {
diff --git a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.expect b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.expect
index 84d1907..987bcb5 100644
--- a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.expect
@@ -145,82 +145,82 @@
     late final self::Class self;
     if(self::b)
       self = this;
-    let final self::Map<self::Class, self::Class> #t1 = map in #t1.{self::Map::[]}(this).{core::Object::==}(null) ?{self::Class} #t1.{self::Map::[]=}(this, this) : null;
-    let final self::Map<self::Class, self::Class> #t2 = map in let final self::Class #t3 = self in #t2.{self::Map::[]}(#t3).{core::Object::==}(null) ?{self::Class} #t2.{self::Map::[]=}(#t3, self) : null;
-    map.{self::Map::[]=}(this, this);
-    map.{self::Map::[]=}(self, self);
-    map.{self::Map::[]}(this);
-    map.{self::Map::[]}(self);
-    let final self::Map<self::Class, self::Class> #t4 = map in #t4.{self::Map::[]=}(this, #t4.{self::Map::[]}(this).{self::Class::+}(this));
-    let final self::Map<self::Class, self::Class> #t5 = map in let final self::Class #t6 = self in #t5.{self::Map::[]=}(#t6, #t5.{self::Map::[]}(#t6).{self::Class::+}(self));
+    let final self::Map<self::Class, self::Class> #t1 = map in #t1.{self::Map::[]}(this){(self::Class) → self::Class} == null ?{self::Class} #t1.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} : null;
+    let final self::Map<self::Class, self::Class> #t2 = map in let final self::Class #t3 = self in #t2.{self::Map::[]}(#t3){(self::Class) → self::Class} == null ?{self::Class} #t2.{self::Map::[]=}(#t3, self){(self::Class, self::Class) → void} : null;
+    map.{self::Map::[]=}(this, this){(self::Class, self::Class) → void};
+    map.{self::Map::[]=}(self, self){(self::Class, self::Class) → void};
+    map.{self::Map::[]}(this){(self::Class) → self::Class};
+    map.{self::Map::[]}(self){(self::Class) → self::Class};
+    let final self::Map<self::Class, self::Class> #t4 = map in #t4.{self::Map::[]=}(this, #t4.{self::Map::[]}(this){(self::Class) → self::Class}.{self::Class::+}(this){(self::Class) → self::Class}){(self::Class, self::Class) → void};
+    let final self::Map<self::Class, self::Class> #t5 = map in let final self::Class #t6 = self in #t5.{self::Map::[]=}(#t6, #t5.{self::Map::[]}(#t6){(self::Class) → self::Class}.{self::Class::+}(self){(self::Class) → self::Class}){(self::Class, self::Class) → void};
   }
   method indexGetSetForValue(self::Map<self::Class, self::Class> map) → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Map<self::Class, self::Class> #t7 = map in let final self::Class #t8 = #t7.{self::Map::[]}(this) in #t8.{core::Object::==}(null) ?{self::Class} let final void #t9 = #t7.{self::Map::[]=}(this, this) in this : #t8;
-    v = let final self::Map<self::Class, self::Class> #t10 = map in let final self::Class #t11 = self in let final self::Class #t12 = #t10.{self::Map::[]}(#t11) in #t12.{core::Object::==}(null) ?{self::Class} let final self::Class #t13 = self in let final void #t14 = #t10.{self::Map::[]=}(#t11, #t13) in #t13 : #t12;
-    v = let final self::Map<self::Class, self::Class> #t15 = map in let final void #t16 = #t15.{self::Map::[]=}(this, this) in this;
-    v = let final self::Map<self::Class, self::Class> #t17 = map in let final self::Class #t18 = self in let final self::Class #t19 = self in let final void #t20 = #t17.{self::Map::[]=}(#t18, #t19) in #t19;
-    v = map.{self::Map::[]}(this);
-    v = map.{self::Map::[]}(self);
-    v = let final self::Map<self::Class, self::Class> #t21 = map in let final self::Class #t22 = #t21.{self::Map::[]}(this).{self::Class::+}(this) in let final void #t23 = #t21.{self::Map::[]=}(this, #t22) in #t22;
-    v = let final self::Map<self::Class, self::Class> #t24 = map in let final self::Class #t25 = self in let final self::Class #t26 = #t24.{self::Map::[]}(#t25).{self::Class::+}(self) in let final void #t27 = #t24.{self::Map::[]=}(#t25, #t26) in #t26;
+    v = let final self::Map<self::Class, self::Class> #t7 = map in let final self::Class #t8 = #t7.{self::Map::[]}(this){(self::Class) → self::Class} in #t8 == null ?{self::Class} let final void #t9 = #t7.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} in this : #t8;
+    v = let final self::Map<self::Class, self::Class> #t10 = map in let final self::Class #t11 = self in let final self::Class #t12 = #t10.{self::Map::[]}(#t11){(self::Class) → self::Class} in #t12 == null ?{self::Class} let final self::Class #t13 = self in let final void #t14 = #t10.{self::Map::[]=}(#t11, #t13){(self::Class, self::Class) → void} in #t13 : #t12;
+    v = let final self::Map<self::Class, self::Class> #t15 = map in let final void #t16 = #t15.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} in this;
+    v = let final self::Map<self::Class, self::Class> #t17 = map in let final self::Class #t18 = self in let final self::Class #t19 = self in let final void #t20 = #t17.{self::Map::[]=}(#t18, #t19){(self::Class, self::Class) → void} in #t19;
+    v = map.{self::Map::[]}(this){(self::Class) → self::Class};
+    v = map.{self::Map::[]}(self){(self::Class) → self::Class};
+    v = let final self::Map<self::Class, self::Class> #t21 = map in let final self::Class #t22 = #t21.{self::Map::[]}(this){(self::Class) → self::Class}.{self::Class::+}(this){(self::Class) → self::Class} in let final void #t23 = #t21.{self::Map::[]=}(this, #t22){(self::Class, self::Class) → void} in #t22;
+    v = let final self::Map<self::Class, self::Class> #t24 = map in let final self::Class #t25 = self in let final self::Class #t26 = #t24.{self::Map::[]}(#t25){(self::Class) → self::Class}.{self::Class::+}(self){(self::Class) → self::Class} in let final void #t27 = #t24.{self::Map::[]=}(#t25, #t26){(self::Class, self::Class) → void} in #t26;
   }
   method implicitExtensionGetSetForEffect(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
-    let final core::int #t28 = i in self::Extension|[](#t28, this).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t28, this, this) : null;
-    let final core::int #t29 = i in let final self::Class #t30 = self in self::Extension|[](#t29, #t30).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t29, #t30, self) : null;
+    let final core::int #t28 = i in self::Extension|[](#t28, this) == null ?{self::Class} self::Extension|[]=(#t28, this, this) : null;
+    let final core::int #t29 = i in let final self::Class #t30 = self in self::Extension|[](#t29, #t30) == null ?{self::Class} self::Extension|[]=(#t29, #t30, self) : null;
     self::Extension|[]=(i, this, this);
     self::Extension|[]=(i, self, self);
     self::Extension|[](i, this);
     self::Extension|[](i, self);
-    let final core::int #t31 = i in self::Extension|[]=(#t31, this, self::Extension|[](#t31, this).{self::Class::+}(this));
-    let final core::int #t32 = i in let final self::Class #t33 = self in self::Extension|[]=(#t32, #t33, self::Extension|[](#t32, #t33).{self::Class::+}(self));
+    let final core::int #t31 = i in self::Extension|[]=(#t31, this, self::Extension|[](#t31, this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final core::int #t32 = i in let final self::Class #t33 = self in self::Extension|[]=(#t32, #t33, self::Extension|[](#t32, #t33).{self::Class::+}(self){(self::Class) → self::Class});
   }
   method implicitExtensionGetSetForValue(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final core::int #t34 = i in let final self::Class #t35 = self::Extension|[](#t34, this) in #t35.{core::Object::==}(null) ?{self::Class} let final void #t36 = self::Extension|[]=(#t34, this, this) in this : #t35;
-    v = let final core::int #t37 = i in let final self::Class #t38 = self in let final self::Class #t39 = self::Extension|[](#t37, #t38) in #t39.{core::Object::==}(null) ?{self::Class} let final self::Class #t40 = self in let final void #t41 = self::Extension|[]=(#t37, #t38, #t40) in #t40 : #t39;
+    v = let final core::int #t34 = i in let final self::Class #t35 = self::Extension|[](#t34, this) in #t35 == null ?{self::Class} let final void #t36 = self::Extension|[]=(#t34, this, this) in this : #t35;
+    v = let final core::int #t37 = i in let final self::Class #t38 = self in let final self::Class #t39 = self::Extension|[](#t37, #t38) in #t39 == null ?{self::Class} let final self::Class #t40 = self in let final void #t41 = self::Extension|[]=(#t37, #t38, #t40) in #t40 : #t39;
     v = let final core::int #t42 = i in let final void #t43 = self::Extension|[]=(#t42, this, this) in this;
     v = let final core::int #t44 = i in let final self::Class #t45 = self in let final self::Class #t46 = self in let final void #t47 = self::Extension|[]=(#t44, #t45, #t46) in #t46;
     v = self::Extension|[](i, this);
     v = self::Extension|[](i, self);
-    v = let final core::int #t48 = i in let final self::Class #t49 = self::Extension|[](#t48, this).{self::Class::+}(this) in let final void #t50 = self::Extension|[]=(#t48, this, #t49) in #t49;
-    v = let final core::int #t51 = i in let final self::Class #t52 = self in let final self::Class #t53 = self::Extension|[](#t51, #t52).{self::Class::+}(self) in let final void #t54 = self::Extension|[]=(#t51, #t52, #t53) in #t53;
+    v = let final core::int #t48 = i in let final self::Class #t49 = self::Extension|[](#t48, this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t50 = self::Extension|[]=(#t48, this, #t49) in #t49;
+    v = let final core::int #t51 = i in let final self::Class #t52 = self in let final self::Class #t53 = self::Extension|[](#t51, #t52).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t54 = self::Extension|[]=(#t51, #t52, #t53) in #t53;
   }
   method explicitExtensionGetSetForEffect(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
-    let final core::int #t55 = i in self::Extension|[](#t55, this).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t55, this, this) : null;
-    let final core::int #t56 = i in let final self::Class #t57 = self in self::Extension|[](#t56, #t57).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t56, #t57, self) : null;
+    let final core::int #t55 = i in self::Extension|[](#t55, this) == null ?{self::Class} self::Extension|[]=(#t55, this, this) : null;
+    let final core::int #t56 = i in let final self::Class #t57 = self in self::Extension|[](#t56, #t57) == null ?{self::Class} self::Extension|[]=(#t56, #t57, self) : null;
     self::Extension|[]=(i, this, this);
     self::Extension|[]=(i, self, self);
     self::Extension|[](i, this);
     self::Extension|[](i, self);
-    let final core::int #t58 = i in self::Extension|[]=(#t58, this, self::Extension|[](#t58, this).{self::Class::+}(this));
-    let final core::int #t59 = i in let final self::Class #t60 = self in self::Extension|[]=(#t59, #t60, self::Extension|[](#t59, #t60).{self::Class::+}(self));
+    let final core::int #t58 = i in self::Extension|[]=(#t58, this, self::Extension|[](#t58, this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final core::int #t59 = i in let final self::Class #t60 = self in self::Extension|[]=(#t59, #t60, self::Extension|[](#t59, #t60).{self::Class::+}(self){(self::Class) → self::Class});
   }
   method explicitExtensionGetSetForValue(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final core::int #t61 = i in let final self::Class #t62 = self::Extension|[](#t61, this) in #t62.{core::Object::==}(null) ?{self::Class} let final void #t63 = self::Extension|[]=(#t61, this, this) in this : #t62;
-    v = let final core::int #t64 = i in let final self::Class #t65 = self in let final self::Class #t66 = self::Extension|[](#t64, #t65) in #t66.{core::Object::==}(null) ?{self::Class} let final self::Class #t67 = self in let final void #t68 = self::Extension|[]=(#t64, #t65, #t67) in #t67 : #t66;
+    v = let final core::int #t61 = i in let final self::Class #t62 = self::Extension|[](#t61, this) in #t62 == null ?{self::Class} let final void #t63 = self::Extension|[]=(#t61, this, this) in this : #t62;
+    v = let final core::int #t64 = i in let final self::Class #t65 = self in let final self::Class #t66 = self::Extension|[](#t64, #t65) in #t66 == null ?{self::Class} let final self::Class #t67 = self in let final void #t68 = self::Extension|[]=(#t64, #t65, #t67) in #t67 : #t66;
     v = let final core::int #t69 = i in let final void #t70 = self::Extension|[]=(#t69, this, this) in this;
     v = let final core::int #t71 = i in let final self::Class #t72 = self in let final void #t73 = self::Extension|[]=(#t71, self, #t72) in #t72;
     v = self::Extension|[](i, this);
     v = self::Extension|[](i, self);
-    v = let final core::int #t74 = i in let final self::Class #t75 = self::Extension|[](#t74, this).{self::Class::+}(this) in let final void #t76 = self::Extension|[]=(#t74, this, #t75) in #t75;
-    v = let final core::int #t77 = i in let final self::Class #t78 = self in let final self::Class #t79 = self::Extension|[](#t77, #t78).{self::Class::+}(self) in let final void #t80 = self::Extension|[]=(#t77, #t78, #t79) in #t79;
+    v = let final core::int #t74 = i in let final self::Class #t75 = self::Extension|[](#t74, this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t76 = self::Extension|[]=(#t74, this, #t75) in #t75;
+    v = let final core::int #t77 = i in let final self::Class #t78 = self in let final self::Class #t79 = self::Extension|[](#t77, #t78).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t80 = self::Extension|[]=(#t77, #t78, #t79) in #t79;
   }
 }
 class Subclass extends self::Class {
@@ -231,28 +231,28 @@
     late final self::Class self;
     if(self::b)
       self = this;
-    super.{self::Class::[]}(this).{core::Object::==}(null) ?{self::Class} super.{self::Class::[]=}(this, this) : null;
-    let final self::Class #t81 = self in super.{self::Class::[]}(#t81).{core::Object::==}(null) ?{self::Class} super.{self::Class::[]=}(#t81, self) : null;
+    super.{self::Class::[]}(this) == null ?{self::Class} super.{self::Class::[]=}(this, this) : null;
+    let final self::Class #t81 = self in super.{self::Class::[]}(#t81) == null ?{self::Class} super.{self::Class::[]=}(#t81, self) : null;
     super.{self::Class::[]=}(this, this);
     super.{self::Class::[]=}(self, self);
     super.{self::Class::[]}(this);
     super.{self::Class::[]}(self);
-    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this));
-    let final self::Class #t82 = self in super.{self::Class::[]=}(#t82, super.{self::Class::[]}(#t82).{self::Class::+}(self));
+    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final self::Class #t82 = self in super.{self::Class::[]=}(#t82, super.{self::Class::[]}(#t82).{self::Class::+}(self){(self::Class) → self::Class});
   }
   method superIndexGetSetForValue() → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Class #t83 = super.{self::Class::[]}(this) in #t83.{core::Object::==}(null) ?{self::Class} let final void #t84 = super.{self::Class::[]=}(this, this) in this : #t83;
-    v = let final self::Class #t85 = self in let final self::Class #t86 = super.{self::Class::[]}(#t85) in #t86.{core::Object::==}(null) ?{self::Class} let final self::Class #t87 = self in let final void #t88 = super.{self::Class::[]=}(#t85, #t87) in #t87 : #t86;
+    v = let final self::Class #t83 = super.{self::Class::[]}(this) in #t83 == null ?{self::Class} let final void #t84 = super.{self::Class::[]=}(this, this) in this : #t83;
+    v = let final self::Class #t85 = self in let final self::Class #t86 = super.{self::Class::[]}(#t85) in #t86 == null ?{self::Class} let final self::Class #t87 = self in let final void #t88 = super.{self::Class::[]=}(#t85, #t87) in #t87 : #t86;
     v = let final void #t89 = super.{self::Class::[]=}(this, this) in this;
     v = let final self::Class #t90 = self in let final self::Class #t91 = self in let final void #t92 = super.{self::Class::[]=}(#t90, #t91) in #t91;
     v = super.{self::Class::[]}(this);
     v = super.{self::Class::[]}(self);
-    v = let final self::Class #t93 = super.{self::Class::[]}(this).{self::Class::+}(this) in let final void #t94 = super.{self::Class::[]=}(this, #t93) in #t93;
-    v = let final self::Class #t95 = self in let final self::Class #t96 = super.{self::Class::[]}(#t95).{self::Class::+}(self) in let final void #t97 = super.{self::Class::[]=}(#t95, #t96) in #t96;
+    v = let final self::Class #t93 = super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t94 = super.{self::Class::[]=}(this, #t93) in #t93;
+    v = let final self::Class #t95 = self in let final self::Class #t96 = super.{self::Class::[]}(#t95).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t97 = super.{self::Class::[]=}(#t95, #t96) in #t96;
   }
 }
 class Class2 extends core::Object {
@@ -265,55 +265,55 @@
     late final self::Class2 self;
     if(self::b)
       self = this;
-    self::Extension2|[](this, this).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
-    let final self::Class2 #t98 = self in let final self::Class2 #t99 = self in self::Extension2|[](#t98, #t99).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(#t98, #t99, self) : null;
+    self::Extension2|[](this, this) == null ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
+    let final self::Class2 #t98 = self in let final self::Class2 #t99 = self in self::Extension2|[](#t98, #t99) == null ?{self::Class2} self::Extension2|[]=(#t98, #t99, self) : null;
     self::Extension2|[]=(this, this, this);
     self::Extension2|[]=(self, self, self);
     self::Extension2|[](this, this);
     self::Extension2|[](self, self);
-    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this));
-    let final self::Class2 #t100 = self in let final self::Class2 #t101 = self in self::Extension2|[]=(#t100, #t101, self::Extension2|[](#t100, #t101).{self::Class2::+}(self));
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2});
+    let final self::Class2 #t100 = self in let final self::Class2 #t101 = self in self::Extension2|[]=(#t100, #t101, self::Extension2|[](#t100, #t101).{self::Class2::+}(self){(self::Class2) → self::Class2});
   }
   method implicitExtensionGetSetForValue() → void {
     late final self::Class2 self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Class2 #t102 = self::Extension2|[](this, this) in #t102.{core::Object::==}(null) ?{self::Class2} let final void #t103 = self::Extension2|[]=(this, this, this) in this : #t102;
-    v = let final self::Class2 #t104 = self in let final self::Class2 #t105 = self in let final self::Class2 #t106 = self::Extension2|[](#t104, #t105) in #t106.{core::Object::==}(null) ?{self::Class2} let final self::Class2 #t107 = self in let final void #t108 = self::Extension2|[]=(#t104, #t105, #t107) in #t107 : #t106;
+    v = let final self::Class2 #t102 = self::Extension2|[](this, this) in #t102 == null ?{self::Class2} let final void #t103 = self::Extension2|[]=(this, this, this) in this : #t102;
+    v = let final self::Class2 #t104 = self in let final self::Class2 #t105 = self in let final self::Class2 #t106 = self::Extension2|[](#t104, #t105) in #t106 == null ?{self::Class2} let final self::Class2 #t107 = self in let final void #t108 = self::Extension2|[]=(#t104, #t105, #t107) in #t107 : #t106;
     v = let final void #t109 = self::Extension2|[]=(this, this, this) in this;
     v = let final self::Class2 #t110 = self in let final self::Class2 #t111 = self in let final self::Class2 #t112 = self in let final void #t113 = self::Extension2|[]=(#t110, #t111, #t112) in #t112;
     v = self::Extension2|[](this, this);
     v = self::Extension2|[](self, self);
-    v = let final self::Class2 #t114 = self::Extension2|[](this, this).{self::Class2::+}(this) in let final void #t115 = self::Extension2|[]=(this, this, #t114) in #t114;
-    v = let final self::Class2 #t116 = self in let final self::Class2 #t117 = self in let final self::Class2 #t118 = self::Extension2|[](#t116, #t117).{self::Class2::+}(self) in let final void #t119 = self::Extension2|[]=(#t116, #t117, #t118) in #t118;
+    v = let final self::Class2 #t114 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2} in let final void #t115 = self::Extension2|[]=(this, this, #t114) in #t114;
+    v = let final self::Class2 #t116 = self in let final self::Class2 #t117 = self in let final self::Class2 #t118 = self::Extension2|[](#t116, #t117).{self::Class2::+}(self){(self::Class2) → self::Class2} in let final void #t119 = self::Extension2|[]=(#t116, #t117, #t118) in #t118;
   }
   method explicitExtensionGetSetForEffect() → void {
     late final self::Class2 self;
     if(self::b)
       self = this;
-    self::Extension2|[](this, this).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
-    let final self::Class2 #t120 = self in let final self::Class2 #t121 = self in self::Extension2|[](#t120, #t121).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(#t120, #t121, self) : null;
+    self::Extension2|[](this, this) == null ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
+    let final self::Class2 #t120 = self in let final self::Class2 #t121 = self in self::Extension2|[](#t120, #t121) == null ?{self::Class2} self::Extension2|[]=(#t120, #t121, self) : null;
     self::Extension2|[]=(this, this, this);
     self::Extension2|[]=(self, self, self);
     self::Extension2|[](this, this);
     self::Extension2|[](self, self);
-    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this));
-    let final self::Class2 #t122 = self in let final self::Class2 #t123 = self in self::Extension2|[]=(#t122, #t123, self::Extension2|[](#t122, #t123).{self::Class2::+}(self));
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2});
+    let final self::Class2 #t122 = self in let final self::Class2 #t123 = self in self::Extension2|[]=(#t122, #t123, self::Extension2|[](#t122, #t123).{self::Class2::+}(self){(self::Class2) → self::Class2});
   }
   method explicitExtensionGetSetForValue() → void {
     late final self::Class2 self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Class2 #t124 = self::Extension2|[](this, this) in #t124.{core::Object::==}(null) ?{self::Class2} let final void #t125 = self::Extension2|[]=(this, this, this) in this : #t124;
-    v = let final self::Class2 #t126 = self in let final self::Class2 #t127 = self in let final self::Class2 #t128 = self::Extension2|[](#t126, #t127) in #t128.{core::Object::==}(null) ?{self::Class2} let final self::Class2 #t129 = self in let final void #t130 = self::Extension2|[]=(#t126, #t127, #t129) in #t129 : #t128;
+    v = let final self::Class2 #t124 = self::Extension2|[](this, this) in #t124 == null ?{self::Class2} let final void #t125 = self::Extension2|[]=(this, this, this) in this : #t124;
+    v = let final self::Class2 #t126 = self in let final self::Class2 #t127 = self in let final self::Class2 #t128 = self::Extension2|[](#t126, #t127) in #t128 == null ?{self::Class2} let final self::Class2 #t129 = self in let final void #t130 = self::Extension2|[]=(#t126, #t127, #t129) in #t129 : #t128;
     v = let final void #t131 = self::Extension2|[]=(this, this, this) in this;
     v = let final self::Class2 #t132 = self in let final self::Class2 #t133 = self in let final void #t134 = self::Extension2|[]=(#t132, self, #t133) in #t133;
     v = self::Extension2|[](this, this);
     v = self::Extension2|[](self, self);
-    v = let final self::Class2 #t135 = self::Extension2|[](this, this).{self::Class2::+}(this) in let final void #t136 = self::Extension2|[]=(this, this, #t135) in #t135;
-    v = let final self::Class2 #t137 = self in let final self::Class2 #t138 = self in let final self::Class2 #t139 = self::Extension2|[](#t137, #t138).{self::Class2::+}(self) in let final void #t140 = self::Extension2|[]=(#t137, #t138, #t139) in #t139;
+    v = let final self::Class2 #t135 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2} in let final void #t136 = self::Extension2|[]=(this, this, #t135) in #t135;
+    v = let final self::Class2 #t137 = self in let final self::Class2 #t138 = self in let final self::Class2 #t139 = self::Extension2|[](#t137, #t138).{self::Class2::+}(self){(self::Class2) → self::Class2} in let final void #t140 = self::Extension2|[]=(#t137, #t138, #t139) in #t139;
   }
 }
 extension Extension on core::int {
diff --git a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.transformed.expect
index 84d1907..987bcb5 100644
--- a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.transformed.expect
@@ -145,82 +145,82 @@
     late final self::Class self;
     if(self::b)
       self = this;
-    let final self::Map<self::Class, self::Class> #t1 = map in #t1.{self::Map::[]}(this).{core::Object::==}(null) ?{self::Class} #t1.{self::Map::[]=}(this, this) : null;
-    let final self::Map<self::Class, self::Class> #t2 = map in let final self::Class #t3 = self in #t2.{self::Map::[]}(#t3).{core::Object::==}(null) ?{self::Class} #t2.{self::Map::[]=}(#t3, self) : null;
-    map.{self::Map::[]=}(this, this);
-    map.{self::Map::[]=}(self, self);
-    map.{self::Map::[]}(this);
-    map.{self::Map::[]}(self);
-    let final self::Map<self::Class, self::Class> #t4 = map in #t4.{self::Map::[]=}(this, #t4.{self::Map::[]}(this).{self::Class::+}(this));
-    let final self::Map<self::Class, self::Class> #t5 = map in let final self::Class #t6 = self in #t5.{self::Map::[]=}(#t6, #t5.{self::Map::[]}(#t6).{self::Class::+}(self));
+    let final self::Map<self::Class, self::Class> #t1 = map in #t1.{self::Map::[]}(this){(self::Class) → self::Class} == null ?{self::Class} #t1.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} : null;
+    let final self::Map<self::Class, self::Class> #t2 = map in let final self::Class #t3 = self in #t2.{self::Map::[]}(#t3){(self::Class) → self::Class} == null ?{self::Class} #t2.{self::Map::[]=}(#t3, self){(self::Class, self::Class) → void} : null;
+    map.{self::Map::[]=}(this, this){(self::Class, self::Class) → void};
+    map.{self::Map::[]=}(self, self){(self::Class, self::Class) → void};
+    map.{self::Map::[]}(this){(self::Class) → self::Class};
+    map.{self::Map::[]}(self){(self::Class) → self::Class};
+    let final self::Map<self::Class, self::Class> #t4 = map in #t4.{self::Map::[]=}(this, #t4.{self::Map::[]}(this){(self::Class) → self::Class}.{self::Class::+}(this){(self::Class) → self::Class}){(self::Class, self::Class) → void};
+    let final self::Map<self::Class, self::Class> #t5 = map in let final self::Class #t6 = self in #t5.{self::Map::[]=}(#t6, #t5.{self::Map::[]}(#t6){(self::Class) → self::Class}.{self::Class::+}(self){(self::Class) → self::Class}){(self::Class, self::Class) → void};
   }
   method indexGetSetForValue(self::Map<self::Class, self::Class> map) → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Map<self::Class, self::Class> #t7 = map in let final self::Class #t8 = #t7.{self::Map::[]}(this) in #t8.{core::Object::==}(null) ?{self::Class} let final void #t9 = #t7.{self::Map::[]=}(this, this) in this : #t8;
-    v = let final self::Map<self::Class, self::Class> #t10 = map in let final self::Class #t11 = self in let final self::Class #t12 = #t10.{self::Map::[]}(#t11) in #t12.{core::Object::==}(null) ?{self::Class} let final self::Class #t13 = self in let final void #t14 = #t10.{self::Map::[]=}(#t11, #t13) in #t13 : #t12;
-    v = let final self::Map<self::Class, self::Class> #t15 = map in let final void #t16 = #t15.{self::Map::[]=}(this, this) in this;
-    v = let final self::Map<self::Class, self::Class> #t17 = map in let final self::Class #t18 = self in let final self::Class #t19 = self in let final void #t20 = #t17.{self::Map::[]=}(#t18, #t19) in #t19;
-    v = map.{self::Map::[]}(this);
-    v = map.{self::Map::[]}(self);
-    v = let final self::Map<self::Class, self::Class> #t21 = map in let final self::Class #t22 = #t21.{self::Map::[]}(this).{self::Class::+}(this) in let final void #t23 = #t21.{self::Map::[]=}(this, #t22) in #t22;
-    v = let final self::Map<self::Class, self::Class> #t24 = map in let final self::Class #t25 = self in let final self::Class #t26 = #t24.{self::Map::[]}(#t25).{self::Class::+}(self) in let final void #t27 = #t24.{self::Map::[]=}(#t25, #t26) in #t26;
+    v = let final self::Map<self::Class, self::Class> #t7 = map in let final self::Class #t8 = #t7.{self::Map::[]}(this){(self::Class) → self::Class} in #t8 == null ?{self::Class} let final void #t9 = #t7.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} in this : #t8;
+    v = let final self::Map<self::Class, self::Class> #t10 = map in let final self::Class #t11 = self in let final self::Class #t12 = #t10.{self::Map::[]}(#t11){(self::Class) → self::Class} in #t12 == null ?{self::Class} let final self::Class #t13 = self in let final void #t14 = #t10.{self::Map::[]=}(#t11, #t13){(self::Class, self::Class) → void} in #t13 : #t12;
+    v = let final self::Map<self::Class, self::Class> #t15 = map in let final void #t16 = #t15.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} in this;
+    v = let final self::Map<self::Class, self::Class> #t17 = map in let final self::Class #t18 = self in let final self::Class #t19 = self in let final void #t20 = #t17.{self::Map::[]=}(#t18, #t19){(self::Class, self::Class) → void} in #t19;
+    v = map.{self::Map::[]}(this){(self::Class) → self::Class};
+    v = map.{self::Map::[]}(self){(self::Class) → self::Class};
+    v = let final self::Map<self::Class, self::Class> #t21 = map in let final self::Class #t22 = #t21.{self::Map::[]}(this){(self::Class) → self::Class}.{self::Class::+}(this){(self::Class) → self::Class} in let final void #t23 = #t21.{self::Map::[]=}(this, #t22){(self::Class, self::Class) → void} in #t22;
+    v = let final self::Map<self::Class, self::Class> #t24 = map in let final self::Class #t25 = self in let final self::Class #t26 = #t24.{self::Map::[]}(#t25){(self::Class) → self::Class}.{self::Class::+}(self){(self::Class) → self::Class} in let final void #t27 = #t24.{self::Map::[]=}(#t25, #t26){(self::Class, self::Class) → void} in #t26;
   }
   method implicitExtensionGetSetForEffect(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
-    let final core::int #t28 = i in self::Extension|[](#t28, this).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t28, this, this) : null;
-    let final core::int #t29 = i in let final self::Class #t30 = self in self::Extension|[](#t29, #t30).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t29, #t30, self) : null;
+    let final core::int #t28 = i in self::Extension|[](#t28, this) == null ?{self::Class} self::Extension|[]=(#t28, this, this) : null;
+    let final core::int #t29 = i in let final self::Class #t30 = self in self::Extension|[](#t29, #t30) == null ?{self::Class} self::Extension|[]=(#t29, #t30, self) : null;
     self::Extension|[]=(i, this, this);
     self::Extension|[]=(i, self, self);
     self::Extension|[](i, this);
     self::Extension|[](i, self);
-    let final core::int #t31 = i in self::Extension|[]=(#t31, this, self::Extension|[](#t31, this).{self::Class::+}(this));
-    let final core::int #t32 = i in let final self::Class #t33 = self in self::Extension|[]=(#t32, #t33, self::Extension|[](#t32, #t33).{self::Class::+}(self));
+    let final core::int #t31 = i in self::Extension|[]=(#t31, this, self::Extension|[](#t31, this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final core::int #t32 = i in let final self::Class #t33 = self in self::Extension|[]=(#t32, #t33, self::Extension|[](#t32, #t33).{self::Class::+}(self){(self::Class) → self::Class});
   }
   method implicitExtensionGetSetForValue(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final core::int #t34 = i in let final self::Class #t35 = self::Extension|[](#t34, this) in #t35.{core::Object::==}(null) ?{self::Class} let final void #t36 = self::Extension|[]=(#t34, this, this) in this : #t35;
-    v = let final core::int #t37 = i in let final self::Class #t38 = self in let final self::Class #t39 = self::Extension|[](#t37, #t38) in #t39.{core::Object::==}(null) ?{self::Class} let final self::Class #t40 = self in let final void #t41 = self::Extension|[]=(#t37, #t38, #t40) in #t40 : #t39;
+    v = let final core::int #t34 = i in let final self::Class #t35 = self::Extension|[](#t34, this) in #t35 == null ?{self::Class} let final void #t36 = self::Extension|[]=(#t34, this, this) in this : #t35;
+    v = let final core::int #t37 = i in let final self::Class #t38 = self in let final self::Class #t39 = self::Extension|[](#t37, #t38) in #t39 == null ?{self::Class} let final self::Class #t40 = self in let final void #t41 = self::Extension|[]=(#t37, #t38, #t40) in #t40 : #t39;
     v = let final core::int #t42 = i in let final void #t43 = self::Extension|[]=(#t42, this, this) in this;
     v = let final core::int #t44 = i in let final self::Class #t45 = self in let final self::Class #t46 = self in let final void #t47 = self::Extension|[]=(#t44, #t45, #t46) in #t46;
     v = self::Extension|[](i, this);
     v = self::Extension|[](i, self);
-    v = let final core::int #t48 = i in let final self::Class #t49 = self::Extension|[](#t48, this).{self::Class::+}(this) in let final void #t50 = self::Extension|[]=(#t48, this, #t49) in #t49;
-    v = let final core::int #t51 = i in let final self::Class #t52 = self in let final self::Class #t53 = self::Extension|[](#t51, #t52).{self::Class::+}(self) in let final void #t54 = self::Extension|[]=(#t51, #t52, #t53) in #t53;
+    v = let final core::int #t48 = i in let final self::Class #t49 = self::Extension|[](#t48, this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t50 = self::Extension|[]=(#t48, this, #t49) in #t49;
+    v = let final core::int #t51 = i in let final self::Class #t52 = self in let final self::Class #t53 = self::Extension|[](#t51, #t52).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t54 = self::Extension|[]=(#t51, #t52, #t53) in #t53;
   }
   method explicitExtensionGetSetForEffect(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
-    let final core::int #t55 = i in self::Extension|[](#t55, this).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t55, this, this) : null;
-    let final core::int #t56 = i in let final self::Class #t57 = self in self::Extension|[](#t56, #t57).{core::Object::==}(null) ?{self::Class} self::Extension|[]=(#t56, #t57, self) : null;
+    let final core::int #t55 = i in self::Extension|[](#t55, this) == null ?{self::Class} self::Extension|[]=(#t55, this, this) : null;
+    let final core::int #t56 = i in let final self::Class #t57 = self in self::Extension|[](#t56, #t57) == null ?{self::Class} self::Extension|[]=(#t56, #t57, self) : null;
     self::Extension|[]=(i, this, this);
     self::Extension|[]=(i, self, self);
     self::Extension|[](i, this);
     self::Extension|[](i, self);
-    let final core::int #t58 = i in self::Extension|[]=(#t58, this, self::Extension|[](#t58, this).{self::Class::+}(this));
-    let final core::int #t59 = i in let final self::Class #t60 = self in self::Extension|[]=(#t59, #t60, self::Extension|[](#t59, #t60).{self::Class::+}(self));
+    let final core::int #t58 = i in self::Extension|[]=(#t58, this, self::Extension|[](#t58, this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final core::int #t59 = i in let final self::Class #t60 = self in self::Extension|[]=(#t59, #t60, self::Extension|[](#t59, #t60).{self::Class::+}(self){(self::Class) → self::Class});
   }
   method explicitExtensionGetSetForValue(core::int i) → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final core::int #t61 = i in let final self::Class #t62 = self::Extension|[](#t61, this) in #t62.{core::Object::==}(null) ?{self::Class} let final void #t63 = self::Extension|[]=(#t61, this, this) in this : #t62;
-    v = let final core::int #t64 = i in let final self::Class #t65 = self in let final self::Class #t66 = self::Extension|[](#t64, #t65) in #t66.{core::Object::==}(null) ?{self::Class} let final self::Class #t67 = self in let final void #t68 = self::Extension|[]=(#t64, #t65, #t67) in #t67 : #t66;
+    v = let final core::int #t61 = i in let final self::Class #t62 = self::Extension|[](#t61, this) in #t62 == null ?{self::Class} let final void #t63 = self::Extension|[]=(#t61, this, this) in this : #t62;
+    v = let final core::int #t64 = i in let final self::Class #t65 = self in let final self::Class #t66 = self::Extension|[](#t64, #t65) in #t66 == null ?{self::Class} let final self::Class #t67 = self in let final void #t68 = self::Extension|[]=(#t64, #t65, #t67) in #t67 : #t66;
     v = let final core::int #t69 = i in let final void #t70 = self::Extension|[]=(#t69, this, this) in this;
     v = let final core::int #t71 = i in let final self::Class #t72 = self in let final void #t73 = self::Extension|[]=(#t71, self, #t72) in #t72;
     v = self::Extension|[](i, this);
     v = self::Extension|[](i, self);
-    v = let final core::int #t74 = i in let final self::Class #t75 = self::Extension|[](#t74, this).{self::Class::+}(this) in let final void #t76 = self::Extension|[]=(#t74, this, #t75) in #t75;
-    v = let final core::int #t77 = i in let final self::Class #t78 = self in let final self::Class #t79 = self::Extension|[](#t77, #t78).{self::Class::+}(self) in let final void #t80 = self::Extension|[]=(#t77, #t78, #t79) in #t79;
+    v = let final core::int #t74 = i in let final self::Class #t75 = self::Extension|[](#t74, this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t76 = self::Extension|[]=(#t74, this, #t75) in #t75;
+    v = let final core::int #t77 = i in let final self::Class #t78 = self in let final self::Class #t79 = self::Extension|[](#t77, #t78).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t80 = self::Extension|[]=(#t77, #t78, #t79) in #t79;
   }
 }
 class Subclass extends self::Class {
@@ -231,28 +231,28 @@
     late final self::Class self;
     if(self::b)
       self = this;
-    super.{self::Class::[]}(this).{core::Object::==}(null) ?{self::Class} super.{self::Class::[]=}(this, this) : null;
-    let final self::Class #t81 = self in super.{self::Class::[]}(#t81).{core::Object::==}(null) ?{self::Class} super.{self::Class::[]=}(#t81, self) : null;
+    super.{self::Class::[]}(this) == null ?{self::Class} super.{self::Class::[]=}(this, this) : null;
+    let final self::Class #t81 = self in super.{self::Class::[]}(#t81) == null ?{self::Class} super.{self::Class::[]=}(#t81, self) : null;
     super.{self::Class::[]=}(this, this);
     super.{self::Class::[]=}(self, self);
     super.{self::Class::[]}(this);
     super.{self::Class::[]}(self);
-    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this));
-    let final self::Class #t82 = self in super.{self::Class::[]=}(#t82, super.{self::Class::[]}(#t82).{self::Class::+}(self));
+    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final self::Class #t82 = self in super.{self::Class::[]=}(#t82, super.{self::Class::[]}(#t82).{self::Class::+}(self){(self::Class) → self::Class});
   }
   method superIndexGetSetForValue() → void {
     late final self::Class self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Class #t83 = super.{self::Class::[]}(this) in #t83.{core::Object::==}(null) ?{self::Class} let final void #t84 = super.{self::Class::[]=}(this, this) in this : #t83;
-    v = let final self::Class #t85 = self in let final self::Class #t86 = super.{self::Class::[]}(#t85) in #t86.{core::Object::==}(null) ?{self::Class} let final self::Class #t87 = self in let final void #t88 = super.{self::Class::[]=}(#t85, #t87) in #t87 : #t86;
+    v = let final self::Class #t83 = super.{self::Class::[]}(this) in #t83 == null ?{self::Class} let final void #t84 = super.{self::Class::[]=}(this, this) in this : #t83;
+    v = let final self::Class #t85 = self in let final self::Class #t86 = super.{self::Class::[]}(#t85) in #t86 == null ?{self::Class} let final self::Class #t87 = self in let final void #t88 = super.{self::Class::[]=}(#t85, #t87) in #t87 : #t86;
     v = let final void #t89 = super.{self::Class::[]=}(this, this) in this;
     v = let final self::Class #t90 = self in let final self::Class #t91 = self in let final void #t92 = super.{self::Class::[]=}(#t90, #t91) in #t91;
     v = super.{self::Class::[]}(this);
     v = super.{self::Class::[]}(self);
-    v = let final self::Class #t93 = super.{self::Class::[]}(this).{self::Class::+}(this) in let final void #t94 = super.{self::Class::[]=}(this, #t93) in #t93;
-    v = let final self::Class #t95 = self in let final self::Class #t96 = super.{self::Class::[]}(#t95).{self::Class::+}(self) in let final void #t97 = super.{self::Class::[]=}(#t95, #t96) in #t96;
+    v = let final self::Class #t93 = super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t94 = super.{self::Class::[]=}(this, #t93) in #t93;
+    v = let final self::Class #t95 = self in let final self::Class #t96 = super.{self::Class::[]}(#t95).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t97 = super.{self::Class::[]=}(#t95, #t96) in #t96;
   }
 }
 class Class2 extends core::Object {
@@ -265,55 +265,55 @@
     late final self::Class2 self;
     if(self::b)
       self = this;
-    self::Extension2|[](this, this).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
-    let final self::Class2 #t98 = self in let final self::Class2 #t99 = self in self::Extension2|[](#t98, #t99).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(#t98, #t99, self) : null;
+    self::Extension2|[](this, this) == null ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
+    let final self::Class2 #t98 = self in let final self::Class2 #t99 = self in self::Extension2|[](#t98, #t99) == null ?{self::Class2} self::Extension2|[]=(#t98, #t99, self) : null;
     self::Extension2|[]=(this, this, this);
     self::Extension2|[]=(self, self, self);
     self::Extension2|[](this, this);
     self::Extension2|[](self, self);
-    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this));
-    let final self::Class2 #t100 = self in let final self::Class2 #t101 = self in self::Extension2|[]=(#t100, #t101, self::Extension2|[](#t100, #t101).{self::Class2::+}(self));
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2});
+    let final self::Class2 #t100 = self in let final self::Class2 #t101 = self in self::Extension2|[]=(#t100, #t101, self::Extension2|[](#t100, #t101).{self::Class2::+}(self){(self::Class2) → self::Class2});
   }
   method implicitExtensionGetSetForValue() → void {
     late final self::Class2 self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Class2 #t102 = self::Extension2|[](this, this) in #t102.{core::Object::==}(null) ?{self::Class2} let final void #t103 = self::Extension2|[]=(this, this, this) in this : #t102;
-    v = let final self::Class2 #t104 = self in let final self::Class2 #t105 = self in let final self::Class2 #t106 = self::Extension2|[](#t104, #t105) in #t106.{core::Object::==}(null) ?{self::Class2} let final self::Class2 #t107 = self in let final void #t108 = self::Extension2|[]=(#t104, #t105, #t107) in #t107 : #t106;
+    v = let final self::Class2 #t102 = self::Extension2|[](this, this) in #t102 == null ?{self::Class2} let final void #t103 = self::Extension2|[]=(this, this, this) in this : #t102;
+    v = let final self::Class2 #t104 = self in let final self::Class2 #t105 = self in let final self::Class2 #t106 = self::Extension2|[](#t104, #t105) in #t106 == null ?{self::Class2} let final self::Class2 #t107 = self in let final void #t108 = self::Extension2|[]=(#t104, #t105, #t107) in #t107 : #t106;
     v = let final void #t109 = self::Extension2|[]=(this, this, this) in this;
     v = let final self::Class2 #t110 = self in let final self::Class2 #t111 = self in let final self::Class2 #t112 = self in let final void #t113 = self::Extension2|[]=(#t110, #t111, #t112) in #t112;
     v = self::Extension2|[](this, this);
     v = self::Extension2|[](self, self);
-    v = let final self::Class2 #t114 = self::Extension2|[](this, this).{self::Class2::+}(this) in let final void #t115 = self::Extension2|[]=(this, this, #t114) in #t114;
-    v = let final self::Class2 #t116 = self in let final self::Class2 #t117 = self in let final self::Class2 #t118 = self::Extension2|[](#t116, #t117).{self::Class2::+}(self) in let final void #t119 = self::Extension2|[]=(#t116, #t117, #t118) in #t118;
+    v = let final self::Class2 #t114 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2} in let final void #t115 = self::Extension2|[]=(this, this, #t114) in #t114;
+    v = let final self::Class2 #t116 = self in let final self::Class2 #t117 = self in let final self::Class2 #t118 = self::Extension2|[](#t116, #t117).{self::Class2::+}(self){(self::Class2) → self::Class2} in let final void #t119 = self::Extension2|[]=(#t116, #t117, #t118) in #t118;
   }
   method explicitExtensionGetSetForEffect() → void {
     late final self::Class2 self;
     if(self::b)
       self = this;
-    self::Extension2|[](this, this).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
-    let final self::Class2 #t120 = self in let final self::Class2 #t121 = self in self::Extension2|[](#t120, #t121).{core::Object::==}(null) ?{self::Class2} self::Extension2|[]=(#t120, #t121, self) : null;
+    self::Extension2|[](this, this) == null ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
+    let final self::Class2 #t120 = self in let final self::Class2 #t121 = self in self::Extension2|[](#t120, #t121) == null ?{self::Class2} self::Extension2|[]=(#t120, #t121, self) : null;
     self::Extension2|[]=(this, this, this);
     self::Extension2|[]=(self, self, self);
     self::Extension2|[](this, this);
     self::Extension2|[](self, self);
-    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this));
-    let final self::Class2 #t122 = self in let final self::Class2 #t123 = self in self::Extension2|[]=(#t122, #t123, self::Extension2|[](#t122, #t123).{self::Class2::+}(self));
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2});
+    let final self::Class2 #t122 = self in let final self::Class2 #t123 = self in self::Extension2|[]=(#t122, #t123, self::Extension2|[](#t122, #t123).{self::Class2::+}(self){(self::Class2) → self::Class2});
   }
   method explicitExtensionGetSetForValue() → void {
     late final self::Class2 self;
     if(self::b)
       self = this;
     dynamic v;
-    v = let final self::Class2 #t124 = self::Extension2|[](this, this) in #t124.{core::Object::==}(null) ?{self::Class2} let final void #t125 = self::Extension2|[]=(this, this, this) in this : #t124;
-    v = let final self::Class2 #t126 = self in let final self::Class2 #t127 = self in let final self::Class2 #t128 = self::Extension2|[](#t126, #t127) in #t128.{core::Object::==}(null) ?{self::Class2} let final self::Class2 #t129 = self in let final void #t130 = self::Extension2|[]=(#t126, #t127, #t129) in #t129 : #t128;
+    v = let final self::Class2 #t124 = self::Extension2|[](this, this) in #t124 == null ?{self::Class2} let final void #t125 = self::Extension2|[]=(this, this, this) in this : #t124;
+    v = let final self::Class2 #t126 = self in let final self::Class2 #t127 = self in let final self::Class2 #t128 = self::Extension2|[](#t126, #t127) in #t128 == null ?{self::Class2} let final self::Class2 #t129 = self in let final void #t130 = self::Extension2|[]=(#t126, #t127, #t129) in #t129 : #t128;
     v = let final void #t131 = self::Extension2|[]=(this, this, this) in this;
     v = let final self::Class2 #t132 = self in let final self::Class2 #t133 = self in let final void #t134 = self::Extension2|[]=(#t132, self, #t133) in #t133;
     v = self::Extension2|[](this, this);
     v = self::Extension2|[](self, self);
-    v = let final self::Class2 #t135 = self::Extension2|[](this, this).{self::Class2::+}(this) in let final void #t136 = self::Extension2|[]=(this, this, #t135) in #t135;
-    v = let final self::Class2 #t137 = self in let final self::Class2 #t138 = self in let final self::Class2 #t139 = self::Extension2|[](#t137, #t138).{self::Class2::+}(self) in let final void #t140 = self::Extension2|[]=(#t137, #t138, #t139) in #t139;
+    v = let final self::Class2 #t135 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2} in let final void #t136 = self::Extension2|[]=(this, this, #t135) in #t135;
+    v = let final self::Class2 #t137 = self in let final self::Class2 #t138 = self in let final self::Class2 #t139 = self::Extension2|[](#t137, #t138).{self::Class2::+}(self){(self::Class2) → self::Class2} in let final void #t140 = self::Extension2|[]=(#t137, #t138, #t139) in #t139;
   }
 }
 extension Extension on core::int {
diff --git a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.expect b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.expect
index 255b675..bac2c56 100644
--- a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.expect
@@ -8,6 +8,6 @@
     : super core::Object::•()
     ;
   get current() → self::A::T%
-    return this.{self::A::_current} as{ForNonNullableByDefault} self::A::T%;
+    return this.{self::A::_current}{self::A::T?} as{ForNonNullableByDefault} self::A::T%;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.transformed.expect
index fbff745..c6dc621 100644
--- a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.transformed.expect
@@ -8,6 +8,6 @@
     : super core::Object::•()
     ;
   get current() → self::A::T%
-    return let self::A::T? #t1 = this.{self::A::_current} in #t1.==(null) ?{self::A::T%} #t1 as{ForNonNullableByDefault} self::A::T% : #t1{self::A::T%};
+    return let self::A::T? #t1 = this.{self::A::_current}{self::A::T?} in #t1.==(null) ?{self::A::T%} #t1 as{ForNonNullableByDefault} self::A::T% : #t1{self::A::T%};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.expect b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.expect
index 255b675..bac2c56 100644
--- a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.expect
@@ -8,6 +8,6 @@
     : super core::Object::•()
     ;
   get current() → self::A::T%
-    return this.{self::A::_current} as{ForNonNullableByDefault} self::A::T%;
+    return this.{self::A::_current}{self::A::T?} as{ForNonNullableByDefault} self::A::T%;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.transformed.expect
index 4c4e247..85eb6b6 100644
--- a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.transformed.expect
@@ -8,6 +8,6 @@
     : super core::Object::•()
     ;
   get current() → self::A::T%
-    return this.{self::A::_current};
+    return this.{self::A::_current}{self::A::T?};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect
index 2c50b42..ce2f50d 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect
@@ -24,10 +24,10 @@
   final asy::Completer<void> completer = asy::Completer::•<void>();
   asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> async {
     await self::allYield();
-    completer.{asy::Completer::complete}(null);
+    completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
   }, (core::Object e, core::StackTrace s) → void {
-    completer.{asy::Completer::completeError}(e, s);
+    completer.{asy::Completer::completeError}(e, s){(core::Object, [core::StackTrace?]) → void};
   });
-  return completer.{asy::Completer::future};
+  return completer.{asy::Completer::future}{asy::Future<void>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
index b9094ae..f385f6f 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
@@ -126,7 +126,7 @@
               {
                 [yield] let dynamic #t6 = asy::_awaitHelper(self::allYield(), :async_op_then, :async_op_error, :async_op) in null;
                 _in::unsafeCast<void>(:result);
-                completer.{asy::Completer::complete}(null);
+                completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
               return;
@@ -140,9 +140,9 @@
           :is_sync = true;
           return :async_future;
         }, (core::Object e, core::StackTrace s) → void {
-          completer.{asy::Completer::completeError}(e, s);
+          completer.{asy::Completer::completeError}(e, s){(core::Object, [core::StackTrace?]) → void};
         });
-        :return_value = completer.{asy::Completer::future};
+        :return_value = completer.{asy::Completer::future}{asy::Future<void>};
         break #L4;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect
index 2c50b42..ce2f50d 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect
@@ -24,10 +24,10 @@
   final asy::Completer<void> completer = asy::Completer::•<void>();
   asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> async {
     await self::allYield();
-    completer.{asy::Completer::complete}(null);
+    completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
   }, (core::Object e, core::StackTrace s) → void {
-    completer.{asy::Completer::completeError}(e, s);
+    completer.{asy::Completer::completeError}(e, s){(core::Object, [core::StackTrace?]) → void};
   });
-  return completer.{asy::Completer::future};
+  return completer.{asy::Completer::future}{asy::Future<void>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
index b9094ae..f385f6f 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
@@ -126,7 +126,7 @@
               {
                 [yield] let dynamic #t6 = asy::_awaitHelper(self::allYield(), :async_op_then, :async_op_error, :async_op) in null;
                 _in::unsafeCast<void>(:result);
-                completer.{asy::Completer::complete}(null);
+                completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
               return;
@@ -140,9 +140,9 @@
           :is_sync = true;
           return :async_future;
         }, (core::Object e, core::StackTrace s) → void {
-          completer.{asy::Completer::completeError}(e, s);
+          completer.{asy::Completer::completeError}(e, s){(core::Object, [core::StackTrace?]) → void};
         });
-        :return_value = completer.{asy::Completer::future};
+        :return_value = completer.{asy::Completer::future}{asy::Future<void>};
         break #L4;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/return_late.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_late.dart.strong.expect
index 66e9443..e58813e 100644
--- a/pkg/front_end/testcases/nnbd/return_late.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_late.dart.strong.expect
@@ -8,7 +8,7 @@
     : self::Class::field = field, super core::Object::•()
     ;
   method returnTypeVariable() → self::Class::E% {
-    late self::Class::E% result = this.{self::Class::field};
+    late self::Class::E% result = this.{self::Class::field}{self::Class::E%};
     return result;
   }
 }
@@ -21,14 +21,14 @@
   return result;
 }
 static method main() → dynamic {
-  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}());
-  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}());
-  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}());
+  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}(){() → core::int});
+  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}(){() → core::int?});
+  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}(){() → core::int?});
   self::expect(42, self::returnNonNullable(42));
   self::expect(87, self::returnNullable(87));
   self::expect(null, self::returnNullable(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/return_late.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_late.dart.strong.transformed.expect
index 15e6379..6c634e1 100644
--- a/pkg/front_end/testcases/nnbd/return_late.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_late.dart.strong.transformed.expect
@@ -9,7 +9,7 @@
     ;
   method returnTypeVariable() → self::Class::E% {
     function #result#initializer() → self::Class::E%
-      return this.{self::Class::field};
+      return this.{self::Class::field}{self::Class::E%};
     late self::Class::E% result = #result#initializer.call();
     return result;
   }
@@ -27,14 +27,14 @@
   return result;
 }
 static method main() → dynamic {
-  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}());
-  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}());
-  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}());
+  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}(){() → core::int});
+  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}(){() → core::int?});
+  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}(){() → core::int?});
   self::expect(42, self::returnNonNullable(42));
   self::expect(87, self::returnNullable(87));
   self::expect(null, self::returnNullable(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/return_late.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_late.dart.weak.expect
index 66e9443..e58813e 100644
--- a/pkg/front_end/testcases/nnbd/return_late.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_late.dart.weak.expect
@@ -8,7 +8,7 @@
     : self::Class::field = field, super core::Object::•()
     ;
   method returnTypeVariable() → self::Class::E% {
-    late self::Class::E% result = this.{self::Class::field};
+    late self::Class::E% result = this.{self::Class::field}{self::Class::E%};
     return result;
   }
 }
@@ -21,14 +21,14 @@
   return result;
 }
 static method main() → dynamic {
-  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}());
-  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}());
-  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}());
+  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}(){() → core::int});
+  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}(){() → core::int?});
+  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}(){() → core::int?});
   self::expect(42, self::returnNonNullable(42));
   self::expect(87, self::returnNullable(87));
   self::expect(null, self::returnNullable(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/return_late.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_late.dart.weak.transformed.expect
index 15e6379..6c634e1 100644
--- a/pkg/front_end/testcases/nnbd/return_late.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_late.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
     ;
   method returnTypeVariable() → self::Class::E% {
     function #result#initializer() → self::Class::E%
-      return this.{self::Class::field};
+      return this.{self::Class::field}{self::Class::E%};
     late self::Class::E% result = #result#initializer.call();
     return result;
   }
@@ -27,14 +27,14 @@
   return result;
 }
 static method main() → dynamic {
-  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}());
-  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}());
-  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}());
+  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}(){() → core::int});
+  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}(){() → core::int?});
+  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}(){() → core::int?});
   self::expect(42, self::returnNonNullable(42));
   self::expect(87, self::returnNullable(87));
   self::expect(null, self::returnNullable(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
index e64024b..95f3397 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
@@ -68,7 +68,7 @@
     : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::Enum::_name};
+    return this.{self::Enum::_name}{core::String};
 }
 static method returnImplicit() → core::String {
   core::print("foo");
@@ -211,13 +211,13 @@
   core::int? local1 = (() → core::int? {
     if(b)
       return 0;
-  }).call();
+  })(){() → core::int?};
   core::int? local2 = (() → core::int? {
     if(b)
       return null;
     if(!b)
       return 0;
-  }).call();
+  })(){() → core::int?};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
index 42cc194..809f8b6 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
@@ -68,7 +68,7 @@
     : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::Enum::_name};
+    return this.{self::Enum::_name}{core::String};
 }
 static method returnImplicit() → core::String {
   core::print("foo");
@@ -609,13 +609,13 @@
   core::int? local1 = (() → core::int? {
     if(b)
       return 0;
-  }).call();
+  })(){() → core::int?};
   core::int? local2 = (() → core::int? {
     if(b)
       return null;
     if(!b)
       return 0;
-  }).call();
+  })(){() → core::int?};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
index 5c3ec88..65b134d 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
@@ -69,7 +69,7 @@
     : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::Enum::_name};
+    return this.{self::Enum::_name}{core::String};
 }
 static method returnImplicit() → core::String {
   core::print("foo");
@@ -218,13 +218,13 @@
   core::int? local1 = (() → core::int? {
     if(b)
       return 0;
-  }).call();
+  })(){() → core::int?};
   core::int? local2 = (() → core::int? {
     if(b)
       return null;
     if(!b)
       return 0;
-  }).call();
+  })(){() → core::int?};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.outline.expect
index 0db3cd1..04d2e5b 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.outline.expect
@@ -15,7 +15,7 @@
     : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::Enum::_name};
+    return this.{self::Enum::_name}{core::String};
 }
 static method returnImplicit() → core::String
   ;
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
index 0790e3a..0faf793 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
@@ -69,7 +69,7 @@
     : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::Enum::_name};
+    return this.{self::Enum::_name}{core::String};
 }
 static method returnImplicit() → core::String {
   core::print("foo");
@@ -616,13 +616,13 @@
   core::int? local1 = (() → core::int? {
     if(b)
       return 0;
-  }).call();
+  })(){() → core::int?};
   core::int? local2 = (() → core::int? {
     if(b)
       return null;
     if(!b)
       return 0;
-  }).call();
+  })(){() → core::int?};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.expect b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.expect
index af891e2..a02071a 100644
--- a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.expect
@@ -26,7 +26,7 @@
     : self::Foo::bar = bar, super core::Object::•()
     ;
   operator [](core::int? index) → self::Bar?
-    return !index.{core::num::==}(null) ?{self::Bar?} new self::Bar::•(index{core::int}) : null;
+    return !(index == null) ?{self::Bar?} new self::Bar::•(index{core::int}) : null;
 }
 class Bar extends core::Object {
   field core::int baz;
@@ -36,28 +36,28 @@
   operator [](core::int index) → core::int
     return index;
   operator ==(core::Object other) → core::bool
-    return other is{ForNonNullableByDefault} self::Bar && this.{self::Bar::baz}.{core::num::==}(other{self::Bar}.{self::Bar::baz});
+    return other is{ForNonNullableByDefault} self::Bar && this.{self::Bar::baz}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Bar}.{self::Bar::baz}{core::int};
 }
 static method test1(self::A? a) → core::int?
-  return let final self::A? #t1 = a in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::A}.{self::A::zero}!;
+  return let final self::A? #t1 = a in #t1 == null ?{core::int?} null : #t1{self::A}.{self::A::zero}{core::int}!;
 static method test2(self::A? a) → core::int?
-  return let final self::A? #t2 = a in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::A}.{self::A::zeroOrNull}!;
+  return let final self::A? #t2 = a in #t2 == null ?{core::int?} null : #t2{self::A}.{self::A::zeroOrNull}{core::int?}!;
 static method test3(self::A? a) → core::bool?
-  return let final self::A? #t3 = a in #t3.{core::Object::==}(null) ?{core::bool?} null : #t3{self::A}.{self::A::zero}!.{core::int::isEven};
+  return let final self::A? #t3 = a in #t3 == null ?{core::bool?} null : #t3{self::A}.{self::A::zero}{core::int}!.{core::int::isEven}{core::bool};
 static method test4(self::A? a) → core::bool?
-  return let final self::A? #t4 = a in #t4.{core::Object::==}(null) ?{core::bool?} null : #t4{self::A}.{self::A::zeroOrNull}!.{core::int::isEven};
+  return let final self::A? #t4 = a in #t4 == null ?{core::bool?} null : #t4{self::A}.{self::A::zeroOrNull}{core::int?}!.{core::int::isEven}{core::bool};
 static method test5(self::Foo? foo) → self::Bar?
-  return let final self::Foo? #t5 = foo in #t5.{core::Object::==}(null) ?{self::Bar?} null : #t5{self::Foo}.{self::Foo::bar}!;
+  return let final self::Foo? #t5 = foo in #t5 == null ?{self::Bar?} null : #t5{self::Foo}.{self::Foo::bar}{self::Bar?}!;
 static method test6(self::Foo? foo) → core::int?
-  return let final self::Foo? #t6 = foo in #t6.{core::Object::==}(null) ?{core::int?} null : #t6{self::Foo}.{self::Foo::bar}!.{self::Bar::baz};
+  return let final self::Foo? #t6 = foo in #t6 == null ?{core::int?} null : #t6{self::Foo}.{self::Foo::bar}{self::Bar?}!.{self::Bar::baz}{core::int};
 static method test7(self::Foo? foo, core::int baz) → core::int?
-  return let final self::Foo? #t7 = foo in #t7.{core::Object::==}(null) ?{core::int?} null : #t7{self::Foo}.{self::Foo::bar}!.{self::Bar::[]}(baz);
+  return let final self::Foo? #t7 = foo in #t7 == null ?{core::int?} null : #t7{self::Foo}.{self::Foo::bar}{self::Bar?}!.{self::Bar::[]}(baz){(core::int) → core::int};
 static method test8(self::Foo? foo, core::int? bar) → self::Bar?
-  return let final self::Foo? #t8 = foo in #t8.{core::Object::==}(null) ?{self::Bar?} null : #t8{self::Foo}.{self::Foo::[]}(bar)!;
+  return let final self::Foo? #t8 = foo in #t8 == null ?{self::Bar?} null : #t8{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!;
 static method test9(self::Foo? foo, core::int? bar) → core::int?
-  return let final self::Foo? #t9 = foo in #t9.{core::Object::==}(null) ?{core::int?} null : #t9{self::Foo}.{self::Foo::[]}(bar)!.{self::Bar::baz};
+  return let final self::Foo? #t9 = foo in #t9 == null ?{core::int?} null : #t9{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!.{self::Bar::baz}{core::int};
 static method test10(self::Foo? foo, core::int? bar, core::int baz) → dynamic
-  return let final self::Foo? #t10 = foo in #t10.{core::Object::==}(null) ?{core::int?} null : #t10{self::Foo}.{self::Foo::[]}(bar)!.{self::Bar::[]}(baz);
+  return let final self::Foo? #t10 = foo in #t10 == null ?{core::int?} null : #t10{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!.{self::Bar::[]}(baz){(core::int) → core::int};
 static method main() → dynamic {
   self::expect(0, self::test1(new self::A::•(0)));
   self::expect(null, self::test1(null));
@@ -89,12 +89,12 @@
   self::throws(() → void => self::test10(new self::Foo::•(new self::Bar::•(0)), null, 87));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.transformed.expect
index af891e2..a02071a 100644
--- a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.transformed.expect
@@ -26,7 +26,7 @@
     : self::Foo::bar = bar, super core::Object::•()
     ;
   operator [](core::int? index) → self::Bar?
-    return !index.{core::num::==}(null) ?{self::Bar?} new self::Bar::•(index{core::int}) : null;
+    return !(index == null) ?{self::Bar?} new self::Bar::•(index{core::int}) : null;
 }
 class Bar extends core::Object {
   field core::int baz;
@@ -36,28 +36,28 @@
   operator [](core::int index) → core::int
     return index;
   operator ==(core::Object other) → core::bool
-    return other is{ForNonNullableByDefault} self::Bar && this.{self::Bar::baz}.{core::num::==}(other{self::Bar}.{self::Bar::baz});
+    return other is{ForNonNullableByDefault} self::Bar && this.{self::Bar::baz}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Bar}.{self::Bar::baz}{core::int};
 }
 static method test1(self::A? a) → core::int?
-  return let final self::A? #t1 = a in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::A}.{self::A::zero}!;
+  return let final self::A? #t1 = a in #t1 == null ?{core::int?} null : #t1{self::A}.{self::A::zero}{core::int}!;
 static method test2(self::A? a) → core::int?
-  return let final self::A? #t2 = a in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::A}.{self::A::zeroOrNull}!;
+  return let final self::A? #t2 = a in #t2 == null ?{core::int?} null : #t2{self::A}.{self::A::zeroOrNull}{core::int?}!;
 static method test3(self::A? a) → core::bool?
-  return let final self::A? #t3 = a in #t3.{core::Object::==}(null) ?{core::bool?} null : #t3{self::A}.{self::A::zero}!.{core::int::isEven};
+  return let final self::A? #t3 = a in #t3 == null ?{core::bool?} null : #t3{self::A}.{self::A::zero}{core::int}!.{core::int::isEven}{core::bool};
 static method test4(self::A? a) → core::bool?
-  return let final self::A? #t4 = a in #t4.{core::Object::==}(null) ?{core::bool?} null : #t4{self::A}.{self::A::zeroOrNull}!.{core::int::isEven};
+  return let final self::A? #t4 = a in #t4 == null ?{core::bool?} null : #t4{self::A}.{self::A::zeroOrNull}{core::int?}!.{core::int::isEven}{core::bool};
 static method test5(self::Foo? foo) → self::Bar?
-  return let final self::Foo? #t5 = foo in #t5.{core::Object::==}(null) ?{self::Bar?} null : #t5{self::Foo}.{self::Foo::bar}!;
+  return let final self::Foo? #t5 = foo in #t5 == null ?{self::Bar?} null : #t5{self::Foo}.{self::Foo::bar}{self::Bar?}!;
 static method test6(self::Foo? foo) → core::int?
-  return let final self::Foo? #t6 = foo in #t6.{core::Object::==}(null) ?{core::int?} null : #t6{self::Foo}.{self::Foo::bar}!.{self::Bar::baz};
+  return let final self::Foo? #t6 = foo in #t6 == null ?{core::int?} null : #t6{self::Foo}.{self::Foo::bar}{self::Bar?}!.{self::Bar::baz}{core::int};
 static method test7(self::Foo? foo, core::int baz) → core::int?
-  return let final self::Foo? #t7 = foo in #t7.{core::Object::==}(null) ?{core::int?} null : #t7{self::Foo}.{self::Foo::bar}!.{self::Bar::[]}(baz);
+  return let final self::Foo? #t7 = foo in #t7 == null ?{core::int?} null : #t7{self::Foo}.{self::Foo::bar}{self::Bar?}!.{self::Bar::[]}(baz){(core::int) → core::int};
 static method test8(self::Foo? foo, core::int? bar) → self::Bar?
-  return let final self::Foo? #t8 = foo in #t8.{core::Object::==}(null) ?{self::Bar?} null : #t8{self::Foo}.{self::Foo::[]}(bar)!;
+  return let final self::Foo? #t8 = foo in #t8 == null ?{self::Bar?} null : #t8{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!;
 static method test9(self::Foo? foo, core::int? bar) → core::int?
-  return let final self::Foo? #t9 = foo in #t9.{core::Object::==}(null) ?{core::int?} null : #t9{self::Foo}.{self::Foo::[]}(bar)!.{self::Bar::baz};
+  return let final self::Foo? #t9 = foo in #t9 == null ?{core::int?} null : #t9{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!.{self::Bar::baz}{core::int};
 static method test10(self::Foo? foo, core::int? bar, core::int baz) → dynamic
-  return let final self::Foo? #t10 = foo in #t10.{core::Object::==}(null) ?{core::int?} null : #t10{self::Foo}.{self::Foo::[]}(bar)!.{self::Bar::[]}(baz);
+  return let final self::Foo? #t10 = foo in #t10 == null ?{core::int?} null : #t10{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!.{self::Bar::[]}(baz){(core::int) → core::int};
 static method main() → dynamic {
   self::expect(0, self::test1(new self::A::•(0)));
   self::expect(null, self::test1(null));
@@ -89,12 +89,12 @@
   self::throws(() → void => self::test10(new self::Foo::•(new self::Bar::•(0)), null, 87));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.expect b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.expect
index af891e2..a02071a 100644
--- a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.expect
@@ -26,7 +26,7 @@
     : self::Foo::bar = bar, super core::Object::•()
     ;
   operator [](core::int? index) → self::Bar?
-    return !index.{core::num::==}(null) ?{self::Bar?} new self::Bar::•(index{core::int}) : null;
+    return !(index == null) ?{self::Bar?} new self::Bar::•(index{core::int}) : null;
 }
 class Bar extends core::Object {
   field core::int baz;
@@ -36,28 +36,28 @@
   operator [](core::int index) → core::int
     return index;
   operator ==(core::Object other) → core::bool
-    return other is{ForNonNullableByDefault} self::Bar && this.{self::Bar::baz}.{core::num::==}(other{self::Bar}.{self::Bar::baz});
+    return other is{ForNonNullableByDefault} self::Bar && this.{self::Bar::baz}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Bar}.{self::Bar::baz}{core::int};
 }
 static method test1(self::A? a) → core::int?
-  return let final self::A? #t1 = a in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::A}.{self::A::zero}!;
+  return let final self::A? #t1 = a in #t1 == null ?{core::int?} null : #t1{self::A}.{self::A::zero}{core::int}!;
 static method test2(self::A? a) → core::int?
-  return let final self::A? #t2 = a in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::A}.{self::A::zeroOrNull}!;
+  return let final self::A? #t2 = a in #t2 == null ?{core::int?} null : #t2{self::A}.{self::A::zeroOrNull}{core::int?}!;
 static method test3(self::A? a) → core::bool?
-  return let final self::A? #t3 = a in #t3.{core::Object::==}(null) ?{core::bool?} null : #t3{self::A}.{self::A::zero}!.{core::int::isEven};
+  return let final self::A? #t3 = a in #t3 == null ?{core::bool?} null : #t3{self::A}.{self::A::zero}{core::int}!.{core::int::isEven}{core::bool};
 static method test4(self::A? a) → core::bool?
-  return let final self::A? #t4 = a in #t4.{core::Object::==}(null) ?{core::bool?} null : #t4{self::A}.{self::A::zeroOrNull}!.{core::int::isEven};
+  return let final self::A? #t4 = a in #t4 == null ?{core::bool?} null : #t4{self::A}.{self::A::zeroOrNull}{core::int?}!.{core::int::isEven}{core::bool};
 static method test5(self::Foo? foo) → self::Bar?
-  return let final self::Foo? #t5 = foo in #t5.{core::Object::==}(null) ?{self::Bar?} null : #t5{self::Foo}.{self::Foo::bar}!;
+  return let final self::Foo? #t5 = foo in #t5 == null ?{self::Bar?} null : #t5{self::Foo}.{self::Foo::bar}{self::Bar?}!;
 static method test6(self::Foo? foo) → core::int?
-  return let final self::Foo? #t6 = foo in #t6.{core::Object::==}(null) ?{core::int?} null : #t6{self::Foo}.{self::Foo::bar}!.{self::Bar::baz};
+  return let final self::Foo? #t6 = foo in #t6 == null ?{core::int?} null : #t6{self::Foo}.{self::Foo::bar}{self::Bar?}!.{self::Bar::baz}{core::int};
 static method test7(self::Foo? foo, core::int baz) → core::int?
-  return let final self::Foo? #t7 = foo in #t7.{core::Object::==}(null) ?{core::int?} null : #t7{self::Foo}.{self::Foo::bar}!.{self::Bar::[]}(baz);
+  return let final self::Foo? #t7 = foo in #t7 == null ?{core::int?} null : #t7{self::Foo}.{self::Foo::bar}{self::Bar?}!.{self::Bar::[]}(baz){(core::int) → core::int};
 static method test8(self::Foo? foo, core::int? bar) → self::Bar?
-  return let final self::Foo? #t8 = foo in #t8.{core::Object::==}(null) ?{self::Bar?} null : #t8{self::Foo}.{self::Foo::[]}(bar)!;
+  return let final self::Foo? #t8 = foo in #t8 == null ?{self::Bar?} null : #t8{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!;
 static method test9(self::Foo? foo, core::int? bar) → core::int?
-  return let final self::Foo? #t9 = foo in #t9.{core::Object::==}(null) ?{core::int?} null : #t9{self::Foo}.{self::Foo::[]}(bar)!.{self::Bar::baz};
+  return let final self::Foo? #t9 = foo in #t9 == null ?{core::int?} null : #t9{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!.{self::Bar::baz}{core::int};
 static method test10(self::Foo? foo, core::int? bar, core::int baz) → dynamic
-  return let final self::Foo? #t10 = foo in #t10.{core::Object::==}(null) ?{core::int?} null : #t10{self::Foo}.{self::Foo::[]}(bar)!.{self::Bar::[]}(baz);
+  return let final self::Foo? #t10 = foo in #t10 == null ?{core::int?} null : #t10{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!.{self::Bar::[]}(baz){(core::int) → core::int};
 static method main() → dynamic {
   self::expect(0, self::test1(new self::A::•(0)));
   self::expect(null, self::test1(null));
@@ -89,12 +89,12 @@
   self::throws(() → void => self::test10(new self::Foo::•(new self::Bar::•(0)), null, 87));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.transformed.expect
index af891e2..a02071a 100644
--- a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
     : self::Foo::bar = bar, super core::Object::•()
     ;
   operator [](core::int? index) → self::Bar?
-    return !index.{core::num::==}(null) ?{self::Bar?} new self::Bar::•(index{core::int}) : null;
+    return !(index == null) ?{self::Bar?} new self::Bar::•(index{core::int}) : null;
 }
 class Bar extends core::Object {
   field core::int baz;
@@ -36,28 +36,28 @@
   operator [](core::int index) → core::int
     return index;
   operator ==(core::Object other) → core::bool
-    return other is{ForNonNullableByDefault} self::Bar && this.{self::Bar::baz}.{core::num::==}(other{self::Bar}.{self::Bar::baz});
+    return other is{ForNonNullableByDefault} self::Bar && this.{self::Bar::baz}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Bar}.{self::Bar::baz}{core::int};
 }
 static method test1(self::A? a) → core::int?
-  return let final self::A? #t1 = a in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::A}.{self::A::zero}!;
+  return let final self::A? #t1 = a in #t1 == null ?{core::int?} null : #t1{self::A}.{self::A::zero}{core::int}!;
 static method test2(self::A? a) → core::int?
-  return let final self::A? #t2 = a in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::A}.{self::A::zeroOrNull}!;
+  return let final self::A? #t2 = a in #t2 == null ?{core::int?} null : #t2{self::A}.{self::A::zeroOrNull}{core::int?}!;
 static method test3(self::A? a) → core::bool?
-  return let final self::A? #t3 = a in #t3.{core::Object::==}(null) ?{core::bool?} null : #t3{self::A}.{self::A::zero}!.{core::int::isEven};
+  return let final self::A? #t3 = a in #t3 == null ?{core::bool?} null : #t3{self::A}.{self::A::zero}{core::int}!.{core::int::isEven}{core::bool};
 static method test4(self::A? a) → core::bool?
-  return let final self::A? #t4 = a in #t4.{core::Object::==}(null) ?{core::bool?} null : #t4{self::A}.{self::A::zeroOrNull}!.{core::int::isEven};
+  return let final self::A? #t4 = a in #t4 == null ?{core::bool?} null : #t4{self::A}.{self::A::zeroOrNull}{core::int?}!.{core::int::isEven}{core::bool};
 static method test5(self::Foo? foo) → self::Bar?
-  return let final self::Foo? #t5 = foo in #t5.{core::Object::==}(null) ?{self::Bar?} null : #t5{self::Foo}.{self::Foo::bar}!;
+  return let final self::Foo? #t5 = foo in #t5 == null ?{self::Bar?} null : #t5{self::Foo}.{self::Foo::bar}{self::Bar?}!;
 static method test6(self::Foo? foo) → core::int?
-  return let final self::Foo? #t6 = foo in #t6.{core::Object::==}(null) ?{core::int?} null : #t6{self::Foo}.{self::Foo::bar}!.{self::Bar::baz};
+  return let final self::Foo? #t6 = foo in #t6 == null ?{core::int?} null : #t6{self::Foo}.{self::Foo::bar}{self::Bar?}!.{self::Bar::baz}{core::int};
 static method test7(self::Foo? foo, core::int baz) → core::int?
-  return let final self::Foo? #t7 = foo in #t7.{core::Object::==}(null) ?{core::int?} null : #t7{self::Foo}.{self::Foo::bar}!.{self::Bar::[]}(baz);
+  return let final self::Foo? #t7 = foo in #t7 == null ?{core::int?} null : #t7{self::Foo}.{self::Foo::bar}{self::Bar?}!.{self::Bar::[]}(baz){(core::int) → core::int};
 static method test8(self::Foo? foo, core::int? bar) → self::Bar?
-  return let final self::Foo? #t8 = foo in #t8.{core::Object::==}(null) ?{self::Bar?} null : #t8{self::Foo}.{self::Foo::[]}(bar)!;
+  return let final self::Foo? #t8 = foo in #t8 == null ?{self::Bar?} null : #t8{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!;
 static method test9(self::Foo? foo, core::int? bar) → core::int?
-  return let final self::Foo? #t9 = foo in #t9.{core::Object::==}(null) ?{core::int?} null : #t9{self::Foo}.{self::Foo::[]}(bar)!.{self::Bar::baz};
+  return let final self::Foo? #t9 = foo in #t9 == null ?{core::int?} null : #t9{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!.{self::Bar::baz}{core::int};
 static method test10(self::Foo? foo, core::int? bar, core::int baz) → dynamic
-  return let final self::Foo? #t10 = foo in #t10.{core::Object::==}(null) ?{core::int?} null : #t10{self::Foo}.{self::Foo::[]}(bar)!.{self::Bar::[]}(baz);
+  return let final self::Foo? #t10 = foo in #t10 == null ?{core::int?} null : #t10{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!.{self::Bar::[]}(baz){(core::int) → core::int};
 static method main() → dynamic {
   self::expect(0, self::test1(new self::A::•(0)));
   self::expect(null, self::test1(null));
@@ -89,12 +89,12 @@
   self::throws(() → void => self::test10(new self::Foo::•(new self::Bar::•(0)), null, 87));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → void f) → dynamic {
   try {
-    f.call();
+    f(){() → void};
   }
   on core::Object catch(final core::Object _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.expect b/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.expect
index 08f2fdd..5fd4921 100644
--- a/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.expect
@@ -53,43 +53,43 @@
   self::test(new self::Class::•());
 }
 static method test(self::Class? c) → dynamic {
-  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::Class}.{self::Class::next}.{self::Class::field};
+  let final self::Class? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::Class}.{self::Class::next}{self::Class}.{self::Class::field}{core::int};
   self::throwsInStrong(() → void => let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.field + 2); // error
-                                ^" in (let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Class}.{self::Class::field}).{core::num::+}(2));
-  let final self::Class? #t4 = c in #t4.{core::Object::==}(null) ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}.{core::num::+}(1) in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
-  let final self::Class? #t7 = c in #t7.{core::Object::==}(null) ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}.{core::num::+}(1);
+                                ^" in (let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : #t3{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t4 = c in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
+  let final self::Class? #t7 = c in #t7 == null ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
   self::throwsInStrong(() → void => let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next).field); // error
-                                 ^^^^^" in (let final self::Class? #t9 = c in #t9.{core::Object::==}(null) ?{self::Class?} null : #t9{self::Class}.{self::Class::next}).{self::Class::field});
+                                 ^^^^^" in (let final self::Class? #t9 = c in #t9 == null ?{self::Class?} null : #t9{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
   self::throwsInStrong(() → void => let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.field); // error
-                       ^" in (let final self::Class? #t11 = c in #t11.{core::Object::==}(null) ?{core::int?} null : #t11{self::Class}.{self::Class::field}).{core::int::unary-}());
-  let final self::Class? #t12 = c in #t12.{core::Object::==}(null) ?{core::bool?} null : #t12{self::Class}.{self::Class::next}.{self::Class::[]}(0).{core::int::isEven};
+                       ^" in (let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : #t11{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
+  let final self::Class? #t12 = c in #t12 == null ?{core::bool?} null : #t12{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
   self::throwsInStrong(() → void => let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.next[0] + 2); // error
-                                  ^" in (let final self::Class? #t14 = c in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::num::+}(2));
-  let final self::Class? #t15 = c in #t15.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17).{core::num::+}(1) in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18) in #t18;
-  let final self::Class? #t20 = c in #t20.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22).{core::num::+}(1));
+                                  ^" in (let final self::Class? #t14 = c in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t15 = c in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next}{self::Class} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18){(core::int, core::int) → void} in #t18;
+  let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next}{self::Class} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
   self::throwsInStrong(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next[0]).isEven); // error
-                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24.{core::Object::==}(null) ?{core::int?} null : #t24{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::isEven});
+                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24 == null ?{core::int?} null : #t24{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
   self::throwsInStrong(() → void => let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.next[0]); // error
-                       ^" in (let final self::Class? #t26 = c in #t26.{core::Object::==}(null) ?{core::int?} null : #t26{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::unary-}());
+                       ^" in (let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
 }
 static method _inStrongMode() → core::bool {
   (core::String?) → Null f = (core::String? s) → Null {
     let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 Try accessing using ?. instead.
     s.length; // This will be an invalid expression in strong mode.
-      ^^^^^^" in s.{core::String::length};
+      ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
   };
   try {
-    f.call("foo");
+    f("foo"){(core::String?) → Null};
   }
   on core::Object catch(final core::Object e) {
     return true;
@@ -99,7 +99,7 @@
 static method throwsInStrong(() → void f) → void {
   if(self::inStrongMode) {
     try {
-      f.call();
+      f(){() → void};
     }
     on core::Object catch(final core::Object e) {
       core::print(e);
@@ -108,6 +108,6 @@
     throw "Expected exception.";
   }
   else {
-    f.call();
+    f(){() → void};
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.transformed.expect
index 08856f4..6c0eabe 100644
--- a/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_stop.dart.strong.transformed.expect
@@ -53,43 +53,43 @@
   self::test(new self::Class::•());
 }
 static method test(self::Class? c) → dynamic {
-  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::Class}.{self::Class::next}.{self::Class::field};
+  let final self::Class? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::Class}.{self::Class::next}{self::Class}.{self::Class::field}{core::int};
   self::throwsInStrong(() → void => let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.field + 2); // error
-                                ^" in (let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Class}.{self::Class::field}).{core::num::+}(2));
-  let final self::Class? #t4 = c in #t4.{core::Object::==}(null) ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}.{core::num::+}(1) in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
-  let final self::Class? #t7 = c in #t7.{core::Object::==}(null) ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}.{core::num::+}(1);
+                                ^" in (let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : #t3{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t4 = c in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
+  let final self::Class? #t7 = c in #t7 == null ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
   self::throwsInStrong(() → void => let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next).field); // error
-                                 ^^^^^" in (let final self::Class? #t9 = c in #t9.{core::Object::==}(null) ?{self::Class?} null : #t9{self::Class}.{self::Class::next}).{self::Class::field});
+                                 ^^^^^" in (let final self::Class? #t9 = c in #t9 == null ?{self::Class?} null : #t9{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
   self::throwsInStrong(() → void => let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.field); // error
-                       ^" in (let final self::Class? #t11 = c in #t11.{core::Object::==}(null) ?{core::int?} null : #t11{self::Class}.{self::Class::field}).{core::int::unary-}());
-  let final self::Class? #t12 = c in #t12.{core::Object::==}(null) ?{core::bool?} null : #t12{self::Class}.{self::Class::next}.{self::Class::[]}(0).{core::int::isEven};
+                       ^" in (let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : #t11{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
+  let final self::Class? #t12 = c in #t12 == null ?{core::bool?} null : #t12{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
   self::throwsInStrong(() → void => let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.next[0] + 2); // error
-                                  ^" in (let final self::Class? #t14 = c in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::num::+}(2));
-  let final self::Class? #t15 = c in #t15.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17).{core::num::+}(1) in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18) in #t18;
-  let final self::Class? #t20 = c in #t20.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22).{core::num::+}(1));
+                                  ^" in (let final self::Class? #t14 = c in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t15 = c in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next}{self::Class} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18){(core::int, core::int) → void} in #t18;
+  let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next}{self::Class} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
   self::throwsInStrong(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next[0]).isEven); // error
-                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24.{core::Object::==}(null) ?{core::int?} null : #t24{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::isEven});
+                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24 == null ?{core::int?} null : #t24{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
   self::throwsInStrong(() → void => let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.next[0]); // error
-                       ^" in (let final self::Class? #t26 = c in #t26.{core::Object::==}(null) ?{core::int?} null : #t26{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::unary-}());
+                       ^" in (let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
 }
 static method _inStrongMode() → core::bool {
   (core::String?) → Null f = (core::String? s) → Null {
     let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 Try accessing using ?. instead.
     s.length; // This will be an invalid expression in strong mode.
-      ^^^^^^" in s.{core::String::length};
+      ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
   };
   try {
-    f.call("foo");
+    f("foo"){(core::String?) → Null};
   }
   on core::Object catch(final core::Object e) {
     return true;
@@ -99,7 +99,7 @@
 static method throwsInStrong(() → void f) → void {
   if(self::inStrongMode) {
     try {
-      f.call();
+      f(){() → void};
     }
     on core::Object catch(final core::Object e) {
       core::print(e);
@@ -108,7 +108,7 @@
     throw "Expected exception.";
   }
   else {
-    f.call();
+    f(){() → void};
   }
 }
 
diff --git a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.expect b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.expect
index 08f2fdd..5fd4921 100644
--- a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.expect
@@ -53,43 +53,43 @@
   self::test(new self::Class::•());
 }
 static method test(self::Class? c) → dynamic {
-  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::Class}.{self::Class::next}.{self::Class::field};
+  let final self::Class? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::Class}.{self::Class::next}{self::Class}.{self::Class::field}{core::int};
   self::throwsInStrong(() → void => let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.field + 2); // error
-                                ^" in (let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Class}.{self::Class::field}).{core::num::+}(2));
-  let final self::Class? #t4 = c in #t4.{core::Object::==}(null) ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}.{core::num::+}(1) in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
-  let final self::Class? #t7 = c in #t7.{core::Object::==}(null) ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}.{core::num::+}(1);
+                                ^" in (let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : #t3{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t4 = c in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
+  let final self::Class? #t7 = c in #t7 == null ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
   self::throwsInStrong(() → void => let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next).field); // error
-                                 ^^^^^" in (let final self::Class? #t9 = c in #t9.{core::Object::==}(null) ?{self::Class?} null : #t9{self::Class}.{self::Class::next}).{self::Class::field});
+                                 ^^^^^" in (let final self::Class? #t9 = c in #t9 == null ?{self::Class?} null : #t9{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
   self::throwsInStrong(() → void => let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.field); // error
-                       ^" in (let final self::Class? #t11 = c in #t11.{core::Object::==}(null) ?{core::int?} null : #t11{self::Class}.{self::Class::field}).{core::int::unary-}());
-  let final self::Class? #t12 = c in #t12.{core::Object::==}(null) ?{core::bool?} null : #t12{self::Class}.{self::Class::next}.{self::Class::[]}(0).{core::int::isEven};
+                       ^" in (let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : #t11{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
+  let final self::Class? #t12 = c in #t12 == null ?{core::bool?} null : #t12{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
   self::throwsInStrong(() → void => let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.next[0] + 2); // error
-                                  ^" in (let final self::Class? #t14 = c in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::num::+}(2));
-  let final self::Class? #t15 = c in #t15.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17).{core::num::+}(1) in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18) in #t18;
-  let final self::Class? #t20 = c in #t20.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22).{core::num::+}(1));
+                                  ^" in (let final self::Class? #t14 = c in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t15 = c in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next}{self::Class} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18){(core::int, core::int) → void} in #t18;
+  let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next}{self::Class} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
   self::throwsInStrong(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next[0]).isEven); // error
-                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24.{core::Object::==}(null) ?{core::int?} null : #t24{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::isEven});
+                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24 == null ?{core::int?} null : #t24{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
   self::throwsInStrong(() → void => let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.next[0]); // error
-                       ^" in (let final self::Class? #t26 = c in #t26.{core::Object::==}(null) ?{core::int?} null : #t26{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::unary-}());
+                       ^" in (let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
 }
 static method _inStrongMode() → core::bool {
   (core::String?) → Null f = (core::String? s) → Null {
     let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 Try accessing using ?. instead.
     s.length; // This will be an invalid expression in strong mode.
-      ^^^^^^" in s.{core::String::length};
+      ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
   };
   try {
-    f.call("foo");
+    f("foo"){(core::String?) → Null};
   }
   on core::Object catch(final core::Object e) {
     return true;
@@ -99,7 +99,7 @@
 static method throwsInStrong(() → void f) → void {
   if(self::inStrongMode) {
     try {
-      f.call();
+      f(){() → void};
     }
     on core::Object catch(final core::Object e) {
       core::print(e);
@@ -108,6 +108,6 @@
     throw "Expected exception.";
   }
   else {
-    f.call();
+    f(){() → void};
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.transformed.expect
index 08856f4..6c0eabe 100644
--- a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.transformed.expect
@@ -53,43 +53,43 @@
   self::test(new self::Class::•());
 }
 static method test(self::Class? c) → dynamic {
-  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::Class}.{self::Class::next}.{self::Class::field};
+  let final self::Class? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::Class}.{self::Class::next}{self::Class}.{self::Class::field}{core::int};
   self::throwsInStrong(() → void => let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.field + 2); // error
-                                ^" in (let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Class}.{self::Class::field}).{core::num::+}(2));
-  let final self::Class? #t4 = c in #t4.{core::Object::==}(null) ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}.{core::num::+}(1) in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
-  let final self::Class? #t7 = c in #t7.{core::Object::==}(null) ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}.{core::num::+}(1);
+                                ^" in (let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : #t3{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t4 = c in #t4 == null ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
+  let final self::Class? #t7 = c in #t7 == null ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
   self::throwsInStrong(() → void => let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
  - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next).field); // error
-                                 ^^^^^" in (let final self::Class? #t9 = c in #t9.{core::Object::==}(null) ?{self::Class?} null : #t9{self::Class}.{self::Class::next}).{self::Class::field});
+                                 ^^^^^" in (let final self::Class? #t9 = c in #t9 == null ?{self::Class?} null : #t9{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
   self::throwsInStrong(() → void => let final Never #t10 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.field); // error
-                       ^" in (let final self::Class? #t11 = c in #t11.{core::Object::==}(null) ?{core::int?} null : #t11{self::Class}.{self::Class::field}).{core::int::unary-}());
-  let final self::Class? #t12 = c in #t12.{core::Object::==}(null) ?{core::bool?} null : #t12{self::Class}.{self::Class::next}.{self::Class::[]}(0).{core::int::isEven};
+                       ^" in (let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : #t11{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
+  let final self::Class? #t12 = c in #t12 == null ?{core::bool?} null : #t12{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
   self::throwsInStrong(() → void => let final Never #t13 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => c?.next[0] + 2); // error
-                                  ^" in (let final self::Class? #t14 = c in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::num::+}(2));
-  let final self::Class? #t15 = c in #t15.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17).{core::num::+}(1) in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18) in #t18;
-  let final self::Class? #t20 = c in #t20.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22).{core::num::+}(1));
+                                  ^" in (let final self::Class? #t14 = c in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t15 = c in #t15 == null ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next}{self::Class} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18){(core::int, core::int) → void} in #t18;
+  let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next}{self::Class} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
   self::throwsInStrong(() → void => let final Never #t23 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 Try accessing using ?. instead.
   throwsInStrong(() => (c?.next[0]).isEven); // error
-                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24.{core::Object::==}(null) ?{core::int?} null : #t24{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::isEven});
+                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24 == null ?{core::int?} null : #t24{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
   self::throwsInStrong(() → void => let final Never #t25 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
   throwsInStrong(() => -c?.next[0]); // error
-                       ^" in (let final self::Class? #t26 = c in #t26.{core::Object::==}(null) ?{core::int?} null : #t26{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::unary-}());
+                       ^" in (let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : #t26{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
 }
 static method _inStrongMode() → core::bool {
   (core::String?) → Null f = (core::String? s) → Null {
     let final Never #t27 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 Try accessing using ?. instead.
     s.length; // This will be an invalid expression in strong mode.
-      ^^^^^^" in s.{core::String::length};
+      ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
   };
   try {
-    f.call("foo");
+    f("foo"){(core::String?) → Null};
   }
   on core::Object catch(final core::Object e) {
     return true;
@@ -99,7 +99,7 @@
 static method throwsInStrong(() → void f) → void {
   if(self::inStrongMode) {
     try {
-      f.call();
+      f(){() → void};
     }
     on core::Object catch(final core::Object e) {
       core::print(e);
@@ -108,7 +108,7 @@
     throw "Expected exception.";
   }
   else {
-    f.call();
+    f(){() → void};
   }
 }
 
diff --git a/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.expect
index df571c2..872ee8f 100644
--- a/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.expect
@@ -8,135 +8,135 @@
   core::print( block {
     final core::List<core::int> #t1 = <core::int>[1, 2];
     final core::Iterable<core::int>? #t2 = list;
-    if(!#t2.{core::Object::==}(null))
-      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>});
-    #t1.{core::List::add}{Invariant}(3);
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t1.{core::List::add}(3){(core::int) → void};
   } =>#t1);
   core::print( block {
     final core::List<core::int> #t3 = <core::int>[1, 2];
     final core::Iterable<core::int>? #t4 = null;
-    if(!#t4.{core::Object::==}(null))
-      #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<core::int>});
-    #t3.{core::List::add}{Invariant}(3);
+    if(!(#t4 == null))
+      #t3.{core::List::addAll}(#t4{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t3.{core::List::add}(3){(core::int) → void};
   } =>#t3);
   core::List<core::int> list1 = block {
     final core::List<core::int> #t5 = <core::int>[];
     final core::Iterable<core::int>? #t6 = list;
-    if(!#t6.{core::Object::==}(null))
-      #t5.{core::List::addAll}{Invariant}(#t6{core::Iterable<core::int>});
+    if(!(#t6 == null))
+      #t5.{core::List::addAll}(#t6{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t5;
   core::List<Never> list2 = block {
     final core::List<Never> #t7 = <Never>[];
     final core::Iterable<Never>? #t8 = null;
-    if(!#t8.{core::Object::==}(null))
-      #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<Never>});
+    if(!(#t8 == null))
+      #t7.{core::List::addAll}(#t8{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t7;
   core::List<core::int> list3 = block {
     final core::List<core::int> #t9 = <core::int>[1, 2];
     final core::Iterable<core::int>? #t10 = list;
-    if(!#t10.{core::Object::==}(null))
-      #t9.{core::List::addAll}{Invariant}(#t10{core::Iterable<core::int>});
-    #t9.{core::List::add}{Invariant}(3);
+    if(!(#t10 == null))
+      #t9.{core::List::addAll}(#t10{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t9.{core::List::add}(3){(core::int) → void};
   } =>#t9;
   core::List<core::int> list4 = block {
     final core::List<core::int> #t11 = <core::int>[1, 2];
     final core::Iterable<core::int>? #t12 = null;
-    if(!#t12.{core::Object::==}(null))
-      #t11.{core::List::addAll}{Invariant}(#t12{core::Iterable<core::int>});
-    #t11.{core::List::add}{Invariant}(3);
+    if(!(#t12 == null))
+      #t11.{core::List::addAll}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t11.{core::List::add}(3){(core::int) → void};
   } =>#t11;
   core::Set<core::int>? set = null;
   core::print( block {
     final core::Set<core::int> #t13 = col::LinkedHashSet::•<core::int>();
-    #t13.{core::Set::add}{Invariant}(1);
-    #t13.{core::Set::add}{Invariant}(2);
+    #t13.{core::Set::add}(1){(core::int) → core::bool};
+    #t13.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t14 = set;
-    if(!#t14.{core::Object::==}(null))
-      #t13.{core::Set::addAll}{Invariant}(#t14{core::Iterable<core::int>});
-    #t13.{core::Set::add}{Invariant}(3);
+    if(!(#t14 == null))
+      #t13.{core::Set::addAll}(#t14{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t13.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t13);
   core::print( block {
     final core::Set<core::int> #t15 = col::LinkedHashSet::•<core::int>();
-    #t15.{core::Set::add}{Invariant}(1);
-    #t15.{core::Set::add}{Invariant}(2);
+    #t15.{core::Set::add}(1){(core::int) → core::bool};
+    #t15.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t16 = null;
-    if(!#t16.{core::Object::==}(null))
-      #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<core::int>});
-    #t15.{core::Set::add}{Invariant}(3);
+    if(!(#t16 == null))
+      #t15.{core::Set::addAll}(#t16{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t15.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t15);
   core::Set<core::int> set1 = block {
     final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t18 = set;
-    if(!#t18.{core::Object::==}(null))
+    if(!(#t18 == null))
       for (final dynamic #t19 in #t18{core::Iterable<dynamic>}) {
         final core::int #t20 = #t19 as{TypeError,ForNonNullableByDefault} core::int;
-        #t17.{core::Set::add}{Invariant}(#t20);
+        #t17.{core::Set::add}(#t20){(core::int) → core::bool};
       }
   } =>#t17;
   core::Set<core::int> set3 = block {
     final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
-    #t21.{core::Set::add}{Invariant}(1);
-    #t21.{core::Set::add}{Invariant}(2);
+    #t21.{core::Set::add}(1){(core::int) → core::bool};
+    #t21.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t22 = set;
-    if(!#t22.{core::Object::==}(null))
-      #t21.{core::Set::addAll}{Invariant}(#t22{core::Iterable<core::int>});
-    #t21.{core::Set::add}{Invariant}(3);
+    if(!(#t22 == null))
+      #t21.{core::Set::addAll}(#t22{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t21.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t21;
   core::Set<core::int> set4 = block {
     final core::Set<core::int> #t23 = col::LinkedHashSet::•<core::int>();
-    #t23.{core::Set::add}{Invariant}(1);
-    #t23.{core::Set::add}{Invariant}(2);
+    #t23.{core::Set::add}(1){(core::int) → core::bool};
+    #t23.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t24 = null;
-    if(!#t24.{core::Object::==}(null))
-      #t23.{core::Set::addAll}{Invariant}(#t24{core::Iterable<core::int>});
-    #t23.{core::Set::add}{Invariant}(3);
+    if(!(#t24 == null))
+      #t23.{core::Set::addAll}(#t24{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t23.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t23;
   core::Map<core::int, core::int>? map = null;
   core::print( block {
     final core::Map<core::int, core::int> #t25 = <core::int, core::int>{};
-    #t25.{core::Map::[]=}{Invariant}(1, 1);
-    #t25.{core::Map::[]=}{Invariant}(2, 2);
+    #t25.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t25.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t26 = map;
-    if(!#t26.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t27 in #t26{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}, #t27.{core::MapEntry::value});
-    #t25.{core::Map::[]=}{Invariant}(3, 3);
+    if(!(#t26 == null))
+      for (final core::MapEntry<core::int, core::int> #t27 in #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t25.{core::Map::[]=}(#t27.{core::MapEntry::key}{core::int}, #t27.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    #t25.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t25);
   core::print( block {
     final core::Map<core::int, core::int> #t28 = <core::int, core::int>{};
-    #t28.{core::Map::[]=}{Invariant}(1, 1);
-    #t28.{core::Map::[]=}{Invariant}(2, 2);
+    #t28.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t28.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t29 = null;
-    if(!#t29.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t30 in #t29{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t28.{core::Map::[]=}{Invariant}(#t30.{core::MapEntry::key}, #t30.{core::MapEntry::value});
-    #t28.{core::Map::[]=}{Invariant}(3, 3);
+    if(!(#t29 == null))
+      for (final core::MapEntry<core::int, core::int> #t30 in #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t28.{core::Map::[]=}(#t30.{core::MapEntry::key}{core::int}, #t30.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    #t28.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t28);
   core::Map<core::int, core::int> map1 = block {
     final core::Map<core::int, core::int> #t31 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t32 = map;
-    if(!#t32.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t33 in #t32{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t31.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
+    if(!(#t32 == null))
+      for (final core::MapEntry<core::int, core::int> #t33 in #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t31.{core::Map::[]=}(#t33.{core::MapEntry::key}{core::int}, #t33.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t31;
   core::Map<core::int, core::int> map3 = block {
     final core::Map<core::int, core::int> #t34 = <core::int, core::int>{};
-    #t34.{core::Map::[]=}{Invariant}(1, 1);
-    #t34.{core::Map::[]=}{Invariant}(2, 2);
+    #t34.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t34.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t35 = map;
-    if(!#t35.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t36 in #t35{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t34.{core::Map::[]=}{Invariant}(#t36.{core::MapEntry::key}, #t36.{core::MapEntry::value});
-    #t34.{core::Map::[]=}{Invariant}(3, 3);
+    if(!(#t35 == null))
+      for (final core::MapEntry<core::int, core::int> #t36 in #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t34.{core::Map::[]=}(#t36.{core::MapEntry::key}{core::int}, #t36.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    #t34.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t34;
   core::Map<core::int, core::int> map4 = block {
     final core::Map<core::int, core::int> #t37 = <core::int, core::int>{};
-    #t37.{core::Map::[]=}{Invariant}(1, 1);
-    #t37.{core::Map::[]=}{Invariant}(2, 2);
+    #t37.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t37.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t38 = null;
-    if(!#t38.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t39 in #t38{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t37.{core::Map::[]=}{Invariant}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
-    #t37.{core::Map::[]=}{Invariant}(3, 3);
+    if(!(#t38 == null))
+      for (final core::MapEntry<core::int, core::int> #t39 in #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t37.{core::Map::[]=}(#t39.{core::MapEntry::key}{core::int}, #t39.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    #t37.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t37;
 }
diff --git a/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.transformed.expect
index 675eae5..af8e07c 100644
--- a/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.transformed.expect
@@ -8,160 +8,160 @@
   core::print( block {
     final core::List<core::int> #t1 = core::_GrowableList::_literal2<core::int>(1, 2);
     final core::Iterable<core::int>? #t2 = list;
-    if(!#t2.{core::Object::==}(null))
-      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>});
-    #t1.{core::List::add}{Invariant}(3);
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t1.{core::List::add}(3){(core::int) → void};
   } =>#t1);
   core::print( block {
     final core::List<core::int> #t3 = core::_GrowableList::_literal2<core::int>(1, 2);
     final core::Iterable<core::int>? #t4 = null;
-    if(!#t4.{core::Object::==}(null))
-      #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<core::int>});
-    #t3.{core::List::add}{Invariant}(3);
+    if(!(#t4 == null))
+      #t3.{core::List::addAll}(#t4{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t3.{core::List::add}(3){(core::int) → void};
   } =>#t3);
   core::List<core::int> list1 = block {
     final core::List<core::int> #t5 = core::_GrowableList::•<core::int>(0);
     final core::Iterable<core::int>? #t6 = list;
-    if(!#t6.{core::Object::==}(null))
-      #t5.{core::List::addAll}{Invariant}(#t6{core::Iterable<core::int>});
+    if(!(#t6 == null))
+      #t5.{core::List::addAll}(#t6{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t5;
   core::List<Never> list2 = block {
     final core::List<Never> #t7 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t8 = null;
-    if(!#t8.{core::Object::==}(null))
-      #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<Never>});
+    if(!(#t8 == null))
+      #t7.{core::List::addAll}(#t8{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t7;
   core::List<core::int> list3 = block {
     final core::List<core::int> #t9 = core::_GrowableList::_literal2<core::int>(1, 2);
     final core::Iterable<core::int>? #t10 = list;
-    if(!#t10.{core::Object::==}(null))
-      #t9.{core::List::addAll}{Invariant}(#t10{core::Iterable<core::int>});
-    #t9.{core::List::add}{Invariant}(3);
+    if(!(#t10 == null))
+      #t9.{core::List::addAll}(#t10{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t9.{core::List::add}(3){(core::int) → void};
   } =>#t9;
   core::List<core::int> list4 = block {
     final core::List<core::int> #t11 = core::_GrowableList::_literal2<core::int>(1, 2);
     final core::Iterable<core::int>? #t12 = null;
-    if(!#t12.{core::Object::==}(null))
-      #t11.{core::List::addAll}{Invariant}(#t12{core::Iterable<core::int>});
-    #t11.{core::List::add}{Invariant}(3);
+    if(!(#t12 == null))
+      #t11.{core::List::addAll}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t11.{core::List::add}(3){(core::int) → void};
   } =>#t11;
   core::Set<core::int>? set = null;
   core::print( block {
     final core::Set<core::int> #t13 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t13.{core::Set::add}{Invariant}(1);
-    #t13.{core::Set::add}{Invariant}(2);
+    #t13.{core::Set::add}(1){(core::int) → core::bool};
+    #t13.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t14 = set;
-    if(!#t14.{core::Object::==}(null))
-      #t13.{core::Set::addAll}{Invariant}(#t14{core::Iterable<core::int>});
-    #t13.{core::Set::add}{Invariant}(3);
+    if(!(#t14 == null))
+      #t13.{core::Set::addAll}(#t14{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t13.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t13);
   core::print( block {
     final core::Set<core::int> #t15 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t15.{core::Set::add}{Invariant}(1);
-    #t15.{core::Set::add}{Invariant}(2);
+    #t15.{core::Set::add}(1){(core::int) → core::bool};
+    #t15.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t16 = null;
-    if(!#t16.{core::Object::==}(null))
-      #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<core::int>});
-    #t15.{core::Set::add}{Invariant}(3);
+    if(!(#t16 == null))
+      #t15.{core::Set::addAll}(#t16{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t15.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t15);
   core::Set<core::int> set1 = block {
     final core::Set<core::int> #t17 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t18 = set;
-    if(!#t18.{core::Object::==}(null)) {
+    if(!(#t18 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t18{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t20 = #t19 as{TypeError,ForNonNullableByDefault} core::int;
-          #t17.{core::Set::add}{Invariant}(#t20);
+          #t17.{core::Set::add}(#t20){(core::int) → core::bool};
         }
       }
     }
   } =>#t17;
   core::Set<core::int> set3 = block {
     final core::Set<core::int> #t21 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t21.{core::Set::add}{Invariant}(1);
-    #t21.{core::Set::add}{Invariant}(2);
+    #t21.{core::Set::add}(1){(core::int) → core::bool};
+    #t21.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t22 = set;
-    if(!#t22.{core::Object::==}(null))
-      #t21.{core::Set::addAll}{Invariant}(#t22{core::Iterable<core::int>});
-    #t21.{core::Set::add}{Invariant}(3);
+    if(!(#t22 == null))
+      #t21.{core::Set::addAll}(#t22{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t21.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t21;
   core::Set<core::int> set4 = block {
     final core::Set<core::int> #t23 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t23.{core::Set::add}{Invariant}(1);
-    #t23.{core::Set::add}{Invariant}(2);
+    #t23.{core::Set::add}(1){(core::int) → core::bool};
+    #t23.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t24 = null;
-    if(!#t24.{core::Object::==}(null))
-      #t23.{core::Set::addAll}{Invariant}(#t24{core::Iterable<core::int>});
-    #t23.{core::Set::add}{Invariant}(3);
+    if(!(#t24 == null))
+      #t23.{core::Set::addAll}(#t24{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t23.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t23;
   core::Map<core::int, core::int>? map = null;
   core::print( block {
     final core::Map<core::int, core::int> #t25 = <core::int, core::int>{};
-    #t25.{core::Map::[]=}{Invariant}(1, 1);
-    #t25.{core::Map::[]=}{Invariant}(2, 2);
+    #t25.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t25.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t26 = map;
-    if(!#t26.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t26{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t26 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t27 = :sync-for-iterator.{core::Iterator::current};
-        #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}, #t27.{core::MapEntry::value});
+        #t25.{core::Map::[]=}(#t27.{core::MapEntry::key}{core::int}, #t27.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
-    #t25.{core::Map::[]=}{Invariant}(3, 3);
+    #t25.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t25);
   core::print( block {
     final core::Map<core::int, core::int> #t28 = <core::int, core::int>{};
-    #t28.{core::Map::[]=}{Invariant}(1, 1);
-    #t28.{core::Map::[]=}{Invariant}(2, 2);
+    #t28.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t28.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t29 = null;
-    if(!#t29.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t29{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t29 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t30 = :sync-for-iterator.{core::Iterator::current};
-        #t28.{core::Map::[]=}{Invariant}(#t30.{core::MapEntry::key}, #t30.{core::MapEntry::value});
+        #t28.{core::Map::[]=}(#t30.{core::MapEntry::key}{core::int}, #t30.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
-    #t28.{core::Map::[]=}{Invariant}(3, 3);
+    #t28.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t28);
   core::Map<core::int, core::int> map1 = block {
     final core::Map<core::int, core::int> #t31 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t32 = map;
-    if(!#t32.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t32{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t32 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t33 = :sync-for-iterator.{core::Iterator::current};
-        #t31.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
+        #t31.{core::Map::[]=}(#t33.{core::MapEntry::key}{core::int}, #t33.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
   } =>#t31;
   core::Map<core::int, core::int> map3 = block {
     final core::Map<core::int, core::int> #t34 = <core::int, core::int>{};
-    #t34.{core::Map::[]=}{Invariant}(1, 1);
-    #t34.{core::Map::[]=}{Invariant}(2, 2);
+    #t34.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t34.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t35 = map;
-    if(!#t35.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t35{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t35 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t36 = :sync-for-iterator.{core::Iterator::current};
-        #t34.{core::Map::[]=}{Invariant}(#t36.{core::MapEntry::key}, #t36.{core::MapEntry::value});
+        #t34.{core::Map::[]=}(#t36.{core::MapEntry::key}{core::int}, #t36.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
-    #t34.{core::Map::[]=}{Invariant}(3, 3);
+    #t34.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t34;
   core::Map<core::int, core::int> map4 = block {
     final core::Map<core::int, core::int> #t37 = <core::int, core::int>{};
-    #t37.{core::Map::[]=}{Invariant}(1, 1);
-    #t37.{core::Map::[]=}{Invariant}(2, 2);
+    #t37.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t37.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t38 = null;
-    if(!#t38.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t38{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t38 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t39 = :sync-for-iterator.{core::Iterator::current};
-        #t37.{core::Map::[]=}{Invariant}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
+        #t37.{core::Map::[]=}(#t39.{core::MapEntry::key}{core::int}, #t39.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
-    #t37.{core::Map::[]=}{Invariant}(3, 3);
+    #t37.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t37;
 }
diff --git a/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.expect
index df571c2..872ee8f 100644
--- a/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.expect
@@ -8,135 +8,135 @@
   core::print( block {
     final core::List<core::int> #t1 = <core::int>[1, 2];
     final core::Iterable<core::int>? #t2 = list;
-    if(!#t2.{core::Object::==}(null))
-      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>});
-    #t1.{core::List::add}{Invariant}(3);
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t1.{core::List::add}(3){(core::int) → void};
   } =>#t1);
   core::print( block {
     final core::List<core::int> #t3 = <core::int>[1, 2];
     final core::Iterable<core::int>? #t4 = null;
-    if(!#t4.{core::Object::==}(null))
-      #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<core::int>});
-    #t3.{core::List::add}{Invariant}(3);
+    if(!(#t4 == null))
+      #t3.{core::List::addAll}(#t4{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t3.{core::List::add}(3){(core::int) → void};
   } =>#t3);
   core::List<core::int> list1 = block {
     final core::List<core::int> #t5 = <core::int>[];
     final core::Iterable<core::int>? #t6 = list;
-    if(!#t6.{core::Object::==}(null))
-      #t5.{core::List::addAll}{Invariant}(#t6{core::Iterable<core::int>});
+    if(!(#t6 == null))
+      #t5.{core::List::addAll}(#t6{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t5;
   core::List<Never> list2 = block {
     final core::List<Never> #t7 = <Never>[];
     final core::Iterable<Never>? #t8 = null;
-    if(!#t8.{core::Object::==}(null))
-      #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<Never>});
+    if(!(#t8 == null))
+      #t7.{core::List::addAll}(#t8{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t7;
   core::List<core::int> list3 = block {
     final core::List<core::int> #t9 = <core::int>[1, 2];
     final core::Iterable<core::int>? #t10 = list;
-    if(!#t10.{core::Object::==}(null))
-      #t9.{core::List::addAll}{Invariant}(#t10{core::Iterable<core::int>});
-    #t9.{core::List::add}{Invariant}(3);
+    if(!(#t10 == null))
+      #t9.{core::List::addAll}(#t10{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t9.{core::List::add}(3){(core::int) → void};
   } =>#t9;
   core::List<core::int> list4 = block {
     final core::List<core::int> #t11 = <core::int>[1, 2];
     final core::Iterable<core::int>? #t12 = null;
-    if(!#t12.{core::Object::==}(null))
-      #t11.{core::List::addAll}{Invariant}(#t12{core::Iterable<core::int>});
-    #t11.{core::List::add}{Invariant}(3);
+    if(!(#t12 == null))
+      #t11.{core::List::addAll}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t11.{core::List::add}(3){(core::int) → void};
   } =>#t11;
   core::Set<core::int>? set = null;
   core::print( block {
     final core::Set<core::int> #t13 = col::LinkedHashSet::•<core::int>();
-    #t13.{core::Set::add}{Invariant}(1);
-    #t13.{core::Set::add}{Invariant}(2);
+    #t13.{core::Set::add}(1){(core::int) → core::bool};
+    #t13.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t14 = set;
-    if(!#t14.{core::Object::==}(null))
-      #t13.{core::Set::addAll}{Invariant}(#t14{core::Iterable<core::int>});
-    #t13.{core::Set::add}{Invariant}(3);
+    if(!(#t14 == null))
+      #t13.{core::Set::addAll}(#t14{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t13.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t13);
   core::print( block {
     final core::Set<core::int> #t15 = col::LinkedHashSet::•<core::int>();
-    #t15.{core::Set::add}{Invariant}(1);
-    #t15.{core::Set::add}{Invariant}(2);
+    #t15.{core::Set::add}(1){(core::int) → core::bool};
+    #t15.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t16 = null;
-    if(!#t16.{core::Object::==}(null))
-      #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<core::int>});
-    #t15.{core::Set::add}{Invariant}(3);
+    if(!(#t16 == null))
+      #t15.{core::Set::addAll}(#t16{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t15.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t15);
   core::Set<core::int> set1 = block {
     final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t18 = set;
-    if(!#t18.{core::Object::==}(null))
+    if(!(#t18 == null))
       for (final dynamic #t19 in #t18{core::Iterable<dynamic>}) {
         final core::int #t20 = #t19 as{TypeError,ForNonNullableByDefault} core::int;
-        #t17.{core::Set::add}{Invariant}(#t20);
+        #t17.{core::Set::add}(#t20){(core::int) → core::bool};
       }
   } =>#t17;
   core::Set<core::int> set3 = block {
     final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
-    #t21.{core::Set::add}{Invariant}(1);
-    #t21.{core::Set::add}{Invariant}(2);
+    #t21.{core::Set::add}(1){(core::int) → core::bool};
+    #t21.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t22 = set;
-    if(!#t22.{core::Object::==}(null))
-      #t21.{core::Set::addAll}{Invariant}(#t22{core::Iterable<core::int>});
-    #t21.{core::Set::add}{Invariant}(3);
+    if(!(#t22 == null))
+      #t21.{core::Set::addAll}(#t22{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t21.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t21;
   core::Set<core::int> set4 = block {
     final core::Set<core::int> #t23 = col::LinkedHashSet::•<core::int>();
-    #t23.{core::Set::add}{Invariant}(1);
-    #t23.{core::Set::add}{Invariant}(2);
+    #t23.{core::Set::add}(1){(core::int) → core::bool};
+    #t23.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t24 = null;
-    if(!#t24.{core::Object::==}(null))
-      #t23.{core::Set::addAll}{Invariant}(#t24{core::Iterable<core::int>});
-    #t23.{core::Set::add}{Invariant}(3);
+    if(!(#t24 == null))
+      #t23.{core::Set::addAll}(#t24{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t23.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t23;
   core::Map<core::int, core::int>? map = null;
   core::print( block {
     final core::Map<core::int, core::int> #t25 = <core::int, core::int>{};
-    #t25.{core::Map::[]=}{Invariant}(1, 1);
-    #t25.{core::Map::[]=}{Invariant}(2, 2);
+    #t25.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t25.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t26 = map;
-    if(!#t26.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t27 in #t26{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}, #t27.{core::MapEntry::value});
-    #t25.{core::Map::[]=}{Invariant}(3, 3);
+    if(!(#t26 == null))
+      for (final core::MapEntry<core::int, core::int> #t27 in #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t25.{core::Map::[]=}(#t27.{core::MapEntry::key}{core::int}, #t27.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    #t25.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t25);
   core::print( block {
     final core::Map<core::int, core::int> #t28 = <core::int, core::int>{};
-    #t28.{core::Map::[]=}{Invariant}(1, 1);
-    #t28.{core::Map::[]=}{Invariant}(2, 2);
+    #t28.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t28.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t29 = null;
-    if(!#t29.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t30 in #t29{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t28.{core::Map::[]=}{Invariant}(#t30.{core::MapEntry::key}, #t30.{core::MapEntry::value});
-    #t28.{core::Map::[]=}{Invariant}(3, 3);
+    if(!(#t29 == null))
+      for (final core::MapEntry<core::int, core::int> #t30 in #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t28.{core::Map::[]=}(#t30.{core::MapEntry::key}{core::int}, #t30.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    #t28.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t28);
   core::Map<core::int, core::int> map1 = block {
     final core::Map<core::int, core::int> #t31 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t32 = map;
-    if(!#t32.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t33 in #t32{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t31.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
+    if(!(#t32 == null))
+      for (final core::MapEntry<core::int, core::int> #t33 in #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t31.{core::Map::[]=}(#t33.{core::MapEntry::key}{core::int}, #t33.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t31;
   core::Map<core::int, core::int> map3 = block {
     final core::Map<core::int, core::int> #t34 = <core::int, core::int>{};
-    #t34.{core::Map::[]=}{Invariant}(1, 1);
-    #t34.{core::Map::[]=}{Invariant}(2, 2);
+    #t34.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t34.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t35 = map;
-    if(!#t35.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t36 in #t35{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t34.{core::Map::[]=}{Invariant}(#t36.{core::MapEntry::key}, #t36.{core::MapEntry::value});
-    #t34.{core::Map::[]=}{Invariant}(3, 3);
+    if(!(#t35 == null))
+      for (final core::MapEntry<core::int, core::int> #t36 in #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t34.{core::Map::[]=}(#t36.{core::MapEntry::key}{core::int}, #t36.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    #t34.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t34;
   core::Map<core::int, core::int> map4 = block {
     final core::Map<core::int, core::int> #t37 = <core::int, core::int>{};
-    #t37.{core::Map::[]=}{Invariant}(1, 1);
-    #t37.{core::Map::[]=}{Invariant}(2, 2);
+    #t37.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t37.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t38 = null;
-    if(!#t38.{core::Object::==}(null))
-      for (final core::MapEntry<core::int, core::int> #t39 in #t38{core::Map<core::int, core::int>}.{core::Map::entries})
-        #t37.{core::Map::[]=}{Invariant}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
-    #t37.{core::Map::[]=}{Invariant}(3, 3);
+    if(!(#t38 == null))
+      for (final core::MapEntry<core::int, core::int> #t39 in #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t37.{core::Map::[]=}(#t39.{core::MapEntry::key}{core::int}, #t39.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    #t37.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t37;
 }
diff --git a/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.transformed.expect
index 675eae5..af8e07c 100644
--- a/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.transformed.expect
@@ -8,160 +8,160 @@
   core::print( block {
     final core::List<core::int> #t1 = core::_GrowableList::_literal2<core::int>(1, 2);
     final core::Iterable<core::int>? #t2 = list;
-    if(!#t2.{core::Object::==}(null))
-      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>});
-    #t1.{core::List::add}{Invariant}(3);
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t1.{core::List::add}(3){(core::int) → void};
   } =>#t1);
   core::print( block {
     final core::List<core::int> #t3 = core::_GrowableList::_literal2<core::int>(1, 2);
     final core::Iterable<core::int>? #t4 = null;
-    if(!#t4.{core::Object::==}(null))
-      #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<core::int>});
-    #t3.{core::List::add}{Invariant}(3);
+    if(!(#t4 == null))
+      #t3.{core::List::addAll}(#t4{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t3.{core::List::add}(3){(core::int) → void};
   } =>#t3);
   core::List<core::int> list1 = block {
     final core::List<core::int> #t5 = core::_GrowableList::•<core::int>(0);
     final core::Iterable<core::int>? #t6 = list;
-    if(!#t6.{core::Object::==}(null))
-      #t5.{core::List::addAll}{Invariant}(#t6{core::Iterable<core::int>});
+    if(!(#t6 == null))
+      #t5.{core::List::addAll}(#t6{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t5;
   core::List<Never> list2 = block {
     final core::List<Never> #t7 = core::_GrowableList::•<Never>(0);
     final core::Iterable<Never>? #t8 = null;
-    if(!#t8.{core::Object::==}(null))
-      #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<Never>});
+    if(!(#t8 == null))
+      #t7.{core::List::addAll}(#t8{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t7;
   core::List<core::int> list3 = block {
     final core::List<core::int> #t9 = core::_GrowableList::_literal2<core::int>(1, 2);
     final core::Iterable<core::int>? #t10 = list;
-    if(!#t10.{core::Object::==}(null))
-      #t9.{core::List::addAll}{Invariant}(#t10{core::Iterable<core::int>});
-    #t9.{core::List::add}{Invariant}(3);
+    if(!(#t10 == null))
+      #t9.{core::List::addAll}(#t10{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t9.{core::List::add}(3){(core::int) → void};
   } =>#t9;
   core::List<core::int> list4 = block {
     final core::List<core::int> #t11 = core::_GrowableList::_literal2<core::int>(1, 2);
     final core::Iterable<core::int>? #t12 = null;
-    if(!#t12.{core::Object::==}(null))
-      #t11.{core::List::addAll}{Invariant}(#t12{core::Iterable<core::int>});
-    #t11.{core::List::add}{Invariant}(3);
+    if(!(#t12 == null))
+      #t11.{core::List::addAll}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t11.{core::List::add}(3){(core::int) → void};
   } =>#t11;
   core::Set<core::int>? set = null;
   core::print( block {
     final core::Set<core::int> #t13 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t13.{core::Set::add}{Invariant}(1);
-    #t13.{core::Set::add}{Invariant}(2);
+    #t13.{core::Set::add}(1){(core::int) → core::bool};
+    #t13.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t14 = set;
-    if(!#t14.{core::Object::==}(null))
-      #t13.{core::Set::addAll}{Invariant}(#t14{core::Iterable<core::int>});
-    #t13.{core::Set::add}{Invariant}(3);
+    if(!(#t14 == null))
+      #t13.{core::Set::addAll}(#t14{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t13.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t13);
   core::print( block {
     final core::Set<core::int> #t15 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t15.{core::Set::add}{Invariant}(1);
-    #t15.{core::Set::add}{Invariant}(2);
+    #t15.{core::Set::add}(1){(core::int) → core::bool};
+    #t15.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t16 = null;
-    if(!#t16.{core::Object::==}(null))
-      #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<core::int>});
-    #t15.{core::Set::add}{Invariant}(3);
+    if(!(#t16 == null))
+      #t15.{core::Set::addAll}(#t16{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t15.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t15);
   core::Set<core::int> set1 = block {
     final core::Set<core::int> #t17 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t18 = set;
-    if(!#t18.{core::Object::==}(null)) {
+    if(!(#t18 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t18{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t20 = #t19 as{TypeError,ForNonNullableByDefault} core::int;
-          #t17.{core::Set::add}{Invariant}(#t20);
+          #t17.{core::Set::add}(#t20){(core::int) → core::bool};
         }
       }
     }
   } =>#t17;
   core::Set<core::int> set3 = block {
     final core::Set<core::int> #t21 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t21.{core::Set::add}{Invariant}(1);
-    #t21.{core::Set::add}{Invariant}(2);
+    #t21.{core::Set::add}(1){(core::int) → core::bool};
+    #t21.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t22 = set;
-    if(!#t22.{core::Object::==}(null))
-      #t21.{core::Set::addAll}{Invariant}(#t22{core::Iterable<core::int>});
-    #t21.{core::Set::add}{Invariant}(3);
+    if(!(#t22 == null))
+      #t21.{core::Set::addAll}(#t22{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t21.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t21;
   core::Set<core::int> set4 = block {
     final core::Set<core::int> #t23 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t23.{core::Set::add}{Invariant}(1);
-    #t23.{core::Set::add}{Invariant}(2);
+    #t23.{core::Set::add}(1){(core::int) → core::bool};
+    #t23.{core::Set::add}(2){(core::int) → core::bool};
     final core::Iterable<core::int>? #t24 = null;
-    if(!#t24.{core::Object::==}(null))
-      #t23.{core::Set::addAll}{Invariant}(#t24{core::Iterable<core::int>});
-    #t23.{core::Set::add}{Invariant}(3);
+    if(!(#t24 == null))
+      #t23.{core::Set::addAll}(#t24{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t23.{core::Set::add}(3){(core::int) → core::bool};
   } =>#t23;
   core::Map<core::int, core::int>? map = null;
   core::print( block {
     final core::Map<core::int, core::int> #t25 = <core::int, core::int>{};
-    #t25.{core::Map::[]=}{Invariant}(1, 1);
-    #t25.{core::Map::[]=}{Invariant}(2, 2);
+    #t25.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t25.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t26 = map;
-    if(!#t26.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t26{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t26 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t27 = :sync-for-iterator.{core::Iterator::current};
-        #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}, #t27.{core::MapEntry::value});
+        #t25.{core::Map::[]=}(#t27.{core::MapEntry::key}{core::int}, #t27.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
-    #t25.{core::Map::[]=}{Invariant}(3, 3);
+    #t25.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t25);
   core::print( block {
     final core::Map<core::int, core::int> #t28 = <core::int, core::int>{};
-    #t28.{core::Map::[]=}{Invariant}(1, 1);
-    #t28.{core::Map::[]=}{Invariant}(2, 2);
+    #t28.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t28.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t29 = null;
-    if(!#t29.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t29{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t29 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t30 = :sync-for-iterator.{core::Iterator::current};
-        #t28.{core::Map::[]=}{Invariant}(#t30.{core::MapEntry::key}, #t30.{core::MapEntry::value});
+        #t28.{core::Map::[]=}(#t30.{core::MapEntry::key}{core::int}, #t30.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
-    #t28.{core::Map::[]=}{Invariant}(3, 3);
+    #t28.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t28);
   core::Map<core::int, core::int> map1 = block {
     final core::Map<core::int, core::int> #t31 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t32 = map;
-    if(!#t32.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t32{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t32 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t33 = :sync-for-iterator.{core::Iterator::current};
-        #t31.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
+        #t31.{core::Map::[]=}(#t33.{core::MapEntry::key}{core::int}, #t33.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
   } =>#t31;
   core::Map<core::int, core::int> map3 = block {
     final core::Map<core::int, core::int> #t34 = <core::int, core::int>{};
-    #t34.{core::Map::[]=}{Invariant}(1, 1);
-    #t34.{core::Map::[]=}{Invariant}(2, 2);
+    #t34.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t34.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t35 = map;
-    if(!#t35.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t35{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t35 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t36 = :sync-for-iterator.{core::Iterator::current};
-        #t34.{core::Map::[]=}{Invariant}(#t36.{core::MapEntry::key}, #t36.{core::MapEntry::value});
+        #t34.{core::Map::[]=}(#t36.{core::MapEntry::key}{core::int}, #t36.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
-    #t34.{core::Map::[]=}{Invariant}(3, 3);
+    #t34.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t34;
   core::Map<core::int, core::int> map4 = block {
     final core::Map<core::int, core::int> #t37 = <core::int, core::int>{};
-    #t37.{core::Map::[]=}{Invariant}(1, 1);
-    #t37.{core::Map::[]=}{Invariant}(2, 2);
+    #t37.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
+    #t37.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t38 = null;
-    if(!#t38.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t38{core::Map<core::int, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t38 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int, core::int> #t39 = :sync-for-iterator.{core::Iterator::current};
-        #t37.{core::Map::[]=}{Invariant}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
+        #t37.{core::Map::[]=}(#t39.{core::MapEntry::key}{core::int}, #t39.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
-    #t37.{core::Map::[]=}{Invariant}(3, 3);
+    #t37.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
   } =>#t37;
 }
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.expect
index bba165a..4b1d92e 100644
--- a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.expect
@@ -117,7 +117,7 @@
     : super self::A::•()
     ;
   method test() → void {
-    let final core::int #t1 = 42 in super.{self::A::[]}(#t1).{core::String::==}(null) ?{core::String} super.{self::A::[]=}(#t1, "bar") : null;
+    let final core::int #t1 = 42 in super.{self::A::[]}(#t1) == null ?{core::String} super.{self::A::[]=}(#t1, "bar") : null;
   }
 }
 extension E on core::String {
@@ -131,61 +131,61 @@
 static method E|[](lowered final core::String #this, core::int index) → core::int
   return 42;
 static method warning(core::String s, core::List<core::String> l, core::Map<core::String, core::int> m) → dynamic {
-  let final core::String #t2 = s in #t2.{core::String::==}(null) ?{core::int?} null : #t2.{core::String::length};
-  let final core::String #t3 = s in #t3.{core::String::==}(null) ?{core::String} null : block {
-    #t3.{core::String::length};
+  let final core::String #t2 = s in #t2 == null ?{core::int?} null : #t2.{core::String::length}{core::int};
+  let final core::String #t3 = s in #t3 == null ?{core::String} null : block {
+    #t3.{core::String::length}{core::int};
   } =>#t3;
-  let final core::String #t4 = s in #t4.{core::String::==}(null) ?{core::String} "foo" : #t4;
-  s.{core::String::==}(null) ?{core::String} s = "foo" : null;
+  let final core::String #t4 = s in #t4 == null ?{core::String} "foo" : #t4;
+  s == null ?{core::String} s = "foo" : null;
   block {
     final core::List<core::String> #t5 = <core::String>[];
     final core::Iterable<core::String>? #t6 = l;
-    if(!#t6.{core::Object::==}(null))
-      #t5.{core::List::addAll}{Invariant}(#t6{core::Iterable<core::String>});
+    if(!(#t6 == null))
+      #t5.{core::List::addAll}(#t6{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
   } =>#t5;
   core::Set<core::String> a = block {
     final core::Set<core::String> #t7 = col::LinkedHashSet::•<core::String>();
     final core::Iterable<dynamic>? #t8 = l;
-    if(!#t8.{core::Object::==}(null))
+    if(!(#t8 == null))
       for (final dynamic #t9 in #t8{core::Iterable<dynamic>}) {
         final core::String #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::String;
-        #t7.{core::Set::add}{Invariant}(#t10);
+        #t7.{core::Set::add}(#t10){(core::String) → core::bool};
       }
   } =>#t7;
   block {
     final core::Set<core::String> #t11 = col::LinkedHashSet::•<core::String>();
     final core::Iterable<core::String>? #t12 = l;
-    if(!#t12.{core::Object::==}(null))
-      #t11.{core::Set::addAll}{Invariant}(#t12{core::Iterable<core::String>});
+    if(!(#t12 == null))
+      #t11.{core::Set::addAll}(#t12{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
   } =>#t11;
   core::Map<core::String, core::int> b = block {
     final core::Map<core::String, core::int> #t13 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t14 = m;
-    if(!#t14.{core::Object::==}(null))
-      for (final core::MapEntry<core::String, core::int> #t15 in #t14{core::Map<core::String, core::int>}.{core::Map::entries})
-        #t13.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
+    if(!(#t14 == null))
+      for (final core::MapEntry<core::String, core::int> #t15 in #t14{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+        #t13.{core::Map::[]=}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t13;
   block {
     final core::Map<core::String, core::int> #t16 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t17 = m;
-    if(!#t17.{core::Object::==}(null))
-      for (final core::MapEntry<core::String, core::int> #t18 in #t17{core::Map<core::String, core::int>}.{core::Map::entries})
-        #t16.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
+    if(!(#t17 == null))
+      for (final core::MapEntry<core::String, core::int> #t18 in #t17{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+        #t16.{core::Map::[]=}(#t18.{core::MapEntry::key}{core::String}, #t18.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t16;
   s!;
-  let final core::String #t19 = s in #t19.{core::String::==}(null) ?{core::String?} null : #t19.{core::String::substring}(0, 0);
-  let final core::List<core::String> #t20 = l in #t20.{core::List::==}(null) ?{core::int?} null : #t20.{core::List::length} = 42;
-  let final core::List<core::String> #t21 = l in #t21.{core::List::==}(null) ?{core::int?} null : #t21.{core::List::length} = #t21.{core::List::length}.{core::num::+}(42);
-  let final core::List<core::String> #t22 = l in #t22.{core::List::==}(null) ?{core::int?} null : #t22.{core::List::length}.{core::num::==}(null) ?{core::int} #t22.{core::List::length} = 42 : null;
-  let final core::String #t23 = s in #t23.{core::String::==}(null) ?{core::int?} null : self::E|get#foo(#t23);
-  let final core::String #t24 = s in let final core::int #t25 = 42 in self::E|[](#t24, #t25).{core::num::==}(null) ?{core::int} self::E|[]=(#t24, #t25, 42) : null;
-  let final core::List<core::String> #t26 = l in let final core::int #t27 = 42 in #t26.{core::List::[]}(#t27).{core::String::==}(null) ?{core::String} #t26.{core::List::[]=}(#t27, "foo") : null;
-  let final core::List<core::String> #t28 = l in #t28.{core::List::length}.{core::num::==}(null) ?{core::int} #t28.{core::List::length} = 42 : null;
-  let final core::List<core::String> #t29 = l in #t29.{core::List::==}(null) ?{core::List<core::String>} null : block {
+  let final core::String #t19 = s in #t19 == null ?{core::String?} null : #t19.{core::String::substring}(0, 0){(core::int, [core::int?]) → core::String};
+  let final core::List<core::String> #t20 = l in #t20 == null ?{core::int?} null : #t20.{core::List::length} = 42;
+  let final core::List<core::String> #t21 = l in #t21 == null ?{core::int?} null : #t21.{core::List::length} = #t21.{core::List::length}{core::int}.{core::num::+}(42){(core::num) → core::int};
+  let final core::List<core::String> #t22 = l in #t22 == null ?{core::int?} null : #t22.{core::List::length}{core::int} == null ?{core::int} #t22.{core::List::length} = 42 : null;
+  let final core::String #t23 = s in #t23 == null ?{core::int?} null : self::E|get#foo(#t23);
+  let final core::String #t24 = s in let final core::int #t25 = 42 in self::E|[](#t24, #t25) == null ?{core::int} self::E|[]=(#t24, #t25, 42) : null;
+  let final core::List<core::String> #t26 = l in let final core::int #t27 = 42 in #t26.{core::List::[]}(#t27){(core::int) → core::String} == null ?{core::String} #t26.{core::List::[]=}(#t27, "foo"){(core::int, core::String) → void} : null;
+  let final core::List<core::String> #t28 = l in #t28.{core::List::length}{core::int} == null ?{core::int} #t28.{core::List::length} = 42 : null;
+  let final core::List<core::String> #t29 = l in #t29 == null ?{core::List<core::String>} null : block {
     #t29.{core::List::length} = 42;
   } =>#t29;
-  let final core::List<core::String> #t30 = l in #t30.{core::List::==}(null) ?{core::List<core::String>} null : block {
-    let final core::List<core::String> #t31 = #t30 in #t31.{core::List::length}.{core::num::==}(null) ?{core::int} #t31.{core::List::length} = 42 : null;
+  let final core::List<core::String> #t30 = l in #t30 == null ?{core::List<core::String>} null : block {
+    let final core::List<core::String> #t31 = #t30 in #t31.{core::List::length}{core::int} == null ?{core::int} #t31.{core::List::length} = 42 : null;
   } =>#t30;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.transformed.expect
index d5ce000..a208e0d 100644
--- a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.transformed.expect
@@ -117,7 +117,7 @@
     : super self::A::•()
     ;
   method test() → void {
-    let final core::int #t1 = 42 in super.{self::A::[]}(#t1).{core::String::==}(null) ?{core::String} super.{self::A::[]=}(#t1, "bar") : null;
+    let final core::int #t1 = 42 in super.{self::A::[]}(#t1) == null ?{core::String} super.{self::A::[]=}(#t1, "bar") : null;
   }
 }
 extension E on core::String {
@@ -131,28 +131,28 @@
 static method E|[](lowered final core::String #this, core::int index) → core::int
   return 42;
 static method warning(core::String s, core::List<core::String> l, core::Map<core::String, core::int> m) → dynamic {
-  let final core::String #t2 = s in #t2.{core::String::==}(null) ?{core::int?} null : #t2.{core::String::length};
-  let final core::String #t3 = s in #t3.{core::String::==}(null) ?{core::String} null : block {
-    #t3.{core::String::length};
+  let final core::String #t2 = s in #t2 == null ?{core::int?} null : #t2.{core::String::length}{core::int};
+  let final core::String #t3 = s in #t3 == null ?{core::String} null : block {
+    #t3.{core::String::length}{core::int};
   } =>#t3;
-  let final core::String #t4 = s in #t4.{core::String::==}(null) ?{core::String} "foo" : #t4;
-  s.{core::String::==}(null) ?{core::String} s = "foo" : null;
+  let final core::String #t4 = s in #t4 == null ?{core::String} "foo" : #t4;
+  s == null ?{core::String} s = "foo" : null;
   block {
     final core::List<core::String> #t5 = core::_GrowableList::•<core::String>(0);
     final core::Iterable<core::String>? #t6 = l;
-    if(!#t6.{core::Object::==}(null))
-      #t5.{core::List::addAll}{Invariant}(#t6{core::Iterable<core::String>});
+    if(!(#t6 == null))
+      #t5.{core::List::addAll}(#t6{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
   } =>#t5;
   core::Set<core::String> a = block {
     final core::Set<core::String> #t7 = new col::_CompactLinkedHashSet::•<core::String>();
     final core::Iterable<dynamic>? #t8 = l;
-    if(!#t8.{core::Object::==}(null)) {
+    if(!(#t8 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t8{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t9 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::String #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::String;
-          #t7.{core::Set::add}{Invariant}(#t10);
+          #t7.{core::Set::add}(#t10){(core::String) → core::bool};
         }
       }
     }
@@ -160,45 +160,45 @@
   block {
     final core::Set<core::String> #t11 = new col::_CompactLinkedHashSet::•<core::String>();
     final core::Iterable<core::String>? #t12 = l;
-    if(!#t12.{core::Object::==}(null))
-      #t11.{core::Set::addAll}{Invariant}(#t12{core::Iterable<core::String>});
+    if(!(#t12 == null))
+      #t11.{core::Set::addAll}(#t12{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
   } =>#t11;
   core::Map<core::String, core::int> b = block {
     final core::Map<core::String, core::int> #t13 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t14 = m;
-    if(!#t14.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = #t14{core::Map<core::String, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t14 == null)) {
+      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = #t14{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String, core::int> #t15 = :sync-for-iterator.{core::Iterator::current};
-        #t13.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
+        #t13.{core::Map::[]=}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
       }
     }
   } =>#t13;
   block {
     final core::Map<core::String, core::int> #t16 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t17 = m;
-    if(!#t17.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = #t17{core::Map<core::String, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t17 == null)) {
+      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = #t17{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String, core::int> #t18 = :sync-for-iterator.{core::Iterator::current};
-        #t16.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
+        #t16.{core::Map::[]=}(#t18.{core::MapEntry::key}{core::String}, #t18.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
       }
     }
   } =>#t16;
   s!;
-  let final core::String #t19 = s in #t19.{core::String::==}(null) ?{core::String?} null : #t19.{core::String::substring}(0, 0);
-  let final core::List<core::String> #t20 = l in #t20.{core::List::==}(null) ?{core::int?} null : #t20.{core::List::length} = 42;
-  let final core::List<core::String> #t21 = l in #t21.{core::List::==}(null) ?{core::int?} null : #t21.{core::List::length} = #t21.{core::List::length}.{core::num::+}(42);
-  let final core::List<core::String> #t22 = l in #t22.{core::List::==}(null) ?{core::int?} null : #t22.{core::List::length}.{core::num::==}(null) ?{core::int} #t22.{core::List::length} = 42 : null;
-  let final core::String #t23 = s in #t23.{core::String::==}(null) ?{core::int?} null : self::E|get#foo(#t23);
-  let final core::String #t24 = s in let final core::int #t25 = 42 in self::E|[](#t24, #t25).{core::num::==}(null) ?{core::int} self::E|[]=(#t24, #t25, 42) : null;
-  let final core::List<core::String> #t26 = l in let final core::int #t27 = 42 in #t26.{core::List::[]}(#t27).{core::String::==}(null) ?{core::String} #t26.{core::List::[]=}(#t27, "foo") : null;
-  let final core::List<core::String> #t28 = l in #t28.{core::List::length}.{core::num::==}(null) ?{core::int} #t28.{core::List::length} = 42 : null;
-  let final core::List<core::String> #t29 = l in #t29.{core::List::==}(null) ?{core::List<core::String>} null : block {
+  let final core::String #t19 = s in #t19 == null ?{core::String?} null : #t19.{core::String::substring}(0, 0){(core::int, [core::int?]) → core::String};
+  let final core::List<core::String> #t20 = l in #t20 == null ?{core::int?} null : #t20.{core::List::length} = 42;
+  let final core::List<core::String> #t21 = l in #t21 == null ?{core::int?} null : #t21.{core::List::length} = #t21.{core::List::length}{core::int}.{core::num::+}(42){(core::num) → core::int};
+  let final core::List<core::String> #t22 = l in #t22 == null ?{core::int?} null : #t22.{core::List::length}{core::int} == null ?{core::int} #t22.{core::List::length} = 42 : null;
+  let final core::String #t23 = s in #t23 == null ?{core::int?} null : self::E|get#foo(#t23);
+  let final core::String #t24 = s in let final core::int #t25 = 42 in self::E|[](#t24, #t25) == null ?{core::int} self::E|[]=(#t24, #t25, 42) : null;
+  let final core::List<core::String> #t26 = l in let final core::int #t27 = 42 in #t26.{core::List::[]}(#t27){(core::int) → core::String} == null ?{core::String} #t26.{core::List::[]=}(#t27, "foo"){(core::int, core::String) → void} : null;
+  let final core::List<core::String> #t28 = l in #t28.{core::List::length}{core::int} == null ?{core::int} #t28.{core::List::length} = 42 : null;
+  let final core::List<core::String> #t29 = l in #t29 == null ?{core::List<core::String>} null : block {
     #t29.{core::List::length} = 42;
   } =>#t29;
-  let final core::List<core::String> #t30 = l in #t30.{core::List::==}(null) ?{core::List<core::String>} null : block {
-    let final core::List<core::String> #t31 = #t30 in #t31.{core::List::length}.{core::num::==}(null) ?{core::int} #t31.{core::List::length} = 42 : null;
+  let final core::List<core::String> #t30 = l in #t30 == null ?{core::List<core::String>} null : block {
+    let final core::List<core::String> #t31 = #t30 in #t31.{core::List::length}{core::int} == null ?{core::int} #t31.{core::List::length} = 42 : null;
   } =>#t30;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.expect
index bba165a..4b1d92e 100644
--- a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.expect
@@ -117,7 +117,7 @@
     : super self::A::•()
     ;
   method test() → void {
-    let final core::int #t1 = 42 in super.{self::A::[]}(#t1).{core::String::==}(null) ?{core::String} super.{self::A::[]=}(#t1, "bar") : null;
+    let final core::int #t1 = 42 in super.{self::A::[]}(#t1) == null ?{core::String} super.{self::A::[]=}(#t1, "bar") : null;
   }
 }
 extension E on core::String {
@@ -131,61 +131,61 @@
 static method E|[](lowered final core::String #this, core::int index) → core::int
   return 42;
 static method warning(core::String s, core::List<core::String> l, core::Map<core::String, core::int> m) → dynamic {
-  let final core::String #t2 = s in #t2.{core::String::==}(null) ?{core::int?} null : #t2.{core::String::length};
-  let final core::String #t3 = s in #t3.{core::String::==}(null) ?{core::String} null : block {
-    #t3.{core::String::length};
+  let final core::String #t2 = s in #t2 == null ?{core::int?} null : #t2.{core::String::length}{core::int};
+  let final core::String #t3 = s in #t3 == null ?{core::String} null : block {
+    #t3.{core::String::length}{core::int};
   } =>#t3;
-  let final core::String #t4 = s in #t4.{core::String::==}(null) ?{core::String} "foo" : #t4;
-  s.{core::String::==}(null) ?{core::String} s = "foo" : null;
+  let final core::String #t4 = s in #t4 == null ?{core::String} "foo" : #t4;
+  s == null ?{core::String} s = "foo" : null;
   block {
     final core::List<core::String> #t5 = <core::String>[];
     final core::Iterable<core::String>? #t6 = l;
-    if(!#t6.{core::Object::==}(null))
-      #t5.{core::List::addAll}{Invariant}(#t6{core::Iterable<core::String>});
+    if(!(#t6 == null))
+      #t5.{core::List::addAll}(#t6{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
   } =>#t5;
   core::Set<core::String> a = block {
     final core::Set<core::String> #t7 = col::LinkedHashSet::•<core::String>();
     final core::Iterable<dynamic>? #t8 = l;
-    if(!#t8.{core::Object::==}(null))
+    if(!(#t8 == null))
       for (final dynamic #t9 in #t8{core::Iterable<dynamic>}) {
         final core::String #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::String;
-        #t7.{core::Set::add}{Invariant}(#t10);
+        #t7.{core::Set::add}(#t10){(core::String) → core::bool};
       }
   } =>#t7;
   block {
     final core::Set<core::String> #t11 = col::LinkedHashSet::•<core::String>();
     final core::Iterable<core::String>? #t12 = l;
-    if(!#t12.{core::Object::==}(null))
-      #t11.{core::Set::addAll}{Invariant}(#t12{core::Iterable<core::String>});
+    if(!(#t12 == null))
+      #t11.{core::Set::addAll}(#t12{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
   } =>#t11;
   core::Map<core::String, core::int> b = block {
     final core::Map<core::String, core::int> #t13 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t14 = m;
-    if(!#t14.{core::Object::==}(null))
-      for (final core::MapEntry<core::String, core::int> #t15 in #t14{core::Map<core::String, core::int>}.{core::Map::entries})
-        #t13.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
+    if(!(#t14 == null))
+      for (final core::MapEntry<core::String, core::int> #t15 in #t14{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+        #t13.{core::Map::[]=}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t13;
   block {
     final core::Map<core::String, core::int> #t16 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t17 = m;
-    if(!#t17.{core::Object::==}(null))
-      for (final core::MapEntry<core::String, core::int> #t18 in #t17{core::Map<core::String, core::int>}.{core::Map::entries})
-        #t16.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
+    if(!(#t17 == null))
+      for (final core::MapEntry<core::String, core::int> #t18 in #t17{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+        #t16.{core::Map::[]=}(#t18.{core::MapEntry::key}{core::String}, #t18.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t16;
   s!;
-  let final core::String #t19 = s in #t19.{core::String::==}(null) ?{core::String?} null : #t19.{core::String::substring}(0, 0);
-  let final core::List<core::String> #t20 = l in #t20.{core::List::==}(null) ?{core::int?} null : #t20.{core::List::length} = 42;
-  let final core::List<core::String> #t21 = l in #t21.{core::List::==}(null) ?{core::int?} null : #t21.{core::List::length} = #t21.{core::List::length}.{core::num::+}(42);
-  let final core::List<core::String> #t22 = l in #t22.{core::List::==}(null) ?{core::int?} null : #t22.{core::List::length}.{core::num::==}(null) ?{core::int} #t22.{core::List::length} = 42 : null;
-  let final core::String #t23 = s in #t23.{core::String::==}(null) ?{core::int?} null : self::E|get#foo(#t23);
-  let final core::String #t24 = s in let final core::int #t25 = 42 in self::E|[](#t24, #t25).{core::num::==}(null) ?{core::int} self::E|[]=(#t24, #t25, 42) : null;
-  let final core::List<core::String> #t26 = l in let final core::int #t27 = 42 in #t26.{core::List::[]}(#t27).{core::String::==}(null) ?{core::String} #t26.{core::List::[]=}(#t27, "foo") : null;
-  let final core::List<core::String> #t28 = l in #t28.{core::List::length}.{core::num::==}(null) ?{core::int} #t28.{core::List::length} = 42 : null;
-  let final core::List<core::String> #t29 = l in #t29.{core::List::==}(null) ?{core::List<core::String>} null : block {
+  let final core::String #t19 = s in #t19 == null ?{core::String?} null : #t19.{core::String::substring}(0, 0){(core::int, [core::int?]) → core::String};
+  let final core::List<core::String> #t20 = l in #t20 == null ?{core::int?} null : #t20.{core::List::length} = 42;
+  let final core::List<core::String> #t21 = l in #t21 == null ?{core::int?} null : #t21.{core::List::length} = #t21.{core::List::length}{core::int}.{core::num::+}(42){(core::num) → core::int};
+  let final core::List<core::String> #t22 = l in #t22 == null ?{core::int?} null : #t22.{core::List::length}{core::int} == null ?{core::int} #t22.{core::List::length} = 42 : null;
+  let final core::String #t23 = s in #t23 == null ?{core::int?} null : self::E|get#foo(#t23);
+  let final core::String #t24 = s in let final core::int #t25 = 42 in self::E|[](#t24, #t25) == null ?{core::int} self::E|[]=(#t24, #t25, 42) : null;
+  let final core::List<core::String> #t26 = l in let final core::int #t27 = 42 in #t26.{core::List::[]}(#t27){(core::int) → core::String} == null ?{core::String} #t26.{core::List::[]=}(#t27, "foo"){(core::int, core::String) → void} : null;
+  let final core::List<core::String> #t28 = l in #t28.{core::List::length}{core::int} == null ?{core::int} #t28.{core::List::length} = 42 : null;
+  let final core::List<core::String> #t29 = l in #t29 == null ?{core::List<core::String>} null : block {
     #t29.{core::List::length} = 42;
   } =>#t29;
-  let final core::List<core::String> #t30 = l in #t30.{core::List::==}(null) ?{core::List<core::String>} null : block {
-    let final core::List<core::String> #t31 = #t30 in #t31.{core::List::length}.{core::num::==}(null) ?{core::int} #t31.{core::List::length} = 42 : null;
+  let final core::List<core::String> #t30 = l in #t30 == null ?{core::List<core::String>} null : block {
+    let final core::List<core::String> #t31 = #t30 in #t31.{core::List::length}{core::int} == null ?{core::int} #t31.{core::List::length} = 42 : null;
   } =>#t30;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.transformed.expect
index d5ce000..a208e0d 100644
--- a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.transformed.expect
@@ -117,7 +117,7 @@
     : super self::A::•()
     ;
   method test() → void {
-    let final core::int #t1 = 42 in super.{self::A::[]}(#t1).{core::String::==}(null) ?{core::String} super.{self::A::[]=}(#t1, "bar") : null;
+    let final core::int #t1 = 42 in super.{self::A::[]}(#t1) == null ?{core::String} super.{self::A::[]=}(#t1, "bar") : null;
   }
 }
 extension E on core::String {
@@ -131,28 +131,28 @@
 static method E|[](lowered final core::String #this, core::int index) → core::int
   return 42;
 static method warning(core::String s, core::List<core::String> l, core::Map<core::String, core::int> m) → dynamic {
-  let final core::String #t2 = s in #t2.{core::String::==}(null) ?{core::int?} null : #t2.{core::String::length};
-  let final core::String #t3 = s in #t3.{core::String::==}(null) ?{core::String} null : block {
-    #t3.{core::String::length};
+  let final core::String #t2 = s in #t2 == null ?{core::int?} null : #t2.{core::String::length}{core::int};
+  let final core::String #t3 = s in #t3 == null ?{core::String} null : block {
+    #t3.{core::String::length}{core::int};
   } =>#t3;
-  let final core::String #t4 = s in #t4.{core::String::==}(null) ?{core::String} "foo" : #t4;
-  s.{core::String::==}(null) ?{core::String} s = "foo" : null;
+  let final core::String #t4 = s in #t4 == null ?{core::String} "foo" : #t4;
+  s == null ?{core::String} s = "foo" : null;
   block {
     final core::List<core::String> #t5 = core::_GrowableList::•<core::String>(0);
     final core::Iterable<core::String>? #t6 = l;
-    if(!#t6.{core::Object::==}(null))
-      #t5.{core::List::addAll}{Invariant}(#t6{core::Iterable<core::String>});
+    if(!(#t6 == null))
+      #t5.{core::List::addAll}(#t6{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
   } =>#t5;
   core::Set<core::String> a = block {
     final core::Set<core::String> #t7 = new col::_CompactLinkedHashSet::•<core::String>();
     final core::Iterable<dynamic>? #t8 = l;
-    if(!#t8.{core::Object::==}(null)) {
+    if(!(#t8 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t8{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t9 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::String #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::String;
-          #t7.{core::Set::add}{Invariant}(#t10);
+          #t7.{core::Set::add}(#t10){(core::String) → core::bool};
         }
       }
     }
@@ -160,45 +160,45 @@
   block {
     final core::Set<core::String> #t11 = new col::_CompactLinkedHashSet::•<core::String>();
     final core::Iterable<core::String>? #t12 = l;
-    if(!#t12.{core::Object::==}(null))
-      #t11.{core::Set::addAll}{Invariant}(#t12{core::Iterable<core::String>});
+    if(!(#t12 == null))
+      #t11.{core::Set::addAll}(#t12{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
   } =>#t11;
   core::Map<core::String, core::int> b = block {
     final core::Map<core::String, core::int> #t13 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t14 = m;
-    if(!#t14.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = #t14{core::Map<core::String, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t14 == null)) {
+      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = #t14{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String, core::int> #t15 = :sync-for-iterator.{core::Iterator::current};
-        #t13.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
+        #t13.{core::Map::[]=}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
       }
     }
   } =>#t13;
   block {
     final core::Map<core::String, core::int> #t16 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t17 = m;
-    if(!#t17.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = #t17{core::Map<core::String, core::int>}.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t17 == null)) {
+      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = #t17{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String, core::int> #t18 = :sync-for-iterator.{core::Iterator::current};
-        #t16.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
+        #t16.{core::Map::[]=}(#t18.{core::MapEntry::key}{core::String}, #t18.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
       }
     }
   } =>#t16;
   s!;
-  let final core::String #t19 = s in #t19.{core::String::==}(null) ?{core::String?} null : #t19.{core::String::substring}(0, 0);
-  let final core::List<core::String> #t20 = l in #t20.{core::List::==}(null) ?{core::int?} null : #t20.{core::List::length} = 42;
-  let final core::List<core::String> #t21 = l in #t21.{core::List::==}(null) ?{core::int?} null : #t21.{core::List::length} = #t21.{core::List::length}.{core::num::+}(42);
-  let final core::List<core::String> #t22 = l in #t22.{core::List::==}(null) ?{core::int?} null : #t22.{core::List::length}.{core::num::==}(null) ?{core::int} #t22.{core::List::length} = 42 : null;
-  let final core::String #t23 = s in #t23.{core::String::==}(null) ?{core::int?} null : self::E|get#foo(#t23);
-  let final core::String #t24 = s in let final core::int #t25 = 42 in self::E|[](#t24, #t25).{core::num::==}(null) ?{core::int} self::E|[]=(#t24, #t25, 42) : null;
-  let final core::List<core::String> #t26 = l in let final core::int #t27 = 42 in #t26.{core::List::[]}(#t27).{core::String::==}(null) ?{core::String} #t26.{core::List::[]=}(#t27, "foo") : null;
-  let final core::List<core::String> #t28 = l in #t28.{core::List::length}.{core::num::==}(null) ?{core::int} #t28.{core::List::length} = 42 : null;
-  let final core::List<core::String> #t29 = l in #t29.{core::List::==}(null) ?{core::List<core::String>} null : block {
+  let final core::String #t19 = s in #t19 == null ?{core::String?} null : #t19.{core::String::substring}(0, 0){(core::int, [core::int?]) → core::String};
+  let final core::List<core::String> #t20 = l in #t20 == null ?{core::int?} null : #t20.{core::List::length} = 42;
+  let final core::List<core::String> #t21 = l in #t21 == null ?{core::int?} null : #t21.{core::List::length} = #t21.{core::List::length}{core::int}.{core::num::+}(42){(core::num) → core::int};
+  let final core::List<core::String> #t22 = l in #t22 == null ?{core::int?} null : #t22.{core::List::length}{core::int} == null ?{core::int} #t22.{core::List::length} = 42 : null;
+  let final core::String #t23 = s in #t23 == null ?{core::int?} null : self::E|get#foo(#t23);
+  let final core::String #t24 = s in let final core::int #t25 = 42 in self::E|[](#t24, #t25) == null ?{core::int} self::E|[]=(#t24, #t25, 42) : null;
+  let final core::List<core::String> #t26 = l in let final core::int #t27 = 42 in #t26.{core::List::[]}(#t27){(core::int) → core::String} == null ?{core::String} #t26.{core::List::[]=}(#t27, "foo"){(core::int, core::String) → void} : null;
+  let final core::List<core::String> #t28 = l in #t28.{core::List::length}{core::int} == null ?{core::int} #t28.{core::List::length} = 42 : null;
+  let final core::List<core::String> #t29 = l in #t29 == null ?{core::List<core::String>} null : block {
     #t29.{core::List::length} = 42;
   } =>#t29;
-  let final core::List<core::String> #t30 = l in #t30.{core::List::==}(null) ?{core::List<core::String>} null : block {
-    let final core::List<core::String> #t31 = #t30 in #t31.{core::List::length}.{core::num::==}(null) ?{core::int} #t31.{core::List::length} = 42 : null;
+  let final core::List<core::String> #t30 = l in #t30 == null ?{core::List<core::String>} null : block {
+    let final core::List<core::String> #t31 = #t30 in #t31.{core::List::length}{core::int} == null ?{core::int} #t31.{core::List::length} = 42 : null;
   } =>#t30;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
index 389af44..7ad41a1 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
@@ -19,7 +19,7 @@
     : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::Enum::_name};
+    return this.{self::Enum::_name}{core::String};
 }
 static method method1(self::Enum? e) → core::int {
   switch(e) {
@@ -95,7 +95,7 @@
   self::expect(1, self::method4(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Expected ${expected}, actual ${actual}.";
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
index 389af44..7ad41a1 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
     : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::Enum::_name};
+    return this.{self::Enum::_name}{core::String};
 }
 static method method1(self::Enum? e) → core::int {
   switch(e) {
@@ -95,7 +95,7 @@
   self::expect(1, self::method4(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Expected ${expected}, actual ${actual}.";
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
index 2dcf81c..61fa678 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
@@ -20,7 +20,7 @@
     : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::Enum::_name};
+    return this.{self::Enum::_name}{core::String};
 }
 static method method1(self::Enum? e) → core::int {
   switch(e) {
@@ -99,7 +99,7 @@
   self::expect(1, self::method4(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Expected ${expected}, actual ${actual}.";
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.outline.expect
index 5e2d3c5..d3643d7 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::Enum::_name};
+    return this.{self::Enum::_name}{core::String};
 }
 static method method1(self::Enum? e) → core::int
   ;
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
index 2dcf81c..61fa678 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
     : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::Enum::_name};
+    return this.{self::Enum::_name}{core::String};
 }
 static method method1(self::Enum? e) → core::int {
   switch(e) {
@@ -99,7 +99,7 @@
   self::expect(1, self::method4(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Expected ${expected}, actual ${actual}.";
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.strong.expect b/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.strong.expect
index d0e258c..530beda 100644
--- a/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.strong.expect
@@ -18,7 +18,7 @@
       #L1:
       case #C1:
         {
-          this.{self::A::neverReturn}();
+          this.{self::A::neverReturn}(){() → Never};
         }
       #L2:
       default:
diff --git a/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.strong.transformed.expect
index d0e258c..530beda 100644
--- a/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.strong.transformed.expect
@@ -18,7 +18,7 @@
       #L1:
       case #C1:
         {
-          this.{self::A::neverReturn}();
+          this.{self::A::neverReturn}(){() → Never};
         }
       #L2:
       default:
diff --git a/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.weak.expect b/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.weak.expect
index d5183ef..e074f2a 100644
--- a/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.weak.expect
@@ -19,7 +19,7 @@
       #L1:
       case #C1:
         {
-          let final Never #t1 = this.{self::A::neverReturn}() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+          let final Never #t1 = this.{self::A::neverReturn}(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
         }
       #L2:
       default:
diff --git a/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.weak.transformed.expect
index d5183ef..e074f2a 100644
--- a/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
       #L1:
       case #C1:
         {
-          let final Never #t1 = this.{self::A::neverReturn}() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+          let final Never #t1 = this.{self::A::neverReturn}(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
         }
       #L2:
       default:
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect
index 200bf55..09c6491 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect
@@ -81,8 +81,8 @@
                           ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C>(self::C c, self::bar::T t) → dynamic {
-  self::functionContext(let final self::C #t9 = c in #t9.==(null) ?{() → core::int} null : #t9.{self::C::call});
-  self::nullableFunctionContext(let final self::C #t10 = c in #t10.==(null) ?{() → core::int} null : #t10.{self::C::call});
+  self::functionContext(let final self::C #t9 = c in #t9 == null ?{() → core::int} null : #t9.{self::C::call});
+  self::nullableFunctionContext(let final self::C #t10 = c in #t10 == null ?{() → core::int} null : #t10.{self::C::call});
   self::functionContext(let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect
index ea7c975..09857e0 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect
@@ -81,8 +81,8 @@
                           ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C>(self::C c, self::bar::T t) → dynamic {
-  self::functionContext(let final self::C #t10 = c in #t10.==(null) ?{() → core::int} null : #t10.{self::C::call});
-  self::nullableFunctionContext(let final self::C #t11 = c in #t11.==(null) ?{() → core::int} null : #t11.{self::C::call});
+  self::functionContext(let final self::C #t10 = c in #t10 == null ?{() → core::int} null : #t10.{self::C::call});
+  self::nullableFunctionContext(let final self::C #t11 = c in #t11 == null ?{() → core::int} null : #t11.{self::C::call});
   self::functionContext(let final Never #t12 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
index 200bf55..09c6491 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
@@ -81,8 +81,8 @@
                           ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C>(self::C c, self::bar::T t) → dynamic {
-  self::functionContext(let final self::C #t9 = c in #t9.==(null) ?{() → core::int} null : #t9.{self::C::call});
-  self::nullableFunctionContext(let final self::C #t10 = c in #t10.==(null) ?{() → core::int} null : #t10.{self::C::call});
+  self::functionContext(let final self::C #t9 = c in #t9 == null ?{() → core::int} null : #t9.{self::C::call});
+  self::nullableFunctionContext(let final self::C #t10 = c in #t10 == null ?{() → core::int} null : #t10.{self::C::call});
   self::functionContext(let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
index 651b955..9249659 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
@@ -81,8 +81,8 @@
                           ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C>(self::C c, self::bar::T t) → dynamic {
-  self::functionContext(let final self::C #t9 = c in #t9.==(null) ?{() → core::int} null : #t9.{self::C::call});
-  self::nullableFunctionContext(let final self::C #t10 = c in #t10.==(null) ?{() → core::int} null : #t10.{self::C::call});
+  self::functionContext(let final self::C #t9 = c in #t9 == null ?{() → core::int} null : #t9.{self::C::call});
+  self::nullableFunctionContext(let final self::C #t10 = c in #t10 == null ?{() → core::int} null : #t10.{self::C::call});
   self::functionContext(let final Never #t11 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
diff --git a/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.strong.expect b/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.strong.expect
index 15fcd35..8aa9644 100644
--- a/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.strong.expect
@@ -9,9 +9,9 @@
     : super core::Object::•()
     ;
   method qux() → dynamic {
-    final self::Foo::T? v = this.{self::Foo::bar} as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo::T?;
+    final self::Foo::T? v = this.{self::Foo::bar}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo::T?;
     if(v is{ForNonNullableByDefault} core::num) {
-      this.{self::Foo::baz}.[]=("value", v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::isFinite} ?{core::Object} v{self::Foo::T? & core::num /* '?' & '!' = '!' */} : v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::toString}());
+      this.{self::Foo::baz}{dynamic}{dynamic}.[]=("value", v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::isFinite}{core::bool} ?{core::Object} v{self::Foo::T? & core::num /* '?' & '!' = '!' */} : v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::toString}(){() → core::String});
     }
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.strong.transformed.expect
index 15fcd35..8aa9644 100644
--- a/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.strong.transformed.expect
@@ -9,9 +9,9 @@
     : super core::Object::•()
     ;
   method qux() → dynamic {
-    final self::Foo::T? v = this.{self::Foo::bar} as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo::T?;
+    final self::Foo::T? v = this.{self::Foo::bar}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo::T?;
     if(v is{ForNonNullableByDefault} core::num) {
-      this.{self::Foo::baz}.[]=("value", v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::isFinite} ?{core::Object} v{self::Foo::T? & core::num /* '?' & '!' = '!' */} : v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::toString}());
+      this.{self::Foo::baz}{dynamic}{dynamic}.[]=("value", v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::isFinite}{core::bool} ?{core::Object} v{self::Foo::T? & core::num /* '?' & '!' = '!' */} : v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::toString}(){() → core::String});
     }
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.weak.expect b/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.weak.expect
index 15fcd35..8aa9644 100644
--- a/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.weak.expect
@@ -9,9 +9,9 @@
     : super core::Object::•()
     ;
   method qux() → dynamic {
-    final self::Foo::T? v = this.{self::Foo::bar} as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo::T?;
+    final self::Foo::T? v = this.{self::Foo::bar}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo::T?;
     if(v is{ForNonNullableByDefault} core::num) {
-      this.{self::Foo::baz}.[]=("value", v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::isFinite} ?{core::Object} v{self::Foo::T? & core::num /* '?' & '!' = '!' */} : v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::toString}());
+      this.{self::Foo::baz}{dynamic}{dynamic}.[]=("value", v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::isFinite}{core::bool} ?{core::Object} v{self::Foo::T? & core::num /* '?' & '!' = '!' */} : v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::toString}(){() → core::String});
     }
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.weak.transformed.expect
index 15fcd35..8aa9644 100644
--- a/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.weak.transformed.expect
@@ -9,9 +9,9 @@
     : super core::Object::•()
     ;
   method qux() → dynamic {
-    final self::Foo::T? v = this.{self::Foo::bar} as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo::T?;
+    final self::Foo::T? v = this.{self::Foo::bar}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo::T?;
     if(v is{ForNonNullableByDefault} core::num) {
-      this.{self::Foo::baz}.[]=("value", v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::isFinite} ?{core::Object} v{self::Foo::T? & core::num /* '?' & '!' = '!' */} : v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::toString}());
+      this.{self::Foo::baz}{dynamic}{dynamic}.[]=("value", v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::isFinite}{core::bool} ?{core::Object} v{self::Foo::T? & core::num /* '?' & '!' = '!' */} : v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::toString}(){() → core::String});
     }
   }
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/bounds_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/bounds_from_opt_in.dart.weak.expect
index 847ce35..b07ab07 100644
--- a/pkg/front_end/testcases/nnbd_mixed/bounds_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/bounds_from_opt_in.dart.weak.expect
@@ -23,7 +23,7 @@
 }
 static method test() → dynamic {
   bou::Class<Null>* c = new bou::Class::•<Null>();
-  c.{bou::Class::method}<Null>();
+  c.{bou::Class::method}<Null>(){() →* dynamic};
   bou::method<Null>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/bounds_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/bounds_from_opt_in.dart.weak.transformed.expect
index 847ce35..b07ab07 100644
--- a/pkg/front_end/testcases/nnbd_mixed/bounds_from_opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/bounds_from_opt_in.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
 }
 static method test() → dynamic {
   bou::Class<Null>* c = new bou::Class::•<Null>();
-  c.{bou::Class::method}<Null>();
+  c.{bou::Class::method}<Null>(){() →* dynamic};
   bou::method<Null>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.expect
index a49b865..92077f0 100644
--- a/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.expect
@@ -13,11 +13,11 @@
 class Check extends core::Object /*hasConstConstructor*/  {
   final field dynamic _ignored;
   const constructor •(dynamic x, dynamic y) → self::Check
-    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0), super core::Object::•()
+    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0){(core::num) → core::int}, super core::Object::•()
     ;
 }
 static method expectEqual(dynamic x, dynamic y) → void {
-  if(!x.{core::Object::==}(y)) {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
     throw "Arguments were supposed to be identical.";
   }
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.outline.expect
index 30aff56..9f97092 100644
--- a/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.outline.expect
@@ -13,7 +13,7 @@
 class Check extends core::Object /*hasConstConstructor*/  {
   final field dynamic _ignored;
   const constructor •(dynamic x, dynamic y) → self::Check
-    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0), super core::Object::•()
+    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0){(core::num) → core::int}, super core::Object::•()
     ;
 }
 static method expectEqual(dynamic x, dynamic y) → void
diff --git a/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.transformed.expect
index a49b865..92077f0 100644
--- a/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.transformed.expect
@@ -13,11 +13,11 @@
 class Check extends core::Object /*hasConstConstructor*/  {
   final field dynamic _ignored;
   const constructor •(dynamic x, dynamic y) → self::Check
-    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0), super core::Object::•()
+    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0){(core::num) → core::int}, super core::Object::•()
     ;
 }
 static method expectEqual(dynamic x, dynamic y) → void {
-  if(!x.{core::Object::==}(y)) {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
     throw "Arguments were supposed to be identical.";
   }
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/const_is.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/const_is.dart.weak.expect
index 90ee935..ce1ca58 100644
--- a/pkg/front_end/testcases/nnbd_mixed/const_is.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/const_is.dart.weak.expect
@@ -11,7 +11,7 @@
   self::expect(true, #C2);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/const_is.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/const_is.dart.weak.transformed.expect
index d198bb9..806f867 100644
--- a/pkg/front_end/testcases/nnbd_mixed/const_is.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/const_is.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
   self::expect(true, #C2);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/constant_null_is.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/constant_null_is.dart.weak.expect
index cd7b899..f32fd42 100644
--- a/pkg/front_end/testcases/nnbd_mixed/constant_null_is.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/constant_null_is.dart.weak.expect
@@ -61,25 +61,25 @@
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never>, #C3, "null is FutureOr<Never>");
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never?>, #C2, "null is FutureOr<Never?>");
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never>?, #C2, "null is FutureOr<Never>?");
-  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor1(null).field");
-  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor1(null).field");
-  self::expect(self::isWeakMode, (#C5).{self::Class::field}, "const Class<List<int>>.constructor1(<Null>[null]).field");
-  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor1(null).field");
-  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor2(null).field");
-  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor2(null).field");
-  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}, (#C8).{self::Class::field}, "Class<int?>.constructor2(null).field");
-  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor2(null).field");
-  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C9).{self::Class::field}, "Class<int?>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C9).{self::Class::field}, "Class<int?>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}, (#C10).{self::Class::field}, "Class<Null>.constructor3(null).field");
-  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor4(null).field");
-  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}, (#C8).{self::Class::field}, "Class<int?>.constructor4(null).field");
-  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor4(null).field");
+  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}{core::bool}, (#C4).{self::Class::field}{core::bool}, "Class<int>.constructor1(null).field");
+  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor1(null).field");
+  self::expect(self::isWeakMode, (#C5).{self::Class::field}{core::bool}, "const Class<List<int>>.constructor1(<Null>[null]).field");
+  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor1(null).field");
+  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}{core::bool}, (#C7).{self::Class::field}{core::bool}, "Class<int>.constructor2(null).field");
+  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, (#C8).{self::Class::field}{core::bool}, "Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor2(null).field");
+  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}{core::bool}, (#C4).{self::Class::field}{core::bool}, "Class<int>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, (#C9).{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, (#C9).{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}{core::bool}, (#C10).{self::Class::field}{core::bool}, "Class<Null>.constructor3(null).field");
+  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}{core::bool}, (#C7).{self::Class::field}{core::bool}, "Class<int>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}{core::bool}, (#C8).{self::Class::field}{core::bool}, "Class<int?>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor4(null).field");
   con::test();
 }
 static method expect(dynamic expected, dynamic actual, core::String message) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual} for ${message}";
 }
 
@@ -104,14 +104,14 @@
 static method test() → dynamic {
   self::expect(null is core::int*, #C3, "null is int (opt-out)");
   self::expect(null is Null, #C2, "null is Null");
-  self::expect(new self::Class::constructor1<core::int*>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor1(null).field (opt-out)");
-  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor1(null).field (opt-out)");
-  self::expect(new self::Class::constructor2<core::int*>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor2(null).field (opt-out)");
-  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor2(null).field (opt-out)");
-  self::expect(new self::Class::constructor3<core::int*>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor3(null).field (opt-out)");
-  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}, (#C10).{self::Class::field}, "Class<Null>.constructor3(null).field (opt-out)");
-  self::expect(new self::Class::constructor4<core::int*>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor4(null).field (opt-out)");
-  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor4(null).field (opt-out)");
+  self::expect(new self::Class::constructor1<core::int*>(null).{self::Class::field}{core::bool*}, (#C4).{self::Class::field}{core::bool*}, "Class<int>.constructor1(null).field (opt-out)");
+  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}{core::bool*}, (#C6).{self::Class::field}{core::bool*}, "Class<Null>.constructor1(null).field (opt-out)");
+  self::expect(new self::Class::constructor2<core::int*>(null).{self::Class::field}{core::bool*}, (#C7).{self::Class::field}{core::bool*}, "Class<int>.constructor2(null).field (opt-out)");
+  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}{core::bool*}, (#C6).{self::Class::field}{core::bool*}, "Class<Null>.constructor2(null).field (opt-out)");
+  self::expect(new self::Class::constructor3<core::int*>(null).{self::Class::field}{core::bool*}, (#C4).{self::Class::field}{core::bool*}, "Class<int>.constructor3(null).field (opt-out)");
+  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}{core::bool*}, (#C10).{self::Class::field}{core::bool*}, "Class<Null>.constructor3(null).field (opt-out)");
+  self::expect(new self::Class::constructor4<core::int*>(null).{self::Class::field}{core::bool*}, (#C7).{self::Class::field}{core::bool*}, "Class<int>.constructor4(null).field (opt-out)");
+  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}{core::bool*}, (#C6).{self::Class::field}{core::bool*}, "Class<Null>.constructor4(null).field (opt-out)");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd_mixed/constant_null_is.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/constant_null_is.dart.weak.transformed.expect
index edf4aad..cb3fea5 100644
--- a/pkg/front_end/testcases/nnbd_mixed/constant_null_is.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/constant_null_is.dart.weak.transformed.expect
@@ -61,25 +61,25 @@
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never>, #C3, "null is FutureOr<Never>");
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never?>, #C2, "null is FutureOr<Never?>");
   self::expect(null is{ForNonNullableByDefault} FutureOr<Never>?, #C2, "null is FutureOr<Never>?");
-  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor1(null).field");
-  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor1(null).field");
-  self::expect(self::isWeakMode, (#C5).{self::Class::field}, "const Class<List<int>>.constructor1(<Null>[null]).field");
-  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor1(null).field");
-  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor2(null).field");
-  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor2(null).field");
-  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}, (#C8).{self::Class::field}, "Class<int?>.constructor2(null).field");
-  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor2(null).field");
-  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C9).{self::Class::field}, "Class<int?>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C9).{self::Class::field}, "Class<int?>.constructor3(null).field");
-  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}, (#C10).{self::Class::field}, "Class<Null>.constructor3(null).field");
-  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor4(null).field");
-  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}, (#C8).{self::Class::field}, "Class<int?>.constructor4(null).field");
-  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor4(null).field");
+  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}{core::bool}, (#C4).{self::Class::field}{core::bool}, "Class<int>.constructor1(null).field");
+  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor1(null).field");
+  self::expect(self::isWeakMode, (#C5).{self::Class::field}{core::bool}, "const Class<List<int>>.constructor1(<Null>[null]).field");
+  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor1(null).field");
+  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}{core::bool}, (#C7).{self::Class::field}{core::bool}, "Class<int>.constructor2(null).field");
+  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, (#C8).{self::Class::field}{core::bool}, "Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor2(null).field");
+  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}{core::bool}, (#C4).{self::Class::field}{core::bool}, "Class<int>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, (#C9).{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, (#C9).{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}{core::bool}, (#C10).{self::Class::field}{core::bool}, "Class<Null>.constructor3(null).field");
+  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}{core::bool}, (#C7).{self::Class::field}{core::bool}, "Class<int>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}{core::bool}, (#C8).{self::Class::field}{core::bool}, "Class<int?>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}{core::bool}, (#C6).{self::Class::field}{core::bool}, "Class<Null>.constructor4(null).field");
   con::test();
 }
 static method expect(dynamic expected, dynamic actual, core::String message) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual} for ${message}";
 }
 
@@ -104,14 +104,14 @@
 static method test() → dynamic {
   self::expect(null is core::int*, #C3, "null is int (opt-out)");
   self::expect(null is Null, #C2, "null is Null");
-  self::expect(new self::Class::constructor1<core::int*>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor1(null).field (opt-out)");
-  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor1(null).field (opt-out)");
-  self::expect(new self::Class::constructor2<core::int*>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor2(null).field (opt-out)");
-  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor2(null).field (opt-out)");
-  self::expect(new self::Class::constructor3<core::int*>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor3(null).field (opt-out)");
-  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}, (#C10).{self::Class::field}, "Class<Null>.constructor3(null).field (opt-out)");
-  self::expect(new self::Class::constructor4<core::int*>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<int>.constructor4(null).field (opt-out)");
-  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<Null>.constructor4(null).field (opt-out)");
+  self::expect(new self::Class::constructor1<core::int*>(null).{self::Class::field}{core::bool*}, (#C4).{self::Class::field}{core::bool*}, "Class<int>.constructor1(null).field (opt-out)");
+  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}{core::bool*}, (#C6).{self::Class::field}{core::bool*}, "Class<Null>.constructor1(null).field (opt-out)");
+  self::expect(new self::Class::constructor2<core::int*>(null).{self::Class::field}{core::bool*}, (#C7).{self::Class::field}{core::bool*}, "Class<int>.constructor2(null).field (opt-out)");
+  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}{core::bool*}, (#C6).{self::Class::field}{core::bool*}, "Class<Null>.constructor2(null).field (opt-out)");
+  self::expect(new self::Class::constructor3<core::int*>(null).{self::Class::field}{core::bool*}, (#C4).{self::Class::field}{core::bool*}, "Class<int>.constructor3(null).field (opt-out)");
+  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}{core::bool*}, (#C10).{self::Class::field}{core::bool*}, "Class<Null>.constructor3(null).field (opt-out)");
+  self::expect(new self::Class::constructor4<core::int*>(null).{self::Class::field}{core::bool*}, (#C7).{self::Class::field}{core::bool*}, "Class<int>.constructor4(null).field (opt-out)");
+  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}{core::bool*}, (#C6).{self::Class::field}{core::bool*}, "Class<Null>.constructor4(null).field (opt-out)");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.outline.expect
index 8f7c607..9f91d26 100644
--- a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.outline.expect
@@ -78,7 +78,7 @@
 Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:23:5 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:25:5 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:27:5 -> BoolConstant(true)
-Evaluated: StaticGet @ org-dartlang-testcase:///constants_lib.dart:18:12 -> TearOffConstant(identical)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///constants_lib.dart:18:12 -> TearOffConstant(identical)
 Evaluated: Instantiation @ org-dartlang-testcase:///constants_lib.dart:19:48 -> PartialInstantiationConstant(id<int*>)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constants_lib.dart:20:24 -> InstanceConstant(const Class<int*>{Class.field: 0})
 Evaluated: ListLiteral @ org-dartlang-testcase:///constants_lib.dart:21:26 -> ListConstant(const <int*>[0])
diff --git a/pkg/front_end/testcases/nnbd_mixed/error_on_recompile_with_no_change/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/error_on_recompile_with_no_change/main.dart.weak.expect
index d58f5ba..ccc539a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/error_on_recompile_with_no_change/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/error_on_recompile_with_no_change/main.dart.weak.expect
@@ -14,7 +14,7 @@
   get renderObject() → mai::Adaptor*
     return super.{obj::RenderObject::renderObject} as{TypeError} mai::Adaptor*;
   method foo() → void {
-    core::print(this.{self::AdaptorElement::renderObject}.{mai::_Adaptor&RenderFoo&LibMixin::constraints}.{obj::FooConstraints::axis});
+    core::print(this.{self::AdaptorElement::renderObject}{mai::Adaptor*}.{mai::_Adaptor&RenderFoo&LibMixin::constraints}{obj::FooConstraints*}.{obj::FooConstraints::axis}{core::String*});
   }
   abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/nnbd_mixed/error_on_recompile_with_no_change/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/error_on_recompile_with_no_change/main.dart.weak.transformed.expect
index 1a886bf..be64d1c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/error_on_recompile_with_no_change/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/error_on_recompile_with_no_change/main.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
   get renderObject() → mai::Adaptor*
     return super.{obj::RenderObject::renderObject} as{TypeError} mai::Adaptor*;
   method foo() → void {
-    core::print(this.{self::AdaptorElement::renderObject}.{mai::_Adaptor&RenderFoo&LibMixin::constraints}.{obj::FooConstraints::axis});
+    core::print(this.{self::AdaptorElement::renderObject}{mai::Adaptor*}.{mai::_Adaptor&RenderFoo&LibMixin::constraints}{obj::FooConstraints*}.{obj::FooConstraints::axis}{core::String*});
   }
   abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect
index 0f16923..e60d718 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect
@@ -41,13 +41,13 @@
     : super self::Class::•()
     ;
   method test() → void {
-    this.{self::Class::extendedConcreteMixedInAbstractMethod}();
+    this.{self::Class::extendedConcreteMixedInAbstractMethod}(){() → void};
     super.{self::Super::extendedConcreteMixedInAbstractMethod}();
-    this.{self::Class::extendedConcreteMixedInConcreteMethod}();
+    this.{self::Class::extendedConcreteMixedInConcreteMethod}(){() → void};
     super.{self::Class::extendedConcreteMixedInConcreteMethod}();
-    this.{self::Class::extendedConcreteMixedInAbstractImplementedMethod}(0);
+    this.{self::Class::extendedConcreteMixedInAbstractImplementedMethod}(0){(core::int) → void};
     super.{self::Class::extendedConcreteMixedInAbstractImplementedMethod}(0);
-    this.{self::Class::extendedConcreteMixedInConcreteImplementedMethod}(0);
+    this.{self::Class::extendedConcreteMixedInConcreteImplementedMethod}(0){(core::int) → void};
     super.{self::Class::extendedConcreteMixedInConcreteImplementedMethod}(0);
   }
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect
index 8f44020..5af8040 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect
@@ -38,13 +38,13 @@
     : super self::Class::•()
     ;
   method test() → void {
-    this.{self::Class::extendedConcreteMixedInAbstractMethod}();
+    this.{self::Class::extendedConcreteMixedInAbstractMethod}(){() → void};
     super.{self::Super::extendedConcreteMixedInAbstractMethod}();
-    this.{self::Class::extendedConcreteMixedInConcreteMethod}();
+    this.{self::Class::extendedConcreteMixedInConcreteMethod}(){() → void};
     super.{self::Class::extendedConcreteMixedInConcreteMethod}();
-    this.{self::Class::extendedConcreteMixedInAbstractImplementedMethod}(0);
+    this.{self::Class::extendedConcreteMixedInAbstractImplementedMethod}(0){(core::int) → void};
     super.{self::Class::extendedConcreteMixedInAbstractImplementedMethod}(0);
-    this.{self::Class::extendedConcreteMixedInConcreteImplementedMethod}(0);
+    this.{self::Class::extendedConcreteMixedInConcreteImplementedMethod}(0){(core::int) → void};
     super.{self::Class::extendedConcreteMixedInConcreteImplementedMethod}(0);
   }
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect
index f82e223..d78b587 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect
@@ -106,15 +106,15 @@
     ;
   method test() → dynamic {
     core::int i;
-    core::int? v1 = this.{self::Class::nullabilityMethod}(null);
+    core::int? v1 = this.{self::Class::nullabilityMethod}(null){(core::int?, {j: core::int?}) → core::int?};
     i = super.{in_2::Super::nullabilityMethod}(null);
-    i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null);
+    i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_2::Super::optionalArgumentsMethod}(null);
     let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
-    core::int? v2 = this.{self::Class::nullabilityGetter};
+    core::int? v2 = this.{self::Class::nullabilityGetter}{core::int?};
     i = super.{in_2::Super::nullabilityGetter};
     this.{self::Class::nullabilitySetter} = null;
     super.{in_2::Super::nullabilitySetter} = null;
@@ -138,15 +138,15 @@
     ;
   method test() → dynamic {
     core::int i;
-    this.{in_::LegacyClassQ::nullabilityMethod}(null);
+    this.{in_::LegacyClassQ::nullabilityMethod}(null){(core::int*, {j: core::int*}) →* core::int*};
     i = super.{in_2::SuperQ::nullabilityMethod}(null);
-    i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null);
+    i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
     let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
-    i = this.{self::ClassQ::nullabilityGetter};
+    i = this.{self::ClassQ::nullabilityGetter}{core::int};
     i = super.{in_2::SuperQ::nullabilityGetter};
     this.{self::ClassQ::nullabilitySetter} = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
     nullabilitySetter = null; // error
@@ -173,15 +173,15 @@
     core::int i;
     invalid-type v1 = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:63:31: Error: Required named parameter 'j' must be provided.
     var v1 = nullabilityMethod(null); // ok
-                              ^" in this.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
+                              ^" in this.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}{<inapplicable>}.(null){(invalid-type) → invalid-type};
     i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
-    i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null);
+    i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
     let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
-    core::int v2 = this.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
+    core::int v2 = this.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter}{core::int};
     i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
     this.{self::ClassMixedIn::nullabilitySetter} = null;
     super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = null;
@@ -203,15 +203,15 @@
     ;
   method test() → dynamic {
     core::int i;
-    this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
+    this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null){(core::int?, {j: core::int?}) →* core::int?};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
-    i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null);
+    i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
     let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
-    i = this.{self::ClassMixedInQ::nullabilityGetter};
+    i = this.{self::ClassMixedInQ::nullabilityGetter}{core::int};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
     this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
     super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect
index ede2515..a532ea2 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect
@@ -84,15 +84,15 @@
     ;
   method test() → dynamic {
     core::int i;
-    core::int? v1 = this.{self::Class::nullabilityMethod}(null);
+    core::int? v1 = this.{self::Class::nullabilityMethod}(null){(core::int?, {j: core::int?}) → core::int?};
     i = super.{in_2::Super::nullabilityMethod}(null);
-    i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null);
+    i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_2::Super::optionalArgumentsMethod}(null);
     let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
-    core::int? v2 = this.{self::Class::nullabilityGetter};
+    core::int? v2 = this.{self::Class::nullabilityGetter}{core::int?};
     i = super.{in_2::Super::nullabilityGetter};
     this.{self::Class::nullabilitySetter} = null;
     super.{in_2::Super::nullabilitySetter} = null;
@@ -116,15 +116,15 @@
     ;
   method test() → dynamic {
     core::int i;
-    this.{in_::LegacyClassQ::nullabilityMethod}(null);
+    this.{in_::LegacyClassQ::nullabilityMethod}(null){(core::int*, {j: core::int*}) →* core::int*};
     i = super.{in_2::SuperQ::nullabilityMethod}(null);
-    i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null);
+    i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
     let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
-    i = this.{self::ClassQ::nullabilityGetter};
+    i = this.{self::ClassQ::nullabilityGetter}{core::int};
     i = super.{in_2::SuperQ::nullabilityGetter};
     this.{self::ClassQ::nullabilitySetter} = let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
     nullabilitySetter = null; // error
@@ -149,15 +149,15 @@
     ;
   method test() → dynamic {
     core::int i;
-    core::int? v1 = this.{self::ClassMixedIn::nullabilityMethod}(null);
+    core::int? v1 = this.{self::ClassMixedIn::nullabilityMethod}(null){(core::int?, {j: core::int?}) → core::int?};
     i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
-    i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null);
+    i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
     let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
-    core::int? v2 = this.{self::ClassMixedIn::nullabilityGetter};
+    core::int? v2 = this.{self::ClassMixedIn::nullabilityGetter}{core::int?};
     i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
     this.{self::ClassMixedIn::nullabilitySetter} = null;
     super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = null;
@@ -181,15 +181,15 @@
     ;
   method test() → dynamic {
     core::int i;
-    this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
+    this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null){(core::int*, {j: core::int*}) →* core::int*};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
-    i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null);
+    i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
     let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
-    i = this.{self::ClassMixedInQ::nullabilityGetter};
+    i = this.{self::ClassMixedInQ::nullabilityGetter}{core::int};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
     this.{self::ClassMixedInQ::nullabilitySetter} = let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
     nullabilitySetter = null; // error
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect
index 9fdbb48..3e98cba 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect
@@ -92,15 +92,15 @@
     ;
   method test() → dynamic {
     core::int i;
-    core::int? v1 = this.{self::Class::nullabilityMethod}(null);
+    core::int? v1 = this.{self::Class::nullabilityMethod}(null){(core::int?) → core::int?};
     i = super.{in_2::Super::nullabilityMethod}(null);
-    i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null);
+    i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_2::Super::optionalArgumentsMethod}(null);
     let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
-    core::int? v2 = this.{self::Class::nullabilityGetter};
+    core::int? v2 = this.{self::Class::nullabilityGetter}{core::int?};
     i = super.{in_2::Super::nullabilityGetter};
     this.{self::Class::nullabilitySetter} = null;
     super.{in_2::Super::nullabilitySetter} = null;
@@ -126,15 +126,15 @@
     core::int i;
     this.{self::ClassQ::nullabilityMethod}(let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:38:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
     nullabilityMethod(null); // error
-                      ^" in null as{TypeError,ForNonNullableByDefault} core::int);
+                      ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
     i = super.{in_2::SuperQ::nullabilityMethod}(null);
-    i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null);
+    i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
     let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
-    i = this.{self::ClassQ::nullabilityGetter};
+    i = this.{self::ClassQ::nullabilityGetter}{core::int};
     i = super.{in_2::SuperQ::nullabilityGetter};
     this.{self::ClassQ::nullabilitySetter} = let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
     nullabilitySetter = null; // error
@@ -160,15 +160,15 @@
     ;
   method test() → dynamic {
     core::int i;
-    core::int? v1 = this.{self::ClassMixedIn::nullabilityMethod}(null);
+    core::int? v1 = this.{self::ClassMixedIn::nullabilityMethod}(null){(core::int?) → core::int?};
     i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
-    i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null);
+    i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
     let final Never #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
-    core::int? v2 = this.{self::ClassMixedIn::nullabilityGetter};
+    core::int? v2 = this.{self::ClassMixedIn::nullabilityGetter}{core::int?};
     i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
     this.{self::ClassMixedIn::nullabilitySetter} = null;
     super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = null;
@@ -194,15 +194,15 @@
     core::int i;
     this.{self::ClassMixedInQ::nullabilityMethod}(let final Never #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:88:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
     nullabilityMethod(null); // error
-                      ^" in null as{TypeError,ForNonNullableByDefault} core::int);
+                      ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
-    i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null);
+    i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
     let final Never #t7 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
 Try removing the extra positional arguments.
     super.optionalArgumentsMethod(null, null); // error
                                  ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
-    i = this.{self::ClassMixedInQ::nullabilityGetter};
+    i = this.{self::ClassMixedInQ::nullabilityGetter}{core::int};
     i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
     this.{self::ClassMixedInQ::nullabilitySetter} = let final Never #t8 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
     nullabilitySetter = null; // error
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect
index 4124088..1604316 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect
@@ -204,9 +204,9 @@
     return super.{core::Object::noSuchMethod}(invocation);
   }
   no-such-method-forwarder method mixedInMethod() → core::int
-    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method extendedMethod() → core::int
-    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 abstract class _ClassDeclaresExtends&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_ClassDeclaresExtends&Super&Mixin
@@ -249,9 +249,9 @@
     return super.{core::Object::noSuchMethod}(invocation);
   }
   no-such-method-forwarder method extendedMethod() → core::int
-    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method mixedInMethod() → core::int
-    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.outline.expect
index 6a58520..a127912 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.outline.expect
@@ -194,9 +194,9 @@
   method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   no-such-method-forwarder method mixedInMethod() → core::int
-    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#mixedInMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#mixedInMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method extendedMethod() → core::int
-    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#extendedMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#extendedMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 abstract class _ClassDeclaresExtends&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_ClassDeclaresExtends&Super&Mixin
@@ -234,9 +234,9 @@
   method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   no-such-method-forwarder method extendedMethod() → core::int
-    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#extendedMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#extendedMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method mixedInMethod() → core::int
-    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#mixedInMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#mixedInMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect
index b0ede7c..b9dfa96 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect
@@ -204,9 +204,9 @@
     return super.{core::Object::noSuchMethod}(invocation);
   }
   no-such-method-forwarder method mixedInMethod() → core::int
-    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method extendedMethod() → core::int
-    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 abstract class _ClassDeclaresExtends&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
   synthetic constructor •() → self::_ClassDeclaresExtends&Super&Mixin
@@ -249,9 +249,9 @@
     return super.{core::Object::noSuchMethod}(invocation);
   }
   no-such-method-forwarder method extendedMethod() → core::int
-    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method mixedInMethod() → core::int
-    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.expect
index a5e1b1f..73a2b06 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.expect
@@ -61,7 +61,7 @@
 }
 static method main() → dynamic {
   self::Class1* c = new self::Class1::•();
-  c.{self::Super::getter}.{opt::B::property};
+  c.{self::Super::getter}{opt::B*}.{opt::B::property}{core::int*};
   c.{self::Super::setter} = new opt::B::•();
   opt::testInterface2(new opt3::Mixin2::•());
 }
@@ -132,7 +132,7 @@
 }
 static method testInterface2(opt::Interface2 c) → dynamic {
   try {
-    c.{opt::Interface2::_privateGetter};
+    c.{opt::Interface2::_privateGetter}{opt::A};
     throw "Expected NoSuchMethodError";
   }
   on core::NoSuchMethodError catch(no-exception-var) {
@@ -163,9 +163,9 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///opt_in_lib1.dart */ _privateGetter() → opt::A
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} opt::A;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} opt::A;
   no-such-method-forwarder set /* from org-dartlang-testcase:///opt_in_lib1.dart */ _privateSetter(opt::C c) → void
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(c)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(c)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.outline.expect
index e327d8e..1ec283b 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.outline.expect
@@ -112,9 +112,9 @@
   synthetic constructor •() → opt3::Mixin2
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///opt_in_lib1.dart */ _privateGetter() → opt::A
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} opt::A;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} opt::A;
   no-such-method-forwarder set /* from org-dartlang-testcase:///opt_in_lib1.dart */ _privateSetter(opt::C c) → void
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(c)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(c)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.transformed.expect
index 007ecd8..f9dd954 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.transformed.expect
@@ -61,7 +61,7 @@
 }
 static method main() → dynamic {
   self::Class1* c = new self::Class1::•();
-  c.{self::Super::getter}.{opt::B::property};
+  c.{self::Super::getter}{opt::B*}.{opt::B::property}{core::int*};
   c.{self::Super::setter} = new opt::B::•();
   opt::testInterface2(new opt3::Mixin2::•());
 }
@@ -132,7 +132,7 @@
 }
 static method testInterface2(opt::Interface2 c) → dynamic {
   try {
-    c.{opt::Interface2::_privateGetter};
+    c.{opt::Interface2::_privateGetter}{opt::A};
     throw "Expected NoSuchMethodError";
   }
   on core::NoSuchMethodError catch(no-exception-var) {
@@ -163,9 +163,9 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///opt_in_lib1.dart */ _privateGetter() → opt::A
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} opt::A;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} opt::A;
   no-such-method-forwarder set /* from org-dartlang-testcase:///opt_in_lib1.dart */ _privateSetter(opt::C c) → void
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(c)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(c)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect
index 0f94026..7914b57 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect
@@ -199,34 +199,34 @@
     : super self::SuperConcrete::•()
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
 }
 class FromSuperConcreteAbstract extends self::SuperConcrete implements self::SuperAbstract, self::Interface {
   synthetic constructor •() → self::FromSuperConcreteAbstract
     : super self::SuperConcrete::•()
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
 }
 class MixinAbstract extends core::Object {
   synthetic constructor •() → self::MixinAbstract
@@ -260,17 +260,17 @@
     : super self::_FromMixinConcrete&Object&MixinConcrete::•()
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
 }
 abstract class _FromMixinConcreteAbstract&Object&MixinConcrete = core::Object with self::MixinConcrete /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_FromMixinConcreteAbstract&Object&MixinConcrete
@@ -290,17 +290,17 @@
     : super self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::•()
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
 }
 class InterfaceAbstract extends core::Object {
   synthetic constructor •() → self::InterfaceAbstract
@@ -342,17 +342,17 @@
     return null;
   }
   no-such-method-forwarder get getter() → core::int
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.outline.expect
index 53a32b0..87ecfb3 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.outline.expect
@@ -184,33 +184,33 @@
   synthetic constructor •() → self::FromSuperConcrete
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#getter, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#getter, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#finalField, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#finalField, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#setter=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#setter=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
 }
 class FromSuperConcreteAbstract extends self::SuperConcrete implements self::SuperAbstract, self::Interface {
   synthetic constructor •() → self::FromSuperConcreteAbstract
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#getter, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#getter, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#finalField, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#finalField, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#setter=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#setter=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
 }
 class MixinAbstract extends core::Object {
   synthetic constructor •() → self::MixinAbstract
@@ -239,17 +239,17 @@
   synthetic constructor •() → self::FromMixinConcrete
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#getter, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#getter, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#finalField, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#finalField, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#setter=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#setter=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
 }
 abstract class _FromMixinConcreteAbstract&Object&MixinConcrete = core::Object with self::MixinConcrete /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_FromMixinConcreteAbstract&Object&MixinConcrete
@@ -268,17 +268,17 @@
   synthetic constructor •() → self::FromMixinConcreteAbstract
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#getter, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#getter, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#field, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#field, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#finalField, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#finalField, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#setter=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#setter=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#field=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#field=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
 }
 class InterfaceAbstract extends core::Object {
   synthetic constructor •() → self::InterfaceAbstract
@@ -312,17 +312,17 @@
   method noSuchMethod(core::Invocation invocation) → dynamic
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#getter, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#getter, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#finalField, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#finalField, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#setter=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#setter=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#field=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect
index 730cbf4..c4bae58 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect
@@ -199,34 +199,34 @@
     : super self::SuperConcrete::•()
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
 }
 class FromSuperConcreteAbstract extends self::SuperConcrete implements self::SuperAbstract, self::Interface {
   synthetic constructor •() → self::FromSuperConcreteAbstract
     : super self::SuperConcrete::•()
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
 }
 class MixinAbstract extends core::Object {
   synthetic constructor •() → self::MixinAbstract
@@ -262,17 +262,17 @@
     : super self::_FromMixinConcrete&Object&MixinConcrete::•()
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
 }
 abstract class _FromMixinConcreteAbstract&Object&MixinConcrete extends core::Object implements self::MixinConcrete /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_FromMixinConcreteAbstract&Object&MixinConcrete
@@ -294,17 +294,17 @@
     : super self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::•()
     ;
   no-such-method-forwarder get getter() → core::int
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
 }
 class InterfaceAbstract extends core::Object {
   synthetic constructor •() → self::InterfaceAbstract
@@ -346,17 +346,17 @@
     return null;
   }
   no-such-method-forwarder get getter() → core::int
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder get field() → core::int
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder method method() → void
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder get finalField() → core::int
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   no-such-method-forwarder set setter(core::int value) → void
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder set field(core::int value) → void
-    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in.dart.weak.expect
index c66b3a9..7698d5d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in.dart.weak.expect
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   method baz(inf::B* b) → dynamic {
-    b.{inf::B::foo}(b.{inf::B::bar}<core::List<core::int*>*>());
+    b.{inf::B::foo}(b.{inf::B::bar}<core::List<core::int*>*>(){() →* core::List<core::int*>*}){(core::List<core::int*>*) →* dynamic};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -37,83 +37,83 @@
   core::List<Null>* local1i = <Null>[null];
   core::Set<inf::C<dynamic>*>* local2a = block {
     final core::Set<inf::C<dynamic>*>* #t1 = col::LinkedHashSet::•<inf::C<dynamic>*>();
-    #t1.{core::Set::add}{Invariant}(inf::field1);
-    #t1.{core::Set::add}{Invariant}(null);
+    #t1.{core::Set::add}(inf::field1){(inf::C<dynamic>*) →* core::bool*};
+    #t1.{core::Set::add}(null){(inf::C<dynamic>*) →* core::bool*};
   } =>#t1;
   core::Set<inf::C<dynamic>*>* local2b = block {
     final core::Set<inf::C<dynamic>*>* #t2 = col::LinkedHashSet::•<inf::C<dynamic>*>();
-    #t2.{core::Set::add}{Invariant}(inf::field2);
-    #t2.{core::Set::add}{Invariant}(null);
+    #t2.{core::Set::add}(inf::field2){(inf::C<dynamic>*) →* core::bool*};
+    #t2.{core::Set::add}(null){(inf::C<dynamic>*) →* core::bool*};
   } =>#t2;
   core::Set<inf::C<core::int*>*>* local2c = block {
     final core::Set<inf::C<core::int*>*>* #t3 = col::LinkedHashSet::•<inf::C<core::int*>*>();
-    #t3.{core::Set::add}{Invariant}(inf::field3);
-    #t3.{core::Set::add}{Invariant}(null);
+    #t3.{core::Set::add}(inf::field3){(inf::C<core::int*>*) →* core::bool*};
+    #t3.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
   } =>#t3;
   core::Set<inf::C<core::int*>*>* local2d = block {
     final core::Set<inf::C<core::int*>*>* #t4 = col::LinkedHashSet::•<inf::C<core::int*>*>();
-    #t4.{core::Set::add}{Invariant}(inf::field4);
-    #t4.{core::Set::add}{Invariant}(null);
+    #t4.{core::Set::add}(inf::field4){(inf::C<core::int*>*) →* core::bool*};
+    #t4.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
   } =>#t4;
   core::Set<inf::C<core::int*>*>* local2e = block {
     final core::Set<inf::C<core::int*>*>* #t5 = col::LinkedHashSet::•<inf::C<core::int*>*>();
-    #t5.{core::Set::add}{Invariant}(inf::field5);
-    #t5.{core::Set::add}{Invariant}(null);
+    #t5.{core::Set::add}(inf::field5){(inf::C<core::int*>*) →* core::bool*};
+    #t5.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
   } =>#t5;
   core::Set<inf::C<core::int*>*>* local2f = block {
     final core::Set<inf::C<core::int*>*>* #t6 = col::LinkedHashSet::•<inf::C<core::int*>*>();
-    #t6.{core::Set::add}{Invariant}(inf::field6);
-    #t6.{core::Set::add}{Invariant}(null);
+    #t6.{core::Set::add}(inf::field6){(inf::C<core::int*>*) →* core::bool*};
+    #t6.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
   } =>#t6;
   core::Set<core::int*>* local2g = block {
     final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
-    #t7.{core::Set::add}{Invariant}(inf::field7);
-    #t7.{core::Set::add}{Invariant}(null);
+    #t7.{core::Set::add}(inf::field7){(core::int*) →* core::bool*};
+    #t7.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t7;
   core::Set<core::int*>* local2h = block {
     final core::Set<core::int*>* #t8 = col::LinkedHashSet::•<core::int*>();
-    #t8.{core::Set::add}{Invariant}(inf::field8);
-    #t8.{core::Set::add}{Invariant}(null);
+    #t8.{core::Set::add}(inf::field8){(core::int*) →* core::bool*};
+    #t8.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t8;
   core::Set<inf::C<dynamic>*>* local3a = block {
     final core::Set<inf::C<dynamic>*>* #t9 = col::LinkedHashSet::•<inf::C<dynamic>*>();
-    #t9.{core::Set::add}{Invariant}(null);
-    #t9.{core::Set::add}{Invariant}(inf::field1);
+    #t9.{core::Set::add}(null){(inf::C<dynamic>*) →* core::bool*};
+    #t9.{core::Set::add}(inf::field1){(inf::C<dynamic>*) →* core::bool*};
   } =>#t9;
   core::Set<inf::C<dynamic>*>* local3b = block {
     final core::Set<inf::C<dynamic>*>* #t10 = col::LinkedHashSet::•<inf::C<dynamic>*>();
-    #t10.{core::Set::add}{Invariant}(null);
-    #t10.{core::Set::add}{Invariant}(inf::field2);
+    #t10.{core::Set::add}(null){(inf::C<dynamic>*) →* core::bool*};
+    #t10.{core::Set::add}(inf::field2){(inf::C<dynamic>*) →* core::bool*};
   } =>#t10;
   core::Set<inf::C<core::int*>*>* local3c = block {
     final core::Set<inf::C<core::int*>*>* #t11 = col::LinkedHashSet::•<inf::C<core::int*>*>();
-    #t11.{core::Set::add}{Invariant}(null);
-    #t11.{core::Set::add}{Invariant}(inf::field3);
+    #t11.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
+    #t11.{core::Set::add}(inf::field3){(inf::C<core::int*>*) →* core::bool*};
   } =>#t11;
   core::Set<inf::C<core::int*>*>* local3d = block {
     final core::Set<inf::C<core::int*>*>* #t12 = col::LinkedHashSet::•<inf::C<core::int*>*>();
-    #t12.{core::Set::add}{Invariant}(null);
-    #t12.{core::Set::add}{Invariant}(inf::field4);
+    #t12.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
+    #t12.{core::Set::add}(inf::field4){(inf::C<core::int*>*) →* core::bool*};
   } =>#t12;
   core::Set<inf::C<core::int*>*>* local3e = block {
     final core::Set<inf::C<core::int*>*>* #t13 = col::LinkedHashSet::•<inf::C<core::int*>*>();
-    #t13.{core::Set::add}{Invariant}(null);
-    #t13.{core::Set::add}{Invariant}(inf::field5);
+    #t13.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
+    #t13.{core::Set::add}(inf::field5){(inf::C<core::int*>*) →* core::bool*};
   } =>#t13;
   core::Set<inf::C<core::int*>*>* local3f = block {
     final core::Set<inf::C<core::int*>*>* #t14 = col::LinkedHashSet::•<inf::C<core::int*>*>();
-    #t14.{core::Set::add}{Invariant}(null);
-    #t14.{core::Set::add}{Invariant}(inf::field6);
+    #t14.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
+    #t14.{core::Set::add}(inf::field6){(inf::C<core::int*>*) →* core::bool*};
   } =>#t14;
   core::Set<core::int*>* local3g = block {
     final core::Set<core::int*>* #t15 = col::LinkedHashSet::•<core::int*>();
-    #t15.{core::Set::add}{Invariant}(null);
-    #t15.{core::Set::add}{Invariant}(inf::field7);
+    #t15.{core::Set::add}(null){(core::int*) →* core::bool*};
+    #t15.{core::Set::add}(inf::field7){(core::int*) →* core::bool*};
   } =>#t15;
   core::Set<core::int*>* local3h = block {
     final core::Set<core::int*>* #t16 = col::LinkedHashSet::•<core::int*>();
-    #t16.{core::Set::add}{Invariant}(null);
-    #t16.{core::Set::add}{Invariant}(inf::field8);
+    #t16.{core::Set::add}(null){(core::int*) →* core::bool*};
+    #t16.{core::Set::add}(inf::field8){(core::int*) →* core::bool*};
   } =>#t16;
 }
 
@@ -167,82 +167,82 @@
   core::List<Null> local1i = <Null>[null];
   core::Set<inf::C<dynamic>?> local2a = block {
     final core::Set<inf::C<dynamic>?> #t17 = col::LinkedHashSet::•<inf::C<dynamic>?>();
-    #t17.{core::Set::add}{Invariant}(inf::field1);
-    #t17.{core::Set::add}{Invariant}(null);
+    #t17.{core::Set::add}(inf::field1){(inf::C<dynamic>?) → core::bool};
+    #t17.{core::Set::add}(null){(inf::C<dynamic>?) → core::bool};
   } =>#t17;
   core::Set<inf::C<dynamic>?> local2b = block {
     final core::Set<inf::C<dynamic>?> #t18 = col::LinkedHashSet::•<inf::C<dynamic>?>();
-    #t18.{core::Set::add}{Invariant}(inf::field2);
-    #t18.{core::Set::add}{Invariant}(null);
+    #t18.{core::Set::add}(inf::field2){(inf::C<dynamic>?) → core::bool};
+    #t18.{core::Set::add}(null){(inf::C<dynamic>?) → core::bool};
   } =>#t18;
   core::Set<inf::C<core::int>?> local2c = block {
     final core::Set<inf::C<core::int>?> #t19 = col::LinkedHashSet::•<inf::C<core::int>?>();
-    #t19.{core::Set::add}{Invariant}(inf::field3);
-    #t19.{core::Set::add}{Invariant}(null);
+    #t19.{core::Set::add}(inf::field3){(inf::C<core::int>?) → core::bool};
+    #t19.{core::Set::add}(null){(inf::C<core::int>?) → core::bool};
   } =>#t19;
   core::Set<inf::C<core::int>?> local2d = block {
     final core::Set<inf::C<core::int>?> #t20 = col::LinkedHashSet::•<inf::C<core::int>?>();
-    #t20.{core::Set::add}{Invariant}(inf::field4);
-    #t20.{core::Set::add}{Invariant}(null);
+    #t20.{core::Set::add}(inf::field4){(inf::C<core::int>?) → core::bool};
+    #t20.{core::Set::add}(null){(inf::C<core::int>?) → core::bool};
   } =>#t20;
   core::Set<inf::C<core::int?>?> local2e = block {
     final core::Set<inf::C<core::int?>?> #t21 = col::LinkedHashSet::•<inf::C<core::int?>?>();
-    #t21.{core::Set::add}{Invariant}(inf::field5);
-    #t21.{core::Set::add}{Invariant}(null);
+    #t21.{core::Set::add}(inf::field5){(inf::C<core::int?>?) → core::bool};
+    #t21.{core::Set::add}(null){(inf::C<core::int?>?) → core::bool};
   } =>#t21;
   core::Set<inf::C<core::int?>?> local2f = block {
     final core::Set<inf::C<core::int?>?> #t22 = col::LinkedHashSet::•<inf::C<core::int?>?>();
-    #t22.{core::Set::add}{Invariant}(inf::field6);
-    #t22.{core::Set::add}{Invariant}(null);
+    #t22.{core::Set::add}(inf::field6){(inf::C<core::int?>?) → core::bool};
+    #t22.{core::Set::add}(null){(inf::C<core::int?>?) → core::bool};
   } =>#t22;
   core::Set<core::int?> local2g = block {
     final core::Set<core::int?> #t23 = col::LinkedHashSet::•<core::int?>();
-    #t23.{core::Set::add}{Invariant}(inf::field7);
-    #t23.{core::Set::add}{Invariant}(null);
+    #t23.{core::Set::add}(inf::field7){(core::int?) → core::bool};
+    #t23.{core::Set::add}(null){(core::int?) → core::bool};
   } =>#t23;
   core::Set<core::int?> local2h = block {
     final core::Set<core::int?> #t24 = col::LinkedHashSet::•<core::int?>();
-    #t24.{core::Set::add}{Invariant}(inf::field8);
-    #t24.{core::Set::add}{Invariant}(null);
+    #t24.{core::Set::add}(inf::field8){(core::int?) → core::bool};
+    #t24.{core::Set::add}(null){(core::int?) → core::bool};
   } =>#t24;
   core::Set<inf::C<dynamic>?> local3a = block {
     final core::Set<inf::C<dynamic>?> #t25 = col::LinkedHashSet::•<inf::C<dynamic>?>();
-    #t25.{core::Set::add}{Invariant}(null);
-    #t25.{core::Set::add}{Invariant}(inf::field1);
+    #t25.{core::Set::add}(null){(inf::C<dynamic>?) → core::bool};
+    #t25.{core::Set::add}(inf::field1){(inf::C<dynamic>?) → core::bool};
   } =>#t25;
   core::Set<inf::C<dynamic>?> local3b = block {
     final core::Set<inf::C<dynamic>?> #t26 = col::LinkedHashSet::•<inf::C<dynamic>?>();
-    #t26.{core::Set::add}{Invariant}(null);
-    #t26.{core::Set::add}{Invariant}(inf::field2);
+    #t26.{core::Set::add}(null){(inf::C<dynamic>?) → core::bool};
+    #t26.{core::Set::add}(inf::field2){(inf::C<dynamic>?) → core::bool};
   } =>#t26;
   core::Set<inf::C<core::int>?> local3c = block {
     final core::Set<inf::C<core::int>?> #t27 = col::LinkedHashSet::•<inf::C<core::int>?>();
-    #t27.{core::Set::add}{Invariant}(null);
-    #t27.{core::Set::add}{Invariant}(inf::field3);
+    #t27.{core::Set::add}(null){(inf::C<core::int>?) → core::bool};
+    #t27.{core::Set::add}(inf::field3){(inf::C<core::int>?) → core::bool};
   } =>#t27;
   core::Set<inf::C<core::int>?> local3d = block {
     final core::Set<inf::C<core::int>?> #t28 = col::LinkedHashSet::•<inf::C<core::int>?>();
-    #t28.{core::Set::add}{Invariant}(null);
-    #t28.{core::Set::add}{Invariant}(inf::field4);
+    #t28.{core::Set::add}(null){(inf::C<core::int>?) → core::bool};
+    #t28.{core::Set::add}(inf::field4){(inf::C<core::int>?) → core::bool};
   } =>#t28;
   core::Set<inf::C<core::int?>?> local3e = block {
     final core::Set<inf::C<core::int?>?> #t29 = col::LinkedHashSet::•<inf::C<core::int?>?>();
-    #t29.{core::Set::add}{Invariant}(null);
-    #t29.{core::Set::add}{Invariant}(inf::field5);
+    #t29.{core::Set::add}(null){(inf::C<core::int?>?) → core::bool};
+    #t29.{core::Set::add}(inf::field5){(inf::C<core::int?>?) → core::bool};
   } =>#t29;
   core::Set<inf::C<core::int?>?> local3f = block {
     final core::Set<inf::C<core::int?>?> #t30 = col::LinkedHashSet::•<inf::C<core::int?>?>();
-    #t30.{core::Set::add}{Invariant}(null);
-    #t30.{core::Set::add}{Invariant}(inf::field6);
+    #t30.{core::Set::add}(null){(inf::C<core::int?>?) → core::bool};
+    #t30.{core::Set::add}(inf::field6){(inf::C<core::int?>?) → core::bool};
   } =>#t30;
   core::Set<core::int?> local3g = block {
     final core::Set<core::int?> #t31 = col::LinkedHashSet::•<core::int?>();
-    #t31.{core::Set::add}{Invariant}(null);
-    #t31.{core::Set::add}{Invariant}(inf::field7);
+    #t31.{core::Set::add}(null){(core::int?) → core::bool};
+    #t31.{core::Set::add}(inf::field7){(core::int?) → core::bool};
   } =>#t31;
   core::Set<core::int?> local3h = block {
     final core::Set<core::int?> #t32 = col::LinkedHashSet::•<core::int?>();
-    #t32.{core::Set::add}{Invariant}(null);
-    #t32.{core::Set::add}{Invariant}(inf::field8);
+    #t32.{core::Set::add}(null){(core::int?) → core::bool};
+    #t32.{core::Set::add}(inf::field8){(core::int?) → core::bool};
   } =>#t32;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in.dart.weak.transformed.expect
index 97b6ea6..3f7b98d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   method baz(inf::B* b) → dynamic {
-    b.{inf::B::foo}(b.{inf::B::bar}<core::List<core::int*>*>());
+    b.{inf::B::foo}(b.{inf::B::bar}<core::List<core::int*>*>(){() →* core::List<core::int*>*}){(core::List<core::int*>*) →* dynamic};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -37,83 +37,83 @@
   core::List<Null>* local1i = core::_GrowableList::_literal1<Null>(null);
   core::Set<inf::C<dynamic>*>* local2a = block {
     final core::Set<inf::C<dynamic>*>* #t1 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>*>();
-    #t1.{core::Set::add}{Invariant}(inf::field1);
-    #t1.{core::Set::add}{Invariant}(null);
+    #t1.{core::Set::add}(inf::field1){(inf::C<dynamic>*) →* core::bool*};
+    #t1.{core::Set::add}(null){(inf::C<dynamic>*) →* core::bool*};
   } =>#t1;
   core::Set<inf::C<dynamic>*>* local2b = block {
     final core::Set<inf::C<dynamic>*>* #t2 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>*>();
-    #t2.{core::Set::add}{Invariant}(inf::field2);
-    #t2.{core::Set::add}{Invariant}(null);
+    #t2.{core::Set::add}(inf::field2){(inf::C<dynamic>*) →* core::bool*};
+    #t2.{core::Set::add}(null){(inf::C<dynamic>*) →* core::bool*};
   } =>#t2;
   core::Set<inf::C<core::int*>*>* local2c = block {
     final core::Set<inf::C<core::int*>*>* #t3 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
-    #t3.{core::Set::add}{Invariant}(inf::field3);
-    #t3.{core::Set::add}{Invariant}(null);
+    #t3.{core::Set::add}(inf::field3){(inf::C<core::int*>*) →* core::bool*};
+    #t3.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
   } =>#t3;
   core::Set<inf::C<core::int*>*>* local2d = block {
     final core::Set<inf::C<core::int*>*>* #t4 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
-    #t4.{core::Set::add}{Invariant}(inf::field4);
-    #t4.{core::Set::add}{Invariant}(null);
+    #t4.{core::Set::add}(inf::field4){(inf::C<core::int*>*) →* core::bool*};
+    #t4.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
   } =>#t4;
   core::Set<inf::C<core::int*>*>* local2e = block {
     final core::Set<inf::C<core::int*>*>* #t5 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
-    #t5.{core::Set::add}{Invariant}(inf::field5);
-    #t5.{core::Set::add}{Invariant}(null);
+    #t5.{core::Set::add}(inf::field5){(inf::C<core::int*>*) →* core::bool*};
+    #t5.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
   } =>#t5;
   core::Set<inf::C<core::int*>*>* local2f = block {
     final core::Set<inf::C<core::int*>*>* #t6 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
-    #t6.{core::Set::add}{Invariant}(inf::field6);
-    #t6.{core::Set::add}{Invariant}(null);
+    #t6.{core::Set::add}(inf::field6){(inf::C<core::int*>*) →* core::bool*};
+    #t6.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
   } =>#t6;
   core::Set<core::int*>* local2g = block {
     final core::Set<core::int*>* #t7 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t7.{core::Set::add}{Invariant}(inf::field7);
-    #t7.{core::Set::add}{Invariant}(null);
+    #t7.{core::Set::add}(inf::field7){(core::int*) →* core::bool*};
+    #t7.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t7;
   core::Set<core::int*>* local2h = block {
     final core::Set<core::int*>* #t8 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t8.{core::Set::add}{Invariant}(inf::field8);
-    #t8.{core::Set::add}{Invariant}(null);
+    #t8.{core::Set::add}(inf::field8){(core::int*) →* core::bool*};
+    #t8.{core::Set::add}(null){(core::int*) →* core::bool*};
   } =>#t8;
   core::Set<inf::C<dynamic>*>* local3a = block {
     final core::Set<inf::C<dynamic>*>* #t9 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>*>();
-    #t9.{core::Set::add}{Invariant}(null);
-    #t9.{core::Set::add}{Invariant}(inf::field1);
+    #t9.{core::Set::add}(null){(inf::C<dynamic>*) →* core::bool*};
+    #t9.{core::Set::add}(inf::field1){(inf::C<dynamic>*) →* core::bool*};
   } =>#t9;
   core::Set<inf::C<dynamic>*>* local3b = block {
     final core::Set<inf::C<dynamic>*>* #t10 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>*>();
-    #t10.{core::Set::add}{Invariant}(null);
-    #t10.{core::Set::add}{Invariant}(inf::field2);
+    #t10.{core::Set::add}(null){(inf::C<dynamic>*) →* core::bool*};
+    #t10.{core::Set::add}(inf::field2){(inf::C<dynamic>*) →* core::bool*};
   } =>#t10;
   core::Set<inf::C<core::int*>*>* local3c = block {
     final core::Set<inf::C<core::int*>*>* #t11 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
-    #t11.{core::Set::add}{Invariant}(null);
-    #t11.{core::Set::add}{Invariant}(inf::field3);
+    #t11.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
+    #t11.{core::Set::add}(inf::field3){(inf::C<core::int*>*) →* core::bool*};
   } =>#t11;
   core::Set<inf::C<core::int*>*>* local3d = block {
     final core::Set<inf::C<core::int*>*>* #t12 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
-    #t12.{core::Set::add}{Invariant}(null);
-    #t12.{core::Set::add}{Invariant}(inf::field4);
+    #t12.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
+    #t12.{core::Set::add}(inf::field4){(inf::C<core::int*>*) →* core::bool*};
   } =>#t12;
   core::Set<inf::C<core::int*>*>* local3e = block {
     final core::Set<inf::C<core::int*>*>* #t13 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
-    #t13.{core::Set::add}{Invariant}(null);
-    #t13.{core::Set::add}{Invariant}(inf::field5);
+    #t13.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
+    #t13.{core::Set::add}(inf::field5){(inf::C<core::int*>*) →* core::bool*};
   } =>#t13;
   core::Set<inf::C<core::int*>*>* local3f = block {
     final core::Set<inf::C<core::int*>*>* #t14 = new col::_CompactLinkedHashSet::•<inf::C<core::int*>*>();
-    #t14.{core::Set::add}{Invariant}(null);
-    #t14.{core::Set::add}{Invariant}(inf::field6);
+    #t14.{core::Set::add}(null){(inf::C<core::int*>*) →* core::bool*};
+    #t14.{core::Set::add}(inf::field6){(inf::C<core::int*>*) →* core::bool*};
   } =>#t14;
   core::Set<core::int*>* local3g = block {
     final core::Set<core::int*>* #t15 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t15.{core::Set::add}{Invariant}(null);
-    #t15.{core::Set::add}{Invariant}(inf::field7);
+    #t15.{core::Set::add}(null){(core::int*) →* core::bool*};
+    #t15.{core::Set::add}(inf::field7){(core::int*) →* core::bool*};
   } =>#t15;
   core::Set<core::int*>* local3h = block {
     final core::Set<core::int*>* #t16 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t16.{core::Set::add}{Invariant}(null);
-    #t16.{core::Set::add}{Invariant}(inf::field8);
+    #t16.{core::Set::add}(null){(core::int*) →* core::bool*};
+    #t16.{core::Set::add}(inf::field8){(core::int*) →* core::bool*};
   } =>#t16;
 }
 
@@ -167,82 +167,82 @@
   core::List<Null> local1i = core::_GrowableList::_literal1<Null>(null);
   core::Set<inf::C<dynamic>?> local2a = block {
     final core::Set<inf::C<dynamic>?> #t17 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>?>();
-    #t17.{core::Set::add}{Invariant}(inf::field1);
-    #t17.{core::Set::add}{Invariant}(null);
+    #t17.{core::Set::add}(inf::field1){(inf::C<dynamic>?) → core::bool};
+    #t17.{core::Set::add}(null){(inf::C<dynamic>?) → core::bool};
   } =>#t17;
   core::Set<inf::C<dynamic>?> local2b = block {
     final core::Set<inf::C<dynamic>?> #t18 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>?>();
-    #t18.{core::Set::add}{Invariant}(inf::field2);
-    #t18.{core::Set::add}{Invariant}(null);
+    #t18.{core::Set::add}(inf::field2){(inf::C<dynamic>?) → core::bool};
+    #t18.{core::Set::add}(null){(inf::C<dynamic>?) → core::bool};
   } =>#t18;
   core::Set<inf::C<core::int>?> local2c = block {
     final core::Set<inf::C<core::int>?> #t19 = new col::_CompactLinkedHashSet::•<inf::C<core::int>?>();
-    #t19.{core::Set::add}{Invariant}(inf::field3);
-    #t19.{core::Set::add}{Invariant}(null);
+    #t19.{core::Set::add}(inf::field3){(inf::C<core::int>?) → core::bool};
+    #t19.{core::Set::add}(null){(inf::C<core::int>?) → core::bool};
   } =>#t19;
   core::Set<inf::C<core::int>?> local2d = block {
     final core::Set<inf::C<core::int>?> #t20 = new col::_CompactLinkedHashSet::•<inf::C<core::int>?>();
-    #t20.{core::Set::add}{Invariant}(inf::field4);
-    #t20.{core::Set::add}{Invariant}(null);
+    #t20.{core::Set::add}(inf::field4){(inf::C<core::int>?) → core::bool};
+    #t20.{core::Set::add}(null){(inf::C<core::int>?) → core::bool};
   } =>#t20;
   core::Set<inf::C<core::int?>?> local2e = block {
     final core::Set<inf::C<core::int?>?> #t21 = new col::_CompactLinkedHashSet::•<inf::C<core::int?>?>();
-    #t21.{core::Set::add}{Invariant}(inf::field5);
-    #t21.{core::Set::add}{Invariant}(null);
+    #t21.{core::Set::add}(inf::field5){(inf::C<core::int?>?) → core::bool};
+    #t21.{core::Set::add}(null){(inf::C<core::int?>?) → core::bool};
   } =>#t21;
   core::Set<inf::C<core::int?>?> local2f = block {
     final core::Set<inf::C<core::int?>?> #t22 = new col::_CompactLinkedHashSet::•<inf::C<core::int?>?>();
-    #t22.{core::Set::add}{Invariant}(inf::field6);
-    #t22.{core::Set::add}{Invariant}(null);
+    #t22.{core::Set::add}(inf::field6){(inf::C<core::int?>?) → core::bool};
+    #t22.{core::Set::add}(null){(inf::C<core::int?>?) → core::bool};
   } =>#t22;
   core::Set<core::int?> local2g = block {
     final core::Set<core::int?> #t23 = new col::_CompactLinkedHashSet::•<core::int?>();
-    #t23.{core::Set::add}{Invariant}(inf::field7);
-    #t23.{core::Set::add}{Invariant}(null);
+    #t23.{core::Set::add}(inf::field7){(core::int?) → core::bool};
+    #t23.{core::Set::add}(null){(core::int?) → core::bool};
   } =>#t23;
   core::Set<core::int?> local2h = block {
     final core::Set<core::int?> #t24 = new col::_CompactLinkedHashSet::•<core::int?>();
-    #t24.{core::Set::add}{Invariant}(inf::field8);
-    #t24.{core::Set::add}{Invariant}(null);
+    #t24.{core::Set::add}(inf::field8){(core::int?) → core::bool};
+    #t24.{core::Set::add}(null){(core::int?) → core::bool};
   } =>#t24;
   core::Set<inf::C<dynamic>?> local3a = block {
     final core::Set<inf::C<dynamic>?> #t25 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>?>();
-    #t25.{core::Set::add}{Invariant}(null);
-    #t25.{core::Set::add}{Invariant}(inf::field1);
+    #t25.{core::Set::add}(null){(inf::C<dynamic>?) → core::bool};
+    #t25.{core::Set::add}(inf::field1){(inf::C<dynamic>?) → core::bool};
   } =>#t25;
   core::Set<inf::C<dynamic>?> local3b = block {
     final core::Set<inf::C<dynamic>?> #t26 = new col::_CompactLinkedHashSet::•<inf::C<dynamic>?>();
-    #t26.{core::Set::add}{Invariant}(null);
-    #t26.{core::Set::add}{Invariant}(inf::field2);
+    #t26.{core::Set::add}(null){(inf::C<dynamic>?) → core::bool};
+    #t26.{core::Set::add}(inf::field2){(inf::C<dynamic>?) → core::bool};
   } =>#t26;
   core::Set<inf::C<core::int>?> local3c = block {
     final core::Set<inf::C<core::int>?> #t27 = new col::_CompactLinkedHashSet::•<inf::C<core::int>?>();
-    #t27.{core::Set::add}{Invariant}(null);
-    #t27.{core::Set::add}{Invariant}(inf::field3);
+    #t27.{core::Set::add}(null){(inf::C<core::int>?) → core::bool};
+    #t27.{core::Set::add}(inf::field3){(inf::C<core::int>?) → core::bool};
   } =>#t27;
   core::Set<inf::C<core::int>?> local3d = block {
     final core::Set<inf::C<core::int>?> #t28 = new col::_CompactLinkedHashSet::•<inf::C<core::int>?>();
-    #t28.{core::Set::add}{Invariant}(null);
-    #t28.{core::Set::add}{Invariant}(inf::field4);
+    #t28.{core::Set::add}(null){(inf::C<core::int>?) → core::bool};
+    #t28.{core::Set::add}(inf::field4){(inf::C<core::int>?) → core::bool};
   } =>#t28;
   core::Set<inf::C<core::int?>?> local3e = block {
     final core::Set<inf::C<core::int?>?> #t29 = new col::_CompactLinkedHashSet::•<inf::C<core::int?>?>();
-    #t29.{core::Set::add}{Invariant}(null);
-    #t29.{core::Set::add}{Invariant}(inf::field5);
+    #t29.{core::Set::add}(null){(inf::C<core::int?>?) → core::bool};
+    #t29.{core::Set::add}(inf::field5){(inf::C<core::int?>?) → core::bool};
   } =>#t29;
   core::Set<inf::C<core::int?>?> local3f = block {
     final core::Set<inf::C<core::int?>?> #t30 = new col::_CompactLinkedHashSet::•<inf::C<core::int?>?>();
-    #t30.{core::Set::add}{Invariant}(null);
-    #t30.{core::Set::add}{Invariant}(inf::field6);
+    #t30.{core::Set::add}(null){(inf::C<core::int?>?) → core::bool};
+    #t30.{core::Set::add}(inf::field6){(inf::C<core::int?>?) → core::bool};
   } =>#t30;
   core::Set<core::int?> local3g = block {
     final core::Set<core::int?> #t31 = new col::_CompactLinkedHashSet::•<core::int?>();
-    #t31.{core::Set::add}{Invariant}(null);
-    #t31.{core::Set::add}{Invariant}(inf::field7);
+    #t31.{core::Set::add}(null){(core::int?) → core::bool};
+    #t31.{core::Set::add}(inf::field7){(core::int?) → core::bool};
   } =>#t31;
   core::Set<core::int?> local3h = block {
     final core::Set<core::int?> #t32 = new col::_CompactLinkedHashSet::•<core::int?>();
-    #t32.{core::Set::add}{Invariant}(null);
-    #t32.{core::Set::add}{Invariant}(inf::field8);
+    #t32.{core::Set::add}(null){(core::int?) → core::bool};
+    #t32.{core::Set::add}(inf::field8){(core::int?) → core::bool};
   } =>#t32;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.expect
index 615c4e4..facc484 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.expect
@@ -25,11 +25,11 @@
 static method main() → void {
   iss::foo(() → Null => null);
   iss::bar = () → iss::Map<core::String*, core::String*>* => null;
-  new self::D::•<core::int*>().{self::D::method}();
+  new self::D::•<core::int*>().{self::D::method}(){() →* iss::C<core::int*>*};
   self::findKey(new iss::Map::•<core::String*, core::String*>("foo", "bar"), "bar");
 }
 static method findKey(iss::Map<core::String*, dynamic>* m, dynamic search) → void {
-  core::print(let final core::MapEntry<core::String*, dynamic>* #t1 = m.{iss::Map::entries}.{iss::Iterable::singleWhere}((core::MapEntry<core::String*, dynamic>* entry) → core::bool* => entry.{core::MapEntry::value}.{core::Object::==}(search), orElse: () → Null => null) in #t1.{core::Object::==}(null) ?{core::String*} null : #t1.{core::MapEntry::key});
+  core::print(let final core::MapEntry<core::String*, dynamic>* #t1 = m.{iss::Map::entries}{iss::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{iss::Iterable::singleWhere}((core::MapEntry<core::String*, dynamic>* entry) → core::bool* => entry.{core::MapEntry::value}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} search, orElse: () → Null => null){((core::MapEntry<core::String*, dynamic>*) →* core::bool*, {orElse: () →* core::MapEntry<core::String*, dynamic>*}) →* core::MapEntry<core::String*, dynamic>*} in #t1 == null ?{core::String*} null : #t1.{core::MapEntry::key}{core::String*});
 }
 
 library /*isNonNullableByDefault*/;
@@ -39,7 +39,7 @@
 class C<X extends core::Object? = dynamic> extends core::Object {
   constructor •(() → iss::Map<core::String, core::String> f) → iss::C<iss::C::X%>
     : super core::Object::•() {
-    core::print(f.{core::Object::runtimeType});
+    core::print(f.{core::Object::runtimeType}{core::Type});
   }
 }
 class Map<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
@@ -49,7 +49,7 @@
     : iss::Map::key = key, iss::Map::value = value, super core::Object::•()
     ;
   get entries() → iss::Iterable<core::MapEntry<iss::Map::K%, iss::Map::V%>>
-    return new iss::Iterable::•<core::MapEntry<iss::Map::K%, iss::Map::V%>>(new core::MapEntry::_<iss::Map::K%, iss::Map::V%>(this.{iss::Map::key}, this.{iss::Map::value}));
+    return new iss::Iterable::•<core::MapEntry<iss::Map::K%, iss::Map::V%>>(new core::MapEntry::_<iss::Map::K%, iss::Map::V%>(this.{iss::Map::key}{iss::Map::K%}, this.{iss::Map::value}{iss::Map::V%}));
 }
 class Iterable<E extends core::Object? = dynamic> extends core::Object {
   final field iss::Iterable::E% element;
@@ -57,19 +57,19 @@
     : iss::Iterable::element = element, super core::Object::•()
     ;
   method singleWhere((iss::Iterable::E%) → core::bool test, {generic-covariant-impl () →? iss::Iterable::E% orElse = #C1}) → iss::Iterable::E% {
-    if(test.call(this.{iss::Iterable::element})) {
-      return this.{iss::Iterable::element};
+    if(test(this.{iss::Iterable::element}{iss::Iterable::E%}){(iss::Iterable::E%) → core::bool}) {
+      return this.{iss::Iterable::element}{iss::Iterable::E%};
     }
-    if(!orElse.{core::Object::==}(null))
-      return orElse{() → iss::Iterable::E%}.call();
+    if(!(orElse == null))
+      return orElse{() → iss::Iterable::E%}(){() → iss::Iterable::E%};
     throw "error";
   }
 }
 static method foo(() → iss::Map<core::String, core::String> f) → void {
-  core::print(f.{core::Object::runtimeType});
+  core::print(f.{core::Object::runtimeType}{core::Type});
 }
 static set bar(() → iss::Map<core::String, core::String> f) → void {
-  core::print(f.{core::Object::runtimeType});
+  core::print(f.{core::Object::runtimeType}{core::Type});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.transformed.expect
index 615c4e4..facc484 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.transformed.expect
@@ -25,11 +25,11 @@
 static method main() → void {
   iss::foo(() → Null => null);
   iss::bar = () → iss::Map<core::String*, core::String*>* => null;
-  new self::D::•<core::int*>().{self::D::method}();
+  new self::D::•<core::int*>().{self::D::method}(){() →* iss::C<core::int*>*};
   self::findKey(new iss::Map::•<core::String*, core::String*>("foo", "bar"), "bar");
 }
 static method findKey(iss::Map<core::String*, dynamic>* m, dynamic search) → void {
-  core::print(let final core::MapEntry<core::String*, dynamic>* #t1 = m.{iss::Map::entries}.{iss::Iterable::singleWhere}((core::MapEntry<core::String*, dynamic>* entry) → core::bool* => entry.{core::MapEntry::value}.{core::Object::==}(search), orElse: () → Null => null) in #t1.{core::Object::==}(null) ?{core::String*} null : #t1.{core::MapEntry::key});
+  core::print(let final core::MapEntry<core::String*, dynamic>* #t1 = m.{iss::Map::entries}{iss::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{iss::Iterable::singleWhere}((core::MapEntry<core::String*, dynamic>* entry) → core::bool* => entry.{core::MapEntry::value}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} search, orElse: () → Null => null){((core::MapEntry<core::String*, dynamic>*) →* core::bool*, {orElse: () →* core::MapEntry<core::String*, dynamic>*}) →* core::MapEntry<core::String*, dynamic>*} in #t1 == null ?{core::String*} null : #t1.{core::MapEntry::key}{core::String*});
 }
 
 library /*isNonNullableByDefault*/;
@@ -39,7 +39,7 @@
 class C<X extends core::Object? = dynamic> extends core::Object {
   constructor •(() → iss::Map<core::String, core::String> f) → iss::C<iss::C::X%>
     : super core::Object::•() {
-    core::print(f.{core::Object::runtimeType});
+    core::print(f.{core::Object::runtimeType}{core::Type});
   }
 }
 class Map<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
@@ -49,7 +49,7 @@
     : iss::Map::key = key, iss::Map::value = value, super core::Object::•()
     ;
   get entries() → iss::Iterable<core::MapEntry<iss::Map::K%, iss::Map::V%>>
-    return new iss::Iterable::•<core::MapEntry<iss::Map::K%, iss::Map::V%>>(new core::MapEntry::_<iss::Map::K%, iss::Map::V%>(this.{iss::Map::key}, this.{iss::Map::value}));
+    return new iss::Iterable::•<core::MapEntry<iss::Map::K%, iss::Map::V%>>(new core::MapEntry::_<iss::Map::K%, iss::Map::V%>(this.{iss::Map::key}{iss::Map::K%}, this.{iss::Map::value}{iss::Map::V%}));
 }
 class Iterable<E extends core::Object? = dynamic> extends core::Object {
   final field iss::Iterable::E% element;
@@ -57,19 +57,19 @@
     : iss::Iterable::element = element, super core::Object::•()
     ;
   method singleWhere((iss::Iterable::E%) → core::bool test, {generic-covariant-impl () →? iss::Iterable::E% orElse = #C1}) → iss::Iterable::E% {
-    if(test.call(this.{iss::Iterable::element})) {
-      return this.{iss::Iterable::element};
+    if(test(this.{iss::Iterable::element}{iss::Iterable::E%}){(iss::Iterable::E%) → core::bool}) {
+      return this.{iss::Iterable::element}{iss::Iterable::E%};
     }
-    if(!orElse.{core::Object::==}(null))
-      return orElse{() → iss::Iterable::E%}.call();
+    if(!(orElse == null))
+      return orElse{() → iss::Iterable::E%}(){() → iss::Iterable::E%};
     throw "error";
   }
 }
 static method foo(() → iss::Map<core::String, core::String> f) → void {
-  core::print(f.{core::Object::runtimeType});
+  core::print(f.{core::Object::runtimeType}{core::Type});
 }
 static set bar(() → iss::Map<core::String, core::String> f) → void {
-  core::print(f.{core::Object::runtimeType});
+  core::print(f.{core::Object::runtimeType}{core::Type});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
index e644ba8..9a56a7d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
@@ -33,7 +33,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A::method}());
+  core::print(new self::C::•().{self::_C&Object&A::method}(){({s: core::String*}) →* core::String*});
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect
index a4b45f2..dbbbaa1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A::method}());
+  core::print(new self::C::•().{self::_C&Object&A::method}(){({s: core::String*}) →* core::String*});
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.expect
index 5dfa45a..7ab45bf 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.expect
@@ -33,7 +33,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A::method}());
+  core::print(new self::C::•().{self::_C&Object&A::method}(){({s: core::String*}) →* core::String*});
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.transformed.expect
index bee4a10..3948e9a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A::method}());
+  core::print(new self::C::•().{self::_C&Object&A::method}(){({s: core::String*}) →* core::String*});
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.expect
index ec08b47..2f375fb 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.expect
@@ -33,7 +33,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A::method}());
+  core::print(new self::C::•().{self::_C&Object&A::method}(){({s: core::String*}) →* core::String*});
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.transformed.expect
index c2ee49a..594c0ca 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A::method}());
+  core::print(new self::C::•().{self::_C&Object&A::method}(){({s: core::String*}) →* core::String*});
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.expect
index bb9ab6c..e5721c4 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.expect
@@ -31,28 +31,28 @@
     () → void f;
     (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}();
+    ^" in f).{core::Object::toString}(){() → core::String};
   }
   method test2() → void {
     () → void f;
     (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}();
+    ^" in f).{core::Object::toString}(){() → core::String};
   }
 }
 static method test() → dynamic {
   () → void f;
   (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
   f.toString(); // error
-  ^" in f).{core::Object::toString}();
+  ^" in f).{core::Object::toString}(){() → core::String};
   core::Function foo = () → Null {
     () → void f;
     (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}();
+    ^" in f).{core::Object::toString}(){() → core::String};
   };
   self::C::test();
-  new self::C::•().{self::C::test2}();
+  new self::C::•().{self::C::test2}(){() → void};
 }
 static method main() → dynamic {}
 
@@ -67,11 +67,11 @@
     ;
   static method test() → void {
     () →* void f;
-    f.{core::Object::toString}();
+    f.{core::Object::toString}(){() →* core::String*};
   }
   method test2() → void {
     () →* void f;
-    f.{core::Object::toString}();
+    f.{core::Object::toString}(){() →* core::String*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -86,11 +86,11 @@
 }
 static method test() → dynamic {
   () →* void f;
-  f.{core::Object::toString}();
+  f.{core::Object::toString}(){() →* core::String*};
   core::Function* foo = () → Null {
     () →* void f;
-    f.{core::Object::toString}();
+    f.{core::Object::toString}(){() →* core::String*};
   };
   self2::C::test();
-  new self2::C::•().{self2::C::test2}();
+  new self2::C::•().{self2::C::test2}(){() →* void};
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.transformed.expect
index bb9ab6c..e5721c4 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.transformed.expect
@@ -31,28 +31,28 @@
     () → void f;
     (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}();
+    ^" in f).{core::Object::toString}(){() → core::String};
   }
   method test2() → void {
     () → void f;
     (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}();
+    ^" in f).{core::Object::toString}(){() → core::String};
   }
 }
 static method test() → dynamic {
   () → void f;
   (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
   f.toString(); // error
-  ^" in f).{core::Object::toString}();
+  ^" in f).{core::Object::toString}(){() → core::String};
   core::Function foo = () → Null {
     () → void f;
     (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}();
+    ^" in f).{core::Object::toString}(){() → core::String};
   };
   self::C::test();
-  new self::C::•().{self::C::test2}();
+  new self::C::•().{self::C::test2}(){() → void};
 }
 static method main() → dynamic {}
 
@@ -67,11 +67,11 @@
     ;
   static method test() → void {
     () →* void f;
-    f.{core::Object::toString}();
+    f.{core::Object::toString}(){() →* core::String*};
   }
   method test2() → void {
     () →* void f;
-    f.{core::Object::toString}();
+    f.{core::Object::toString}(){() →* core::String*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -86,11 +86,11 @@
 }
 static method test() → dynamic {
   () →* void f;
-  f.{core::Object::toString}();
+  f.{core::Object::toString}(){() →* core::String*};
   core::Function* foo = () → Null {
     () →* void f;
-    f.{core::Object::toString}();
+    f.{core::Object::toString}(){() →* core::String*};
   };
   self2::C::test();
-  new self2::C::•().{self2::C::test2}();
+  new self2::C::•().{self2::C::test2}(){() →* void};
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.expect
index 5b9f933..4f9e4ba 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.expect
@@ -12,11 +12,11 @@
     ;
   static method test() → void {
     () →* void f;
-    f.{core::Object::toString}();
+    f.{core::Object::toString}(){() →* core::String*};
   }
   method test2() → void {
     () →* void f;
-    f.{core::Object::toString}();
+    f.{core::Object::toString}(){() →* core::String*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -31,13 +31,13 @@
 }
 static method test() → dynamic {
   () →* void f;
-  f.{core::Object::toString}();
+  f.{core::Object::toString}(){() →* core::String*};
   core::Function* foo = () → Null {
     () →* void f;
-    f.{core::Object::toString}();
+    f.{core::Object::toString}(){() →* core::String*};
   };
   self::C::test();
-  new self::C::•().{self::C::test2}();
+  new self::C::•().{self::C::test2}(){() →* void};
 }
 static method main() → dynamic {
   iss::main();
@@ -76,27 +76,27 @@
     () → void f;
     (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}();
+    ^" in f).{core::Object::toString}(){() → core::String};
   }
   method test2() → void {
     () → void f;
     (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}();
+    ^" in f).{core::Object::toString}(){() → core::String};
   }
 }
 static method test() → dynamic {
   () → void f;
   (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
   f.toString(); // error
-  ^" in f).{core::Object::toString}();
+  ^" in f).{core::Object::toString}(){() → core::String};
   core::Function foo = () → Null {
     () → void f;
     (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}();
+    ^" in f).{core::Object::toString}(){() → core::String};
   };
   iss::C::test();
-  new iss::C::•().{iss::C::test2}();
+  new iss::C::•().{iss::C::test2}(){() → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.transformed.expect
index 5b9f933..4f9e4ba 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.transformed.expect
@@ -12,11 +12,11 @@
     ;
   static method test() → void {
     () →* void f;
-    f.{core::Object::toString}();
+    f.{core::Object::toString}(){() →* core::String*};
   }
   method test2() → void {
     () →* void f;
-    f.{core::Object::toString}();
+    f.{core::Object::toString}(){() →* core::String*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -31,13 +31,13 @@
 }
 static method test() → dynamic {
   () →* void f;
-  f.{core::Object::toString}();
+  f.{core::Object::toString}(){() →* core::String*};
   core::Function* foo = () → Null {
     () →* void f;
-    f.{core::Object::toString}();
+    f.{core::Object::toString}(){() →* core::String*};
   };
   self::C::test();
-  new self::C::•().{self::C::test2}();
+  new self::C::•().{self::C::test2}(){() →* void};
 }
 static method main() → dynamic {
   iss::main();
@@ -76,27 +76,27 @@
     () → void f;
     (let final Never #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}();
+    ^" in f).{core::Object::toString}(){() → core::String};
   }
   method test2() → void {
     () → void f;
     (let final Never #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}();
+    ^" in f).{core::Object::toString}(){() → core::String};
   }
 }
 static method test() → dynamic {
   () → void f;
   (let final Never #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
   f.toString(); // error
-  ^" in f).{core::Object::toString}();
+  ^" in f).{core::Object::toString}(){() → core::String};
   core::Function foo = () → Null {
     () → void f;
     (let final Never #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
     f.toString(); // error
-    ^" in f).{core::Object::toString}();
+    ^" in f).{core::Object::toString}(){() → core::String};
   };
   iss::C::test();
-  new iss::C::•().{iss::C::test2}();
+  new iss::C::•().{iss::C::test2}(){() → void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.expect
index 22d878a..d1b585c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.expect
@@ -117,13 +117,13 @@
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:8:6: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   c?..f;
-     ^".f;
+     ^"{dynamic}.f;
   !(invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:9:7: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   !c?..f;
-      ^".f as{TypeError,ForDynamic} core::bool*);
+      ^"{dynamic}.f as{TypeError,ForDynamic} core::bool*);
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:10:6: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   c?..f!;
-     ^".f!;
+     ^"{dynamic}.f!;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.transformed.expect
index 802c2a3..d81d034 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.transformed.expect
@@ -117,13 +117,13 @@
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:8:6: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   c?..f;
-     ^".f;
+     ^"{dynamic}.f;
   !(invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:9:7: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   !c?..f;
-      ^".f as{TypeError,ForDynamic} core::bool*);
+      ^"{dynamic}.f as{TypeError,ForDynamic} core::bool*);
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:10:6: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   c?..f!;
-     ^".f!;
+     ^"{dynamic}.f!;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41657.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41657.dart.weak.expect
index c0a3ef7..0be0d4c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41657.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41657.dart.weak.expect
@@ -17,7 +17,7 @@
   self::expect(self::assertLegacySubtyping2a, #C3);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41657.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41657.dart.weak.transformed.expect
index 49fce36..e7f1882 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41657.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41657.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
   self::expect(self::assertLegacySubtyping2a, #C3);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42003.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue42003.dart.weak.expect
index f5df90e..cbd12a1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42003.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42003.dart.weak.expect
@@ -6,7 +6,7 @@
 import "org-dartlang-testcase:///issue42003_lib.dart";
 
 static method main() → dynamic {
-  let final core::String* #t1 = iss::returnString() in #t1.{core::String::==}(null) ?{core::int?} null : #t1{core::String}.{core::String::length};
+  let final core::String* #t1 = iss::returnString() in #t1 == null ?{core::int?} null : #t1{core::String}.{core::String::length}{core::int};
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42003.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue42003.dart.weak.transformed.expect
index f5df90e..cbd12a1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42003.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42003.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 import "org-dartlang-testcase:///issue42003_lib.dart";
 
 static method main() → dynamic {
-  let final core::String* #t1 = iss::returnString() in #t1.{core::String::==}(null) ?{core::int?} null : #t1{core::String}.{core::String::length};
+  let final core::String* #t1 = iss::returnString() in #t1 == null ?{core::int?} null : #t1{core::String}.{core::String::length}{core::int};
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.expect
index 1d99576..10c6848 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.expect
@@ -7,24 +7,24 @@
 
 static method main() → void {
   iss::E|m(iss::f());
-  iss::E|m((#C1).call());
+  iss::E|m((#C1)(){() →* core::int*});
   iss::E|m(iss::p);
   iss::Class<dynamic>* c = new iss::Class::•<dynamic>();
-  iss::E|m(c.{iss::Class::f}());
-  iss::E|m(c.{iss::Class::f}.call());
-  iss::E|m(c.{iss::Class::p});
-  iss::E|m(c.{iss::Class::[]}(0));
-  iss::E|m(c.{iss::Class::unary-}());
-  iss::E|m(c.{iss::Class::+}(4));
+  iss::E|m(c.{iss::Class::f}(){() →* core::int*});
+  iss::E|m(c.{iss::Class::f}{() →* core::int*}(){() →* core::int*});
+  iss::E|m(c.{iss::Class::p}{core::int*});
+  iss::E|m(c.{iss::Class::[]}(0){(core::int*) →* core::int*});
+  iss::E|m(c.{iss::Class::unary-}(){() →* core::int*});
+  iss::E|m(c.{iss::Class::+}(4){(core::Object*) →* core::int*});
   let final iss::Class<dynamic>* #t1 = c in block {
-    iss::E|m(#t1.{iss::Class::p});
-    iss::E|m(#t1.{iss::Class::f}());
-    iss::E|m(#t1.{iss::Class::[]}(0));
+    iss::E|m(#t1.{iss::Class::p}{core::int*});
+    iss::E|m(#t1.{iss::Class::f}(){() →* core::int*});
+    iss::E|m(#t1.{iss::Class::[]}(0){(core::int*) →* core::int*});
   } =>#t1;
   let final iss::Class<dynamic>* #t2 = new iss::Class::•<dynamic>() in block {
-    iss::E|m(#t2.{iss::Class::p});
-    iss::E|m(#t2.{iss::Class::f}());
-    iss::E|m(#t2.{iss::Class::[]}(0));
+    iss::E|m(#t2.{iss::Class::p}{core::int*});
+    iss::E|m(#t2.{iss::Class::f}(){() →* core::int*});
+    iss::E|m(#t2.{iss::Class::[]}(0){(core::int*) →* core::int*});
   } =>#t2;
 }
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.transformed.expect
index 1d99576..10c6848 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.transformed.expect
@@ -7,24 +7,24 @@
 
 static method main() → void {
   iss::E|m(iss::f());
-  iss::E|m((#C1).call());
+  iss::E|m((#C1)(){() →* core::int*});
   iss::E|m(iss::p);
   iss::Class<dynamic>* c = new iss::Class::•<dynamic>();
-  iss::E|m(c.{iss::Class::f}());
-  iss::E|m(c.{iss::Class::f}.call());
-  iss::E|m(c.{iss::Class::p});
-  iss::E|m(c.{iss::Class::[]}(0));
-  iss::E|m(c.{iss::Class::unary-}());
-  iss::E|m(c.{iss::Class::+}(4));
+  iss::E|m(c.{iss::Class::f}(){() →* core::int*});
+  iss::E|m(c.{iss::Class::f}{() →* core::int*}(){() →* core::int*});
+  iss::E|m(c.{iss::Class::p}{core::int*});
+  iss::E|m(c.{iss::Class::[]}(0){(core::int*) →* core::int*});
+  iss::E|m(c.{iss::Class::unary-}(){() →* core::int*});
+  iss::E|m(c.{iss::Class::+}(4){(core::Object*) →* core::int*});
   let final iss::Class<dynamic>* #t1 = c in block {
-    iss::E|m(#t1.{iss::Class::p});
-    iss::E|m(#t1.{iss::Class::f}());
-    iss::E|m(#t1.{iss::Class::[]}(0));
+    iss::E|m(#t1.{iss::Class::p}{core::int*});
+    iss::E|m(#t1.{iss::Class::f}(){() →* core::int*});
+    iss::E|m(#t1.{iss::Class::[]}(0){(core::int*) →* core::int*});
   } =>#t1;
   let final iss::Class<dynamic>* #t2 = new iss::Class::•<dynamic>() in block {
-    iss::E|m(#t2.{iss::Class::p});
-    iss::E|m(#t2.{iss::Class::f}());
-    iss::E|m(#t2.{iss::Class::[]}(0));
+    iss::E|m(#t2.{iss::Class::p}{core::int*});
+    iss::E|m(#t2.{iss::Class::f}(){() →* core::int*});
+    iss::E|m(#t2.{iss::Class::[]}(0){(core::int*) →* core::int*});
   } =>#t2;
 }
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.expect
index 39658bf..3d387ff 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.expect
@@ -81,7 +81,7 @@
 abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
   generic-covariant-impl field mai::RenderObjectWithChildMixin::ChildType? _child = null;
   get child() → mai::RenderObjectWithChildMixin::ChildType?
-    return this.{mai::RenderObjectWithChildMixin::_child};
+    return this.{mai::RenderObjectWithChildMixin::_child}{mai::RenderObjectWithChildMixin::ChildType?};
 }
 abstract class _RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<T extends mai::RenderBox> extends core::Object implements mai::RenderBox, mai::RenderObjectWithChildMixin<mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin::T> /*isAnonymousMixin*/  {
   synthetic constructor •() → mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin::T>
@@ -91,7 +91,7 @@
 abstract class RenderProxyBoxMixin<T extends mai::RenderBox> extends mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<mai::RenderProxyBoxMixin::T> /*isMixinDeclaration*/  {
   @#C2
   method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool {
-    return let final core::bool? #t1 = let final mai::RenderProxyBoxMixin::T? #t2 = this.{mai::RenderObjectWithChildMixin::child} in #t2.{core::Object::==}(null) ?{core::bool?} null : #t2{mai::RenderProxyBoxMixin::T}.{mai::RenderBox::hitTest}(result, position: position) in #t1.{core::Object::==}(null) ?{core::bool} false : #t1{core::bool};
+    return let final core::bool? #t1 = let final mai::RenderProxyBoxMixin::T? #t2 = this.{mai::RenderObjectWithChildMixin::child}{mai::RenderProxyBoxMixin::T?} in #t2 == null ?{core::bool?} null : #t2{mai::RenderProxyBoxMixin::T}.{mai::RenderBox::hitTest}(result, position: position){(mai::BoxHitTestResult, {required position: mai::Offset}) → core::bool} in #t1 == null ?{core::bool} false : #t1{core::bool};
   }
 }
 abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin extends mai::RenderBox implements mai::RenderObjectWithChildMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
@@ -100,7 +100,7 @@
     : super mai::RenderBox::•()
     ;
   get child() → mai::RenderBox?
-    return this.{mai::RenderObjectWithChildMixin::_child};
+    return this.{mai::RenderObjectWithChildMixin::_child}{mai::RenderBox?};
 }
 abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin extends mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin implements mai::RenderProxyBoxMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
   synthetic constructor •() → mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin
@@ -108,7 +108,7 @@
     ;
   @#C2
   method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool {
-    return let final core::bool? #t3 = let final mai::RenderBox? #t4 = this.{mai::RenderObjectWithChildMixin::child} in #t4.{core::Object::==}(null) ?{core::bool?} null : #t4{mai::RenderBox}.{mai::RenderBox::hitTest}(result, position: position) in #t3.{core::Object::==}(null) ?{core::bool} false : #t3{core::bool};
+    return let final core::bool? #t3 = let final mai::RenderBox? #t4 = this.{mai::RenderObjectWithChildMixin::child}{mai::RenderBox?} in #t4 == null ?{core::bool?} null : #t4{mai::RenderBox}.{mai::RenderBox::hitTest}(result, position: position){(mai::BoxHitTestResult, {required position: mai::Offset}) → core::bool} in #t3 == null ?{core::bool} false : #t3{core::bool};
   }
 }
 class RenderProxyBox extends mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin {
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.transformed.expect
index d142fe2..03d4e82 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
     ;
   @#C1
   method /* from org-dartlang-testcase:///main_lib.dart */ hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C2}) → core::bool {
-    return let final core::bool? #t1 = let final mai::RenderBox? #t2 = this.{mai::RenderObjectWithChildMixin::child} in #t2.{core::Object::==}(null) ?{core::bool?} null : #t2{mai::RenderBox}.{mai::RenderBox::hitTest}(result, position: position) in #t1.{core::Object::==}(null) ?{core::bool} false : #t1{core::bool};
+    return let final core::bool? #t1 = let final mai::RenderBox? #t2 = this.{mai::RenderObjectWithChildMixin::child}{mai::RenderBox?} in #t2 == null ?{core::bool?} null : #t2{mai::RenderBox}.{mai::RenderBox::hitTest}(result, position: position){(mai::BoxHitTestResult, {required position: mai::Offset}) → core::bool} in #t1 == null ?{core::bool} false : #t1{core::bool};
   }
 }
 abstract class _RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin extends self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin implements self::RenderAnimatedOpacityMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
@@ -83,7 +83,7 @@
 abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
   generic-covariant-impl field mai::RenderObjectWithChildMixin::ChildType? _child = null;
   get child() → mai::RenderObjectWithChildMixin::ChildType?
-    return this.{mai::RenderObjectWithChildMixin::_child};
+    return this.{mai::RenderObjectWithChildMixin::_child}{mai::RenderObjectWithChildMixin::ChildType?};
 }
 abstract class _RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<T extends mai::RenderBox> extends core::Object implements mai::RenderBox, mai::RenderObjectWithChildMixin<mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin::T> /*isAnonymousMixin*/  {
   synthetic constructor •() → mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin::T>
@@ -93,7 +93,7 @@
 abstract class RenderProxyBoxMixin<T extends mai::RenderBox> extends mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<mai::RenderProxyBoxMixin::T> /*isMixinDeclaration*/  {
   @#C1
   method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C2}) → core::bool {
-    return let final core::bool? #t3 = let final mai::RenderProxyBoxMixin::T? #t4 = this.{mai::RenderObjectWithChildMixin::child} in #t4.{core::Object::==}(null) ?{core::bool?} null : #t4{mai::RenderProxyBoxMixin::T}.{mai::RenderBox::hitTest}(result, position: position) in #t3.{core::Object::==}(null) ?{core::bool} false : #t3{core::bool};
+    return let final core::bool? #t3 = let final mai::RenderProxyBoxMixin::T? #t4 = this.{mai::RenderObjectWithChildMixin::child}{mai::RenderProxyBoxMixin::T?} in #t4 == null ?{core::bool?} null : #t4{mai::RenderProxyBoxMixin::T}.{mai::RenderBox::hitTest}(result, position: position){(mai::BoxHitTestResult, {required position: mai::Offset}) → core::bool} in #t3 == null ?{core::bool} false : #t3{core::bool};
   }
 }
 abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin extends mai::RenderBox implements mai::RenderObjectWithChildMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
@@ -102,7 +102,7 @@
     : super mai::RenderBox::•()
     ;
   get child() → mai::RenderBox?
-    return this.{mai::RenderObjectWithChildMixin::_child};
+    return this.{mai::RenderObjectWithChildMixin::_child}{mai::RenderBox?};
 }
 abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin extends mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin implements mai::RenderProxyBoxMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
   synthetic constructor •() → mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin
@@ -110,7 +110,7 @@
     ;
   @#C1
   method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C2}) → core::bool {
-    return let final core::bool? #t5 = let final mai::RenderBox? #t6 = this.{mai::RenderObjectWithChildMixin::child} in #t6.{core::Object::==}(null) ?{core::bool?} null : #t6{mai::RenderBox}.{mai::RenderBox::hitTest}(result, position: position) in #t5.{core::Object::==}(null) ?{core::bool} false : #t5{core::bool};
+    return let final core::bool? #t5 = let final mai::RenderBox? #t6 = this.{mai::RenderObjectWithChildMixin::child}{mai::RenderBox?} in #t6 == null ?{core::bool?} null : #t6{mai::RenderBox}.{mai::RenderBox::hitTest}(result, position: position){(mai::BoxHitTestResult, {required position: mai::Offset}) → core::bool} in #t5 == null ?{core::bool} false : #t5{core::bool};
   }
 }
 class RenderProxyBox extends mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin {
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.expect
index e73124e..9f5295d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.expect
@@ -28,7 +28,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null));
+  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null){(core::int*) →* core::int*});
 }
 
 library /*isNonNullableByDefault*/;
@@ -40,5 +40,5 @@
     : super core::Object::•()
     ;
   method method(core::int? i) → core::int
-    return let final core::int? #t1 = i in #t1.{core::num::==}(null) ?{core::int} 0 : #t1{core::int};
+    return let final core::int? #t1 = i in #t1 == null ?{core::int} 0 : #t1{core::int};
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.transformed.expect
index bfe469f..598ea2c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   method /*isNonNullableByDefault, from org-dartlang-testcase:///mixin_from_opt_in_lib.dart */ method(core::int? i) → core::int
-    return let final core::int? #t1 = i in #t1.{core::num::==}(null) ?{core::int} 0 : #t1{core::int};
+    return let final core::int? #t1 = i in #t1 == null ?{core::int} 0 : #t1{core::int};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -28,7 +28,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null));
+  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null){(core::int*) →* core::int*});
 }
 
 library /*isNonNullableByDefault*/;
@@ -40,5 +40,5 @@
     : super core::Object::•()
     ;
   method method(core::int? i) → core::int
-    return let final core::int? #t2 = i in #t2.{core::num::==}(null) ?{core::int} 0 : #t2{core::int};
+    return let final core::int? #t2 = i in #t2 == null ?{core::int} 0 : #t2{core::int};
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.expect
index a039b1e..d267d60 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.expect
@@ -19,7 +19,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null));
+  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null){(core::int*) → core::int*});
 }
 
 library;
@@ -31,7 +31,7 @@
     : super core::Object::•()
     ;
   method method(core::int* i) → core::int*
-    return let final core::int* #t1 = i in #t1.{core::num::==}(null) ?{core::int*} 0 : #t1;
+    return let final core::int* #t1 = i in #t1 == null ?{core::int*} 0 : #t1;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.transformed.expect
index 9471fb0..2124a43 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   method /*isLegacy, from org-dartlang-testcase:///mixin_from_opt_out_lib.dart */ method(core::int* i) → core::int*
-    return let final core::int* #t1 = i in #t1.{core::num::==}(null) ?{core::int*} 0 : #t1;
+    return let final core::int* #t1 = i in #t1 == null ?{core::int*} 0 : #t1;
   abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
 }
 class Class extends self::_Class&Object&Mixin {
@@ -19,7 +19,7 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null));
+  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null){(core::int*) → core::int*});
 }
 
 library;
@@ -31,7 +31,7 @@
     : super core::Object::•()
     ;
   method method(core::int* i) → core::int*
-    return let final core::int* #t2 = i in #t2.{core::num::==}(null) ?{core::int*} 0 : #t2;
+    return let final core::int* #t2 = i in #t2 == null ?{core::int*} 0 : #t2;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.expect
index c929e9f..ffde2b7 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.expect
@@ -26,59 +26,59 @@
     : super self::Mock::•()
     ;
   no-such-method-forwarder get date() → core::DateTime*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::DateTime*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::DateTime*;
   no-such-method-forwarder set date(core::DateTime* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get expires() → core::DateTime*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::DateTime*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::DateTime*;
   no-such-method-forwarder set expires(core::DateTime* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get ifModifiedSince() → core::DateTime*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::DateTime*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::DateTime*;
   no-such-method-forwarder set ifModifiedSince(core::DateTime* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get host() → core::String*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::String*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder set host(core::String* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get port() → core::int*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set port(core::int* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get contentType() → _ht::ContentType*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} _ht::ContentType*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} _ht::ContentType*;
   no-such-method-forwarder set contentType(_ht::ContentType* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get contentLength() → core::int*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set contentLength(core::int* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get persistentConnection() → core::bool*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C18, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C18, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
   no-such-method-forwarder set persistentConnection(core::bool* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C19, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C19, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get chunkedTransferEncoding() → core::bool*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C20, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C20, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
   no-such-method-forwarder set chunkedTransferEncoding(core::bool* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C21, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C21, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder operator [](core::String* name) → core::List<core::String*>*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C22, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::List<core::String*>*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C22, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::List<core::String*>*;
   no-such-method-forwarder method value(core::String* name) → core::String*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C23, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::String*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C23, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder method add(core::String* name, core::Object* value, {core::bool* preserveHeaderCase = #C24}) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C25, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C26: preserveHeaderCase})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C25, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C26: preserveHeaderCase}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method set(core::String* name, core::Object* value, {core::bool* preserveHeaderCase = #C24}) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C27, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C26: preserveHeaderCase})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C27, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C26: preserveHeaderCase}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method remove(core::String* name, core::Object* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C28, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C28, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method removeAll(core::String* name) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C29, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C29, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method forEach((core::String*, core::List<core::String*>*) →* void action) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C30, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C30, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method noFolding(core::String* name) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C31, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C31, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/_http/http.dart */ clear() → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C32, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C32, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.outline.expect
index e9f1bbe..c139fe9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.outline.expect
@@ -24,59 +24,59 @@
   synthetic constructor •() → self::MockHttpHeaders*
     ;
   no-such-method-forwarder get date() → core::DateTime*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#date, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::DateTime*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#date, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::DateTime*;
   no-such-method-forwarder set date(core::DateTime* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#date=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#date=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get expires() → core::DateTime*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#expires, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::DateTime*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#expires, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::DateTime*;
   no-such-method-forwarder set expires(core::DateTime* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#expires=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#expires=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get ifModifiedSince() → core::DateTime*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#ifModifiedSince, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::DateTime*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#ifModifiedSince, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::DateTime*;
   no-such-method-forwarder set ifModifiedSince(core::DateTime* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#ifModifiedSince=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#ifModifiedSince=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get host() → core::String*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#host, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::String*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#host, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder set host(core::String* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#host=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#host=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get port() → core::int*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#port, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#port, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set port(core::int* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#port=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#port=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get contentType() → _ht::ContentType*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#contentType, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} _ht::ContentType*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#contentType, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} _ht::ContentType*;
   no-such-method-forwarder set contentType(_ht::ContentType* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#contentType=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#contentType=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get contentLength() → core::int*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#contentLength, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#contentLength, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set contentLength(core::int* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#contentLength=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#contentLength=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get persistentConnection() → core::bool*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#persistentConnection, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#persistentConnection, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
   no-such-method-forwarder set persistentConnection(core::bool* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#persistentConnection=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#persistentConnection=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get chunkedTransferEncoding() → core::bool*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#chunkedTransferEncoding, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#chunkedTransferEncoding, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
   no-such-method-forwarder set chunkedTransferEncoding(core::bool* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#chunkedTransferEncoding=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#chunkedTransferEncoding=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder operator [](core::String* name) → core::List<core::String*>*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#[], 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::List<core::String*>*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#[], 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::List<core::String*>*;
   no-such-method-forwarder method value(core::String* name) → core::String*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#value, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::String*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#value, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder method add(core::String* name, core::Object* value, {core::bool* preserveHeaderCase}) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#add, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#preserveHeaderCase: preserveHeaderCase})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#add, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#preserveHeaderCase: preserveHeaderCase}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method set(core::String* name, core::Object* value, {core::bool* preserveHeaderCase}) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#set, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#preserveHeaderCase: preserveHeaderCase})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#set, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#preserveHeaderCase: preserveHeaderCase}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method remove(core::String* name, core::Object* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#remove, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#remove, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method removeAll(core::String* name) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#removeAll, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#removeAll, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method forEach((core::String*, core::List<core::String*>*) →* void action) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#forEach, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#forEach, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method noFolding(core::String* name) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#noFolding, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#noFolding, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/_http/http.dart */ clear() → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#clear, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#clear, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.transformed.expect
index e26b189..a1fdb15 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.transformed.expect
@@ -26,59 +26,59 @@
     : super self::Mock::•()
     ;
   no-such-method-forwarder get date() → core::DateTime*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::DateTime*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::DateTime*;
   no-such-method-forwarder set date(core::DateTime* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get expires() → core::DateTime*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::DateTime*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::DateTime*;
   no-such-method-forwarder set expires(core::DateTime* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get ifModifiedSince() → core::DateTime*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::DateTime*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::DateTime*;
   no-such-method-forwarder set ifModifiedSince(core::DateTime* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get host() → core::String*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::String*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder set host(core::String* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get port() → core::int*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set port(core::int* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get contentType() → _ht::ContentType*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} _ht::ContentType*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} _ht::ContentType*;
   no-such-method-forwarder set contentType(_ht::ContentType* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get contentLength() → core::int*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set contentLength(core::int* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get persistentConnection() → core::bool*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C18, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C18, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
   no-such-method-forwarder set persistentConnection(core::bool* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C19, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C19, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder get chunkedTransferEncoding() → core::bool*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C20, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C20, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
   no-such-method-forwarder set chunkedTransferEncoding(core::bool* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C21, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C21, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder operator [](core::String* name) → core::List<core::String*>*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C22, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(name)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::List<core::String*>*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C22, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(name)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::List<core::String*>*;
   no-such-method-forwarder method value(core::String* name) → core::String*
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C23, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(name)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::String*;
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C23, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(name)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder method add(core::String* name, core::Object* value, {core::bool* preserveHeaderCase = #C24}) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C25, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(name, value)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C26: preserveHeaderCase})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C25, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(name, value)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C26: preserveHeaderCase}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method set(core::String* name, core::Object* value, {core::bool* preserveHeaderCase = #C24}) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C27, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(name, value)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C26: preserveHeaderCase})));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C27, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(name, value)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C26: preserveHeaderCase}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method remove(core::String* name, core::Object* value) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C28, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(name, value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C28, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(name, value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method removeAll(core::String* name) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C29, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(name)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C29, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(name)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method forEach((core::String*, core::List<core::String*>*) →* void action) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C30, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C30, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method noFolding(core::String* name) → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C31, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(name)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C31, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(name)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/_http/http.dart */ clear() → void
-    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C32, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C32, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.expect
index 2617678..3a15eee 100644
--- a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.expect
@@ -137,7 +137,7 @@
 }
 static method throws(() →* void f) → dynamic {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.transformed.expect
index fbb85cb..bf7f391 100644
--- a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.transformed.expect
@@ -137,7 +137,7 @@
 }
 static method throws(() →* void f) → dynamic {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version.dart.weak.expect
index 8bb4374..f6eb3c3 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version.dart.weak.expect
@@ -54,8 +54,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  if(!new self::C::•().{self::C::l}.{self::late::g}.{core::num::==}(1))
+  if(!(new self::C::•().{self::C::l}{self::late*}.{self::late::g}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 1))
     throw "Expected 1";
-  if(!new self::C::•().{self::C::r}.{self::required::g}.{core::num::==}(2))
+  if(!(new self::C::•().{self::C::r}{self::required*}.{self::required::g}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2))
     throw "Expected 2";
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version.dart.weak.transformed.expect
index 8bb4374..f6eb3c3 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version.dart.weak.transformed.expect
@@ -54,8 +54,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  if(!new self::C::•().{self::C::l}.{self::late::g}.{core::num::==}(1))
+  if(!(new self::C::•().{self::C::l}{self::late*}.{self::late::g}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 1))
     throw "Expected 1";
-  if(!new self::C::•().{self::C::r}.{self::required::g}.{core::num::==}(2))
+  if(!(new self::C::•().{self::C::r}{self::required*}.{self::required::g}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2))
     throw "Expected 2";
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version_try_to_trick.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version_try_to_trick.dart.weak.expect
index 8bb4374..f6eb3c3 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version_try_to_trick.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version_try_to_trick.dart.weak.expect
@@ -54,8 +54,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  if(!new self::C::•().{self::C::l}.{self::late::g}.{core::num::==}(1))
+  if(!(new self::C::•().{self::C::l}{self::late*}.{self::late::g}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 1))
     throw "Expected 1";
-  if(!new self::C::•().{self::C::r}.{self::required::g}.{core::num::==}(2))
+  if(!(new self::C::•().{self::C::r}{self::required*}.{self::required::g}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2))
     throw "Expected 2";
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version_try_to_trick.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version_try_to_trick.dart.weak.transformed.expect
index 8bb4374..f6eb3c3 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version_try_to_trick.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version_try_to_trick.dart.weak.transformed.expect
@@ -54,8 +54,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  if(!new self::C::•().{self::C::l}.{self::late::g}.{core::num::==}(1))
+  if(!(new self::C::•().{self::C::l}{self::late*}.{self::late::g}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 1))
     throw "Expected 1";
-  if(!new self::C::•().{self::C::r}.{self::required::g}.{core::num::==}(2))
+  if(!(new self::C::•().{self::C::r}{self::required*}.{self::required::g}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2))
     throw "Expected 2";
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting.dart.weak.expect
index 2794947..9e9eb03 100644
--- a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting.dart.weak.expect
@@ -8,16 +8,16 @@
     : super core::Object::•()
     ;
   method method() → self::Class*
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class*};
   operator [](self::Class* key) → self::Class*
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class*};
   operator []=(self::Class* key, self::Class* value) → void {
     this.{self::Class::field} = value;
   }
   operator +(core::int* value) → self::Class*
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class*};
   operator unary-() → self::Class*
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,123 +36,123 @@
   self::ifNull(null);
 }
 static method propertyAccess(self::Class* c) → void {
-  let final self::Class* #t1 = c in #t1.{self::Class::==}(null) ?{self::Class*} null : #t1.{self::Class::field};
-  let final self::Class* #t2 = c in #t2.{self::Class::==}(null) ?{self::Class*} null : #t2.{self::Class::field} = new self::Class::•();
-  c = let final self::Class* #t3 = c in #t3.{self::Class::==}(null) ?{self::Class*} null : #t3.{self::Class::field} = new self::Class::•();
-  let final self::Class* #t4 = c in #t4.{self::Class::==}(null) ?{self::Class*} null : #t4.{self::Class::method}();
-  self::throws(() → self::Class* => (let final self::Class* #t5 = c in #t5.{self::Class::==}(null) ?{self::Class*} null : #t5.{self::Class::field}).{self::Class::field});
-  let final self::Class* #t6 = let final self::Class* #t7 = c in #t7.{self::Class::==}(null) ?{self::Class*} null : #t7.{self::Class::field} in #t6.{self::Class::==}(null) ?{self::Class*} null : #t6.{self::Class::field};
-  self::throws(() → self::Class* => let final self::Class* #t8 = (let final self::Class* #t9 = c in #t9.{self::Class::==}(null) ?{self::Class*} null : #t9.{self::Class::field}).{self::Class::field} in #t8.{self::Class::==}(null) ?{self::Class*} null : #t8.{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t10 = c in #t10.{self::Class::==}(null) ?{self::Class*} null : #t10.{self::Class::field}).{self::Class::field} = new self::Class::•());
-  let final self::Class* #t11 = let final self::Class* #t12 = c in #t12.{self::Class::==}(null) ?{self::Class*} null : #t12.{self::Class::field} in #t11.{self::Class::==}(null) ?{self::Class*} null : #t11.{self::Class::field} = new self::Class::•();
-  self::throws(() → self::Class* => let final self::Class* #t13 = (let final self::Class* #t14 = c in #t14.{self::Class::==}(null) ?{self::Class*} null : #t14.{self::Class::field}).{self::Class::field} in #t13.{self::Class::==}(null) ?{self::Class*} null : #t13.{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t15 = c in #t15.{self::Class::==}(null) ?{self::Class*} null : #t15.{self::Class::field}).{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t16 = c in #t16.{self::Class::==}(null) ?{self::Class*} null : #t16.{self::Class::field} = new self::Class::•()).{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t17 = c in #t17.{self::Class::==}(null) ?{self::Class*} null : #t17.{self::Class::method}()).{self::Class::field});
-  self::throws(() → self::Class* => c = (let final self::Class* #t18 = c in #t18.{self::Class::==}(null) ?{self::Class*} null : #t18.{self::Class::field}).{self::Class::field} = new self::Class::•());
-  c = let final self::Class* #t19 = let final self::Class* #t20 = c in #t20.{self::Class::==}(null) ?{self::Class*} null : #t20.{self::Class::field} in #t19.{self::Class::==}(null) ?{self::Class*} null : #t19.{self::Class::field} = new self::Class::•();
-  self::throws(() → self::Class* => c = let final self::Class* #t21 = (let final self::Class* #t22 = c in #t22.{self::Class::==}(null) ?{self::Class*} null : #t22.{self::Class::field}).{self::Class::field} in #t21.{self::Class::==}(null) ?{self::Class*} null : #t21.{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t23 = c in #t23.{self::Class::==}(null) ?{self::Class*} null : #t23.{self::Class::field}).{self::Class::method}());
-  let final self::Class* #t24 = c in #t24.{self::Class::==}(null) ?{self::Class*} null : #t24.{self::Class::field} = new self::Class::•().{self::Class::field};
-  c = let final self::Class* #t25 = c in #t25.{self::Class::==}(null) ?{self::Class*} null : #t25.{self::Class::field} = new self::Class::•().{self::Class::field};
-  let final self::Class* #t26 = c in #t26.{self::Class::==}(null) ?{self::Class*} null : #t26.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
-  c = let final self::Class* #t27 = c in #t27.{self::Class::==}(null) ?{self::Class*} null : #t27.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
-  let final self::Class* #t28 = c in #t28.{self::Class::==}(null) ?{self::Class*} null : #t28.{self::Class::field} = new self::Class::•().{self::Class::method}();
-  c = let final self::Class* #t29 = c in #t29.{self::Class::==}(null) ?{self::Class*} null : #t29.{self::Class::field} = new self::Class::•().{self::Class::method}();
-  self::throws(() → self::Class* => (let final self::Class* #t30 = c in #t30.{self::Class::==}(null) ?{self::Class*} null : #t30.{self::Class::method}()).{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t31 = c in #t31.{self::Class::==}(null) ?{self::Class*} null : #t31.{self::Class::method}()).{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t32 = c in #t32.{self::Class::==}(null) ?{self::Class*} null : #t32.{self::Class::method}()).{self::Class::method}());
-  self::throws(() → self::Class* => (let final self::Class* #t33 = c in #t33.{self::Class::==}(null) ?{self::Class*} null : #t33.{self::Class::field}).{self::Class::field}.{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t34 = c in #t34.{self::Class::==}(null) ?{self::Class*} null : #t34.{self::Class::field}).{self::Class::field}.{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => c = (let final self::Class* #t35 = c in #t35.{self::Class::==}(null) ?{self::Class*} null : #t35.{self::Class::field}).{self::Class::field}.{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t36 = c in #t36.{self::Class::==}(null) ?{self::Class*} null : #t36.{self::Class::field}).{self::Class::field}.{self::Class::method}());
-  let final self::Class* #t37 = c in #t37.{self::Class::==}(null) ?{self::Class*} null : #t37.{self::Class::field} = new self::Class::•().{self::Class::field}.{self::Class::field};
-  c = let final self::Class* #t38 = c in #t38.{self::Class::==}(null) ?{self::Class*} null : #t38.{self::Class::field} = new self::Class::•().{self::Class::field}.{self::Class::field};
-  let final self::Class* #t39 = c in #t39.{self::Class::==}(null) ?{self::Class*} null : #t39.{self::Class::field} = new self::Class::•().{self::Class::field}.{self::Class::field} = new self::Class::•();
-  c = let final self::Class* #t40 = c in #t40.{self::Class::==}(null) ?{self::Class*} null : #t40.{self::Class::field} = new self::Class::•().{self::Class::field}.{self::Class::field} = new self::Class::•();
-  let final self::Class* #t41 = c in #t41.{self::Class::==}(null) ?{self::Class*} null : #t41.{self::Class::field} = new self::Class::•().{self::Class::field}.{self::Class::method}();
-  c = let final self::Class* #t42 = c in #t42.{self::Class::==}(null) ?{self::Class*} null : #t42.{self::Class::field} = new self::Class::•().{self::Class::field}.{self::Class::method}();
-  self::throws(() → self::Class* => (let final self::Class* #t43 = c in #t43.{self::Class::==}(null) ?{self::Class*} null : #t43.{self::Class::method}()).{self::Class::field}.{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t44 = c in #t44.{self::Class::==}(null) ?{self::Class*} null : #t44.{self::Class::method}()).{self::Class::field}.{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t45 = c in #t45.{self::Class::==}(null) ?{self::Class*} null : #t45.{self::Class::method}()).{self::Class::field}.{self::Class::method}());
-  self::throws(() → self::Class* => (let final self::Class* #t46 = c in #t46.{self::Class::==}(null) ?{self::Class*} null : #t46.{self::Class::field}).{self::Class::field} = new self::Class::•().{self::Class::field});
-  self::throws(() → self::Class* => c = (let final self::Class* #t47 = c in #t47.{self::Class::==}(null) ?{self::Class*} null : #t47.{self::Class::field}).{self::Class::field} = new self::Class::•().{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t48 = c in #t48.{self::Class::==}(null) ?{self::Class*} null : #t48.{self::Class::field}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => c = (let final self::Class* #t49 = c in #t49.{self::Class::==}(null) ?{self::Class*} null : #t49.{self::Class::field}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t50 = c in #t50.{self::Class::==}(null) ?{self::Class*} null : #t50.{self::Class::field}).{self::Class::field} = new self::Class::•().{self::Class::method}());
-  self::throws(() → self::Class* => c = (let final self::Class* #t51 = c in #t51.{self::Class::==}(null) ?{self::Class*} null : #t51.{self::Class::field}).{self::Class::field} = new self::Class::•().{self::Class::method}());
-  let final self::Class* #t52 = c in #t52.{self::Class::==}(null) ?{self::Class*} null : #t52.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field};
-  c = let final self::Class* #t53 = c in #t53.{self::Class::==}(null) ?{self::Class*} null : #t53.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field};
-  let final self::Class* #t54 = c in #t54.{self::Class::==}(null) ?{self::Class*} null : #t54.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
-  c = let final self::Class* #t55 = c in #t55.{self::Class::==}(null) ?{self::Class*} null : #t55.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
-  let final self::Class* #t56 = c in #t56.{self::Class::==}(null) ?{self::Class*} null : #t56.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::method}();
-  c = let final self::Class* #t57 = c in #t57.{self::Class::==}(null) ?{self::Class*} null : #t57.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::method}();
-  self::throws(() → self::Class* => (let final self::Class* #t58 = c in #t58.{self::Class::==}(null) ?{self::Class*} null : #t58.{self::Class::method}()).{self::Class::field} = new self::Class::•().{self::Class::field});
-  self::throws(() → self::Class* => c = (let final self::Class* #t59 = c in #t59.{self::Class::==}(null) ?{self::Class*} null : #t59.{self::Class::method}()).{self::Class::field} = new self::Class::•().{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t60 = c in #t60.{self::Class::==}(null) ?{self::Class*} null : #t60.{self::Class::method}()).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => c = (let final self::Class* #t61 = c in #t61.{self::Class::==}(null) ?{self::Class*} null : #t61.{self::Class::method}()).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t62 = c in #t62.{self::Class::==}(null) ?{self::Class*} null : #t62.{self::Class::method}()).{self::Class::field} = new self::Class::•().{self::Class::method}());
-  self::throws(() → self::Class* => c = (let final self::Class* #t63 = c in #t63.{self::Class::==}(null) ?{self::Class*} null : #t63.{self::Class::method}()).{self::Class::field} = new self::Class::•().{self::Class::method}());
-  self::throws(() → self::Class* => (let final self::Class* #t64 = c in #t64.{self::Class::==}(null) ?{self::Class*} null : #t64.{self::Class::field}).{self::Class::method}().{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t65 = c in #t65.{self::Class::==}(null) ?{self::Class*} null : #t65.{self::Class::field}).{self::Class::method}().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => c = (let final self::Class* #t66 = c in #t66.{self::Class::==}(null) ?{self::Class*} null : #t66.{self::Class::field}).{self::Class::method}().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t67 = c in #t67.{self::Class::==}(null) ?{self::Class*} null : #t67.{self::Class::field}).{self::Class::method}().{self::Class::method}());
-  let final self::Class* #t68 = c in #t68.{self::Class::==}(null) ?{self::Class*} null : #t68.{self::Class::field} = new self::Class::•().{self::Class::method}().{self::Class::field};
-  c = let final self::Class* #t69 = c in #t69.{self::Class::==}(null) ?{self::Class*} null : #t69.{self::Class::field} = new self::Class::•().{self::Class::method}().{self::Class::field};
-  let final self::Class* #t70 = c in #t70.{self::Class::==}(null) ?{self::Class*} null : #t70.{self::Class::field} = new self::Class::•().{self::Class::method}().{self::Class::field} = new self::Class::•();
-  c = let final self::Class* #t71 = c in #t71.{self::Class::==}(null) ?{self::Class*} null : #t71.{self::Class::field} = new self::Class::•().{self::Class::method}().{self::Class::field} = new self::Class::•();
-  let final self::Class* #t72 = c in #t72.{self::Class::==}(null) ?{self::Class*} null : #t72.{self::Class::field} = new self::Class::•().{self::Class::method}().{self::Class::method}();
-  c = let final self::Class* #t73 = c in #t73.{self::Class::==}(null) ?{self::Class*} null : #t73.{self::Class::field} = new self::Class::•().{self::Class::method}().{self::Class::method}();
-  self::throws(() → self::Class* => (let final self::Class* #t74 = c in #t74.{self::Class::==}(null) ?{self::Class*} null : #t74.{self::Class::method}()).{self::Class::method}().{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t75 = c in #t75.{self::Class::==}(null) ?{self::Class*} null : #t75.{self::Class::method}()).{self::Class::method}().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t76 = c in #t76.{self::Class::==}(null) ?{self::Class*} null : #t76.{self::Class::method}()).{self::Class::method}().{self::Class::method}());
-  let final self::Class* #t77 = let final self::Class* #t78 = c in #t78.{self::Class::==}(null) ?{self::Class*} null : #t78.{self::Class::method}() in #t77.{self::Class::==}(null) ?{self::Class*} null : #t77.{self::Class::method}();
+  let final self::Class* #t1 = c in #t1 == null ?{self::Class*} null : #t1.{self::Class::field}{self::Class*};
+  let final self::Class* #t2 = c in #t2 == null ?{self::Class*} null : #t2.{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t3 = c in #t3 == null ?{self::Class*} null : #t3.{self::Class::field} = new self::Class::•();
+  let final self::Class* #t4 = c in #t4 == null ?{self::Class*} null : #t4.{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t5 = c in #t5 == null ?{self::Class*} null : #t5.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*});
+  let final self::Class* #t6 = let final self::Class* #t7 = c in #t7 == null ?{self::Class*} null : #t7.{self::Class::field}{self::Class*} in #t6 == null ?{self::Class*} null : #t6.{self::Class::field}{self::Class*};
+  self::throws(() → self::Class* => let final self::Class* #t8 = (let final self::Class* #t9 = c in #t9 == null ?{self::Class*} null : #t9.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*} in #t8 == null ?{self::Class*} null : #t8.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t10 = c in #t10 == null ?{self::Class*} null : #t10.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•());
+  let final self::Class* #t11 = let final self::Class* #t12 = c in #t12 == null ?{self::Class*} null : #t12.{self::Class::field}{self::Class*} in #t11 == null ?{self::Class*} null : #t11.{self::Class::field} = new self::Class::•();
+  self::throws(() → self::Class* => let final self::Class* #t13 = (let final self::Class* #t14 = c in #t14 == null ?{self::Class*} null : #t14.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*} in #t13 == null ?{self::Class*} null : #t13.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t15 = c in #t15 == null ?{self::Class*} null : #t15.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t16 = c in #t16 == null ?{self::Class*} null : #t16.{self::Class::field} = new self::Class::•()).{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t17 = c in #t17 == null ?{self::Class*} null : #t17.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t18 = c in #t18 == null ?{self::Class*} null : #t18.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•());
+  c = let final self::Class* #t19 = let final self::Class* #t20 = c in #t20 == null ?{self::Class*} null : #t20.{self::Class::field}{self::Class*} in #t19 == null ?{self::Class*} null : #t19.{self::Class::field} = new self::Class::•();
+  self::throws(() → self::Class* => c = let final self::Class* #t21 = (let final self::Class* #t22 = c in #t22 == null ?{self::Class*} null : #t22.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*} in #t21 == null ?{self::Class*} null : #t21.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t23 = c in #t23 == null ?{self::Class*} null : #t23.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t24 = c in #t24 == null ?{self::Class*} null : #t24.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*};
+  c = let final self::Class* #t25 = c in #t25 == null ?{self::Class*} null : #t25.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*};
+  let final self::Class* #t26 = c in #t26 == null ?{self::Class*} null : #t26.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t27 = c in #t27 == null ?{self::Class*} null : #t27.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
+  let final self::Class* #t28 = c in #t28 == null ?{self::Class*} null : #t28.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*};
+  c = let final self::Class* #t29 = c in #t29 == null ?{self::Class*} null : #t29.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t30 = c in #t30 == null ?{self::Class*} null : #t30.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t31 = c in #t31 == null ?{self::Class*} null : #t31.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t32 = c in #t32 == null ?{self::Class*} null : #t32.{self::Class::method}(){() →* self::Class*}).{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t33 = c in #t33 == null ?{self::Class*} null : #t33.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t34 = c in #t34 == null ?{self::Class*} null : #t34.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => c = (let final self::Class* #t35 = c in #t35 == null ?{self::Class*} null : #t35.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t36 = c in #t36 == null ?{self::Class*} null : #t36.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*}.{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t37 = c in #t37 == null ?{self::Class*} null : #t37.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::field}{self::Class*};
+  c = let final self::Class* #t38 = c in #t38 == null ?{self::Class*} null : #t38.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::field}{self::Class*};
+  let final self::Class* #t39 = c in #t39 == null ?{self::Class*} null : #t39.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t40 = c in #t40 == null ?{self::Class*} null : #t40.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•();
+  let final self::Class* #t41 = c in #t41 == null ?{self::Class*} null : #t41.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::method}(){() →* self::Class*};
+  c = let final self::Class* #t42 = c in #t42 == null ?{self::Class*} null : #t42.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t43 = c in #t43 == null ?{self::Class*} null : #t43.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t44 = c in #t44 == null ?{self::Class*} null : #t44.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t45 = c in #t45 == null ?{self::Class*} null : #t45.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*}.{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t46 = c in #t46 == null ?{self::Class*} null : #t46.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t47 = c in #t47 == null ?{self::Class*} null : #t47.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t48 = c in #t48 == null ?{self::Class*} null : #t48.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => c = (let final self::Class* #t49 = c in #t49 == null ?{self::Class*} null : #t49.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t50 = c in #t50 == null ?{self::Class*} null : #t50.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t51 = c in #t51 == null ?{self::Class*} null : #t51.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t52 = c in #t52 == null ?{self::Class*} null : #t52.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*};
+  c = let final self::Class* #t53 = c in #t53 == null ?{self::Class*} null : #t53.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*};
+  let final self::Class* #t54 = c in #t54 == null ?{self::Class*} null : #t54.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t55 = c in #t55 == null ?{self::Class*} null : #t55.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
+  let final self::Class* #t56 = c in #t56 == null ?{self::Class*} null : #t56.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*};
+  c = let final self::Class* #t57 = c in #t57 == null ?{self::Class*} null : #t57.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t58 = c in #t58 == null ?{self::Class*} null : #t58.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t59 = c in #t59 == null ?{self::Class*} null : #t59.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t60 = c in #t60 == null ?{self::Class*} null : #t60.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => c = (let final self::Class* #t61 = c in #t61 == null ?{self::Class*} null : #t61.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t62 = c in #t62 == null ?{self::Class*} null : #t62.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t63 = c in #t63 == null ?{self::Class*} null : #t63.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t64 = c in #t64 == null ?{self::Class*} null : #t64.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t65 = c in #t65 == null ?{self::Class*} null : #t65.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => c = (let final self::Class* #t66 = c in #t66 == null ?{self::Class*} null : #t66.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t67 = c in #t67 == null ?{self::Class*} null : #t67.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t68 = c in #t68 == null ?{self::Class*} null : #t68.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::field}{self::Class*};
+  c = let final self::Class* #t69 = c in #t69 == null ?{self::Class*} null : #t69.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::field}{self::Class*};
+  let final self::Class* #t70 = c in #t70 == null ?{self::Class*} null : #t70.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t71 = c in #t71 == null ?{self::Class*} null : #t71.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•();
+  let final self::Class* #t72 = c in #t72 == null ?{self::Class*} null : #t72.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::method}(){() →* self::Class*};
+  c = let final self::Class* #t73 = c in #t73 == null ?{self::Class*} null : #t73.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t74 = c in #t74 == null ?{self::Class*} null : #t74.{self::Class::method}(){() →* self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t75 = c in #t75 == null ?{self::Class*} null : #t75.{self::Class::method}(){() →* self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t76 = c in #t76 == null ?{self::Class*} null : #t76.{self::Class::method}(){() →* self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t77 = let final self::Class* #t78 = c in #t78 == null ?{self::Class*} null : #t78.{self::Class::method}(){() →* self::Class*} in #t77 == null ?{self::Class*} null : #t77.{self::Class::method}(){() →* self::Class*};
 }
 static method indexAccess(self::Class* c) → void {
-  self::throws(() → self::Class* => (let final self::Class* #t79 = c in #t79.{self::Class::==}(null) ?{self::Class*} null : #t79.{self::Class::field}).{self::Class::[]}(c));
-  self::throws(() → self::Class* => let final self::Class* #t80 = let final self::Class* #t81 = c in #t81.{self::Class::==}(null) ?{self::Class*} null : #t81.{self::Class::field} in let final self::Class* #t82 = c in let final self::Class* #t83 = new self::Class::•() in let final void #t84 = #t80.{self::Class::[]=}(#t82, #t83) in #t83);
-  self::throws(() → self::Class* => c = let final self::Class* #t85 = let final self::Class* #t86 = c in #t86.{self::Class::==}(null) ?{self::Class*} null : #t86.{self::Class::field} in let final self::Class* #t87 = c in let final self::Class* #t88 = new self::Class::•() in let final void #t89 = #t85.{self::Class::[]=}(#t87, #t88) in #t88);
-  self::throws(() → self::Class* => (let final self::Class* #t90 = c in #t90.{self::Class::==}(null) ?{self::Class*} null : #t90.{self::Class::field}).{self::Class::[]}(c).{self::Class::method}());
-  self::throws(() → self::Class* => let final self::Class* #t91 = let final self::Class* #t92 = c in #t92.{self::Class::==}(null) ?{self::Class*} null : #t92.{self::Class::field} in let final self::Class* #t93 = c in let final self::Class* #t94 = #t91.{self::Class::[]}(#t93).{self::Class::+}(0) in let final void #t95 = #t91.{self::Class::[]=}(#t93, #t94) in #t94);
-  self::throws(() → self::Class* => c = let final self::Class* #t96 = let final self::Class* #t97 = c in #t97.{self::Class::==}(null) ?{self::Class*} null : #t97.{self::Class::field} in let final self::Class* #t98 = c in let final self::Class* #t99 = #t96.{self::Class::[]}(#t98).{self::Class::+}(0) in let final void #t100 = #t96.{self::Class::[]=}(#t98, #t99) in #t99);
-  self::throws(() → self::Class* => let final self::Class* #t101 = let final self::Class* #t102 = c in #t102.{self::Class::==}(null) ?{self::Class*} null : #t102.{self::Class::field} in let final self::Class* #t103 = c in let final self::Class* #t104 = #t101.{self::Class::[]}(#t103) in let final void #t105 = #t101.{self::Class::[]=}(#t103, #t104.{self::Class::+}(1)) in #t104);
-  self::throws(() → self::Class* => c = let final self::Class* #t106 = let final self::Class* #t107 = c in #t107.{self::Class::==}(null) ?{self::Class*} null : #t107.{self::Class::field} in let final self::Class* #t108 = c in let final self::Class* #t109 = #t106.{self::Class::[]}(#t108) in let final void #t110 = #t106.{self::Class::[]=}(#t108, #t109.{self::Class::+}(1)) in #t109);
-  self::throws(() → self::Class* => let final self::Class* #t111 = let final self::Class* #t112 = c in #t112.{self::Class::==}(null) ?{self::Class*} null : #t112.{self::Class::field} in let final self::Class* #t113 = c in let final self::Class* #t114 = #t111.{self::Class::[]}(#t113).{self::Class::+}(1) in let final void #t115 = #t111.{self::Class::[]=}(#t113, #t114) in #t114);
-  self::throws(() → self::Class* => c = let final self::Class* #t116 = let final self::Class* #t117 = c in #t117.{self::Class::==}(null) ?{self::Class*} null : #t117.{self::Class::field} in let final self::Class* #t118 = c in let final self::Class* #t119 = #t116.{self::Class::[]}(#t118).{self::Class::+}(1) in let final void #t120 = #t116.{self::Class::[]=}(#t118, #t119) in #t119);
-  self::throws(() → self::Class* => (let final self::Class* #t121 = c in #t121.{self::Class::==}(null) ?{self::Class*} null : #t121.{self::Class::field}).{self::Class::[]}(c).{self::Class::[]}(c));
-  self::throws(() → self::Class* => let final self::Class* #t122 = (let final self::Class* #t123 = c in #t123.{self::Class::==}(null) ?{self::Class*} null : #t123.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t124 = c in let final self::Class* #t125 = new self::Class::•() in let final void #t126 = #t122.{self::Class::[]=}(#t124, #t125) in #t125);
-  self::throws(() → self::Class* => c = let final self::Class* #t127 = (let final self::Class* #t128 = c in #t128.{self::Class::==}(null) ?{self::Class*} null : #t128.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t129 = c in let final self::Class* #t130 = new self::Class::•() in let final void #t131 = #t127.{self::Class::[]=}(#t129, #t130) in #t130);
-  self::throws(() → self::Class* => (let final self::Class* #t132 = c in #t132.{self::Class::==}(null) ?{self::Class*} null : #t132.{self::Class::field}).{self::Class::[]}(c).{self::Class::[]}(c).{self::Class::method}());
-  self::throws(() → self::Class* => let final self::Class* #t133 = (let final self::Class* #t134 = c in #t134.{self::Class::==}(null) ?{self::Class*} null : #t134.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t135 = c in let final self::Class* #t136 = #t133.{self::Class::[]}(#t135).{self::Class::+}(0) in let final void #t137 = #t133.{self::Class::[]=}(#t135, #t136) in #t136);
-  self::throws(() → self::Class* => c = let final self::Class* #t138 = (let final self::Class* #t139 = c in #t139.{self::Class::==}(null) ?{self::Class*} null : #t139.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t140 = c in let final self::Class* #t141 = #t138.{self::Class::[]}(#t140).{self::Class::+}(0) in let final void #t142 = #t138.{self::Class::[]=}(#t140, #t141) in #t141);
-  self::throws(() → self::Class* => let final self::Class* #t143 = (let final self::Class* #t144 = c in #t144.{self::Class::==}(null) ?{self::Class*} null : #t144.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t145 = c in let final self::Class* #t146 = #t143.{self::Class::[]}(#t145) in let final void #t147 = #t143.{self::Class::[]=}(#t145, #t146.{self::Class::+}(1)) in #t146);
-  self::throws(() → self::Class* => c = let final self::Class* #t148 = (let final self::Class* #t149 = c in #t149.{self::Class::==}(null) ?{self::Class*} null : #t149.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t150 = c in let final self::Class* #t151 = #t148.{self::Class::[]}(#t150) in let final void #t152 = #t148.{self::Class::[]=}(#t150, #t151.{self::Class::+}(1)) in #t151);
-  self::throws(() → self::Class* => let final self::Class* #t153 = (let final self::Class* #t154 = c in #t154.{self::Class::==}(null) ?{self::Class*} null : #t154.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t155 = c in let final self::Class* #t156 = #t153.{self::Class::[]}(#t155).{self::Class::+}(1) in let final void #t157 = #t153.{self::Class::[]=}(#t155, #t156) in #t156);
-  self::throws(() → self::Class* => c = let final self::Class* #t158 = (let final self::Class* #t159 = c in #t159.{self::Class::==}(null) ?{self::Class*} null : #t159.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t160 = c in let final self::Class* #t161 = #t158.{self::Class::[]}(#t160).{self::Class::+}(1) in let final void #t162 = #t158.{self::Class::[]=}(#t160, #t161) in #t161);
+  self::throws(() → self::Class* => (let final self::Class* #t79 = c in #t79 == null ?{self::Class*} null : #t79.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*});
+  self::throws(() → self::Class* => let final self::Class* #t80 = let final self::Class* #t81 = c in #t81 == null ?{self::Class*} null : #t81.{self::Class::field}{self::Class*} in let final self::Class* #t82 = c in let final self::Class* #t83 = new self::Class::•() in let final void #t84 = #t80.{self::Class::[]=}(#t82, #t83){(self::Class*, self::Class*) →* void} in #t83);
+  self::throws(() → self::Class* => c = let final self::Class* #t85 = let final self::Class* #t86 = c in #t86 == null ?{self::Class*} null : #t86.{self::Class::field}{self::Class*} in let final self::Class* #t87 = c in let final self::Class* #t88 = new self::Class::•() in let final void #t89 = #t85.{self::Class::[]=}(#t87, #t88){(self::Class*, self::Class*) →* void} in #t88);
+  self::throws(() → self::Class* => (let final self::Class* #t90 = c in #t90 == null ?{self::Class*} null : #t90.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*}.{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => let final self::Class* #t91 = let final self::Class* #t92 = c in #t92 == null ?{self::Class*} null : #t92.{self::Class::field}{self::Class*} in let final self::Class* #t93 = c in let final self::Class* #t94 = #t91.{self::Class::[]}(#t93){(self::Class*) →* self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t95 = #t91.{self::Class::[]=}(#t93, #t94){(self::Class*, self::Class*) →* void} in #t94);
+  self::throws(() → self::Class* => c = let final self::Class* #t96 = let final self::Class* #t97 = c in #t97 == null ?{self::Class*} null : #t97.{self::Class::field}{self::Class*} in let final self::Class* #t98 = c in let final self::Class* #t99 = #t96.{self::Class::[]}(#t98){(self::Class*) →* self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t100 = #t96.{self::Class::[]=}(#t98, #t99){(self::Class*, self::Class*) →* void} in #t99);
+  self::throws(() → self::Class* => let final self::Class* #t101 = let final self::Class* #t102 = c in #t102 == null ?{self::Class*} null : #t102.{self::Class::field}{self::Class*} in let final self::Class* #t103 = c in let final self::Class* #t104 = #t101.{self::Class::[]}(#t103){(self::Class*) →* self::Class*} in let final void #t105 = #t101.{self::Class::[]=}(#t103, #t104.{self::Class::+}(1){(core::int*) →* self::Class*}){(self::Class*, self::Class*) →* void} in #t104);
+  self::throws(() → self::Class* => c = let final self::Class* #t106 = let final self::Class* #t107 = c in #t107 == null ?{self::Class*} null : #t107.{self::Class::field}{self::Class*} in let final self::Class* #t108 = c in let final self::Class* #t109 = #t106.{self::Class::[]}(#t108){(self::Class*) →* self::Class*} in let final void #t110 = #t106.{self::Class::[]=}(#t108, #t109.{self::Class::+}(1){(core::int*) →* self::Class*}){(self::Class*, self::Class*) →* void} in #t109);
+  self::throws(() → self::Class* => let final self::Class* #t111 = let final self::Class* #t112 = c in #t112 == null ?{self::Class*} null : #t112.{self::Class::field}{self::Class*} in let final self::Class* #t113 = c in let final self::Class* #t114 = #t111.{self::Class::[]}(#t113){(self::Class*) →* self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t115 = #t111.{self::Class::[]=}(#t113, #t114){(self::Class*, self::Class*) →* void} in #t114);
+  self::throws(() → self::Class* => c = let final self::Class* #t116 = let final self::Class* #t117 = c in #t117 == null ?{self::Class*} null : #t117.{self::Class::field}{self::Class*} in let final self::Class* #t118 = c in let final self::Class* #t119 = #t116.{self::Class::[]}(#t118){(self::Class*) →* self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t120 = #t116.{self::Class::[]=}(#t118, #t119){(self::Class*, self::Class*) →* void} in #t119);
+  self::throws(() → self::Class* => (let final self::Class* #t121 = c in #t121 == null ?{self::Class*} null : #t121.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*}.{self::Class::[]}(c){(self::Class*) →* self::Class*});
+  self::throws(() → self::Class* => let final self::Class* #t122 = (let final self::Class* #t123 = c in #t123 == null ?{self::Class*} null : #t123.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t124 = c in let final self::Class* #t125 = new self::Class::•() in let final void #t126 = #t122.{self::Class::[]=}(#t124, #t125){(self::Class*, self::Class*) →* void} in #t125);
+  self::throws(() → self::Class* => c = let final self::Class* #t127 = (let final self::Class* #t128 = c in #t128 == null ?{self::Class*} null : #t128.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t129 = c in let final self::Class* #t130 = new self::Class::•() in let final void #t131 = #t127.{self::Class::[]=}(#t129, #t130){(self::Class*, self::Class*) →* void} in #t130);
+  self::throws(() → self::Class* => (let final self::Class* #t132 = c in #t132 == null ?{self::Class*} null : #t132.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*}.{self::Class::[]}(c){(self::Class*) →* self::Class*}.{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => let final self::Class* #t133 = (let final self::Class* #t134 = c in #t134 == null ?{self::Class*} null : #t134.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t135 = c in let final self::Class* #t136 = #t133.{self::Class::[]}(#t135){(self::Class*) →* self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t137 = #t133.{self::Class::[]=}(#t135, #t136){(self::Class*, self::Class*) →* void} in #t136);
+  self::throws(() → self::Class* => c = let final self::Class* #t138 = (let final self::Class* #t139 = c in #t139 == null ?{self::Class*} null : #t139.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t140 = c in let final self::Class* #t141 = #t138.{self::Class::[]}(#t140){(self::Class*) →* self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t142 = #t138.{self::Class::[]=}(#t140, #t141){(self::Class*, self::Class*) →* void} in #t141);
+  self::throws(() → self::Class* => let final self::Class* #t143 = (let final self::Class* #t144 = c in #t144 == null ?{self::Class*} null : #t144.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t145 = c in let final self::Class* #t146 = #t143.{self::Class::[]}(#t145){(self::Class*) →* self::Class*} in let final void #t147 = #t143.{self::Class::[]=}(#t145, #t146.{self::Class::+}(1){(core::int*) →* self::Class*}){(self::Class*, self::Class*) →* void} in #t146);
+  self::throws(() → self::Class* => c = let final self::Class* #t148 = (let final self::Class* #t149 = c in #t149 == null ?{self::Class*} null : #t149.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t150 = c in let final self::Class* #t151 = #t148.{self::Class::[]}(#t150){(self::Class*) →* self::Class*} in let final void #t152 = #t148.{self::Class::[]=}(#t150, #t151.{self::Class::+}(1){(core::int*) →* self::Class*}){(self::Class*, self::Class*) →* void} in #t151);
+  self::throws(() → self::Class* => let final self::Class* #t153 = (let final self::Class* #t154 = c in #t154 == null ?{self::Class*} null : #t154.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t155 = c in let final self::Class* #t156 = #t153.{self::Class::[]}(#t155){(self::Class*) →* self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t157 = #t153.{self::Class::[]=}(#t155, #t156){(self::Class*, self::Class*) →* void} in #t156);
+  self::throws(() → self::Class* => c = let final self::Class* #t158 = (let final self::Class* #t159 = c in #t159 == null ?{self::Class*} null : #t159.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t160 = c in let final self::Class* #t161 = #t158.{self::Class::[]}(#t160){(self::Class*) →* self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t162 = #t158.{self::Class::[]=}(#t160, #t161){(self::Class*, self::Class*) →* void} in #t161);
 }
 static method operatorAccess(self::Class* c) → void {
-  self::throws(() → self::Class* => (let final self::Class* #t163 = c in #t163.{self::Class::==}(null) ?{self::Class*} null : #t163.{self::Class::field}).{self::Class::+}(0));
-  self::throws(() → self::Class* => (let final self::Class* #t164 = c in #t164.{self::Class::==}(null) ?{self::Class*} null : #t164.{self::Class::field}).{self::Class::unary-}());
-  let final self::Class* #t165 = c in #t165.{self::Class::==}(null) ?{self::Class*} null : #t165.{self::Class::field} = #t165.{self::Class::field}.{self::Class::+}(0);
-  c = let final self::Class* #t166 = c in #t166.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t167 = #t166.{self::Class::field}.{self::Class::+}(0) in let final void #t168 = #t166.{self::Class::field} = #t167 in #t167;
-  self::throws(() → self::Class* => let final self::Class* #t169 = let final self::Class* #t170 = c in #t170.{self::Class::==}(null) ?{self::Class*} null : #t170.{self::Class::field} in #t169.{self::Class::field} = #t169.{self::Class::field}.{self::Class::+}(0));
-  self::throws(() → self::Class* => c = let final self::Class* #t171 = let final self::Class* #t172 = c in #t172.{self::Class::==}(null) ?{self::Class*} null : #t172.{self::Class::field} in #t171.{self::Class::field} = #t171.{self::Class::field}.{self::Class::+}(0));
-  let final self::Class* #t173 = c in #t173.{self::Class::==}(null) ?{self::Class*} null : #t173.{self::Class::field} = #t173.{self::Class::field}.{self::Class::+}(1);
-  c = let final self::Class* #t174 = c in #t174.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t175 = #t174.{self::Class::field} in let final void #t176 = #t174.{self::Class::field} = #t175.{self::Class::+}(1) in #t175;
-  let final self::Class* #t177 = c in #t177.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t178 = #t177.{self::Class::field}.{self::Class::+}(1) in let final void #t179 = #t177.{self::Class::field} = #t178 in #t178;
-  c = let final self::Class* #t180 = c in #t180.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t181 = #t180.{self::Class::field}.{self::Class::+}(1) in let final void #t182 = #t180.{self::Class::field} = #t181 in #t181;
+  self::throws(() → self::Class* => (let final self::Class* #t163 = c in #t163 == null ?{self::Class*} null : #t163.{self::Class::field}{self::Class*}).{self::Class::+}(0){(core::int*) →* self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t164 = c in #t164 == null ?{self::Class*} null : #t164.{self::Class::field}{self::Class*}).{self::Class::unary-}(){() →* self::Class*});
+  let final self::Class* #t165 = c in #t165 == null ?{self::Class*} null : #t165.{self::Class::field} = #t165.{self::Class::field}{self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*};
+  c = let final self::Class* #t166 = c in #t166 == null ?{self::Class*} null : let final self::Class* #t167 = #t166.{self::Class::field}{self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t168 = #t166.{self::Class::field} = #t167 in #t167;
+  self::throws(() → self::Class* => let final self::Class* #t169 = let final self::Class* #t170 = c in #t170 == null ?{self::Class*} null : #t170.{self::Class::field}{self::Class*} in #t169.{self::Class::field} = #t169.{self::Class::field}{self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*});
+  self::throws(() → self::Class* => c = let final self::Class* #t171 = let final self::Class* #t172 = c in #t172 == null ?{self::Class*} null : #t172.{self::Class::field}{self::Class*} in #t171.{self::Class::field} = #t171.{self::Class::field}{self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*});
+  let final self::Class* #t173 = c in #t173 == null ?{self::Class*} null : #t173.{self::Class::field} = #t173.{self::Class::field}{self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*};
+  c = let final self::Class* #t174 = c in #t174 == null ?{self::Class*} null : let final self::Class* #t175 = #t174.{self::Class::field}{self::Class*} in let final void #t176 = #t174.{self::Class::field} = #t175.{self::Class::+}(1){(core::int*) →* self::Class*} in #t175;
+  let final self::Class* #t177 = c in #t177 == null ?{self::Class*} null : let final self::Class* #t178 = #t177.{self::Class::field}{self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t179 = #t177.{self::Class::field} = #t178 in #t178;
+  c = let final self::Class* #t180 = c in #t180 == null ?{self::Class*} null : let final self::Class* #t181 = #t180.{self::Class::field}{self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t182 = #t180.{self::Class::field} = #t181 in #t181;
 }
 static method ifNull(self::Class* c) → void {
-  let final self::Class* #t183 = c in #t183.{self::Class::==}(null) ?{self::Class*} null : #t183.{self::Class::field}.{self::Class::==}(null) ?{self::Class*} #t183.{self::Class::field} = c : null;
-  c = let final self::Class* #t184 = c in #t184.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t185 = #t184.{self::Class::field} in #t185.{self::Class::==}(null) ?{self::Class*} #t184.{self::Class::field} = c : #t185;
-  self::throws(() → self::Class* => let final self::Class* #t186 = let final self::Class* #t187 = c in #t187.{self::Class::==}(null) ?{self::Class*} null : #t187.{self::Class::field} in let final self::Class* #t188 = #t186.{self::Class::field} in #t188.{self::Class::==}(null) ?{self::Class*} #t186.{self::Class::field} = c : #t188);
-  self::throws(() → self::Class* => c = let final self::Class* #t189 = let final self::Class* #t190 = c in #t190.{self::Class::==}(null) ?{self::Class*} null : #t190.{self::Class::field} in let final self::Class* #t191 = #t189.{self::Class::field} in #t191.{self::Class::==}(null) ?{self::Class*} #t189.{self::Class::field} = c : #t191);
-  self::throws(() → self::Class* => let final self::Class* #t192 = let final self::Class* #t193 = c in #t193.{self::Class::==}(null) ?{self::Class*} null : #t193.{self::Class::field} in let final self::Class* #t194 = c in let final self::Class* #t195 = #t192.{self::Class::[]}(#t194) in #t195.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t196 = c in let final void #t197 = #t192.{self::Class::[]=}(#t194, #t196) in #t196 : #t195);
-  self::throws(() → self::Class* => c = let final self::Class* #t198 = let final self::Class* #t199 = c in #t199.{self::Class::==}(null) ?{self::Class*} null : #t199.{self::Class::field} in let final self::Class* #t200 = c in let final self::Class* #t201 = #t198.{self::Class::[]}(#t200) in #t201.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t202 = c in let final void #t203 = #t198.{self::Class::[]=}(#t200, #t202) in #t202 : #t201);
+  let final self::Class* #t183 = c in #t183 == null ?{self::Class*} null : #t183.{self::Class::field}{self::Class*} == null ?{self::Class*} #t183.{self::Class::field} = c : null;
+  c = let final self::Class* #t184 = c in #t184 == null ?{self::Class*} null : let final self::Class* #t185 = #t184.{self::Class::field}{self::Class*} in #t185 == null ?{self::Class*} #t184.{self::Class::field} = c : #t185;
+  self::throws(() → self::Class* => let final self::Class* #t186 = let final self::Class* #t187 = c in #t187 == null ?{self::Class*} null : #t187.{self::Class::field}{self::Class*} in let final self::Class* #t188 = #t186.{self::Class::field}{self::Class*} in #t188 == null ?{self::Class*} #t186.{self::Class::field} = c : #t188);
+  self::throws(() → self::Class* => c = let final self::Class* #t189 = let final self::Class* #t190 = c in #t190 == null ?{self::Class*} null : #t190.{self::Class::field}{self::Class*} in let final self::Class* #t191 = #t189.{self::Class::field}{self::Class*} in #t191 == null ?{self::Class*} #t189.{self::Class::field} = c : #t191);
+  self::throws(() → self::Class* => let final self::Class* #t192 = let final self::Class* #t193 = c in #t193 == null ?{self::Class*} null : #t193.{self::Class::field}{self::Class*} in let final self::Class* #t194 = c in let final self::Class* #t195 = #t192.{self::Class::[]}(#t194){(self::Class*) →* self::Class*} in #t195 == null ?{self::Class*} let final self::Class* #t196 = c in let final void #t197 = #t192.{self::Class::[]=}(#t194, #t196){(self::Class*, self::Class*) →* void} in #t196 : #t195);
+  self::throws(() → self::Class* => c = let final self::Class* #t198 = let final self::Class* #t199 = c in #t199 == null ?{self::Class*} null : #t199.{self::Class::field}{self::Class*} in let final self::Class* #t200 = c in let final self::Class* #t201 = #t198.{self::Class::[]}(#t200){(self::Class*) →* self::Class*} in #t201 == null ?{self::Class*} let final self::Class* #t202 = c in let final void #t203 = #t198.{self::Class::[]=}(#t200, #t202){(self::Class*, self::Class*) →* void} in #t202 : #t201);
 }
 static method throws(() →* void f) → void {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting.dart.weak.transformed.expect
index 2794947..9e9eb03 100644
--- a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting.dart.weak.transformed.expect
@@ -8,16 +8,16 @@
     : super core::Object::•()
     ;
   method method() → self::Class*
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class*};
   operator [](self::Class* key) → self::Class*
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class*};
   operator []=(self::Class* key, self::Class* value) → void {
     this.{self::Class::field} = value;
   }
   operator +(core::int* value) → self::Class*
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class*};
   operator unary-() → self::Class*
-    return this.{self::Class::field};
+    return this.{self::Class::field}{self::Class*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,123 +36,123 @@
   self::ifNull(null);
 }
 static method propertyAccess(self::Class* c) → void {
-  let final self::Class* #t1 = c in #t1.{self::Class::==}(null) ?{self::Class*} null : #t1.{self::Class::field};
-  let final self::Class* #t2 = c in #t2.{self::Class::==}(null) ?{self::Class*} null : #t2.{self::Class::field} = new self::Class::•();
-  c = let final self::Class* #t3 = c in #t3.{self::Class::==}(null) ?{self::Class*} null : #t3.{self::Class::field} = new self::Class::•();
-  let final self::Class* #t4 = c in #t4.{self::Class::==}(null) ?{self::Class*} null : #t4.{self::Class::method}();
-  self::throws(() → self::Class* => (let final self::Class* #t5 = c in #t5.{self::Class::==}(null) ?{self::Class*} null : #t5.{self::Class::field}).{self::Class::field});
-  let final self::Class* #t6 = let final self::Class* #t7 = c in #t7.{self::Class::==}(null) ?{self::Class*} null : #t7.{self::Class::field} in #t6.{self::Class::==}(null) ?{self::Class*} null : #t6.{self::Class::field};
-  self::throws(() → self::Class* => let final self::Class* #t8 = (let final self::Class* #t9 = c in #t9.{self::Class::==}(null) ?{self::Class*} null : #t9.{self::Class::field}).{self::Class::field} in #t8.{self::Class::==}(null) ?{self::Class*} null : #t8.{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t10 = c in #t10.{self::Class::==}(null) ?{self::Class*} null : #t10.{self::Class::field}).{self::Class::field} = new self::Class::•());
-  let final self::Class* #t11 = let final self::Class* #t12 = c in #t12.{self::Class::==}(null) ?{self::Class*} null : #t12.{self::Class::field} in #t11.{self::Class::==}(null) ?{self::Class*} null : #t11.{self::Class::field} = new self::Class::•();
-  self::throws(() → self::Class* => let final self::Class* #t13 = (let final self::Class* #t14 = c in #t14.{self::Class::==}(null) ?{self::Class*} null : #t14.{self::Class::field}).{self::Class::field} in #t13.{self::Class::==}(null) ?{self::Class*} null : #t13.{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t15 = c in #t15.{self::Class::==}(null) ?{self::Class*} null : #t15.{self::Class::field}).{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t16 = c in #t16.{self::Class::==}(null) ?{self::Class*} null : #t16.{self::Class::field} = new self::Class::•()).{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t17 = c in #t17.{self::Class::==}(null) ?{self::Class*} null : #t17.{self::Class::method}()).{self::Class::field});
-  self::throws(() → self::Class* => c = (let final self::Class* #t18 = c in #t18.{self::Class::==}(null) ?{self::Class*} null : #t18.{self::Class::field}).{self::Class::field} = new self::Class::•());
-  c = let final self::Class* #t19 = let final self::Class* #t20 = c in #t20.{self::Class::==}(null) ?{self::Class*} null : #t20.{self::Class::field} in #t19.{self::Class::==}(null) ?{self::Class*} null : #t19.{self::Class::field} = new self::Class::•();
-  self::throws(() → self::Class* => c = let final self::Class* #t21 = (let final self::Class* #t22 = c in #t22.{self::Class::==}(null) ?{self::Class*} null : #t22.{self::Class::field}).{self::Class::field} in #t21.{self::Class::==}(null) ?{self::Class*} null : #t21.{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t23 = c in #t23.{self::Class::==}(null) ?{self::Class*} null : #t23.{self::Class::field}).{self::Class::method}());
-  let final self::Class* #t24 = c in #t24.{self::Class::==}(null) ?{self::Class*} null : #t24.{self::Class::field} = new self::Class::•().{self::Class::field};
-  c = let final self::Class* #t25 = c in #t25.{self::Class::==}(null) ?{self::Class*} null : #t25.{self::Class::field} = new self::Class::•().{self::Class::field};
-  let final self::Class* #t26 = c in #t26.{self::Class::==}(null) ?{self::Class*} null : #t26.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
-  c = let final self::Class* #t27 = c in #t27.{self::Class::==}(null) ?{self::Class*} null : #t27.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
-  let final self::Class* #t28 = c in #t28.{self::Class::==}(null) ?{self::Class*} null : #t28.{self::Class::field} = new self::Class::•().{self::Class::method}();
-  c = let final self::Class* #t29 = c in #t29.{self::Class::==}(null) ?{self::Class*} null : #t29.{self::Class::field} = new self::Class::•().{self::Class::method}();
-  self::throws(() → self::Class* => (let final self::Class* #t30 = c in #t30.{self::Class::==}(null) ?{self::Class*} null : #t30.{self::Class::method}()).{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t31 = c in #t31.{self::Class::==}(null) ?{self::Class*} null : #t31.{self::Class::method}()).{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t32 = c in #t32.{self::Class::==}(null) ?{self::Class*} null : #t32.{self::Class::method}()).{self::Class::method}());
-  self::throws(() → self::Class* => (let final self::Class* #t33 = c in #t33.{self::Class::==}(null) ?{self::Class*} null : #t33.{self::Class::field}).{self::Class::field}.{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t34 = c in #t34.{self::Class::==}(null) ?{self::Class*} null : #t34.{self::Class::field}).{self::Class::field}.{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => c = (let final self::Class* #t35 = c in #t35.{self::Class::==}(null) ?{self::Class*} null : #t35.{self::Class::field}).{self::Class::field}.{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t36 = c in #t36.{self::Class::==}(null) ?{self::Class*} null : #t36.{self::Class::field}).{self::Class::field}.{self::Class::method}());
-  let final self::Class* #t37 = c in #t37.{self::Class::==}(null) ?{self::Class*} null : #t37.{self::Class::field} = new self::Class::•().{self::Class::field}.{self::Class::field};
-  c = let final self::Class* #t38 = c in #t38.{self::Class::==}(null) ?{self::Class*} null : #t38.{self::Class::field} = new self::Class::•().{self::Class::field}.{self::Class::field};
-  let final self::Class* #t39 = c in #t39.{self::Class::==}(null) ?{self::Class*} null : #t39.{self::Class::field} = new self::Class::•().{self::Class::field}.{self::Class::field} = new self::Class::•();
-  c = let final self::Class* #t40 = c in #t40.{self::Class::==}(null) ?{self::Class*} null : #t40.{self::Class::field} = new self::Class::•().{self::Class::field}.{self::Class::field} = new self::Class::•();
-  let final self::Class* #t41 = c in #t41.{self::Class::==}(null) ?{self::Class*} null : #t41.{self::Class::field} = new self::Class::•().{self::Class::field}.{self::Class::method}();
-  c = let final self::Class* #t42 = c in #t42.{self::Class::==}(null) ?{self::Class*} null : #t42.{self::Class::field} = new self::Class::•().{self::Class::field}.{self::Class::method}();
-  self::throws(() → self::Class* => (let final self::Class* #t43 = c in #t43.{self::Class::==}(null) ?{self::Class*} null : #t43.{self::Class::method}()).{self::Class::field}.{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t44 = c in #t44.{self::Class::==}(null) ?{self::Class*} null : #t44.{self::Class::method}()).{self::Class::field}.{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t45 = c in #t45.{self::Class::==}(null) ?{self::Class*} null : #t45.{self::Class::method}()).{self::Class::field}.{self::Class::method}());
-  self::throws(() → self::Class* => (let final self::Class* #t46 = c in #t46.{self::Class::==}(null) ?{self::Class*} null : #t46.{self::Class::field}).{self::Class::field} = new self::Class::•().{self::Class::field});
-  self::throws(() → self::Class* => c = (let final self::Class* #t47 = c in #t47.{self::Class::==}(null) ?{self::Class*} null : #t47.{self::Class::field}).{self::Class::field} = new self::Class::•().{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t48 = c in #t48.{self::Class::==}(null) ?{self::Class*} null : #t48.{self::Class::field}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => c = (let final self::Class* #t49 = c in #t49.{self::Class::==}(null) ?{self::Class*} null : #t49.{self::Class::field}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t50 = c in #t50.{self::Class::==}(null) ?{self::Class*} null : #t50.{self::Class::field}).{self::Class::field} = new self::Class::•().{self::Class::method}());
-  self::throws(() → self::Class* => c = (let final self::Class* #t51 = c in #t51.{self::Class::==}(null) ?{self::Class*} null : #t51.{self::Class::field}).{self::Class::field} = new self::Class::•().{self::Class::method}());
-  let final self::Class* #t52 = c in #t52.{self::Class::==}(null) ?{self::Class*} null : #t52.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field};
-  c = let final self::Class* #t53 = c in #t53.{self::Class::==}(null) ?{self::Class*} null : #t53.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field};
-  let final self::Class* #t54 = c in #t54.{self::Class::==}(null) ?{self::Class*} null : #t54.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
-  c = let final self::Class* #t55 = c in #t55.{self::Class::==}(null) ?{self::Class*} null : #t55.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
-  let final self::Class* #t56 = c in #t56.{self::Class::==}(null) ?{self::Class*} null : #t56.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::method}();
-  c = let final self::Class* #t57 = c in #t57.{self::Class::==}(null) ?{self::Class*} null : #t57.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::method}();
-  self::throws(() → self::Class* => (let final self::Class* #t58 = c in #t58.{self::Class::==}(null) ?{self::Class*} null : #t58.{self::Class::method}()).{self::Class::field} = new self::Class::•().{self::Class::field});
-  self::throws(() → self::Class* => c = (let final self::Class* #t59 = c in #t59.{self::Class::==}(null) ?{self::Class*} null : #t59.{self::Class::method}()).{self::Class::field} = new self::Class::•().{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t60 = c in #t60.{self::Class::==}(null) ?{self::Class*} null : #t60.{self::Class::method}()).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => c = (let final self::Class* #t61 = c in #t61.{self::Class::==}(null) ?{self::Class*} null : #t61.{self::Class::method}()).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t62 = c in #t62.{self::Class::==}(null) ?{self::Class*} null : #t62.{self::Class::method}()).{self::Class::field} = new self::Class::•().{self::Class::method}());
-  self::throws(() → self::Class* => c = (let final self::Class* #t63 = c in #t63.{self::Class::==}(null) ?{self::Class*} null : #t63.{self::Class::method}()).{self::Class::field} = new self::Class::•().{self::Class::method}());
-  self::throws(() → self::Class* => (let final self::Class* #t64 = c in #t64.{self::Class::==}(null) ?{self::Class*} null : #t64.{self::Class::field}).{self::Class::method}().{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t65 = c in #t65.{self::Class::==}(null) ?{self::Class*} null : #t65.{self::Class::field}).{self::Class::method}().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => c = (let final self::Class* #t66 = c in #t66.{self::Class::==}(null) ?{self::Class*} null : #t66.{self::Class::field}).{self::Class::method}().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t67 = c in #t67.{self::Class::==}(null) ?{self::Class*} null : #t67.{self::Class::field}).{self::Class::method}().{self::Class::method}());
-  let final self::Class* #t68 = c in #t68.{self::Class::==}(null) ?{self::Class*} null : #t68.{self::Class::field} = new self::Class::•().{self::Class::method}().{self::Class::field};
-  c = let final self::Class* #t69 = c in #t69.{self::Class::==}(null) ?{self::Class*} null : #t69.{self::Class::field} = new self::Class::•().{self::Class::method}().{self::Class::field};
-  let final self::Class* #t70 = c in #t70.{self::Class::==}(null) ?{self::Class*} null : #t70.{self::Class::field} = new self::Class::•().{self::Class::method}().{self::Class::field} = new self::Class::•();
-  c = let final self::Class* #t71 = c in #t71.{self::Class::==}(null) ?{self::Class*} null : #t71.{self::Class::field} = new self::Class::•().{self::Class::method}().{self::Class::field} = new self::Class::•();
-  let final self::Class* #t72 = c in #t72.{self::Class::==}(null) ?{self::Class*} null : #t72.{self::Class::field} = new self::Class::•().{self::Class::method}().{self::Class::method}();
-  c = let final self::Class* #t73 = c in #t73.{self::Class::==}(null) ?{self::Class*} null : #t73.{self::Class::field} = new self::Class::•().{self::Class::method}().{self::Class::method}();
-  self::throws(() → self::Class* => (let final self::Class* #t74 = c in #t74.{self::Class::==}(null) ?{self::Class*} null : #t74.{self::Class::method}()).{self::Class::method}().{self::Class::field});
-  self::throws(() → self::Class* => (let final self::Class* #t75 = c in #t75.{self::Class::==}(null) ?{self::Class*} null : #t75.{self::Class::method}()).{self::Class::method}().{self::Class::field} = new self::Class::•());
-  self::throws(() → self::Class* => (let final self::Class* #t76 = c in #t76.{self::Class::==}(null) ?{self::Class*} null : #t76.{self::Class::method}()).{self::Class::method}().{self::Class::method}());
-  let final self::Class* #t77 = let final self::Class* #t78 = c in #t78.{self::Class::==}(null) ?{self::Class*} null : #t78.{self::Class::method}() in #t77.{self::Class::==}(null) ?{self::Class*} null : #t77.{self::Class::method}();
+  let final self::Class* #t1 = c in #t1 == null ?{self::Class*} null : #t1.{self::Class::field}{self::Class*};
+  let final self::Class* #t2 = c in #t2 == null ?{self::Class*} null : #t2.{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t3 = c in #t3 == null ?{self::Class*} null : #t3.{self::Class::field} = new self::Class::•();
+  let final self::Class* #t4 = c in #t4 == null ?{self::Class*} null : #t4.{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t5 = c in #t5 == null ?{self::Class*} null : #t5.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*});
+  let final self::Class* #t6 = let final self::Class* #t7 = c in #t7 == null ?{self::Class*} null : #t7.{self::Class::field}{self::Class*} in #t6 == null ?{self::Class*} null : #t6.{self::Class::field}{self::Class*};
+  self::throws(() → self::Class* => let final self::Class* #t8 = (let final self::Class* #t9 = c in #t9 == null ?{self::Class*} null : #t9.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*} in #t8 == null ?{self::Class*} null : #t8.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t10 = c in #t10 == null ?{self::Class*} null : #t10.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•());
+  let final self::Class* #t11 = let final self::Class* #t12 = c in #t12 == null ?{self::Class*} null : #t12.{self::Class::field}{self::Class*} in #t11 == null ?{self::Class*} null : #t11.{self::Class::field} = new self::Class::•();
+  self::throws(() → self::Class* => let final self::Class* #t13 = (let final self::Class* #t14 = c in #t14 == null ?{self::Class*} null : #t14.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*} in #t13 == null ?{self::Class*} null : #t13.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t15 = c in #t15 == null ?{self::Class*} null : #t15.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t16 = c in #t16 == null ?{self::Class*} null : #t16.{self::Class::field} = new self::Class::•()).{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t17 = c in #t17 == null ?{self::Class*} null : #t17.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t18 = c in #t18 == null ?{self::Class*} null : #t18.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•());
+  c = let final self::Class* #t19 = let final self::Class* #t20 = c in #t20 == null ?{self::Class*} null : #t20.{self::Class::field}{self::Class*} in #t19 == null ?{self::Class*} null : #t19.{self::Class::field} = new self::Class::•();
+  self::throws(() → self::Class* => c = let final self::Class* #t21 = (let final self::Class* #t22 = c in #t22 == null ?{self::Class*} null : #t22.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*} in #t21 == null ?{self::Class*} null : #t21.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t23 = c in #t23 == null ?{self::Class*} null : #t23.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t24 = c in #t24 == null ?{self::Class*} null : #t24.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*};
+  c = let final self::Class* #t25 = c in #t25 == null ?{self::Class*} null : #t25.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*};
+  let final self::Class* #t26 = c in #t26 == null ?{self::Class*} null : #t26.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t27 = c in #t27 == null ?{self::Class*} null : #t27.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
+  let final self::Class* #t28 = c in #t28 == null ?{self::Class*} null : #t28.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*};
+  c = let final self::Class* #t29 = c in #t29 == null ?{self::Class*} null : #t29.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t30 = c in #t30 == null ?{self::Class*} null : #t30.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t31 = c in #t31 == null ?{self::Class*} null : #t31.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t32 = c in #t32 == null ?{self::Class*} null : #t32.{self::Class::method}(){() →* self::Class*}).{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t33 = c in #t33 == null ?{self::Class*} null : #t33.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t34 = c in #t34 == null ?{self::Class*} null : #t34.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => c = (let final self::Class* #t35 = c in #t35 == null ?{self::Class*} null : #t35.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t36 = c in #t36 == null ?{self::Class*} null : #t36.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*}.{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t37 = c in #t37 == null ?{self::Class*} null : #t37.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::field}{self::Class*};
+  c = let final self::Class* #t38 = c in #t38 == null ?{self::Class*} null : #t38.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::field}{self::Class*};
+  let final self::Class* #t39 = c in #t39 == null ?{self::Class*} null : #t39.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t40 = c in #t40 == null ?{self::Class*} null : #t40.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•();
+  let final self::Class* #t41 = c in #t41 == null ?{self::Class*} null : #t41.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::method}(){() →* self::Class*};
+  c = let final self::Class* #t42 = c in #t42 == null ?{self::Class*} null : #t42.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t43 = c in #t43 == null ?{self::Class*} null : #t43.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t44 = c in #t44 == null ?{self::Class*} null : #t44.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t45 = c in #t45 == null ?{self::Class*} null : #t45.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*}.{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t46 = c in #t46 == null ?{self::Class*} null : #t46.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t47 = c in #t47 == null ?{self::Class*} null : #t47.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t48 = c in #t48 == null ?{self::Class*} null : #t48.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => c = (let final self::Class* #t49 = c in #t49 == null ?{self::Class*} null : #t49.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t50 = c in #t50 == null ?{self::Class*} null : #t50.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t51 = c in #t51 == null ?{self::Class*} null : #t51.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t52 = c in #t52 == null ?{self::Class*} null : #t52.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*};
+  c = let final self::Class* #t53 = c in #t53 == null ?{self::Class*} null : #t53.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*};
+  let final self::Class* #t54 = c in #t54 == null ?{self::Class*} null : #t54.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t55 = c in #t55 == null ?{self::Class*} null : #t55.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
+  let final self::Class* #t56 = c in #t56 == null ?{self::Class*} null : #t56.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*};
+  c = let final self::Class* #t57 = c in #t57 == null ?{self::Class*} null : #t57.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t58 = c in #t58 == null ?{self::Class*} null : #t58.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t59 = c in #t59 == null ?{self::Class*} null : #t59.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t60 = c in #t60 == null ?{self::Class*} null : #t60.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => c = (let final self::Class* #t61 = c in #t61 == null ?{self::Class*} null : #t61.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t62 = c in #t62 == null ?{self::Class*} null : #t62.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t63 = c in #t63 == null ?{self::Class*} null : #t63.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t64 = c in #t64 == null ?{self::Class*} null : #t64.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t65 = c in #t65 == null ?{self::Class*} null : #t65.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => c = (let final self::Class* #t66 = c in #t66 == null ?{self::Class*} null : #t66.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t67 = c in #t67 == null ?{self::Class*} null : #t67.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t68 = c in #t68 == null ?{self::Class*} null : #t68.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::field}{self::Class*};
+  c = let final self::Class* #t69 = c in #t69 == null ?{self::Class*} null : #t69.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::field}{self::Class*};
+  let final self::Class* #t70 = c in #t70 == null ?{self::Class*} null : #t70.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t71 = c in #t71 == null ?{self::Class*} null : #t71.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•();
+  let final self::Class* #t72 = c in #t72 == null ?{self::Class*} null : #t72.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::method}(){() →* self::Class*};
+  c = let final self::Class* #t73 = c in #t73 == null ?{self::Class*} null : #t73.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t74 = c in #t74 == null ?{self::Class*} null : #t74.{self::Class::method}(){() →* self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t75 = c in #t75 == null ?{self::Class*} null : #t75.{self::Class::method}(){() →* self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t76 = c in #t76 == null ?{self::Class*} null : #t76.{self::Class::method}(){() →* self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t77 = let final self::Class* #t78 = c in #t78 == null ?{self::Class*} null : #t78.{self::Class::method}(){() →* self::Class*} in #t77 == null ?{self::Class*} null : #t77.{self::Class::method}(){() →* self::Class*};
 }
 static method indexAccess(self::Class* c) → void {
-  self::throws(() → self::Class* => (let final self::Class* #t79 = c in #t79.{self::Class::==}(null) ?{self::Class*} null : #t79.{self::Class::field}).{self::Class::[]}(c));
-  self::throws(() → self::Class* => let final self::Class* #t80 = let final self::Class* #t81 = c in #t81.{self::Class::==}(null) ?{self::Class*} null : #t81.{self::Class::field} in let final self::Class* #t82 = c in let final self::Class* #t83 = new self::Class::•() in let final void #t84 = #t80.{self::Class::[]=}(#t82, #t83) in #t83);
-  self::throws(() → self::Class* => c = let final self::Class* #t85 = let final self::Class* #t86 = c in #t86.{self::Class::==}(null) ?{self::Class*} null : #t86.{self::Class::field} in let final self::Class* #t87 = c in let final self::Class* #t88 = new self::Class::•() in let final void #t89 = #t85.{self::Class::[]=}(#t87, #t88) in #t88);
-  self::throws(() → self::Class* => (let final self::Class* #t90 = c in #t90.{self::Class::==}(null) ?{self::Class*} null : #t90.{self::Class::field}).{self::Class::[]}(c).{self::Class::method}());
-  self::throws(() → self::Class* => let final self::Class* #t91 = let final self::Class* #t92 = c in #t92.{self::Class::==}(null) ?{self::Class*} null : #t92.{self::Class::field} in let final self::Class* #t93 = c in let final self::Class* #t94 = #t91.{self::Class::[]}(#t93).{self::Class::+}(0) in let final void #t95 = #t91.{self::Class::[]=}(#t93, #t94) in #t94);
-  self::throws(() → self::Class* => c = let final self::Class* #t96 = let final self::Class* #t97 = c in #t97.{self::Class::==}(null) ?{self::Class*} null : #t97.{self::Class::field} in let final self::Class* #t98 = c in let final self::Class* #t99 = #t96.{self::Class::[]}(#t98).{self::Class::+}(0) in let final void #t100 = #t96.{self::Class::[]=}(#t98, #t99) in #t99);
-  self::throws(() → self::Class* => let final self::Class* #t101 = let final self::Class* #t102 = c in #t102.{self::Class::==}(null) ?{self::Class*} null : #t102.{self::Class::field} in let final self::Class* #t103 = c in let final self::Class* #t104 = #t101.{self::Class::[]}(#t103) in let final void #t105 = #t101.{self::Class::[]=}(#t103, #t104.{self::Class::+}(1)) in #t104);
-  self::throws(() → self::Class* => c = let final self::Class* #t106 = let final self::Class* #t107 = c in #t107.{self::Class::==}(null) ?{self::Class*} null : #t107.{self::Class::field} in let final self::Class* #t108 = c in let final self::Class* #t109 = #t106.{self::Class::[]}(#t108) in let final void #t110 = #t106.{self::Class::[]=}(#t108, #t109.{self::Class::+}(1)) in #t109);
-  self::throws(() → self::Class* => let final self::Class* #t111 = let final self::Class* #t112 = c in #t112.{self::Class::==}(null) ?{self::Class*} null : #t112.{self::Class::field} in let final self::Class* #t113 = c in let final self::Class* #t114 = #t111.{self::Class::[]}(#t113).{self::Class::+}(1) in let final void #t115 = #t111.{self::Class::[]=}(#t113, #t114) in #t114);
-  self::throws(() → self::Class* => c = let final self::Class* #t116 = let final self::Class* #t117 = c in #t117.{self::Class::==}(null) ?{self::Class*} null : #t117.{self::Class::field} in let final self::Class* #t118 = c in let final self::Class* #t119 = #t116.{self::Class::[]}(#t118).{self::Class::+}(1) in let final void #t120 = #t116.{self::Class::[]=}(#t118, #t119) in #t119);
-  self::throws(() → self::Class* => (let final self::Class* #t121 = c in #t121.{self::Class::==}(null) ?{self::Class*} null : #t121.{self::Class::field}).{self::Class::[]}(c).{self::Class::[]}(c));
-  self::throws(() → self::Class* => let final self::Class* #t122 = (let final self::Class* #t123 = c in #t123.{self::Class::==}(null) ?{self::Class*} null : #t123.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t124 = c in let final self::Class* #t125 = new self::Class::•() in let final void #t126 = #t122.{self::Class::[]=}(#t124, #t125) in #t125);
-  self::throws(() → self::Class* => c = let final self::Class* #t127 = (let final self::Class* #t128 = c in #t128.{self::Class::==}(null) ?{self::Class*} null : #t128.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t129 = c in let final self::Class* #t130 = new self::Class::•() in let final void #t131 = #t127.{self::Class::[]=}(#t129, #t130) in #t130);
-  self::throws(() → self::Class* => (let final self::Class* #t132 = c in #t132.{self::Class::==}(null) ?{self::Class*} null : #t132.{self::Class::field}).{self::Class::[]}(c).{self::Class::[]}(c).{self::Class::method}());
-  self::throws(() → self::Class* => let final self::Class* #t133 = (let final self::Class* #t134 = c in #t134.{self::Class::==}(null) ?{self::Class*} null : #t134.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t135 = c in let final self::Class* #t136 = #t133.{self::Class::[]}(#t135).{self::Class::+}(0) in let final void #t137 = #t133.{self::Class::[]=}(#t135, #t136) in #t136);
-  self::throws(() → self::Class* => c = let final self::Class* #t138 = (let final self::Class* #t139 = c in #t139.{self::Class::==}(null) ?{self::Class*} null : #t139.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t140 = c in let final self::Class* #t141 = #t138.{self::Class::[]}(#t140).{self::Class::+}(0) in let final void #t142 = #t138.{self::Class::[]=}(#t140, #t141) in #t141);
-  self::throws(() → self::Class* => let final self::Class* #t143 = (let final self::Class* #t144 = c in #t144.{self::Class::==}(null) ?{self::Class*} null : #t144.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t145 = c in let final self::Class* #t146 = #t143.{self::Class::[]}(#t145) in let final void #t147 = #t143.{self::Class::[]=}(#t145, #t146.{self::Class::+}(1)) in #t146);
-  self::throws(() → self::Class* => c = let final self::Class* #t148 = (let final self::Class* #t149 = c in #t149.{self::Class::==}(null) ?{self::Class*} null : #t149.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t150 = c in let final self::Class* #t151 = #t148.{self::Class::[]}(#t150) in let final void #t152 = #t148.{self::Class::[]=}(#t150, #t151.{self::Class::+}(1)) in #t151);
-  self::throws(() → self::Class* => let final self::Class* #t153 = (let final self::Class* #t154 = c in #t154.{self::Class::==}(null) ?{self::Class*} null : #t154.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t155 = c in let final self::Class* #t156 = #t153.{self::Class::[]}(#t155).{self::Class::+}(1) in let final void #t157 = #t153.{self::Class::[]=}(#t155, #t156) in #t156);
-  self::throws(() → self::Class* => c = let final self::Class* #t158 = (let final self::Class* #t159 = c in #t159.{self::Class::==}(null) ?{self::Class*} null : #t159.{self::Class::field}).{self::Class::[]}(c) in let final self::Class* #t160 = c in let final self::Class* #t161 = #t158.{self::Class::[]}(#t160).{self::Class::+}(1) in let final void #t162 = #t158.{self::Class::[]=}(#t160, #t161) in #t161);
+  self::throws(() → self::Class* => (let final self::Class* #t79 = c in #t79 == null ?{self::Class*} null : #t79.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*});
+  self::throws(() → self::Class* => let final self::Class* #t80 = let final self::Class* #t81 = c in #t81 == null ?{self::Class*} null : #t81.{self::Class::field}{self::Class*} in let final self::Class* #t82 = c in let final self::Class* #t83 = new self::Class::•() in let final void #t84 = #t80.{self::Class::[]=}(#t82, #t83){(self::Class*, self::Class*) →* void} in #t83);
+  self::throws(() → self::Class* => c = let final self::Class* #t85 = let final self::Class* #t86 = c in #t86 == null ?{self::Class*} null : #t86.{self::Class::field}{self::Class*} in let final self::Class* #t87 = c in let final self::Class* #t88 = new self::Class::•() in let final void #t89 = #t85.{self::Class::[]=}(#t87, #t88){(self::Class*, self::Class*) →* void} in #t88);
+  self::throws(() → self::Class* => (let final self::Class* #t90 = c in #t90 == null ?{self::Class*} null : #t90.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*}.{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => let final self::Class* #t91 = let final self::Class* #t92 = c in #t92 == null ?{self::Class*} null : #t92.{self::Class::field}{self::Class*} in let final self::Class* #t93 = c in let final self::Class* #t94 = #t91.{self::Class::[]}(#t93){(self::Class*) →* self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t95 = #t91.{self::Class::[]=}(#t93, #t94){(self::Class*, self::Class*) →* void} in #t94);
+  self::throws(() → self::Class* => c = let final self::Class* #t96 = let final self::Class* #t97 = c in #t97 == null ?{self::Class*} null : #t97.{self::Class::field}{self::Class*} in let final self::Class* #t98 = c in let final self::Class* #t99 = #t96.{self::Class::[]}(#t98){(self::Class*) →* self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t100 = #t96.{self::Class::[]=}(#t98, #t99){(self::Class*, self::Class*) →* void} in #t99);
+  self::throws(() → self::Class* => let final self::Class* #t101 = let final self::Class* #t102 = c in #t102 == null ?{self::Class*} null : #t102.{self::Class::field}{self::Class*} in let final self::Class* #t103 = c in let final self::Class* #t104 = #t101.{self::Class::[]}(#t103){(self::Class*) →* self::Class*} in let final void #t105 = #t101.{self::Class::[]=}(#t103, #t104.{self::Class::+}(1){(core::int*) →* self::Class*}){(self::Class*, self::Class*) →* void} in #t104);
+  self::throws(() → self::Class* => c = let final self::Class* #t106 = let final self::Class* #t107 = c in #t107 == null ?{self::Class*} null : #t107.{self::Class::field}{self::Class*} in let final self::Class* #t108 = c in let final self::Class* #t109 = #t106.{self::Class::[]}(#t108){(self::Class*) →* self::Class*} in let final void #t110 = #t106.{self::Class::[]=}(#t108, #t109.{self::Class::+}(1){(core::int*) →* self::Class*}){(self::Class*, self::Class*) →* void} in #t109);
+  self::throws(() → self::Class* => let final self::Class* #t111 = let final self::Class* #t112 = c in #t112 == null ?{self::Class*} null : #t112.{self::Class::field}{self::Class*} in let final self::Class* #t113 = c in let final self::Class* #t114 = #t111.{self::Class::[]}(#t113){(self::Class*) →* self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t115 = #t111.{self::Class::[]=}(#t113, #t114){(self::Class*, self::Class*) →* void} in #t114);
+  self::throws(() → self::Class* => c = let final self::Class* #t116 = let final self::Class* #t117 = c in #t117 == null ?{self::Class*} null : #t117.{self::Class::field}{self::Class*} in let final self::Class* #t118 = c in let final self::Class* #t119 = #t116.{self::Class::[]}(#t118){(self::Class*) →* self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t120 = #t116.{self::Class::[]=}(#t118, #t119){(self::Class*, self::Class*) →* void} in #t119);
+  self::throws(() → self::Class* => (let final self::Class* #t121 = c in #t121 == null ?{self::Class*} null : #t121.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*}.{self::Class::[]}(c){(self::Class*) →* self::Class*});
+  self::throws(() → self::Class* => let final self::Class* #t122 = (let final self::Class* #t123 = c in #t123 == null ?{self::Class*} null : #t123.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t124 = c in let final self::Class* #t125 = new self::Class::•() in let final void #t126 = #t122.{self::Class::[]=}(#t124, #t125){(self::Class*, self::Class*) →* void} in #t125);
+  self::throws(() → self::Class* => c = let final self::Class* #t127 = (let final self::Class* #t128 = c in #t128 == null ?{self::Class*} null : #t128.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t129 = c in let final self::Class* #t130 = new self::Class::•() in let final void #t131 = #t127.{self::Class::[]=}(#t129, #t130){(self::Class*, self::Class*) →* void} in #t130);
+  self::throws(() → self::Class* => (let final self::Class* #t132 = c in #t132 == null ?{self::Class*} null : #t132.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*}.{self::Class::[]}(c){(self::Class*) →* self::Class*}.{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => let final self::Class* #t133 = (let final self::Class* #t134 = c in #t134 == null ?{self::Class*} null : #t134.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t135 = c in let final self::Class* #t136 = #t133.{self::Class::[]}(#t135){(self::Class*) →* self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t137 = #t133.{self::Class::[]=}(#t135, #t136){(self::Class*, self::Class*) →* void} in #t136);
+  self::throws(() → self::Class* => c = let final self::Class* #t138 = (let final self::Class* #t139 = c in #t139 == null ?{self::Class*} null : #t139.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t140 = c in let final self::Class* #t141 = #t138.{self::Class::[]}(#t140){(self::Class*) →* self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t142 = #t138.{self::Class::[]=}(#t140, #t141){(self::Class*, self::Class*) →* void} in #t141);
+  self::throws(() → self::Class* => let final self::Class* #t143 = (let final self::Class* #t144 = c in #t144 == null ?{self::Class*} null : #t144.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t145 = c in let final self::Class* #t146 = #t143.{self::Class::[]}(#t145){(self::Class*) →* self::Class*} in let final void #t147 = #t143.{self::Class::[]=}(#t145, #t146.{self::Class::+}(1){(core::int*) →* self::Class*}){(self::Class*, self::Class*) →* void} in #t146);
+  self::throws(() → self::Class* => c = let final self::Class* #t148 = (let final self::Class* #t149 = c in #t149 == null ?{self::Class*} null : #t149.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t150 = c in let final self::Class* #t151 = #t148.{self::Class::[]}(#t150){(self::Class*) →* self::Class*} in let final void #t152 = #t148.{self::Class::[]=}(#t150, #t151.{self::Class::+}(1){(core::int*) →* self::Class*}){(self::Class*, self::Class*) →* void} in #t151);
+  self::throws(() → self::Class* => let final self::Class* #t153 = (let final self::Class* #t154 = c in #t154 == null ?{self::Class*} null : #t154.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t155 = c in let final self::Class* #t156 = #t153.{self::Class::[]}(#t155){(self::Class*) →* self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t157 = #t153.{self::Class::[]=}(#t155, #t156){(self::Class*, self::Class*) →* void} in #t156);
+  self::throws(() → self::Class* => c = let final self::Class* #t158 = (let final self::Class* #t159 = c in #t159 == null ?{self::Class*} null : #t159.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t160 = c in let final self::Class* #t161 = #t158.{self::Class::[]}(#t160){(self::Class*) →* self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t162 = #t158.{self::Class::[]=}(#t160, #t161){(self::Class*, self::Class*) →* void} in #t161);
 }
 static method operatorAccess(self::Class* c) → void {
-  self::throws(() → self::Class* => (let final self::Class* #t163 = c in #t163.{self::Class::==}(null) ?{self::Class*} null : #t163.{self::Class::field}).{self::Class::+}(0));
-  self::throws(() → self::Class* => (let final self::Class* #t164 = c in #t164.{self::Class::==}(null) ?{self::Class*} null : #t164.{self::Class::field}).{self::Class::unary-}());
-  let final self::Class* #t165 = c in #t165.{self::Class::==}(null) ?{self::Class*} null : #t165.{self::Class::field} = #t165.{self::Class::field}.{self::Class::+}(0);
-  c = let final self::Class* #t166 = c in #t166.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t167 = #t166.{self::Class::field}.{self::Class::+}(0) in let final void #t168 = #t166.{self::Class::field} = #t167 in #t167;
-  self::throws(() → self::Class* => let final self::Class* #t169 = let final self::Class* #t170 = c in #t170.{self::Class::==}(null) ?{self::Class*} null : #t170.{self::Class::field} in #t169.{self::Class::field} = #t169.{self::Class::field}.{self::Class::+}(0));
-  self::throws(() → self::Class* => c = let final self::Class* #t171 = let final self::Class* #t172 = c in #t172.{self::Class::==}(null) ?{self::Class*} null : #t172.{self::Class::field} in #t171.{self::Class::field} = #t171.{self::Class::field}.{self::Class::+}(0));
-  let final self::Class* #t173 = c in #t173.{self::Class::==}(null) ?{self::Class*} null : #t173.{self::Class::field} = #t173.{self::Class::field}.{self::Class::+}(1);
-  c = let final self::Class* #t174 = c in #t174.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t175 = #t174.{self::Class::field} in let final void #t176 = #t174.{self::Class::field} = #t175.{self::Class::+}(1) in #t175;
-  let final self::Class* #t177 = c in #t177.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t178 = #t177.{self::Class::field}.{self::Class::+}(1) in let final void #t179 = #t177.{self::Class::field} = #t178 in #t178;
-  c = let final self::Class* #t180 = c in #t180.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t181 = #t180.{self::Class::field}.{self::Class::+}(1) in let final void #t182 = #t180.{self::Class::field} = #t181 in #t181;
+  self::throws(() → self::Class* => (let final self::Class* #t163 = c in #t163 == null ?{self::Class*} null : #t163.{self::Class::field}{self::Class*}).{self::Class::+}(0){(core::int*) →* self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t164 = c in #t164 == null ?{self::Class*} null : #t164.{self::Class::field}{self::Class*}).{self::Class::unary-}(){() →* self::Class*});
+  let final self::Class* #t165 = c in #t165 == null ?{self::Class*} null : #t165.{self::Class::field} = #t165.{self::Class::field}{self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*};
+  c = let final self::Class* #t166 = c in #t166 == null ?{self::Class*} null : let final self::Class* #t167 = #t166.{self::Class::field}{self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t168 = #t166.{self::Class::field} = #t167 in #t167;
+  self::throws(() → self::Class* => let final self::Class* #t169 = let final self::Class* #t170 = c in #t170 == null ?{self::Class*} null : #t170.{self::Class::field}{self::Class*} in #t169.{self::Class::field} = #t169.{self::Class::field}{self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*});
+  self::throws(() → self::Class* => c = let final self::Class* #t171 = let final self::Class* #t172 = c in #t172 == null ?{self::Class*} null : #t172.{self::Class::field}{self::Class*} in #t171.{self::Class::field} = #t171.{self::Class::field}{self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*});
+  let final self::Class* #t173 = c in #t173 == null ?{self::Class*} null : #t173.{self::Class::field} = #t173.{self::Class::field}{self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*};
+  c = let final self::Class* #t174 = c in #t174 == null ?{self::Class*} null : let final self::Class* #t175 = #t174.{self::Class::field}{self::Class*} in let final void #t176 = #t174.{self::Class::field} = #t175.{self::Class::+}(1){(core::int*) →* self::Class*} in #t175;
+  let final self::Class* #t177 = c in #t177 == null ?{self::Class*} null : let final self::Class* #t178 = #t177.{self::Class::field}{self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t179 = #t177.{self::Class::field} = #t178 in #t178;
+  c = let final self::Class* #t180 = c in #t180 == null ?{self::Class*} null : let final self::Class* #t181 = #t180.{self::Class::field}{self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t182 = #t180.{self::Class::field} = #t181 in #t181;
 }
 static method ifNull(self::Class* c) → void {
-  let final self::Class* #t183 = c in #t183.{self::Class::==}(null) ?{self::Class*} null : #t183.{self::Class::field}.{self::Class::==}(null) ?{self::Class*} #t183.{self::Class::field} = c : null;
-  c = let final self::Class* #t184 = c in #t184.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t185 = #t184.{self::Class::field} in #t185.{self::Class::==}(null) ?{self::Class*} #t184.{self::Class::field} = c : #t185;
-  self::throws(() → self::Class* => let final self::Class* #t186 = let final self::Class* #t187 = c in #t187.{self::Class::==}(null) ?{self::Class*} null : #t187.{self::Class::field} in let final self::Class* #t188 = #t186.{self::Class::field} in #t188.{self::Class::==}(null) ?{self::Class*} #t186.{self::Class::field} = c : #t188);
-  self::throws(() → self::Class* => c = let final self::Class* #t189 = let final self::Class* #t190 = c in #t190.{self::Class::==}(null) ?{self::Class*} null : #t190.{self::Class::field} in let final self::Class* #t191 = #t189.{self::Class::field} in #t191.{self::Class::==}(null) ?{self::Class*} #t189.{self::Class::field} = c : #t191);
-  self::throws(() → self::Class* => let final self::Class* #t192 = let final self::Class* #t193 = c in #t193.{self::Class::==}(null) ?{self::Class*} null : #t193.{self::Class::field} in let final self::Class* #t194 = c in let final self::Class* #t195 = #t192.{self::Class::[]}(#t194) in #t195.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t196 = c in let final void #t197 = #t192.{self::Class::[]=}(#t194, #t196) in #t196 : #t195);
-  self::throws(() → self::Class* => c = let final self::Class* #t198 = let final self::Class* #t199 = c in #t199.{self::Class::==}(null) ?{self::Class*} null : #t199.{self::Class::field} in let final self::Class* #t200 = c in let final self::Class* #t201 = #t198.{self::Class::[]}(#t200) in #t201.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t202 = c in let final void #t203 = #t198.{self::Class::[]=}(#t200, #t202) in #t202 : #t201);
+  let final self::Class* #t183 = c in #t183 == null ?{self::Class*} null : #t183.{self::Class::field}{self::Class*} == null ?{self::Class*} #t183.{self::Class::field} = c : null;
+  c = let final self::Class* #t184 = c in #t184 == null ?{self::Class*} null : let final self::Class* #t185 = #t184.{self::Class::field}{self::Class*} in #t185 == null ?{self::Class*} #t184.{self::Class::field} = c : #t185;
+  self::throws(() → self::Class* => let final self::Class* #t186 = let final self::Class* #t187 = c in #t187 == null ?{self::Class*} null : #t187.{self::Class::field}{self::Class*} in let final self::Class* #t188 = #t186.{self::Class::field}{self::Class*} in #t188 == null ?{self::Class*} #t186.{self::Class::field} = c : #t188);
+  self::throws(() → self::Class* => c = let final self::Class* #t189 = let final self::Class* #t190 = c in #t190 == null ?{self::Class*} null : #t190.{self::Class::field}{self::Class*} in let final self::Class* #t191 = #t189.{self::Class::field}{self::Class*} in #t191 == null ?{self::Class*} #t189.{self::Class::field} = c : #t191);
+  self::throws(() → self::Class* => let final self::Class* #t192 = let final self::Class* #t193 = c in #t193 == null ?{self::Class*} null : #t193.{self::Class::field}{self::Class*} in let final self::Class* #t194 = c in let final self::Class* #t195 = #t192.{self::Class::[]}(#t194){(self::Class*) →* self::Class*} in #t195 == null ?{self::Class*} let final self::Class* #t196 = c in let final void #t197 = #t192.{self::Class::[]=}(#t194, #t196){(self::Class*, self::Class*) →* void} in #t196 : #t195);
+  self::throws(() → self::Class* => c = let final self::Class* #t198 = let final self::Class* #t199 = c in #t199 == null ?{self::Class*} null : #t199.{self::Class::field}{self::Class*} in let final self::Class* #t200 = c in let final self::Class* #t201 = #t198.{self::Class::[]}(#t200){(self::Class*) →* self::Class*} in #t201 == null ?{self::Class*} let final self::Class* #t202 = c in let final void #t203 = #t198.{self::Class::[]=}(#t200, #t202){(self::Class*, self::Class*) →* void} in #t202 : #t201);
 }
 static method throws(() →* void f) → void {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.expect
index a622905..f8fa444 100644
--- a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.expect
@@ -29,7 +29,7 @@
   set field = self::Extension|set#field;
 }
 static method Extension|get#field(lowered final self::Class* #this) → self::Class*
-  return #this.{self::Class::_field};
+  return #this.{self::Class::_field}{self::Class*};
 static method Extension|set#field(lowered final self::Class* #this, self::Class* value) → void {
   #this.{self::Class::_field} = value;
 }
@@ -53,125 +53,125 @@
   self::ifNull(null);
 }
 static method propertyAccess(self::Class* c) → void {
-  let final self::Class* #t1 = c in #t1.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t1);
-  let final self::Class* #t2 = c in #t2.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t2, new self::Class::•());
-  c = let final self::Class* #t3 = c in #t3.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t4 = new self::Class::•() in let final void #t5 = self::Extension|set#field(#t3, #t4) in #t4;
-  let final self::Class* #t6 = c in #t6.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t6);
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t7 = c in #t7.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t7)));
-  let final self::Class* #t8 = let final self::Class* #t9 = c in #t9.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t9) in #t8.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t8);
-  self::throws(() → self::Class* => let final self::Class* #t10 = self::Extension|get#field(let final self::Class* #t11 = c in #t11.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t11)) in #t10.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t10));
-  self::throws(() → self::Class* => let final self::Class* #t12 = new self::Class::•() in let final void #t13 = self::Extension|set#field(let final self::Class* #t14 = c in #t14.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t14), #t12) in #t12);
-  let final self::Class* #t15 = let final self::Class* #t16 = c in #t16.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t16) in #t15.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t15, new self::Class::•());
-  self::throws(() → self::Class* => let final self::Class* #t17 = self::Extension|get#field(let final self::Class* #t18 = c in #t18.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t18)) in #t17.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t19 = new self::Class::•() in let final void #t20 = self::Extension|set#field(#t17, #t19) in #t19);
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t21 = c in #t21.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t21)));
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t22 = c in #t22.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t23 = new self::Class::•() in let final void #t24 = self::Extension|set#field(#t22, #t23) in #t23));
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t25 = c in #t25.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t25)));
-  self::throws(() → self::Class* => c = let final self::Class* #t26 = new self::Class::•() in let final void #t27 = self::Extension|set#field(let final self::Class* #t28 = c in #t28.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t28), #t26) in #t26);
-  c = let final self::Class* #t29 = let final self::Class* #t30 = c in #t30.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t30) in #t29.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t31 = new self::Class::•() in let final void #t32 = self::Extension|set#field(#t29, #t31) in #t31;
-  self::throws(() → self::Class* => c = let final self::Class* #t33 = self::Extension|get#field(let final self::Class* #t34 = c in #t34.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t34)) in #t33.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t35 = new self::Class::•() in let final void #t36 = self::Extension|set#field(#t33, #t35) in #t35);
-  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t37 = c in #t37.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t37)));
-  let final self::Class* #t38 = c in #t38.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t38, self::Extension|get#field(new self::Class::•()));
-  c = let final self::Class* #t39 = c in #t39.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t40 = self::Extension|get#field(new self::Class::•()) in let final void #t41 = self::Extension|set#field(#t39, #t40) in #t40;
-  let final self::Class* #t42 = c in #t42.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t42, let final self::Class* #t43 = new self::Class::•() in let final void #t44 = self::Extension|set#field(new self::Class::•(), #t43) in #t43);
-  c = let final self::Class* #t45 = c in #t45.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t46 = let final self::Class* #t47 = new self::Class::•() in let final void #t48 = self::Extension|set#field(new self::Class::•(), #t47) in #t47 in let final void #t49 = self::Extension|set#field(#t45, #t46) in #t46;
-  let final self::Class* #t50 = c in #t50.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t50, self::Extension|method(new self::Class::•()));
-  c = let final self::Class* #t51 = c in #t51.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t52 = self::Extension|method(new self::Class::•()) in let final void #t53 = self::Extension|set#field(#t51, #t52) in #t52;
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t54 = c in #t54.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t54)));
-  self::throws(() → self::Class* => let final self::Class* #t55 = new self::Class::•() in let final void #t56 = self::Extension|set#field(let final self::Class* #t57 = c in #t57.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t57), #t55) in #t55);
-  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t58 = c in #t58.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t58)));
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t59 = c in #t59.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t59))));
-  self::throws(() → self::Class* => let final self::Class* #t60 = new self::Class::•() in let final void #t61 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t62 = c in #t62.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t62)), #t60) in #t60);
-  self::throws(() → self::Class* => c = let final self::Class* #t63 = new self::Class::•() in let final void #t64 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t65 = c in #t65.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t65)), #t63) in #t63);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t66 = c in #t66.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t66))));
-  let final self::Class* #t67 = c in #t67.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t67, self::Extension|get#field(self::Extension|get#field(new self::Class::•())));
-  c = let final self::Class* #t68 = c in #t68.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t69 = self::Extension|get#field(self::Extension|get#field(new self::Class::•())) in let final void #t70 = self::Extension|set#field(#t68, #t69) in #t69;
-  let final self::Class* #t71 = c in #t71.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t71, let final self::Class* #t72 = new self::Class::•() in let final void #t73 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t72) in #t72);
-  c = let final self::Class* #t74 = c in #t74.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t75 = let final self::Class* #t76 = new self::Class::•() in let final void #t77 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t76) in #t76 in let final void #t78 = self::Extension|set#field(#t74, #t75) in #t75;
-  let final self::Class* #t79 = c in #t79.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t79, self::Extension|method(self::Extension|get#field(new self::Class::•())));
-  c = let final self::Class* #t80 = c in #t80.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t81 = self::Extension|method(self::Extension|get#field(new self::Class::•())) in let final void #t82 = self::Extension|set#field(#t80, #t81) in #t81;
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t83 = c in #t83.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t83))));
-  self::throws(() → self::Class* => let final self::Class* #t84 = new self::Class::•() in let final void #t85 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t86 = c in #t86.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t86)), #t84) in #t84);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t87 = c in #t87.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t87))));
-  self::throws(() → self::Class* => let final self::Class* #t88 = self::Extension|get#field(new self::Class::•()) in let final void #t89 = self::Extension|set#field(let final self::Class* #t90 = c in #t90.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t90), #t88) in #t88);
-  self::throws(() → self::Class* => c = let final self::Class* #t91 = self::Extension|get#field(new self::Class::•()) in let final void #t92 = self::Extension|set#field(let final self::Class* #t93 = c in #t93.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t93), #t91) in #t91);
-  self::throws(() → self::Class* => let final self::Class* #t94 = let final self::Class* #t95 = new self::Class::•() in let final void #t96 = self::Extension|set#field(new self::Class::•(), #t95) in #t95 in let final void #t97 = self::Extension|set#field(let final self::Class* #t98 = c in #t98.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t98), #t94) in #t94);
-  self::throws(() → self::Class* => c = let final self::Class* #t99 = let final self::Class* #t100 = new self::Class::•() in let final void #t101 = self::Extension|set#field(new self::Class::•(), #t100) in #t100 in let final void #t102 = self::Extension|set#field(let final self::Class* #t103 = c in #t103.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t103), #t99) in #t99);
-  self::throws(() → self::Class* => let final self::Class* #t104 = self::Extension|method(new self::Class::•()) in let final void #t105 = self::Extension|set#field(let final self::Class* #t106 = c in #t106.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t106), #t104) in #t104);
-  self::throws(() → self::Class* => c = let final self::Class* #t107 = self::Extension|method(new self::Class::•()) in let final void #t108 = self::Extension|set#field(let final self::Class* #t109 = c in #t109.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t109), #t107) in #t107);
-  let final self::Class* #t110 = c in #t110.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t110, let final self::Class* #t111 = self::Extension|get#field(new self::Class::•()) in let final void #t112 = self::Extension|set#field(new self::Class::•(), #t111) in #t111);
-  c = let final self::Class* #t113 = c in #t113.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t114 = let final self::Class* #t115 = self::Extension|get#field(new self::Class::•()) in let final void #t116 = self::Extension|set#field(new self::Class::•(), #t115) in #t115 in let final void #t117 = self::Extension|set#field(#t113, #t114) in #t114;
-  let final self::Class* #t118 = c in #t118.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t118, let final self::Class* #t119 = let final self::Class* #t120 = new self::Class::•() in let final void #t121 = self::Extension|set#field(new self::Class::•(), #t120) in #t120 in let final void #t122 = self::Extension|set#field(new self::Class::•(), #t119) in #t119);
-  c = let final self::Class* #t123 = c in #t123.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t124 = let final self::Class* #t125 = let final self::Class* #t126 = new self::Class::•() in let final void #t127 = self::Extension|set#field(new self::Class::•(), #t126) in #t126 in let final void #t128 = self::Extension|set#field(new self::Class::•(), #t125) in #t125 in let final void #t129 = self::Extension|set#field(#t123, #t124) in #t124;
-  let final self::Class* #t130 = c in #t130.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t130, let final self::Class* #t131 = self::Extension|method(new self::Class::•()) in let final void #t132 = self::Extension|set#field(new self::Class::•(), #t131) in #t131);
-  c = let final self::Class* #t133 = c in #t133.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t134 = let final self::Class* #t135 = self::Extension|method(new self::Class::•()) in let final void #t136 = self::Extension|set#field(new self::Class::•(), #t135) in #t135 in let final void #t137 = self::Extension|set#field(#t133, #t134) in #t134;
-  self::throws(() → self::Class* => let final self::Class* #t138 = self::Extension|get#field(new self::Class::•()) in let final void #t139 = self::Extension|set#field(let final self::Class* #t140 = c in #t140.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t140), #t138) in #t138);
-  self::throws(() → self::Class* => c = let final self::Class* #t141 = self::Extension|get#field(new self::Class::•()) in let final void #t142 = self::Extension|set#field(let final self::Class* #t143 = c in #t143.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t143), #t141) in #t141);
-  self::throws(() → self::Class* => let final self::Class* #t144 = let final self::Class* #t145 = new self::Class::•() in let final void #t146 = self::Extension|set#field(new self::Class::•(), #t145) in #t145 in let final void #t147 = self::Extension|set#field(let final self::Class* #t148 = c in #t148.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t148), #t144) in #t144);
-  self::throws(() → self::Class* => c = let final self::Class* #t149 = let final self::Class* #t150 = new self::Class::•() in let final void #t151 = self::Extension|set#field(new self::Class::•(), #t150) in #t150 in let final void #t152 = self::Extension|set#field(let final self::Class* #t153 = c in #t153.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t153), #t149) in #t149);
-  self::throws(() → self::Class* => let final self::Class* #t154 = self::Extension|method(new self::Class::•()) in let final void #t155 = self::Extension|set#field(let final self::Class* #t156 = c in #t156.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t156), #t154) in #t154);
-  self::throws(() → self::Class* => c = let final self::Class* #t157 = self::Extension|method(new self::Class::•()) in let final void #t158 = self::Extension|set#field(let final self::Class* #t159 = c in #t159.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t159), #t157) in #t157);
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t160 = c in #t160.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t160))));
-  self::throws(() → self::Class* => let final self::Class* #t161 = new self::Class::•() in let final void #t162 = self::Extension|set#field(self::Extension|method(let final self::Class* #t163 = c in #t163.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t163)), #t161) in #t161);
-  self::throws(() → self::Class* => c = let final self::Class* #t164 = new self::Class::•() in let final void #t165 = self::Extension|set#field(self::Extension|method(let final self::Class* #t166 = c in #t166.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t166)), #t164) in #t164);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t167 = c in #t167.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t167))));
-  let final self::Class* #t168 = c in #t168.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t168, self::Extension|get#field(self::Extension|method(new self::Class::•())));
-  c = let final self::Class* #t169 = c in #t169.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t170 = self::Extension|get#field(self::Extension|method(new self::Class::•())) in let final void #t171 = self::Extension|set#field(#t169, #t170) in #t170;
-  let final self::Class* #t172 = c in #t172.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t172, let final self::Class* #t173 = new self::Class::•() in let final void #t174 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t173) in #t173);
-  c = let final self::Class* #t175 = c in #t175.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t176 = let final self::Class* #t177 = new self::Class::•() in let final void #t178 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t177) in #t177 in let final void #t179 = self::Extension|set#field(#t175, #t176) in #t176;
-  let final self::Class* #t180 = c in #t180.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t180, self::Extension|method(self::Extension|method(new self::Class::•())));
-  c = let final self::Class* #t181 = c in #t181.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t182 = self::Extension|method(self::Extension|method(new self::Class::•())) in let final void #t183 = self::Extension|set#field(#t181, #t182) in #t182;
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t184 = c in #t184.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t184))));
-  self::throws(() → self::Class* => let final self::Class* #t185 = new self::Class::•() in let final void #t186 = self::Extension|set#field(self::Extension|method(let final self::Class* #t187 = c in #t187.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t187)), #t185) in #t185);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t188 = c in #t188.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t188))));
-  let final self::Class* #t189 = let final self::Class* #t190 = c in #t190.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t190) in #t189.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t189);
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t191 = c in #t191.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t191)));
-  let final self::Class* #t192 = let final self::Class* #t193 = c in #t193.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t193) in #t192.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t192);
+  let final self::Class* #t1 = c in #t1 == null ?{self::Class*} null : self::Extension|get#field(#t1);
+  let final self::Class* #t2 = c in #t2 == null ?{self::Class*} null : self::Extension|set#field(#t2, new self::Class::•());
+  c = let final self::Class* #t3 = c in #t3 == null ?{self::Class*} null : let final self::Class* #t4 = new self::Class::•() in let final void #t5 = self::Extension|set#field(#t3, #t4) in #t4;
+  let final self::Class* #t6 = c in #t6 == null ?{self::Class*} null : self::Extension|method(#t6);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t7 = c in #t7 == null ?{self::Class*} null : self::Extension|get#field(#t7)));
+  let final self::Class* #t8 = let final self::Class* #t9 = c in #t9 == null ?{self::Class*} null : self::Extension|get#field(#t9) in #t8 == null ?{self::Class*} null : self::Extension|get#field(#t8);
+  self::throws(() → self::Class* => let final self::Class* #t10 = self::Extension|get#field(let final self::Class* #t11 = c in #t11 == null ?{self::Class*} null : self::Extension|get#field(#t11)) in #t10 == null ?{self::Class*} null : self::Extension|get#field(#t10));
+  self::throws(() → self::Class* => let final self::Class* #t12 = new self::Class::•() in let final void #t13 = self::Extension|set#field(let final self::Class* #t14 = c in #t14 == null ?{self::Class*} null : self::Extension|get#field(#t14), #t12) in #t12);
+  let final self::Class* #t15 = let final self::Class* #t16 = c in #t16 == null ?{self::Class*} null : self::Extension|get#field(#t16) in #t15 == null ?{self::Class*} null : self::Extension|set#field(#t15, new self::Class::•());
+  self::throws(() → self::Class* => let final self::Class* #t17 = self::Extension|get#field(let final self::Class* #t18 = c in #t18 == null ?{self::Class*} null : self::Extension|get#field(#t18)) in #t17 == null ?{self::Class*} null : let final self::Class* #t19 = new self::Class::•() in let final void #t20 = self::Extension|set#field(#t17, #t19) in #t19);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t21 = c in #t21 == null ?{self::Class*} null : self::Extension|get#field(#t21)));
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t22 = c in #t22 == null ?{self::Class*} null : let final self::Class* #t23 = new self::Class::•() in let final void #t24 = self::Extension|set#field(#t22, #t23) in #t23));
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t25 = c in #t25 == null ?{self::Class*} null : self::Extension|method(#t25)));
+  self::throws(() → self::Class* => c = let final self::Class* #t26 = new self::Class::•() in let final void #t27 = self::Extension|set#field(let final self::Class* #t28 = c in #t28 == null ?{self::Class*} null : self::Extension|get#field(#t28), #t26) in #t26);
+  c = let final self::Class* #t29 = let final self::Class* #t30 = c in #t30 == null ?{self::Class*} null : self::Extension|get#field(#t30) in #t29 == null ?{self::Class*} null : let final self::Class* #t31 = new self::Class::•() in let final void #t32 = self::Extension|set#field(#t29, #t31) in #t31;
+  self::throws(() → self::Class* => c = let final self::Class* #t33 = self::Extension|get#field(let final self::Class* #t34 = c in #t34 == null ?{self::Class*} null : self::Extension|get#field(#t34)) in #t33 == null ?{self::Class*} null : let final self::Class* #t35 = new self::Class::•() in let final void #t36 = self::Extension|set#field(#t33, #t35) in #t35);
+  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t37 = c in #t37 == null ?{self::Class*} null : self::Extension|get#field(#t37)));
+  let final self::Class* #t38 = c in #t38 == null ?{self::Class*} null : self::Extension|set#field(#t38, self::Extension|get#field(new self::Class::•()));
+  c = let final self::Class* #t39 = c in #t39 == null ?{self::Class*} null : let final self::Class* #t40 = self::Extension|get#field(new self::Class::•()) in let final void #t41 = self::Extension|set#field(#t39, #t40) in #t40;
+  let final self::Class* #t42 = c in #t42 == null ?{self::Class*} null : self::Extension|set#field(#t42, let final self::Class* #t43 = new self::Class::•() in let final void #t44 = self::Extension|set#field(new self::Class::•(), #t43) in #t43);
+  c = let final self::Class* #t45 = c in #t45 == null ?{self::Class*} null : let final self::Class* #t46 = let final self::Class* #t47 = new self::Class::•() in let final void #t48 = self::Extension|set#field(new self::Class::•(), #t47) in #t47 in let final void #t49 = self::Extension|set#field(#t45, #t46) in #t46;
+  let final self::Class* #t50 = c in #t50 == null ?{self::Class*} null : self::Extension|set#field(#t50, self::Extension|method(new self::Class::•()));
+  c = let final self::Class* #t51 = c in #t51 == null ?{self::Class*} null : let final self::Class* #t52 = self::Extension|method(new self::Class::•()) in let final void #t53 = self::Extension|set#field(#t51, #t52) in #t52;
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t54 = c in #t54 == null ?{self::Class*} null : self::Extension|method(#t54)));
+  self::throws(() → self::Class* => let final self::Class* #t55 = new self::Class::•() in let final void #t56 = self::Extension|set#field(let final self::Class* #t57 = c in #t57 == null ?{self::Class*} null : self::Extension|method(#t57), #t55) in #t55);
+  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t58 = c in #t58 == null ?{self::Class*} null : self::Extension|method(#t58)));
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t59 = c in #t59 == null ?{self::Class*} null : self::Extension|get#field(#t59))));
+  self::throws(() → self::Class* => let final self::Class* #t60 = new self::Class::•() in let final void #t61 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t62 = c in #t62 == null ?{self::Class*} null : self::Extension|get#field(#t62)), #t60) in #t60);
+  self::throws(() → self::Class* => c = let final self::Class* #t63 = new self::Class::•() in let final void #t64 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t65 = c in #t65 == null ?{self::Class*} null : self::Extension|get#field(#t65)), #t63) in #t63);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t66 = c in #t66 == null ?{self::Class*} null : self::Extension|get#field(#t66))));
+  let final self::Class* #t67 = c in #t67 == null ?{self::Class*} null : self::Extension|set#field(#t67, self::Extension|get#field(self::Extension|get#field(new self::Class::•())));
+  c = let final self::Class* #t68 = c in #t68 == null ?{self::Class*} null : let final self::Class* #t69 = self::Extension|get#field(self::Extension|get#field(new self::Class::•())) in let final void #t70 = self::Extension|set#field(#t68, #t69) in #t69;
+  let final self::Class* #t71 = c in #t71 == null ?{self::Class*} null : self::Extension|set#field(#t71, let final self::Class* #t72 = new self::Class::•() in let final void #t73 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t72) in #t72);
+  c = let final self::Class* #t74 = c in #t74 == null ?{self::Class*} null : let final self::Class* #t75 = let final self::Class* #t76 = new self::Class::•() in let final void #t77 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t76) in #t76 in let final void #t78 = self::Extension|set#field(#t74, #t75) in #t75;
+  let final self::Class* #t79 = c in #t79 == null ?{self::Class*} null : self::Extension|set#field(#t79, self::Extension|method(self::Extension|get#field(new self::Class::•())));
+  c = let final self::Class* #t80 = c in #t80 == null ?{self::Class*} null : let final self::Class* #t81 = self::Extension|method(self::Extension|get#field(new self::Class::•())) in let final void #t82 = self::Extension|set#field(#t80, #t81) in #t81;
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t83 = c in #t83 == null ?{self::Class*} null : self::Extension|method(#t83))));
+  self::throws(() → self::Class* => let final self::Class* #t84 = new self::Class::•() in let final void #t85 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t86 = c in #t86 == null ?{self::Class*} null : self::Extension|method(#t86)), #t84) in #t84);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t87 = c in #t87 == null ?{self::Class*} null : self::Extension|method(#t87))));
+  self::throws(() → self::Class* => let final self::Class* #t88 = self::Extension|get#field(new self::Class::•()) in let final void #t89 = self::Extension|set#field(let final self::Class* #t90 = c in #t90 == null ?{self::Class*} null : self::Extension|get#field(#t90), #t88) in #t88);
+  self::throws(() → self::Class* => c = let final self::Class* #t91 = self::Extension|get#field(new self::Class::•()) in let final void #t92 = self::Extension|set#field(let final self::Class* #t93 = c in #t93 == null ?{self::Class*} null : self::Extension|get#field(#t93), #t91) in #t91);
+  self::throws(() → self::Class* => let final self::Class* #t94 = let final self::Class* #t95 = new self::Class::•() in let final void #t96 = self::Extension|set#field(new self::Class::•(), #t95) in #t95 in let final void #t97 = self::Extension|set#field(let final self::Class* #t98 = c in #t98 == null ?{self::Class*} null : self::Extension|get#field(#t98), #t94) in #t94);
+  self::throws(() → self::Class* => c = let final self::Class* #t99 = let final self::Class* #t100 = new self::Class::•() in let final void #t101 = self::Extension|set#field(new self::Class::•(), #t100) in #t100 in let final void #t102 = self::Extension|set#field(let final self::Class* #t103 = c in #t103 == null ?{self::Class*} null : self::Extension|get#field(#t103), #t99) in #t99);
+  self::throws(() → self::Class* => let final self::Class* #t104 = self::Extension|method(new self::Class::•()) in let final void #t105 = self::Extension|set#field(let final self::Class* #t106 = c in #t106 == null ?{self::Class*} null : self::Extension|get#field(#t106), #t104) in #t104);
+  self::throws(() → self::Class* => c = let final self::Class* #t107 = self::Extension|method(new self::Class::•()) in let final void #t108 = self::Extension|set#field(let final self::Class* #t109 = c in #t109 == null ?{self::Class*} null : self::Extension|get#field(#t109), #t107) in #t107);
+  let final self::Class* #t110 = c in #t110 == null ?{self::Class*} null : self::Extension|set#field(#t110, let final self::Class* #t111 = self::Extension|get#field(new self::Class::•()) in let final void #t112 = self::Extension|set#field(new self::Class::•(), #t111) in #t111);
+  c = let final self::Class* #t113 = c in #t113 == null ?{self::Class*} null : let final self::Class* #t114 = let final self::Class* #t115 = self::Extension|get#field(new self::Class::•()) in let final void #t116 = self::Extension|set#field(new self::Class::•(), #t115) in #t115 in let final void #t117 = self::Extension|set#field(#t113, #t114) in #t114;
+  let final self::Class* #t118 = c in #t118 == null ?{self::Class*} null : self::Extension|set#field(#t118, let final self::Class* #t119 = let final self::Class* #t120 = new self::Class::•() in let final void #t121 = self::Extension|set#field(new self::Class::•(), #t120) in #t120 in let final void #t122 = self::Extension|set#field(new self::Class::•(), #t119) in #t119);
+  c = let final self::Class* #t123 = c in #t123 == null ?{self::Class*} null : let final self::Class* #t124 = let final self::Class* #t125 = let final self::Class* #t126 = new self::Class::•() in let final void #t127 = self::Extension|set#field(new self::Class::•(), #t126) in #t126 in let final void #t128 = self::Extension|set#field(new self::Class::•(), #t125) in #t125 in let final void #t129 = self::Extension|set#field(#t123, #t124) in #t124;
+  let final self::Class* #t130 = c in #t130 == null ?{self::Class*} null : self::Extension|set#field(#t130, let final self::Class* #t131 = self::Extension|method(new self::Class::•()) in let final void #t132 = self::Extension|set#field(new self::Class::•(), #t131) in #t131);
+  c = let final self::Class* #t133 = c in #t133 == null ?{self::Class*} null : let final self::Class* #t134 = let final self::Class* #t135 = self::Extension|method(new self::Class::•()) in let final void #t136 = self::Extension|set#field(new self::Class::•(), #t135) in #t135 in let final void #t137 = self::Extension|set#field(#t133, #t134) in #t134;
+  self::throws(() → self::Class* => let final self::Class* #t138 = self::Extension|get#field(new self::Class::•()) in let final void #t139 = self::Extension|set#field(let final self::Class* #t140 = c in #t140 == null ?{self::Class*} null : self::Extension|method(#t140), #t138) in #t138);
+  self::throws(() → self::Class* => c = let final self::Class* #t141 = self::Extension|get#field(new self::Class::•()) in let final void #t142 = self::Extension|set#field(let final self::Class* #t143 = c in #t143 == null ?{self::Class*} null : self::Extension|method(#t143), #t141) in #t141);
+  self::throws(() → self::Class* => let final self::Class* #t144 = let final self::Class* #t145 = new self::Class::•() in let final void #t146 = self::Extension|set#field(new self::Class::•(), #t145) in #t145 in let final void #t147 = self::Extension|set#field(let final self::Class* #t148 = c in #t148 == null ?{self::Class*} null : self::Extension|method(#t148), #t144) in #t144);
+  self::throws(() → self::Class* => c = let final self::Class* #t149 = let final self::Class* #t150 = new self::Class::•() in let final void #t151 = self::Extension|set#field(new self::Class::•(), #t150) in #t150 in let final void #t152 = self::Extension|set#field(let final self::Class* #t153 = c in #t153 == null ?{self::Class*} null : self::Extension|method(#t153), #t149) in #t149);
+  self::throws(() → self::Class* => let final self::Class* #t154 = self::Extension|method(new self::Class::•()) in let final void #t155 = self::Extension|set#field(let final self::Class* #t156 = c in #t156 == null ?{self::Class*} null : self::Extension|method(#t156), #t154) in #t154);
+  self::throws(() → self::Class* => c = let final self::Class* #t157 = self::Extension|method(new self::Class::•()) in let final void #t158 = self::Extension|set#field(let final self::Class* #t159 = c in #t159 == null ?{self::Class*} null : self::Extension|method(#t159), #t157) in #t157);
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t160 = c in #t160 == null ?{self::Class*} null : self::Extension|get#field(#t160))));
+  self::throws(() → self::Class* => let final self::Class* #t161 = new self::Class::•() in let final void #t162 = self::Extension|set#field(self::Extension|method(let final self::Class* #t163 = c in #t163 == null ?{self::Class*} null : self::Extension|get#field(#t163)), #t161) in #t161);
+  self::throws(() → self::Class* => c = let final self::Class* #t164 = new self::Class::•() in let final void #t165 = self::Extension|set#field(self::Extension|method(let final self::Class* #t166 = c in #t166 == null ?{self::Class*} null : self::Extension|get#field(#t166)), #t164) in #t164);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t167 = c in #t167 == null ?{self::Class*} null : self::Extension|get#field(#t167))));
+  let final self::Class* #t168 = c in #t168 == null ?{self::Class*} null : self::Extension|set#field(#t168, self::Extension|get#field(self::Extension|method(new self::Class::•())));
+  c = let final self::Class* #t169 = c in #t169 == null ?{self::Class*} null : let final self::Class* #t170 = self::Extension|get#field(self::Extension|method(new self::Class::•())) in let final void #t171 = self::Extension|set#field(#t169, #t170) in #t170;
+  let final self::Class* #t172 = c in #t172 == null ?{self::Class*} null : self::Extension|set#field(#t172, let final self::Class* #t173 = new self::Class::•() in let final void #t174 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t173) in #t173);
+  c = let final self::Class* #t175 = c in #t175 == null ?{self::Class*} null : let final self::Class* #t176 = let final self::Class* #t177 = new self::Class::•() in let final void #t178 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t177) in #t177 in let final void #t179 = self::Extension|set#field(#t175, #t176) in #t176;
+  let final self::Class* #t180 = c in #t180 == null ?{self::Class*} null : self::Extension|set#field(#t180, self::Extension|method(self::Extension|method(new self::Class::•())));
+  c = let final self::Class* #t181 = c in #t181 == null ?{self::Class*} null : let final self::Class* #t182 = self::Extension|method(self::Extension|method(new self::Class::•())) in let final void #t183 = self::Extension|set#field(#t181, #t182) in #t182;
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t184 = c in #t184 == null ?{self::Class*} null : self::Extension|method(#t184))));
+  self::throws(() → self::Class* => let final self::Class* #t185 = new self::Class::•() in let final void #t186 = self::Extension|set#field(self::Extension|method(let final self::Class* #t187 = c in #t187 == null ?{self::Class*} null : self::Extension|method(#t187)), #t185) in #t185);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t188 = c in #t188 == null ?{self::Class*} null : self::Extension|method(#t188))));
+  let final self::Class* #t189 = let final self::Class* #t190 = c in #t190 == null ?{self::Class*} null : self::Extension|method(#t190) in #t189 == null ?{self::Class*} null : self::Extension|method(#t189);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t191 = c in #t191 == null ?{self::Class*} null : self::Extension|get#field(#t191)));
+  let final self::Class* #t192 = let final self::Class* #t193 = c in #t193 == null ?{self::Class*} null : self::Extension|get#field(#t193) in #t192 == null ?{self::Class*} null : self::Extension|get#field(#t192);
 }
 static method indexAccess(self::Class* c) → void {
-  self::throws(() → self::Class* => self::Extension|[](let final self::Class* #t194 = c in #t194.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t194), c));
-  self::throws(() → self::Class* => let final self::Class* #t195 = let final self::Class* #t196 = c in #t196.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t196) in let final self::Class* #t197 = c in let final self::Class* #t198 = new self::Class::•() in let final void #t199 = self::Extension|[]=(#t195, #t197, #t198) in #t198);
-  self::throws(() → self::Class* => c = let final self::Class* #t200 = let final self::Class* #t201 = c in #t201.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t201) in let final self::Class* #t202 = c in let final self::Class* #t203 = new self::Class::•() in let final void #t204 = self::Extension|[]=(#t200, #t202, #t203) in #t203);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](let final self::Class* #t205 = c in #t205.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t205), c)));
-  self::throws(() → self::Class* => let final self::Class* #t206 = let final self::Class* #t207 = c in #t207.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t207) in let final self::Class* #t208 = c in let final self::Class* #t209 = self::Extension|+(self::Extension|[](#t206, #t208), 0) in let final void #t210 = self::Extension|[]=(#t206, #t208, #t209) in #t209);
-  self::throws(() → self::Class* => c = let final self::Class* #t211 = let final self::Class* #t212 = c in #t212.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t212) in let final self::Class* #t213 = c in let final self::Class* #t214 = self::Extension|+(self::Extension|[](#t211, #t213), 0) in let final void #t215 = self::Extension|[]=(#t211, #t213, #t214) in #t214);
-  self::throws(() → self::Class* => let final self::Class* #t216 = let final self::Class* #t217 = c in #t217.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t217) in let final self::Class* #t218 = c in let final self::Class* #t219 = self::Extension|[](#t216, #t218) in let final void #t220 = self::Extension|[]=(#t216, #t218, self::Extension|+(#t219, 1)) in #t219);
-  self::throws(() → self::Class* => c = let final self::Class* #t221 = let final self::Class* #t222 = c in #t222.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t222) in let final self::Class* #t223 = c in let final self::Class* #t224 = self::Extension|[](#t221, #t223) in let final void #t225 = self::Extension|[]=(#t221, #t223, self::Extension|+(#t224, 1)) in #t224);
-  self::throws(() → self::Class* => let final self::Class* #t226 = let final self::Class* #t227 = c in #t227.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t227) in let final self::Class* #t228 = c in let final self::Class* #t229 = self::Extension|+(self::Extension|[](#t226, #t228), 1) in let final void #t230 = self::Extension|[]=(#t226, #t228, #t229) in #t229);
-  self::throws(() → self::Class* => c = let final self::Class* #t231 = let final self::Class* #t232 = c in #t232.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t232) in let final self::Class* #t233 = c in let final self::Class* #t234 = self::Extension|+(self::Extension|[](#t231, #t233), 1) in let final void #t235 = self::Extension|[]=(#t231, #t233, #t234) in #t234);
-  self::throws(() → self::Class* => self::Extension|[](self::Extension|[](let final self::Class* #t236 = c in #t236.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t236), c), c));
-  self::throws(() → self::Class* => let final self::Class* #t237 = self::Extension|[](let final self::Class* #t238 = c in #t238.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t238), c) in let final self::Class* #t239 = c in let final self::Class* #t240 = new self::Class::•() in let final void #t241 = self::Extension|[]=(#t237, #t239, #t240) in #t240);
-  self::throws(() → self::Class* => c = let final self::Class* #t242 = self::Extension|[](let final self::Class* #t243 = c in #t243.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t243), c) in let final self::Class* #t244 = c in let final self::Class* #t245 = new self::Class::•() in let final void #t246 = self::Extension|[]=(#t242, #t244, #t245) in #t245);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](self::Extension|[](let final self::Class* #t247 = c in #t247.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t247), c), c)));
-  self::throws(() → self::Class* => let final self::Class* #t248 = self::Extension|[](let final self::Class* #t249 = c in #t249.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t249), c) in let final self::Class* #t250 = c in let final self::Class* #t251 = self::Extension|+(self::Extension|[](#t248, #t250), 0) in let final void #t252 = self::Extension|[]=(#t248, #t250, #t251) in #t251);
-  self::throws(() → self::Class* => c = let final self::Class* #t253 = self::Extension|[](let final self::Class* #t254 = c in #t254.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t254), c) in let final self::Class* #t255 = c in let final self::Class* #t256 = self::Extension|+(self::Extension|[](#t253, #t255), 0) in let final void #t257 = self::Extension|[]=(#t253, #t255, #t256) in #t256);
-  self::throws(() → self::Class* => let final self::Class* #t258 = self::Extension|[](let final self::Class* #t259 = c in #t259.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t259), c) in let final self::Class* #t260 = c in let final self::Class* #t261 = self::Extension|[](#t258, #t260) in let final void #t262 = self::Extension|[]=(#t258, #t260, self::Extension|+(#t261, 1)) in #t261);
-  self::throws(() → self::Class* => c = let final self::Class* #t263 = self::Extension|[](let final self::Class* #t264 = c in #t264.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t264), c) in let final self::Class* #t265 = c in let final self::Class* #t266 = self::Extension|[](#t263, #t265) in let final void #t267 = self::Extension|[]=(#t263, #t265, self::Extension|+(#t266, 1)) in #t266);
-  self::throws(() → self::Class* => let final self::Class* #t268 = self::Extension|[](let final self::Class* #t269 = c in #t269.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t269), c) in let final self::Class* #t270 = c in let final self::Class* #t271 = self::Extension|+(self::Extension|[](#t268, #t270), 1) in let final void #t272 = self::Extension|[]=(#t268, #t270, #t271) in #t271);
-  self::throws(() → self::Class* => c = let final self::Class* #t273 = self::Extension|[](let final self::Class* #t274 = c in #t274.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t274), c) in let final self::Class* #t275 = c in let final self::Class* #t276 = self::Extension|+(self::Extension|[](#t273, #t275), 1) in let final void #t277 = self::Extension|[]=(#t273, #t275, #t276) in #t276);
+  self::throws(() → self::Class* => self::Extension|[](let final self::Class* #t194 = c in #t194 == null ?{self::Class*} null : self::Extension|get#field(#t194), c));
+  self::throws(() → self::Class* => let final self::Class* #t195 = let final self::Class* #t196 = c in #t196 == null ?{self::Class*} null : self::Extension|get#field(#t196) in let final self::Class* #t197 = c in let final self::Class* #t198 = new self::Class::•() in let final void #t199 = self::Extension|[]=(#t195, #t197, #t198) in #t198);
+  self::throws(() → self::Class* => c = let final self::Class* #t200 = let final self::Class* #t201 = c in #t201 == null ?{self::Class*} null : self::Extension|get#field(#t201) in let final self::Class* #t202 = c in let final self::Class* #t203 = new self::Class::•() in let final void #t204 = self::Extension|[]=(#t200, #t202, #t203) in #t203);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](let final self::Class* #t205 = c in #t205 == null ?{self::Class*} null : self::Extension|get#field(#t205), c)));
+  self::throws(() → self::Class* => let final self::Class* #t206 = let final self::Class* #t207 = c in #t207 == null ?{self::Class*} null : self::Extension|get#field(#t207) in let final self::Class* #t208 = c in let final self::Class* #t209 = self::Extension|+(self::Extension|[](#t206, #t208), 0) in let final void #t210 = self::Extension|[]=(#t206, #t208, #t209) in #t209);
+  self::throws(() → self::Class* => c = let final self::Class* #t211 = let final self::Class* #t212 = c in #t212 == null ?{self::Class*} null : self::Extension|get#field(#t212) in let final self::Class* #t213 = c in let final self::Class* #t214 = self::Extension|+(self::Extension|[](#t211, #t213), 0) in let final void #t215 = self::Extension|[]=(#t211, #t213, #t214) in #t214);
+  self::throws(() → self::Class* => let final self::Class* #t216 = let final self::Class* #t217 = c in #t217 == null ?{self::Class*} null : self::Extension|get#field(#t217) in let final self::Class* #t218 = c in let final self::Class* #t219 = self::Extension|[](#t216, #t218) in let final void #t220 = self::Extension|[]=(#t216, #t218, self::Extension|+(#t219, 1)) in #t219);
+  self::throws(() → self::Class* => c = let final self::Class* #t221 = let final self::Class* #t222 = c in #t222 == null ?{self::Class*} null : self::Extension|get#field(#t222) in let final self::Class* #t223 = c in let final self::Class* #t224 = self::Extension|[](#t221, #t223) in let final void #t225 = self::Extension|[]=(#t221, #t223, self::Extension|+(#t224, 1)) in #t224);
+  self::throws(() → self::Class* => let final self::Class* #t226 = let final self::Class* #t227 = c in #t227 == null ?{self::Class*} null : self::Extension|get#field(#t227) in let final self::Class* #t228 = c in let final self::Class* #t229 = self::Extension|+(self::Extension|[](#t226, #t228), 1) in let final void #t230 = self::Extension|[]=(#t226, #t228, #t229) in #t229);
+  self::throws(() → self::Class* => c = let final self::Class* #t231 = let final self::Class* #t232 = c in #t232 == null ?{self::Class*} null : self::Extension|get#field(#t232) in let final self::Class* #t233 = c in let final self::Class* #t234 = self::Extension|+(self::Extension|[](#t231, #t233), 1) in let final void #t235 = self::Extension|[]=(#t231, #t233, #t234) in #t234);
+  self::throws(() → self::Class* => self::Extension|[](self::Extension|[](let final self::Class* #t236 = c in #t236 == null ?{self::Class*} null : self::Extension|get#field(#t236), c), c));
+  self::throws(() → self::Class* => let final self::Class* #t237 = self::Extension|[](let final self::Class* #t238 = c in #t238 == null ?{self::Class*} null : self::Extension|get#field(#t238), c) in let final self::Class* #t239 = c in let final self::Class* #t240 = new self::Class::•() in let final void #t241 = self::Extension|[]=(#t237, #t239, #t240) in #t240);
+  self::throws(() → self::Class* => c = let final self::Class* #t242 = self::Extension|[](let final self::Class* #t243 = c in #t243 == null ?{self::Class*} null : self::Extension|get#field(#t243), c) in let final self::Class* #t244 = c in let final self::Class* #t245 = new self::Class::•() in let final void #t246 = self::Extension|[]=(#t242, #t244, #t245) in #t245);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](self::Extension|[](let final self::Class* #t247 = c in #t247 == null ?{self::Class*} null : self::Extension|get#field(#t247), c), c)));
+  self::throws(() → self::Class* => let final self::Class* #t248 = self::Extension|[](let final self::Class* #t249 = c in #t249 == null ?{self::Class*} null : self::Extension|get#field(#t249), c) in let final self::Class* #t250 = c in let final self::Class* #t251 = self::Extension|+(self::Extension|[](#t248, #t250), 0) in let final void #t252 = self::Extension|[]=(#t248, #t250, #t251) in #t251);
+  self::throws(() → self::Class* => c = let final self::Class* #t253 = self::Extension|[](let final self::Class* #t254 = c in #t254 == null ?{self::Class*} null : self::Extension|get#field(#t254), c) in let final self::Class* #t255 = c in let final self::Class* #t256 = self::Extension|+(self::Extension|[](#t253, #t255), 0) in let final void #t257 = self::Extension|[]=(#t253, #t255, #t256) in #t256);
+  self::throws(() → self::Class* => let final self::Class* #t258 = self::Extension|[](let final self::Class* #t259 = c in #t259 == null ?{self::Class*} null : self::Extension|get#field(#t259), c) in let final self::Class* #t260 = c in let final self::Class* #t261 = self::Extension|[](#t258, #t260) in let final void #t262 = self::Extension|[]=(#t258, #t260, self::Extension|+(#t261, 1)) in #t261);
+  self::throws(() → self::Class* => c = let final self::Class* #t263 = self::Extension|[](let final self::Class* #t264 = c in #t264 == null ?{self::Class*} null : self::Extension|get#field(#t264), c) in let final self::Class* #t265 = c in let final self::Class* #t266 = self::Extension|[](#t263, #t265) in let final void #t267 = self::Extension|[]=(#t263, #t265, self::Extension|+(#t266, 1)) in #t266);
+  self::throws(() → self::Class* => let final self::Class* #t268 = self::Extension|[](let final self::Class* #t269 = c in #t269 == null ?{self::Class*} null : self::Extension|get#field(#t269), c) in let final self::Class* #t270 = c in let final self::Class* #t271 = self::Extension|+(self::Extension|[](#t268, #t270), 1) in let final void #t272 = self::Extension|[]=(#t268, #t270, #t271) in #t271);
+  self::throws(() → self::Class* => c = let final self::Class* #t273 = self::Extension|[](let final self::Class* #t274 = c in #t274 == null ?{self::Class*} null : self::Extension|get#field(#t274), c) in let final self::Class* #t275 = c in let final self::Class* #t276 = self::Extension|+(self::Extension|[](#t273, #t275), 1) in let final void #t277 = self::Extension|[]=(#t273, #t275, #t276) in #t276);
 }
 static method operatorAccess(self::Class* c) → void {
-  self::throws(() → self::Class* => self::Extension|+(let final self::Class* #t278 = c in #t278.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t278), 0));
-  self::throws(() → self::Class* => self::Extension|unary-(let final self::Class* #t279 = c in #t279.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t279)));
-  let final self::Class* #t280 = c in #t280.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t280, self::Extension|+(self::Extension|get#field(#t280), 0));
-  c = let final self::Class* #t281 = c in #t281.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t282 = self::Extension|+(self::Extension|get#field(#t281), 0) in let final void #t283 = self::Extension|set#field(#t281, #t282) in #t282;
-  self::throws(() → self::Class* => let final self::Class* #t284 = let final self::Class* #t285 = c in #t285.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t285) in let final self::Class* #t286 = self::Extension|+(self::Extension|get#field(#t284), 0) in let final void #t287 = self::Extension|set#field(#t284, #t286) in #t286);
-  self::throws(() → self::Class* => c = let final self::Class* #t288 = let final self::Class* #t289 = c in #t289.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t289) in let final self::Class* #t290 = self::Extension|+(self::Extension|get#field(#t288), 0) in let final void #t291 = self::Extension|set#field(#t288, #t290) in #t290);
-  let final self::Class* #t292 = c in #t292.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t292, self::Extension|+(self::Extension|get#field(#t292), 1));
-  c = let final self::Class* #t293 = c in #t293.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t294 = self::Extension|get#field(#t293) in let final self::Class* #t295 = let final self::Class* #t296 = self::Extension|+(#t294, 1) in let final void #t297 = self::Extension|set#field(#t293, #t296) in #t296 in #t294;
-  let final self::Class* #t298 = c in #t298.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t299 = self::Extension|+(self::Extension|get#field(#t298), 1) in let final void #t300 = self::Extension|set#field(#t298, #t299) in #t299;
-  c = let final self::Class* #t301 = c in #t301.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t302 = self::Extension|+(self::Extension|get#field(#t301), 1) in let final void #t303 = self::Extension|set#field(#t301, #t302) in #t302;
+  self::throws(() → self::Class* => self::Extension|+(let final self::Class* #t278 = c in #t278 == null ?{self::Class*} null : self::Extension|get#field(#t278), 0));
+  self::throws(() → self::Class* => self::Extension|unary-(let final self::Class* #t279 = c in #t279 == null ?{self::Class*} null : self::Extension|get#field(#t279)));
+  let final self::Class* #t280 = c in #t280 == null ?{self::Class*} null : self::Extension|set#field(#t280, self::Extension|+(self::Extension|get#field(#t280), 0));
+  c = let final self::Class* #t281 = c in #t281 == null ?{self::Class*} null : let final self::Class* #t282 = self::Extension|+(self::Extension|get#field(#t281), 0) in let final void #t283 = self::Extension|set#field(#t281, #t282) in #t282;
+  self::throws(() → self::Class* => let final self::Class* #t284 = let final self::Class* #t285 = c in #t285 == null ?{self::Class*} null : self::Extension|get#field(#t285) in let final self::Class* #t286 = self::Extension|+(self::Extension|get#field(#t284), 0) in let final void #t287 = self::Extension|set#field(#t284, #t286) in #t286);
+  self::throws(() → self::Class* => c = let final self::Class* #t288 = let final self::Class* #t289 = c in #t289 == null ?{self::Class*} null : self::Extension|get#field(#t289) in let final self::Class* #t290 = self::Extension|+(self::Extension|get#field(#t288), 0) in let final void #t291 = self::Extension|set#field(#t288, #t290) in #t290);
+  let final self::Class* #t292 = c in #t292 == null ?{self::Class*} null : self::Extension|set#field(#t292, self::Extension|+(self::Extension|get#field(#t292), 1));
+  c = let final self::Class* #t293 = c in #t293 == null ?{self::Class*} null : let final self::Class* #t294 = self::Extension|get#field(#t293) in let final self::Class* #t295 = let final self::Class* #t296 = self::Extension|+(#t294, 1) in let final void #t297 = self::Extension|set#field(#t293, #t296) in #t296 in #t294;
+  let final self::Class* #t298 = c in #t298 == null ?{self::Class*} null : let final self::Class* #t299 = self::Extension|+(self::Extension|get#field(#t298), 1) in let final void #t300 = self::Extension|set#field(#t298, #t299) in #t299;
+  c = let final self::Class* #t301 = c in #t301 == null ?{self::Class*} null : let final self::Class* #t302 = self::Extension|+(self::Extension|get#field(#t301), 1) in let final void #t303 = self::Extension|set#field(#t301, #t302) in #t302;
 }
 static method ifNull(self::Class* c) → void {
-  let final self::Class* #t304 = c in #t304.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t304).{self::Class::==}(null) ?{self::Class*} self::Extension|set#field(#t304, c) : null;
-  c = let final self::Class* #t305 = c in #t305.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t306 = self::Extension|get#field(#t305) in #t306.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t307 = c in let final void #t308 = self::Extension|set#field(#t305, #t307) in #t307 : #t306;
-  self::throws(() → self::Class* => let final self::Class* #t309 = let final self::Class* #t310 = c in #t310.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t310) in let final self::Class* #t311 = self::Extension|get#field(#t309) in #t311.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t312 = c in let final void #t313 = self::Extension|set#field(#t309, #t312) in #t312 : #t311);
-  self::throws(() → self::Class* => c = let final self::Class* #t314 = let final self::Class* #t315 = c in #t315.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t315) in let final self::Class* #t316 = self::Extension|get#field(#t314) in #t316.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t317 = c in let final void #t318 = self::Extension|set#field(#t314, #t317) in #t317 : #t316);
-  self::throws(() → self::Class* => let final self::Class* #t319 = let final self::Class* #t320 = c in #t320.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t320) in let final self::Class* #t321 = c in let final self::Class* #t322 = self::Extension|[](#t319, #t321) in #t322.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t323 = c in let final void #t324 = self::Extension|[]=(#t319, #t321, #t323) in #t323 : #t322);
-  self::throws(() → self::Class* => c = let final self::Class* #t325 = let final self::Class* #t326 = c in #t326.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t326) in let final self::Class* #t327 = c in let final self::Class* #t328 = self::Extension|[](#t325, #t327) in #t328.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t329 = c in let final void #t330 = self::Extension|[]=(#t325, #t327, #t329) in #t329 : #t328);
+  let final self::Class* #t304 = c in #t304 == null ?{self::Class*} null : self::Extension|get#field(#t304) == null ?{self::Class*} self::Extension|set#field(#t304, c) : null;
+  c = let final self::Class* #t305 = c in #t305 == null ?{self::Class*} null : let final self::Class* #t306 = self::Extension|get#field(#t305) in #t306 == null ?{self::Class*} let final self::Class* #t307 = c in let final void #t308 = self::Extension|set#field(#t305, #t307) in #t307 : #t306;
+  self::throws(() → self::Class* => let final self::Class* #t309 = let final self::Class* #t310 = c in #t310 == null ?{self::Class*} null : self::Extension|get#field(#t310) in let final self::Class* #t311 = self::Extension|get#field(#t309) in #t311 == null ?{self::Class*} let final self::Class* #t312 = c in let final void #t313 = self::Extension|set#field(#t309, #t312) in #t312 : #t311);
+  self::throws(() → self::Class* => c = let final self::Class* #t314 = let final self::Class* #t315 = c in #t315 == null ?{self::Class*} null : self::Extension|get#field(#t315) in let final self::Class* #t316 = self::Extension|get#field(#t314) in #t316 == null ?{self::Class*} let final self::Class* #t317 = c in let final void #t318 = self::Extension|set#field(#t314, #t317) in #t317 : #t316);
+  self::throws(() → self::Class* => let final self::Class* #t319 = let final self::Class* #t320 = c in #t320 == null ?{self::Class*} null : self::Extension|get#field(#t320) in let final self::Class* #t321 = c in let final self::Class* #t322 = self::Extension|[](#t319, #t321) in #t322 == null ?{self::Class*} let final self::Class* #t323 = c in let final void #t324 = self::Extension|[]=(#t319, #t321, #t323) in #t323 : #t322);
+  self::throws(() → self::Class* => c = let final self::Class* #t325 = let final self::Class* #t326 = c in #t326 == null ?{self::Class*} null : self::Extension|get#field(#t326) in let final self::Class* #t327 = c in let final self::Class* #t328 = self::Extension|[](#t325, #t327) in #t328 == null ?{self::Class*} let final self::Class* #t329 = c in let final void #t330 = self::Extension|[]=(#t325, #t327, #t329) in #t329 : #t328);
 }
 static method throws(() →* void f) → void {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.transformed.expect
index a622905..f8fa444 100644
--- a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
   set field = self::Extension|set#field;
 }
 static method Extension|get#field(lowered final self::Class* #this) → self::Class*
-  return #this.{self::Class::_field};
+  return #this.{self::Class::_field}{self::Class*};
 static method Extension|set#field(lowered final self::Class* #this, self::Class* value) → void {
   #this.{self::Class::_field} = value;
 }
@@ -53,125 +53,125 @@
   self::ifNull(null);
 }
 static method propertyAccess(self::Class* c) → void {
-  let final self::Class* #t1 = c in #t1.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t1);
-  let final self::Class* #t2 = c in #t2.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t2, new self::Class::•());
-  c = let final self::Class* #t3 = c in #t3.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t4 = new self::Class::•() in let final void #t5 = self::Extension|set#field(#t3, #t4) in #t4;
-  let final self::Class* #t6 = c in #t6.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t6);
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t7 = c in #t7.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t7)));
-  let final self::Class* #t8 = let final self::Class* #t9 = c in #t9.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t9) in #t8.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t8);
-  self::throws(() → self::Class* => let final self::Class* #t10 = self::Extension|get#field(let final self::Class* #t11 = c in #t11.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t11)) in #t10.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t10));
-  self::throws(() → self::Class* => let final self::Class* #t12 = new self::Class::•() in let final void #t13 = self::Extension|set#field(let final self::Class* #t14 = c in #t14.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t14), #t12) in #t12);
-  let final self::Class* #t15 = let final self::Class* #t16 = c in #t16.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t16) in #t15.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t15, new self::Class::•());
-  self::throws(() → self::Class* => let final self::Class* #t17 = self::Extension|get#field(let final self::Class* #t18 = c in #t18.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t18)) in #t17.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t19 = new self::Class::•() in let final void #t20 = self::Extension|set#field(#t17, #t19) in #t19);
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t21 = c in #t21.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t21)));
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t22 = c in #t22.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t23 = new self::Class::•() in let final void #t24 = self::Extension|set#field(#t22, #t23) in #t23));
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t25 = c in #t25.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t25)));
-  self::throws(() → self::Class* => c = let final self::Class* #t26 = new self::Class::•() in let final void #t27 = self::Extension|set#field(let final self::Class* #t28 = c in #t28.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t28), #t26) in #t26);
-  c = let final self::Class* #t29 = let final self::Class* #t30 = c in #t30.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t30) in #t29.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t31 = new self::Class::•() in let final void #t32 = self::Extension|set#field(#t29, #t31) in #t31;
-  self::throws(() → self::Class* => c = let final self::Class* #t33 = self::Extension|get#field(let final self::Class* #t34 = c in #t34.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t34)) in #t33.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t35 = new self::Class::•() in let final void #t36 = self::Extension|set#field(#t33, #t35) in #t35);
-  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t37 = c in #t37.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t37)));
-  let final self::Class* #t38 = c in #t38.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t38, self::Extension|get#field(new self::Class::•()));
-  c = let final self::Class* #t39 = c in #t39.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t40 = self::Extension|get#field(new self::Class::•()) in let final void #t41 = self::Extension|set#field(#t39, #t40) in #t40;
-  let final self::Class* #t42 = c in #t42.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t42, let final self::Class* #t43 = new self::Class::•() in let final void #t44 = self::Extension|set#field(new self::Class::•(), #t43) in #t43);
-  c = let final self::Class* #t45 = c in #t45.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t46 = let final self::Class* #t47 = new self::Class::•() in let final void #t48 = self::Extension|set#field(new self::Class::•(), #t47) in #t47 in let final void #t49 = self::Extension|set#field(#t45, #t46) in #t46;
-  let final self::Class* #t50 = c in #t50.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t50, self::Extension|method(new self::Class::•()));
-  c = let final self::Class* #t51 = c in #t51.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t52 = self::Extension|method(new self::Class::•()) in let final void #t53 = self::Extension|set#field(#t51, #t52) in #t52;
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t54 = c in #t54.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t54)));
-  self::throws(() → self::Class* => let final self::Class* #t55 = new self::Class::•() in let final void #t56 = self::Extension|set#field(let final self::Class* #t57 = c in #t57.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t57), #t55) in #t55);
-  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t58 = c in #t58.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t58)));
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t59 = c in #t59.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t59))));
-  self::throws(() → self::Class* => let final self::Class* #t60 = new self::Class::•() in let final void #t61 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t62 = c in #t62.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t62)), #t60) in #t60);
-  self::throws(() → self::Class* => c = let final self::Class* #t63 = new self::Class::•() in let final void #t64 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t65 = c in #t65.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t65)), #t63) in #t63);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t66 = c in #t66.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t66))));
-  let final self::Class* #t67 = c in #t67.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t67, self::Extension|get#field(self::Extension|get#field(new self::Class::•())));
-  c = let final self::Class* #t68 = c in #t68.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t69 = self::Extension|get#field(self::Extension|get#field(new self::Class::•())) in let final void #t70 = self::Extension|set#field(#t68, #t69) in #t69;
-  let final self::Class* #t71 = c in #t71.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t71, let final self::Class* #t72 = new self::Class::•() in let final void #t73 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t72) in #t72);
-  c = let final self::Class* #t74 = c in #t74.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t75 = let final self::Class* #t76 = new self::Class::•() in let final void #t77 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t76) in #t76 in let final void #t78 = self::Extension|set#field(#t74, #t75) in #t75;
-  let final self::Class* #t79 = c in #t79.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t79, self::Extension|method(self::Extension|get#field(new self::Class::•())));
-  c = let final self::Class* #t80 = c in #t80.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t81 = self::Extension|method(self::Extension|get#field(new self::Class::•())) in let final void #t82 = self::Extension|set#field(#t80, #t81) in #t81;
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t83 = c in #t83.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t83))));
-  self::throws(() → self::Class* => let final self::Class* #t84 = new self::Class::•() in let final void #t85 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t86 = c in #t86.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t86)), #t84) in #t84);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t87 = c in #t87.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t87))));
-  self::throws(() → self::Class* => let final self::Class* #t88 = self::Extension|get#field(new self::Class::•()) in let final void #t89 = self::Extension|set#field(let final self::Class* #t90 = c in #t90.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t90), #t88) in #t88);
-  self::throws(() → self::Class* => c = let final self::Class* #t91 = self::Extension|get#field(new self::Class::•()) in let final void #t92 = self::Extension|set#field(let final self::Class* #t93 = c in #t93.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t93), #t91) in #t91);
-  self::throws(() → self::Class* => let final self::Class* #t94 = let final self::Class* #t95 = new self::Class::•() in let final void #t96 = self::Extension|set#field(new self::Class::•(), #t95) in #t95 in let final void #t97 = self::Extension|set#field(let final self::Class* #t98 = c in #t98.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t98), #t94) in #t94);
-  self::throws(() → self::Class* => c = let final self::Class* #t99 = let final self::Class* #t100 = new self::Class::•() in let final void #t101 = self::Extension|set#field(new self::Class::•(), #t100) in #t100 in let final void #t102 = self::Extension|set#field(let final self::Class* #t103 = c in #t103.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t103), #t99) in #t99);
-  self::throws(() → self::Class* => let final self::Class* #t104 = self::Extension|method(new self::Class::•()) in let final void #t105 = self::Extension|set#field(let final self::Class* #t106 = c in #t106.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t106), #t104) in #t104);
-  self::throws(() → self::Class* => c = let final self::Class* #t107 = self::Extension|method(new self::Class::•()) in let final void #t108 = self::Extension|set#field(let final self::Class* #t109 = c in #t109.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t109), #t107) in #t107);
-  let final self::Class* #t110 = c in #t110.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t110, let final self::Class* #t111 = self::Extension|get#field(new self::Class::•()) in let final void #t112 = self::Extension|set#field(new self::Class::•(), #t111) in #t111);
-  c = let final self::Class* #t113 = c in #t113.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t114 = let final self::Class* #t115 = self::Extension|get#field(new self::Class::•()) in let final void #t116 = self::Extension|set#field(new self::Class::•(), #t115) in #t115 in let final void #t117 = self::Extension|set#field(#t113, #t114) in #t114;
-  let final self::Class* #t118 = c in #t118.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t118, let final self::Class* #t119 = let final self::Class* #t120 = new self::Class::•() in let final void #t121 = self::Extension|set#field(new self::Class::•(), #t120) in #t120 in let final void #t122 = self::Extension|set#field(new self::Class::•(), #t119) in #t119);
-  c = let final self::Class* #t123 = c in #t123.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t124 = let final self::Class* #t125 = let final self::Class* #t126 = new self::Class::•() in let final void #t127 = self::Extension|set#field(new self::Class::•(), #t126) in #t126 in let final void #t128 = self::Extension|set#field(new self::Class::•(), #t125) in #t125 in let final void #t129 = self::Extension|set#field(#t123, #t124) in #t124;
-  let final self::Class* #t130 = c in #t130.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t130, let final self::Class* #t131 = self::Extension|method(new self::Class::•()) in let final void #t132 = self::Extension|set#field(new self::Class::•(), #t131) in #t131);
-  c = let final self::Class* #t133 = c in #t133.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t134 = let final self::Class* #t135 = self::Extension|method(new self::Class::•()) in let final void #t136 = self::Extension|set#field(new self::Class::•(), #t135) in #t135 in let final void #t137 = self::Extension|set#field(#t133, #t134) in #t134;
-  self::throws(() → self::Class* => let final self::Class* #t138 = self::Extension|get#field(new self::Class::•()) in let final void #t139 = self::Extension|set#field(let final self::Class* #t140 = c in #t140.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t140), #t138) in #t138);
-  self::throws(() → self::Class* => c = let final self::Class* #t141 = self::Extension|get#field(new self::Class::•()) in let final void #t142 = self::Extension|set#field(let final self::Class* #t143 = c in #t143.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t143), #t141) in #t141);
-  self::throws(() → self::Class* => let final self::Class* #t144 = let final self::Class* #t145 = new self::Class::•() in let final void #t146 = self::Extension|set#field(new self::Class::•(), #t145) in #t145 in let final void #t147 = self::Extension|set#field(let final self::Class* #t148 = c in #t148.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t148), #t144) in #t144);
-  self::throws(() → self::Class* => c = let final self::Class* #t149 = let final self::Class* #t150 = new self::Class::•() in let final void #t151 = self::Extension|set#field(new self::Class::•(), #t150) in #t150 in let final void #t152 = self::Extension|set#field(let final self::Class* #t153 = c in #t153.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t153), #t149) in #t149);
-  self::throws(() → self::Class* => let final self::Class* #t154 = self::Extension|method(new self::Class::•()) in let final void #t155 = self::Extension|set#field(let final self::Class* #t156 = c in #t156.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t156), #t154) in #t154);
-  self::throws(() → self::Class* => c = let final self::Class* #t157 = self::Extension|method(new self::Class::•()) in let final void #t158 = self::Extension|set#field(let final self::Class* #t159 = c in #t159.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t159), #t157) in #t157);
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t160 = c in #t160.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t160))));
-  self::throws(() → self::Class* => let final self::Class* #t161 = new self::Class::•() in let final void #t162 = self::Extension|set#field(self::Extension|method(let final self::Class* #t163 = c in #t163.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t163)), #t161) in #t161);
-  self::throws(() → self::Class* => c = let final self::Class* #t164 = new self::Class::•() in let final void #t165 = self::Extension|set#field(self::Extension|method(let final self::Class* #t166 = c in #t166.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t166)), #t164) in #t164);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t167 = c in #t167.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t167))));
-  let final self::Class* #t168 = c in #t168.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t168, self::Extension|get#field(self::Extension|method(new self::Class::•())));
-  c = let final self::Class* #t169 = c in #t169.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t170 = self::Extension|get#field(self::Extension|method(new self::Class::•())) in let final void #t171 = self::Extension|set#field(#t169, #t170) in #t170;
-  let final self::Class* #t172 = c in #t172.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t172, let final self::Class* #t173 = new self::Class::•() in let final void #t174 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t173) in #t173);
-  c = let final self::Class* #t175 = c in #t175.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t176 = let final self::Class* #t177 = new self::Class::•() in let final void #t178 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t177) in #t177 in let final void #t179 = self::Extension|set#field(#t175, #t176) in #t176;
-  let final self::Class* #t180 = c in #t180.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t180, self::Extension|method(self::Extension|method(new self::Class::•())));
-  c = let final self::Class* #t181 = c in #t181.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t182 = self::Extension|method(self::Extension|method(new self::Class::•())) in let final void #t183 = self::Extension|set#field(#t181, #t182) in #t182;
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t184 = c in #t184.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t184))));
-  self::throws(() → self::Class* => let final self::Class* #t185 = new self::Class::•() in let final void #t186 = self::Extension|set#field(self::Extension|method(let final self::Class* #t187 = c in #t187.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t187)), #t185) in #t185);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t188 = c in #t188.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t188))));
-  let final self::Class* #t189 = let final self::Class* #t190 = c in #t190.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t190) in #t189.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t189);
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t191 = c in #t191.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t191)));
-  let final self::Class* #t192 = let final self::Class* #t193 = c in #t193.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t193) in #t192.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t192);
+  let final self::Class* #t1 = c in #t1 == null ?{self::Class*} null : self::Extension|get#field(#t1);
+  let final self::Class* #t2 = c in #t2 == null ?{self::Class*} null : self::Extension|set#field(#t2, new self::Class::•());
+  c = let final self::Class* #t3 = c in #t3 == null ?{self::Class*} null : let final self::Class* #t4 = new self::Class::•() in let final void #t5 = self::Extension|set#field(#t3, #t4) in #t4;
+  let final self::Class* #t6 = c in #t6 == null ?{self::Class*} null : self::Extension|method(#t6);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t7 = c in #t7 == null ?{self::Class*} null : self::Extension|get#field(#t7)));
+  let final self::Class* #t8 = let final self::Class* #t9 = c in #t9 == null ?{self::Class*} null : self::Extension|get#field(#t9) in #t8 == null ?{self::Class*} null : self::Extension|get#field(#t8);
+  self::throws(() → self::Class* => let final self::Class* #t10 = self::Extension|get#field(let final self::Class* #t11 = c in #t11 == null ?{self::Class*} null : self::Extension|get#field(#t11)) in #t10 == null ?{self::Class*} null : self::Extension|get#field(#t10));
+  self::throws(() → self::Class* => let final self::Class* #t12 = new self::Class::•() in let final void #t13 = self::Extension|set#field(let final self::Class* #t14 = c in #t14 == null ?{self::Class*} null : self::Extension|get#field(#t14), #t12) in #t12);
+  let final self::Class* #t15 = let final self::Class* #t16 = c in #t16 == null ?{self::Class*} null : self::Extension|get#field(#t16) in #t15 == null ?{self::Class*} null : self::Extension|set#field(#t15, new self::Class::•());
+  self::throws(() → self::Class* => let final self::Class* #t17 = self::Extension|get#field(let final self::Class* #t18 = c in #t18 == null ?{self::Class*} null : self::Extension|get#field(#t18)) in #t17 == null ?{self::Class*} null : let final self::Class* #t19 = new self::Class::•() in let final void #t20 = self::Extension|set#field(#t17, #t19) in #t19);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t21 = c in #t21 == null ?{self::Class*} null : self::Extension|get#field(#t21)));
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t22 = c in #t22 == null ?{self::Class*} null : let final self::Class* #t23 = new self::Class::•() in let final void #t24 = self::Extension|set#field(#t22, #t23) in #t23));
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t25 = c in #t25 == null ?{self::Class*} null : self::Extension|method(#t25)));
+  self::throws(() → self::Class* => c = let final self::Class* #t26 = new self::Class::•() in let final void #t27 = self::Extension|set#field(let final self::Class* #t28 = c in #t28 == null ?{self::Class*} null : self::Extension|get#field(#t28), #t26) in #t26);
+  c = let final self::Class* #t29 = let final self::Class* #t30 = c in #t30 == null ?{self::Class*} null : self::Extension|get#field(#t30) in #t29 == null ?{self::Class*} null : let final self::Class* #t31 = new self::Class::•() in let final void #t32 = self::Extension|set#field(#t29, #t31) in #t31;
+  self::throws(() → self::Class* => c = let final self::Class* #t33 = self::Extension|get#field(let final self::Class* #t34 = c in #t34 == null ?{self::Class*} null : self::Extension|get#field(#t34)) in #t33 == null ?{self::Class*} null : let final self::Class* #t35 = new self::Class::•() in let final void #t36 = self::Extension|set#field(#t33, #t35) in #t35);
+  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t37 = c in #t37 == null ?{self::Class*} null : self::Extension|get#field(#t37)));
+  let final self::Class* #t38 = c in #t38 == null ?{self::Class*} null : self::Extension|set#field(#t38, self::Extension|get#field(new self::Class::•()));
+  c = let final self::Class* #t39 = c in #t39 == null ?{self::Class*} null : let final self::Class* #t40 = self::Extension|get#field(new self::Class::•()) in let final void #t41 = self::Extension|set#field(#t39, #t40) in #t40;
+  let final self::Class* #t42 = c in #t42 == null ?{self::Class*} null : self::Extension|set#field(#t42, let final self::Class* #t43 = new self::Class::•() in let final void #t44 = self::Extension|set#field(new self::Class::•(), #t43) in #t43);
+  c = let final self::Class* #t45 = c in #t45 == null ?{self::Class*} null : let final self::Class* #t46 = let final self::Class* #t47 = new self::Class::•() in let final void #t48 = self::Extension|set#field(new self::Class::•(), #t47) in #t47 in let final void #t49 = self::Extension|set#field(#t45, #t46) in #t46;
+  let final self::Class* #t50 = c in #t50 == null ?{self::Class*} null : self::Extension|set#field(#t50, self::Extension|method(new self::Class::•()));
+  c = let final self::Class* #t51 = c in #t51 == null ?{self::Class*} null : let final self::Class* #t52 = self::Extension|method(new self::Class::•()) in let final void #t53 = self::Extension|set#field(#t51, #t52) in #t52;
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t54 = c in #t54 == null ?{self::Class*} null : self::Extension|method(#t54)));
+  self::throws(() → self::Class* => let final self::Class* #t55 = new self::Class::•() in let final void #t56 = self::Extension|set#field(let final self::Class* #t57 = c in #t57 == null ?{self::Class*} null : self::Extension|method(#t57), #t55) in #t55);
+  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t58 = c in #t58 == null ?{self::Class*} null : self::Extension|method(#t58)));
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t59 = c in #t59 == null ?{self::Class*} null : self::Extension|get#field(#t59))));
+  self::throws(() → self::Class* => let final self::Class* #t60 = new self::Class::•() in let final void #t61 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t62 = c in #t62 == null ?{self::Class*} null : self::Extension|get#field(#t62)), #t60) in #t60);
+  self::throws(() → self::Class* => c = let final self::Class* #t63 = new self::Class::•() in let final void #t64 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t65 = c in #t65 == null ?{self::Class*} null : self::Extension|get#field(#t65)), #t63) in #t63);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t66 = c in #t66 == null ?{self::Class*} null : self::Extension|get#field(#t66))));
+  let final self::Class* #t67 = c in #t67 == null ?{self::Class*} null : self::Extension|set#field(#t67, self::Extension|get#field(self::Extension|get#field(new self::Class::•())));
+  c = let final self::Class* #t68 = c in #t68 == null ?{self::Class*} null : let final self::Class* #t69 = self::Extension|get#field(self::Extension|get#field(new self::Class::•())) in let final void #t70 = self::Extension|set#field(#t68, #t69) in #t69;
+  let final self::Class* #t71 = c in #t71 == null ?{self::Class*} null : self::Extension|set#field(#t71, let final self::Class* #t72 = new self::Class::•() in let final void #t73 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t72) in #t72);
+  c = let final self::Class* #t74 = c in #t74 == null ?{self::Class*} null : let final self::Class* #t75 = let final self::Class* #t76 = new self::Class::•() in let final void #t77 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t76) in #t76 in let final void #t78 = self::Extension|set#field(#t74, #t75) in #t75;
+  let final self::Class* #t79 = c in #t79 == null ?{self::Class*} null : self::Extension|set#field(#t79, self::Extension|method(self::Extension|get#field(new self::Class::•())));
+  c = let final self::Class* #t80 = c in #t80 == null ?{self::Class*} null : let final self::Class* #t81 = self::Extension|method(self::Extension|get#field(new self::Class::•())) in let final void #t82 = self::Extension|set#field(#t80, #t81) in #t81;
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t83 = c in #t83 == null ?{self::Class*} null : self::Extension|method(#t83))));
+  self::throws(() → self::Class* => let final self::Class* #t84 = new self::Class::•() in let final void #t85 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t86 = c in #t86 == null ?{self::Class*} null : self::Extension|method(#t86)), #t84) in #t84);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t87 = c in #t87 == null ?{self::Class*} null : self::Extension|method(#t87))));
+  self::throws(() → self::Class* => let final self::Class* #t88 = self::Extension|get#field(new self::Class::•()) in let final void #t89 = self::Extension|set#field(let final self::Class* #t90 = c in #t90 == null ?{self::Class*} null : self::Extension|get#field(#t90), #t88) in #t88);
+  self::throws(() → self::Class* => c = let final self::Class* #t91 = self::Extension|get#field(new self::Class::•()) in let final void #t92 = self::Extension|set#field(let final self::Class* #t93 = c in #t93 == null ?{self::Class*} null : self::Extension|get#field(#t93), #t91) in #t91);
+  self::throws(() → self::Class* => let final self::Class* #t94 = let final self::Class* #t95 = new self::Class::•() in let final void #t96 = self::Extension|set#field(new self::Class::•(), #t95) in #t95 in let final void #t97 = self::Extension|set#field(let final self::Class* #t98 = c in #t98 == null ?{self::Class*} null : self::Extension|get#field(#t98), #t94) in #t94);
+  self::throws(() → self::Class* => c = let final self::Class* #t99 = let final self::Class* #t100 = new self::Class::•() in let final void #t101 = self::Extension|set#field(new self::Class::•(), #t100) in #t100 in let final void #t102 = self::Extension|set#field(let final self::Class* #t103 = c in #t103 == null ?{self::Class*} null : self::Extension|get#field(#t103), #t99) in #t99);
+  self::throws(() → self::Class* => let final self::Class* #t104 = self::Extension|method(new self::Class::•()) in let final void #t105 = self::Extension|set#field(let final self::Class* #t106 = c in #t106 == null ?{self::Class*} null : self::Extension|get#field(#t106), #t104) in #t104);
+  self::throws(() → self::Class* => c = let final self::Class* #t107 = self::Extension|method(new self::Class::•()) in let final void #t108 = self::Extension|set#field(let final self::Class* #t109 = c in #t109 == null ?{self::Class*} null : self::Extension|get#field(#t109), #t107) in #t107);
+  let final self::Class* #t110 = c in #t110 == null ?{self::Class*} null : self::Extension|set#field(#t110, let final self::Class* #t111 = self::Extension|get#field(new self::Class::•()) in let final void #t112 = self::Extension|set#field(new self::Class::•(), #t111) in #t111);
+  c = let final self::Class* #t113 = c in #t113 == null ?{self::Class*} null : let final self::Class* #t114 = let final self::Class* #t115 = self::Extension|get#field(new self::Class::•()) in let final void #t116 = self::Extension|set#field(new self::Class::•(), #t115) in #t115 in let final void #t117 = self::Extension|set#field(#t113, #t114) in #t114;
+  let final self::Class* #t118 = c in #t118 == null ?{self::Class*} null : self::Extension|set#field(#t118, let final self::Class* #t119 = let final self::Class* #t120 = new self::Class::•() in let final void #t121 = self::Extension|set#field(new self::Class::•(), #t120) in #t120 in let final void #t122 = self::Extension|set#field(new self::Class::•(), #t119) in #t119);
+  c = let final self::Class* #t123 = c in #t123 == null ?{self::Class*} null : let final self::Class* #t124 = let final self::Class* #t125 = let final self::Class* #t126 = new self::Class::•() in let final void #t127 = self::Extension|set#field(new self::Class::•(), #t126) in #t126 in let final void #t128 = self::Extension|set#field(new self::Class::•(), #t125) in #t125 in let final void #t129 = self::Extension|set#field(#t123, #t124) in #t124;
+  let final self::Class* #t130 = c in #t130 == null ?{self::Class*} null : self::Extension|set#field(#t130, let final self::Class* #t131 = self::Extension|method(new self::Class::•()) in let final void #t132 = self::Extension|set#field(new self::Class::•(), #t131) in #t131);
+  c = let final self::Class* #t133 = c in #t133 == null ?{self::Class*} null : let final self::Class* #t134 = let final self::Class* #t135 = self::Extension|method(new self::Class::•()) in let final void #t136 = self::Extension|set#field(new self::Class::•(), #t135) in #t135 in let final void #t137 = self::Extension|set#field(#t133, #t134) in #t134;
+  self::throws(() → self::Class* => let final self::Class* #t138 = self::Extension|get#field(new self::Class::•()) in let final void #t139 = self::Extension|set#field(let final self::Class* #t140 = c in #t140 == null ?{self::Class*} null : self::Extension|method(#t140), #t138) in #t138);
+  self::throws(() → self::Class* => c = let final self::Class* #t141 = self::Extension|get#field(new self::Class::•()) in let final void #t142 = self::Extension|set#field(let final self::Class* #t143 = c in #t143 == null ?{self::Class*} null : self::Extension|method(#t143), #t141) in #t141);
+  self::throws(() → self::Class* => let final self::Class* #t144 = let final self::Class* #t145 = new self::Class::•() in let final void #t146 = self::Extension|set#field(new self::Class::•(), #t145) in #t145 in let final void #t147 = self::Extension|set#field(let final self::Class* #t148 = c in #t148 == null ?{self::Class*} null : self::Extension|method(#t148), #t144) in #t144);
+  self::throws(() → self::Class* => c = let final self::Class* #t149 = let final self::Class* #t150 = new self::Class::•() in let final void #t151 = self::Extension|set#field(new self::Class::•(), #t150) in #t150 in let final void #t152 = self::Extension|set#field(let final self::Class* #t153 = c in #t153 == null ?{self::Class*} null : self::Extension|method(#t153), #t149) in #t149);
+  self::throws(() → self::Class* => let final self::Class* #t154 = self::Extension|method(new self::Class::•()) in let final void #t155 = self::Extension|set#field(let final self::Class* #t156 = c in #t156 == null ?{self::Class*} null : self::Extension|method(#t156), #t154) in #t154);
+  self::throws(() → self::Class* => c = let final self::Class* #t157 = self::Extension|method(new self::Class::•()) in let final void #t158 = self::Extension|set#field(let final self::Class* #t159 = c in #t159 == null ?{self::Class*} null : self::Extension|method(#t159), #t157) in #t157);
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t160 = c in #t160 == null ?{self::Class*} null : self::Extension|get#field(#t160))));
+  self::throws(() → self::Class* => let final self::Class* #t161 = new self::Class::•() in let final void #t162 = self::Extension|set#field(self::Extension|method(let final self::Class* #t163 = c in #t163 == null ?{self::Class*} null : self::Extension|get#field(#t163)), #t161) in #t161);
+  self::throws(() → self::Class* => c = let final self::Class* #t164 = new self::Class::•() in let final void #t165 = self::Extension|set#field(self::Extension|method(let final self::Class* #t166 = c in #t166 == null ?{self::Class*} null : self::Extension|get#field(#t166)), #t164) in #t164);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t167 = c in #t167 == null ?{self::Class*} null : self::Extension|get#field(#t167))));
+  let final self::Class* #t168 = c in #t168 == null ?{self::Class*} null : self::Extension|set#field(#t168, self::Extension|get#field(self::Extension|method(new self::Class::•())));
+  c = let final self::Class* #t169 = c in #t169 == null ?{self::Class*} null : let final self::Class* #t170 = self::Extension|get#field(self::Extension|method(new self::Class::•())) in let final void #t171 = self::Extension|set#field(#t169, #t170) in #t170;
+  let final self::Class* #t172 = c in #t172 == null ?{self::Class*} null : self::Extension|set#field(#t172, let final self::Class* #t173 = new self::Class::•() in let final void #t174 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t173) in #t173);
+  c = let final self::Class* #t175 = c in #t175 == null ?{self::Class*} null : let final self::Class* #t176 = let final self::Class* #t177 = new self::Class::•() in let final void #t178 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t177) in #t177 in let final void #t179 = self::Extension|set#field(#t175, #t176) in #t176;
+  let final self::Class* #t180 = c in #t180 == null ?{self::Class*} null : self::Extension|set#field(#t180, self::Extension|method(self::Extension|method(new self::Class::•())));
+  c = let final self::Class* #t181 = c in #t181 == null ?{self::Class*} null : let final self::Class* #t182 = self::Extension|method(self::Extension|method(new self::Class::•())) in let final void #t183 = self::Extension|set#field(#t181, #t182) in #t182;
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t184 = c in #t184 == null ?{self::Class*} null : self::Extension|method(#t184))));
+  self::throws(() → self::Class* => let final self::Class* #t185 = new self::Class::•() in let final void #t186 = self::Extension|set#field(self::Extension|method(let final self::Class* #t187 = c in #t187 == null ?{self::Class*} null : self::Extension|method(#t187)), #t185) in #t185);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t188 = c in #t188 == null ?{self::Class*} null : self::Extension|method(#t188))));
+  let final self::Class* #t189 = let final self::Class* #t190 = c in #t190 == null ?{self::Class*} null : self::Extension|method(#t190) in #t189 == null ?{self::Class*} null : self::Extension|method(#t189);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t191 = c in #t191 == null ?{self::Class*} null : self::Extension|get#field(#t191)));
+  let final self::Class* #t192 = let final self::Class* #t193 = c in #t193 == null ?{self::Class*} null : self::Extension|get#field(#t193) in #t192 == null ?{self::Class*} null : self::Extension|get#field(#t192);
 }
 static method indexAccess(self::Class* c) → void {
-  self::throws(() → self::Class* => self::Extension|[](let final self::Class* #t194 = c in #t194.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t194), c));
-  self::throws(() → self::Class* => let final self::Class* #t195 = let final self::Class* #t196 = c in #t196.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t196) in let final self::Class* #t197 = c in let final self::Class* #t198 = new self::Class::•() in let final void #t199 = self::Extension|[]=(#t195, #t197, #t198) in #t198);
-  self::throws(() → self::Class* => c = let final self::Class* #t200 = let final self::Class* #t201 = c in #t201.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t201) in let final self::Class* #t202 = c in let final self::Class* #t203 = new self::Class::•() in let final void #t204 = self::Extension|[]=(#t200, #t202, #t203) in #t203);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](let final self::Class* #t205 = c in #t205.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t205), c)));
-  self::throws(() → self::Class* => let final self::Class* #t206 = let final self::Class* #t207 = c in #t207.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t207) in let final self::Class* #t208 = c in let final self::Class* #t209 = self::Extension|+(self::Extension|[](#t206, #t208), 0) in let final void #t210 = self::Extension|[]=(#t206, #t208, #t209) in #t209);
-  self::throws(() → self::Class* => c = let final self::Class* #t211 = let final self::Class* #t212 = c in #t212.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t212) in let final self::Class* #t213 = c in let final self::Class* #t214 = self::Extension|+(self::Extension|[](#t211, #t213), 0) in let final void #t215 = self::Extension|[]=(#t211, #t213, #t214) in #t214);
-  self::throws(() → self::Class* => let final self::Class* #t216 = let final self::Class* #t217 = c in #t217.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t217) in let final self::Class* #t218 = c in let final self::Class* #t219 = self::Extension|[](#t216, #t218) in let final void #t220 = self::Extension|[]=(#t216, #t218, self::Extension|+(#t219, 1)) in #t219);
-  self::throws(() → self::Class* => c = let final self::Class* #t221 = let final self::Class* #t222 = c in #t222.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t222) in let final self::Class* #t223 = c in let final self::Class* #t224 = self::Extension|[](#t221, #t223) in let final void #t225 = self::Extension|[]=(#t221, #t223, self::Extension|+(#t224, 1)) in #t224);
-  self::throws(() → self::Class* => let final self::Class* #t226 = let final self::Class* #t227 = c in #t227.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t227) in let final self::Class* #t228 = c in let final self::Class* #t229 = self::Extension|+(self::Extension|[](#t226, #t228), 1) in let final void #t230 = self::Extension|[]=(#t226, #t228, #t229) in #t229);
-  self::throws(() → self::Class* => c = let final self::Class* #t231 = let final self::Class* #t232 = c in #t232.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t232) in let final self::Class* #t233 = c in let final self::Class* #t234 = self::Extension|+(self::Extension|[](#t231, #t233), 1) in let final void #t235 = self::Extension|[]=(#t231, #t233, #t234) in #t234);
-  self::throws(() → self::Class* => self::Extension|[](self::Extension|[](let final self::Class* #t236 = c in #t236.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t236), c), c));
-  self::throws(() → self::Class* => let final self::Class* #t237 = self::Extension|[](let final self::Class* #t238 = c in #t238.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t238), c) in let final self::Class* #t239 = c in let final self::Class* #t240 = new self::Class::•() in let final void #t241 = self::Extension|[]=(#t237, #t239, #t240) in #t240);
-  self::throws(() → self::Class* => c = let final self::Class* #t242 = self::Extension|[](let final self::Class* #t243 = c in #t243.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t243), c) in let final self::Class* #t244 = c in let final self::Class* #t245 = new self::Class::•() in let final void #t246 = self::Extension|[]=(#t242, #t244, #t245) in #t245);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](self::Extension|[](let final self::Class* #t247 = c in #t247.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t247), c), c)));
-  self::throws(() → self::Class* => let final self::Class* #t248 = self::Extension|[](let final self::Class* #t249 = c in #t249.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t249), c) in let final self::Class* #t250 = c in let final self::Class* #t251 = self::Extension|+(self::Extension|[](#t248, #t250), 0) in let final void #t252 = self::Extension|[]=(#t248, #t250, #t251) in #t251);
-  self::throws(() → self::Class* => c = let final self::Class* #t253 = self::Extension|[](let final self::Class* #t254 = c in #t254.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t254), c) in let final self::Class* #t255 = c in let final self::Class* #t256 = self::Extension|+(self::Extension|[](#t253, #t255), 0) in let final void #t257 = self::Extension|[]=(#t253, #t255, #t256) in #t256);
-  self::throws(() → self::Class* => let final self::Class* #t258 = self::Extension|[](let final self::Class* #t259 = c in #t259.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t259), c) in let final self::Class* #t260 = c in let final self::Class* #t261 = self::Extension|[](#t258, #t260) in let final void #t262 = self::Extension|[]=(#t258, #t260, self::Extension|+(#t261, 1)) in #t261);
-  self::throws(() → self::Class* => c = let final self::Class* #t263 = self::Extension|[](let final self::Class* #t264 = c in #t264.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t264), c) in let final self::Class* #t265 = c in let final self::Class* #t266 = self::Extension|[](#t263, #t265) in let final void #t267 = self::Extension|[]=(#t263, #t265, self::Extension|+(#t266, 1)) in #t266);
-  self::throws(() → self::Class* => let final self::Class* #t268 = self::Extension|[](let final self::Class* #t269 = c in #t269.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t269), c) in let final self::Class* #t270 = c in let final self::Class* #t271 = self::Extension|+(self::Extension|[](#t268, #t270), 1) in let final void #t272 = self::Extension|[]=(#t268, #t270, #t271) in #t271);
-  self::throws(() → self::Class* => c = let final self::Class* #t273 = self::Extension|[](let final self::Class* #t274 = c in #t274.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t274), c) in let final self::Class* #t275 = c in let final self::Class* #t276 = self::Extension|+(self::Extension|[](#t273, #t275), 1) in let final void #t277 = self::Extension|[]=(#t273, #t275, #t276) in #t276);
+  self::throws(() → self::Class* => self::Extension|[](let final self::Class* #t194 = c in #t194 == null ?{self::Class*} null : self::Extension|get#field(#t194), c));
+  self::throws(() → self::Class* => let final self::Class* #t195 = let final self::Class* #t196 = c in #t196 == null ?{self::Class*} null : self::Extension|get#field(#t196) in let final self::Class* #t197 = c in let final self::Class* #t198 = new self::Class::•() in let final void #t199 = self::Extension|[]=(#t195, #t197, #t198) in #t198);
+  self::throws(() → self::Class* => c = let final self::Class* #t200 = let final self::Class* #t201 = c in #t201 == null ?{self::Class*} null : self::Extension|get#field(#t201) in let final self::Class* #t202 = c in let final self::Class* #t203 = new self::Class::•() in let final void #t204 = self::Extension|[]=(#t200, #t202, #t203) in #t203);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](let final self::Class* #t205 = c in #t205 == null ?{self::Class*} null : self::Extension|get#field(#t205), c)));
+  self::throws(() → self::Class* => let final self::Class* #t206 = let final self::Class* #t207 = c in #t207 == null ?{self::Class*} null : self::Extension|get#field(#t207) in let final self::Class* #t208 = c in let final self::Class* #t209 = self::Extension|+(self::Extension|[](#t206, #t208), 0) in let final void #t210 = self::Extension|[]=(#t206, #t208, #t209) in #t209);
+  self::throws(() → self::Class* => c = let final self::Class* #t211 = let final self::Class* #t212 = c in #t212 == null ?{self::Class*} null : self::Extension|get#field(#t212) in let final self::Class* #t213 = c in let final self::Class* #t214 = self::Extension|+(self::Extension|[](#t211, #t213), 0) in let final void #t215 = self::Extension|[]=(#t211, #t213, #t214) in #t214);
+  self::throws(() → self::Class* => let final self::Class* #t216 = let final self::Class* #t217 = c in #t217 == null ?{self::Class*} null : self::Extension|get#field(#t217) in let final self::Class* #t218 = c in let final self::Class* #t219 = self::Extension|[](#t216, #t218) in let final void #t220 = self::Extension|[]=(#t216, #t218, self::Extension|+(#t219, 1)) in #t219);
+  self::throws(() → self::Class* => c = let final self::Class* #t221 = let final self::Class* #t222 = c in #t222 == null ?{self::Class*} null : self::Extension|get#field(#t222) in let final self::Class* #t223 = c in let final self::Class* #t224 = self::Extension|[](#t221, #t223) in let final void #t225 = self::Extension|[]=(#t221, #t223, self::Extension|+(#t224, 1)) in #t224);
+  self::throws(() → self::Class* => let final self::Class* #t226 = let final self::Class* #t227 = c in #t227 == null ?{self::Class*} null : self::Extension|get#field(#t227) in let final self::Class* #t228 = c in let final self::Class* #t229 = self::Extension|+(self::Extension|[](#t226, #t228), 1) in let final void #t230 = self::Extension|[]=(#t226, #t228, #t229) in #t229);
+  self::throws(() → self::Class* => c = let final self::Class* #t231 = let final self::Class* #t232 = c in #t232 == null ?{self::Class*} null : self::Extension|get#field(#t232) in let final self::Class* #t233 = c in let final self::Class* #t234 = self::Extension|+(self::Extension|[](#t231, #t233), 1) in let final void #t235 = self::Extension|[]=(#t231, #t233, #t234) in #t234);
+  self::throws(() → self::Class* => self::Extension|[](self::Extension|[](let final self::Class* #t236 = c in #t236 == null ?{self::Class*} null : self::Extension|get#field(#t236), c), c));
+  self::throws(() → self::Class* => let final self::Class* #t237 = self::Extension|[](let final self::Class* #t238 = c in #t238 == null ?{self::Class*} null : self::Extension|get#field(#t238), c) in let final self::Class* #t239 = c in let final self::Class* #t240 = new self::Class::•() in let final void #t241 = self::Extension|[]=(#t237, #t239, #t240) in #t240);
+  self::throws(() → self::Class* => c = let final self::Class* #t242 = self::Extension|[](let final self::Class* #t243 = c in #t243 == null ?{self::Class*} null : self::Extension|get#field(#t243), c) in let final self::Class* #t244 = c in let final self::Class* #t245 = new self::Class::•() in let final void #t246 = self::Extension|[]=(#t242, #t244, #t245) in #t245);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](self::Extension|[](let final self::Class* #t247 = c in #t247 == null ?{self::Class*} null : self::Extension|get#field(#t247), c), c)));
+  self::throws(() → self::Class* => let final self::Class* #t248 = self::Extension|[](let final self::Class* #t249 = c in #t249 == null ?{self::Class*} null : self::Extension|get#field(#t249), c) in let final self::Class* #t250 = c in let final self::Class* #t251 = self::Extension|+(self::Extension|[](#t248, #t250), 0) in let final void #t252 = self::Extension|[]=(#t248, #t250, #t251) in #t251);
+  self::throws(() → self::Class* => c = let final self::Class* #t253 = self::Extension|[](let final self::Class* #t254 = c in #t254 == null ?{self::Class*} null : self::Extension|get#field(#t254), c) in let final self::Class* #t255 = c in let final self::Class* #t256 = self::Extension|+(self::Extension|[](#t253, #t255), 0) in let final void #t257 = self::Extension|[]=(#t253, #t255, #t256) in #t256);
+  self::throws(() → self::Class* => let final self::Class* #t258 = self::Extension|[](let final self::Class* #t259 = c in #t259 == null ?{self::Class*} null : self::Extension|get#field(#t259), c) in let final self::Class* #t260 = c in let final self::Class* #t261 = self::Extension|[](#t258, #t260) in let final void #t262 = self::Extension|[]=(#t258, #t260, self::Extension|+(#t261, 1)) in #t261);
+  self::throws(() → self::Class* => c = let final self::Class* #t263 = self::Extension|[](let final self::Class* #t264 = c in #t264 == null ?{self::Class*} null : self::Extension|get#field(#t264), c) in let final self::Class* #t265 = c in let final self::Class* #t266 = self::Extension|[](#t263, #t265) in let final void #t267 = self::Extension|[]=(#t263, #t265, self::Extension|+(#t266, 1)) in #t266);
+  self::throws(() → self::Class* => let final self::Class* #t268 = self::Extension|[](let final self::Class* #t269 = c in #t269 == null ?{self::Class*} null : self::Extension|get#field(#t269), c) in let final self::Class* #t270 = c in let final self::Class* #t271 = self::Extension|+(self::Extension|[](#t268, #t270), 1) in let final void #t272 = self::Extension|[]=(#t268, #t270, #t271) in #t271);
+  self::throws(() → self::Class* => c = let final self::Class* #t273 = self::Extension|[](let final self::Class* #t274 = c in #t274 == null ?{self::Class*} null : self::Extension|get#field(#t274), c) in let final self::Class* #t275 = c in let final self::Class* #t276 = self::Extension|+(self::Extension|[](#t273, #t275), 1) in let final void #t277 = self::Extension|[]=(#t273, #t275, #t276) in #t276);
 }
 static method operatorAccess(self::Class* c) → void {
-  self::throws(() → self::Class* => self::Extension|+(let final self::Class* #t278 = c in #t278.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t278), 0));
-  self::throws(() → self::Class* => self::Extension|unary-(let final self::Class* #t279 = c in #t279.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t279)));
-  let final self::Class* #t280 = c in #t280.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t280, self::Extension|+(self::Extension|get#field(#t280), 0));
-  c = let final self::Class* #t281 = c in #t281.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t282 = self::Extension|+(self::Extension|get#field(#t281), 0) in let final void #t283 = self::Extension|set#field(#t281, #t282) in #t282;
-  self::throws(() → self::Class* => let final self::Class* #t284 = let final self::Class* #t285 = c in #t285.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t285) in let final self::Class* #t286 = self::Extension|+(self::Extension|get#field(#t284), 0) in let final void #t287 = self::Extension|set#field(#t284, #t286) in #t286);
-  self::throws(() → self::Class* => c = let final self::Class* #t288 = let final self::Class* #t289 = c in #t289.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t289) in let final self::Class* #t290 = self::Extension|+(self::Extension|get#field(#t288), 0) in let final void #t291 = self::Extension|set#field(#t288, #t290) in #t290);
-  let final self::Class* #t292 = c in #t292.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t292, self::Extension|+(self::Extension|get#field(#t292), 1));
-  c = let final self::Class* #t293 = c in #t293.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t294 = self::Extension|get#field(#t293) in let final self::Class* #t295 = let final self::Class* #t296 = self::Extension|+(#t294, 1) in let final void #t297 = self::Extension|set#field(#t293, #t296) in #t296 in #t294;
-  let final self::Class* #t298 = c in #t298.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t299 = self::Extension|+(self::Extension|get#field(#t298), 1) in let final void #t300 = self::Extension|set#field(#t298, #t299) in #t299;
-  c = let final self::Class* #t301 = c in #t301.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t302 = self::Extension|+(self::Extension|get#field(#t301), 1) in let final void #t303 = self::Extension|set#field(#t301, #t302) in #t302;
+  self::throws(() → self::Class* => self::Extension|+(let final self::Class* #t278 = c in #t278 == null ?{self::Class*} null : self::Extension|get#field(#t278), 0));
+  self::throws(() → self::Class* => self::Extension|unary-(let final self::Class* #t279 = c in #t279 == null ?{self::Class*} null : self::Extension|get#field(#t279)));
+  let final self::Class* #t280 = c in #t280 == null ?{self::Class*} null : self::Extension|set#field(#t280, self::Extension|+(self::Extension|get#field(#t280), 0));
+  c = let final self::Class* #t281 = c in #t281 == null ?{self::Class*} null : let final self::Class* #t282 = self::Extension|+(self::Extension|get#field(#t281), 0) in let final void #t283 = self::Extension|set#field(#t281, #t282) in #t282;
+  self::throws(() → self::Class* => let final self::Class* #t284 = let final self::Class* #t285 = c in #t285 == null ?{self::Class*} null : self::Extension|get#field(#t285) in let final self::Class* #t286 = self::Extension|+(self::Extension|get#field(#t284), 0) in let final void #t287 = self::Extension|set#field(#t284, #t286) in #t286);
+  self::throws(() → self::Class* => c = let final self::Class* #t288 = let final self::Class* #t289 = c in #t289 == null ?{self::Class*} null : self::Extension|get#field(#t289) in let final self::Class* #t290 = self::Extension|+(self::Extension|get#field(#t288), 0) in let final void #t291 = self::Extension|set#field(#t288, #t290) in #t290);
+  let final self::Class* #t292 = c in #t292 == null ?{self::Class*} null : self::Extension|set#field(#t292, self::Extension|+(self::Extension|get#field(#t292), 1));
+  c = let final self::Class* #t293 = c in #t293 == null ?{self::Class*} null : let final self::Class* #t294 = self::Extension|get#field(#t293) in let final self::Class* #t295 = let final self::Class* #t296 = self::Extension|+(#t294, 1) in let final void #t297 = self::Extension|set#field(#t293, #t296) in #t296 in #t294;
+  let final self::Class* #t298 = c in #t298 == null ?{self::Class*} null : let final self::Class* #t299 = self::Extension|+(self::Extension|get#field(#t298), 1) in let final void #t300 = self::Extension|set#field(#t298, #t299) in #t299;
+  c = let final self::Class* #t301 = c in #t301 == null ?{self::Class*} null : let final self::Class* #t302 = self::Extension|+(self::Extension|get#field(#t301), 1) in let final void #t303 = self::Extension|set#field(#t301, #t302) in #t302;
 }
 static method ifNull(self::Class* c) → void {
-  let final self::Class* #t304 = c in #t304.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t304).{self::Class::==}(null) ?{self::Class*} self::Extension|set#field(#t304, c) : null;
-  c = let final self::Class* #t305 = c in #t305.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t306 = self::Extension|get#field(#t305) in #t306.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t307 = c in let final void #t308 = self::Extension|set#field(#t305, #t307) in #t307 : #t306;
-  self::throws(() → self::Class* => let final self::Class* #t309 = let final self::Class* #t310 = c in #t310.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t310) in let final self::Class* #t311 = self::Extension|get#field(#t309) in #t311.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t312 = c in let final void #t313 = self::Extension|set#field(#t309, #t312) in #t312 : #t311);
-  self::throws(() → self::Class* => c = let final self::Class* #t314 = let final self::Class* #t315 = c in #t315.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t315) in let final self::Class* #t316 = self::Extension|get#field(#t314) in #t316.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t317 = c in let final void #t318 = self::Extension|set#field(#t314, #t317) in #t317 : #t316);
-  self::throws(() → self::Class* => let final self::Class* #t319 = let final self::Class* #t320 = c in #t320.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t320) in let final self::Class* #t321 = c in let final self::Class* #t322 = self::Extension|[](#t319, #t321) in #t322.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t323 = c in let final void #t324 = self::Extension|[]=(#t319, #t321, #t323) in #t323 : #t322);
-  self::throws(() → self::Class* => c = let final self::Class* #t325 = let final self::Class* #t326 = c in #t326.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t326) in let final self::Class* #t327 = c in let final self::Class* #t328 = self::Extension|[](#t325, #t327) in #t328.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t329 = c in let final void #t330 = self::Extension|[]=(#t325, #t327, #t329) in #t329 : #t328);
+  let final self::Class* #t304 = c in #t304 == null ?{self::Class*} null : self::Extension|get#field(#t304) == null ?{self::Class*} self::Extension|set#field(#t304, c) : null;
+  c = let final self::Class* #t305 = c in #t305 == null ?{self::Class*} null : let final self::Class* #t306 = self::Extension|get#field(#t305) in #t306 == null ?{self::Class*} let final self::Class* #t307 = c in let final void #t308 = self::Extension|set#field(#t305, #t307) in #t307 : #t306;
+  self::throws(() → self::Class* => let final self::Class* #t309 = let final self::Class* #t310 = c in #t310 == null ?{self::Class*} null : self::Extension|get#field(#t310) in let final self::Class* #t311 = self::Extension|get#field(#t309) in #t311 == null ?{self::Class*} let final self::Class* #t312 = c in let final void #t313 = self::Extension|set#field(#t309, #t312) in #t312 : #t311);
+  self::throws(() → self::Class* => c = let final self::Class* #t314 = let final self::Class* #t315 = c in #t315 == null ?{self::Class*} null : self::Extension|get#field(#t315) in let final self::Class* #t316 = self::Extension|get#field(#t314) in #t316 == null ?{self::Class*} let final self::Class* #t317 = c in let final void #t318 = self::Extension|set#field(#t314, #t317) in #t317 : #t316);
+  self::throws(() → self::Class* => let final self::Class* #t319 = let final self::Class* #t320 = c in #t320 == null ?{self::Class*} null : self::Extension|get#field(#t320) in let final self::Class* #t321 = c in let final self::Class* #t322 = self::Extension|[](#t319, #t321) in #t322 == null ?{self::Class*} let final self::Class* #t323 = c in let final void #t324 = self::Extension|[]=(#t319, #t321, #t323) in #t323 : #t322);
+  self::throws(() → self::Class* => c = let final self::Class* #t325 = let final self::Class* #t326 = c in #t326 == null ?{self::Class*} null : self::Extension|get#field(#t326) in let final self::Class* #t327 = c in let final self::Class* #t328 = self::Extension|[](#t325, #t327) in #t328 == null ?{self::Class*} let final self::Class* #t329 = c in let final void #t330 = self::Extension|[]=(#t325, #t327, #t329) in #t329 : #t328);
 }
 static method throws(() →* void f) → void {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.expect
index 6b754ec..ce52b2a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.expect
@@ -29,7 +29,7 @@
   set field = self::Extension|set#field;
 }
 static method Extension|get#field(lowered final self::Class* #this) → self::Class*
-  return #this.{self::Class::_field};
+  return #this.{self::Class::_field}{self::Class*};
 static method Extension|set#field(lowered final self::Class* #this, self::Class* value) → void {
   #this.{self::Class::_field} = value;
 }
@@ -53,123 +53,123 @@
   self::ifNull(null);
 }
 static method propertyAccess(self::Class* c) → void {
-  let final self::Class* #t1 = c in #t1.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t1);
-  let final self::Class* #t2 = c in #t2.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t2, new self::Class::•());
-  c = let final self::Class* #t3 = c in #t3.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t4 = new self::Class::•() in let final void #t5 = self::Extension|set#field(#t3, #t4) in #t4;
-  let final self::Class* #t6 = c in #t6.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t6);
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t7 = c in #t7.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t7)));
-  let final self::Class* #t8 = let final self::Class* #t9 = c in #t9.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t9) in #t8.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t8);
-  self::throws(() → self::Class* => let final self::Class* #t10 = self::Extension|get#field(let final self::Class* #t11 = c in #t11.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t11)) in #t10.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t10));
-  self::throws(() → self::Class* => let final self::Class* #t12 = new self::Class::•() in let final void #t13 = self::Extension|set#field(let final self::Class* #t14 = c in #t14.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t14), #t12) in #t12);
-  let final self::Class* #t15 = let final self::Class* #t16 = c in #t16.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t16) in #t15.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t15, new self::Class::•());
-  self::throws(() → self::Class* => let final self::Class* #t17 = self::Extension|get#field(let final self::Class* #t18 = c in #t18.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t18)) in #t17.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t19 = new self::Class::•() in let final void #t20 = self::Extension|set#field(#t17, #t19) in #t19);
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t21 = c in #t21.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t21)));
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t22 = c in #t22.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t23 = new self::Class::•() in let final void #t24 = self::Extension|set#field(#t22, #t23) in #t23));
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t25 = c in #t25.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t25)));
-  self::throws(() → self::Class* => c = let final self::Class* #t26 = new self::Class::•() in let final void #t27 = self::Extension|set#field(let final self::Class* #t28 = c in #t28.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t28), #t26) in #t26);
-  c = let final self::Class* #t29 = let final self::Class* #t30 = c in #t30.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t30) in #t29.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t31 = new self::Class::•() in let final void #t32 = self::Extension|set#field(#t29, #t31) in #t31;
-  self::throws(() → self::Class* => c = let final self::Class* #t33 = self::Extension|get#field(let final self::Class* #t34 = c in #t34.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t34)) in #t33.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t35 = new self::Class::•() in let final void #t36 = self::Extension|set#field(#t33, #t35) in #t35);
-  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t37 = c in #t37.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t37)));
-  let final self::Class* #t38 = c in #t38.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t38, self::Extension|get#field(new self::Class::•()));
-  c = let final self::Class* #t39 = c in #t39.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t40 = self::Extension|get#field(new self::Class::•()) in let final void #t41 = self::Extension|set#field(#t39, #t40) in #t40;
-  let final self::Class* #t42 = c in #t42.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t42, let final self::Class* #t43 = new self::Class::•() in let final void #t44 = self::Extension|set#field(new self::Class::•(), #t43) in #t43);
-  c = let final self::Class* #t45 = c in #t45.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t46 = let final self::Class* #t47 = new self::Class::•() in let final void #t48 = self::Extension|set#field(new self::Class::•(), #t47) in #t47 in let final void #t49 = self::Extension|set#field(#t45, #t46) in #t46;
-  let final self::Class* #t50 = c in #t50.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t50, self::Extension|method(new self::Class::•()));
-  c = let final self::Class* #t51 = c in #t51.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t52 = self::Extension|method(new self::Class::•()) in let final void #t53 = self::Extension|set#field(#t51, #t52) in #t52;
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t54 = c in #t54.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t54)));
-  self::throws(() → self::Class* => let final self::Class* #t55 = new self::Class::•() in let final void #t56 = self::Extension|set#field(let final self::Class* #t57 = c in #t57.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t57), #t55) in #t55);
-  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t58 = c in #t58.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t58)));
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t59 = c in #t59.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t59))));
-  self::throws(() → self::Class* => let final self::Class* #t60 = new self::Class::•() in let final void #t61 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t62 = c in #t62.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t62)), #t60) in #t60);
-  self::throws(() → self::Class* => c = let final self::Class* #t63 = new self::Class::•() in let final void #t64 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t65 = c in #t65.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t65)), #t63) in #t63);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t66 = c in #t66.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t66))));
-  let final self::Class* #t67 = c in #t67.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t67, self::Extension|get#field(self::Extension|get#field(new self::Class::•())));
-  c = let final self::Class* #t68 = c in #t68.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t69 = self::Extension|get#field(self::Extension|get#field(new self::Class::•())) in let final void #t70 = self::Extension|set#field(#t68, #t69) in #t69;
-  let final self::Class* #t71 = c in #t71.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t71, let final self::Class* #t72 = new self::Class::•() in let final void #t73 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t72) in #t72);
-  c = let final self::Class* #t74 = c in #t74.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t75 = let final self::Class* #t76 = new self::Class::•() in let final void #t77 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t76) in #t76 in let final void #t78 = self::Extension|set#field(#t74, #t75) in #t75;
-  let final self::Class* #t79 = c in #t79.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t79, self::Extension|method(self::Extension|get#field(new self::Class::•())));
-  c = let final self::Class* #t80 = c in #t80.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t81 = self::Extension|method(self::Extension|get#field(new self::Class::•())) in let final void #t82 = self::Extension|set#field(#t80, #t81) in #t81;
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t83 = c in #t83.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t83))));
-  self::throws(() → self::Class* => let final self::Class* #t84 = new self::Class::•() in let final void #t85 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t86 = c in #t86.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t86)), #t84) in #t84);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t87 = c in #t87.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t87))));
-  self::throws(() → self::Class* => let final self::Class* #t88 = self::Extension|get#field(new self::Class::•()) in let final void #t89 = self::Extension|set#field(let final self::Class* #t90 = c in #t90.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t90), #t88) in #t88);
-  self::throws(() → self::Class* => c = let final self::Class* #t91 = self::Extension|get#field(new self::Class::•()) in let final void #t92 = self::Extension|set#field(let final self::Class* #t93 = c in #t93.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t93), #t91) in #t91);
-  self::throws(() → self::Class* => let final self::Class* #t94 = let final self::Class* #t95 = new self::Class::•() in let final void #t96 = self::Extension|set#field(new self::Class::•(), #t95) in #t95 in let final void #t97 = self::Extension|set#field(let final self::Class* #t98 = c in #t98.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t98), #t94) in #t94);
-  self::throws(() → self::Class* => c = let final self::Class* #t99 = let final self::Class* #t100 = new self::Class::•() in let final void #t101 = self::Extension|set#field(new self::Class::•(), #t100) in #t100 in let final void #t102 = self::Extension|set#field(let final self::Class* #t103 = c in #t103.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t103), #t99) in #t99);
-  self::throws(() → self::Class* => let final self::Class* #t104 = self::Extension|method(new self::Class::•()) in let final void #t105 = self::Extension|set#field(let final self::Class* #t106 = c in #t106.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t106), #t104) in #t104);
-  self::throws(() → self::Class* => c = let final self::Class* #t107 = self::Extension|method(new self::Class::•()) in let final void #t108 = self::Extension|set#field(let final self::Class* #t109 = c in #t109.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t109), #t107) in #t107);
-  let final self::Class* #t110 = c in #t110.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t110, let final self::Class* #t111 = self::Extension|get#field(new self::Class::•()) in let final void #t112 = self::Extension|set#field(new self::Class::•(), #t111) in #t111);
-  c = let final self::Class* #t113 = c in #t113.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t114 = let final self::Class* #t115 = self::Extension|get#field(new self::Class::•()) in let final void #t116 = self::Extension|set#field(new self::Class::•(), #t115) in #t115 in let final void #t117 = self::Extension|set#field(#t113, #t114) in #t114;
-  let final self::Class* #t118 = c in #t118.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t118, let final self::Class* #t119 = let final self::Class* #t120 = new self::Class::•() in let final void #t121 = self::Extension|set#field(new self::Class::•(), #t120) in #t120 in let final void #t122 = self::Extension|set#field(new self::Class::•(), #t119) in #t119);
-  c = let final self::Class* #t123 = c in #t123.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t124 = let final self::Class* #t125 = let final self::Class* #t126 = new self::Class::•() in let final void #t127 = self::Extension|set#field(new self::Class::•(), #t126) in #t126 in let final void #t128 = self::Extension|set#field(new self::Class::•(), #t125) in #t125 in let final void #t129 = self::Extension|set#field(#t123, #t124) in #t124;
-  let final self::Class* #t130 = c in #t130.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t130, let final self::Class* #t131 = self::Extension|method(new self::Class::•()) in let final void #t132 = self::Extension|set#field(new self::Class::•(), #t131) in #t131);
-  c = let final self::Class* #t133 = c in #t133.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t134 = let final self::Class* #t135 = self::Extension|method(new self::Class::•()) in let final void #t136 = self::Extension|set#field(new self::Class::•(), #t135) in #t135 in let final void #t137 = self::Extension|set#field(#t133, #t134) in #t134;
-  self::throws(() → self::Class* => let final self::Class* #t138 = self::Extension|get#field(new self::Class::•()) in let final void #t139 = self::Extension|set#field(let final self::Class* #t140 = c in #t140.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t140), #t138) in #t138);
-  self::throws(() → self::Class* => c = let final self::Class* #t141 = self::Extension|get#field(new self::Class::•()) in let final void #t142 = self::Extension|set#field(let final self::Class* #t143 = c in #t143.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t143), #t141) in #t141);
-  self::throws(() → self::Class* => let final self::Class* #t144 = let final self::Class* #t145 = new self::Class::•() in let final void #t146 = self::Extension|set#field(new self::Class::•(), #t145) in #t145 in let final void #t147 = self::Extension|set#field(let final self::Class* #t148 = c in #t148.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t148), #t144) in #t144);
-  self::throws(() → self::Class* => c = let final self::Class* #t149 = let final self::Class* #t150 = new self::Class::•() in let final void #t151 = self::Extension|set#field(new self::Class::•(), #t150) in #t150 in let final void #t152 = self::Extension|set#field(let final self::Class* #t153 = c in #t153.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t153), #t149) in #t149);
-  self::throws(() → self::Class* => let final self::Class* #t154 = self::Extension|method(new self::Class::•()) in let final void #t155 = self::Extension|set#field(let final self::Class* #t156 = c in #t156.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t156), #t154) in #t154);
-  self::throws(() → self::Class* => c = let final self::Class* #t157 = self::Extension|method(new self::Class::•()) in let final void #t158 = self::Extension|set#field(let final self::Class* #t159 = c in #t159.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t159), #t157) in #t157);
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t160 = c in #t160.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t160))));
-  self::throws(() → self::Class* => let final self::Class* #t161 = new self::Class::•() in let final void #t162 = self::Extension|set#field(self::Extension|method(let final self::Class* #t163 = c in #t163.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t163)), #t161) in #t161);
-  self::throws(() → self::Class* => c = let final self::Class* #t164 = new self::Class::•() in let final void #t165 = self::Extension|set#field(self::Extension|method(let final self::Class* #t166 = c in #t166.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t166)), #t164) in #t164);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t167 = c in #t167.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t167))));
-  let final self::Class* #t168 = c in #t168.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t168, self::Extension|get#field(self::Extension|method(new self::Class::•())));
-  c = let final self::Class* #t169 = c in #t169.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t170 = self::Extension|get#field(self::Extension|method(new self::Class::•())) in let final void #t171 = self::Extension|set#field(#t169, #t170) in #t170;
-  let final self::Class* #t172 = c in #t172.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t172, let final self::Class* #t173 = new self::Class::•() in let final void #t174 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t173) in #t173);
-  c = let final self::Class* #t175 = c in #t175.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t176 = let final self::Class* #t177 = new self::Class::•() in let final void #t178 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t177) in #t177 in let final void #t179 = self::Extension|set#field(#t175, #t176) in #t176;
-  let final self::Class* #t180 = c in #t180.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t180, self::Extension|method(self::Extension|method(new self::Class::•())));
-  c = let final self::Class* #t181 = c in #t181.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t182 = self::Extension|method(self::Extension|method(new self::Class::•())) in let final void #t183 = self::Extension|set#field(#t181, #t182) in #t182;
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t184 = c in #t184.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t184))));
-  self::throws(() → self::Class* => let final self::Class* #t185 = new self::Class::•() in let final void #t186 = self::Extension|set#field(self::Extension|method(let final self::Class* #t187 = c in #t187.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t187)), #t185) in #t185);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t188 = c in #t188.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t188))));
-  let final self::Class* #t189 = let final self::Class* #t190 = c in #t190.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t190) in #t189.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t189);
+  let final self::Class* #t1 = c in #t1 == null ?{self::Class*} null : self::Extension|get#field(#t1);
+  let final self::Class* #t2 = c in #t2 == null ?{self::Class*} null : self::Extension|set#field(#t2, new self::Class::•());
+  c = let final self::Class* #t3 = c in #t3 == null ?{self::Class*} null : let final self::Class* #t4 = new self::Class::•() in let final void #t5 = self::Extension|set#field(#t3, #t4) in #t4;
+  let final self::Class* #t6 = c in #t6 == null ?{self::Class*} null : self::Extension|method(#t6);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t7 = c in #t7 == null ?{self::Class*} null : self::Extension|get#field(#t7)));
+  let final self::Class* #t8 = let final self::Class* #t9 = c in #t9 == null ?{self::Class*} null : self::Extension|get#field(#t9) in #t8 == null ?{self::Class*} null : self::Extension|get#field(#t8);
+  self::throws(() → self::Class* => let final self::Class* #t10 = self::Extension|get#field(let final self::Class* #t11 = c in #t11 == null ?{self::Class*} null : self::Extension|get#field(#t11)) in #t10 == null ?{self::Class*} null : self::Extension|get#field(#t10));
+  self::throws(() → self::Class* => let final self::Class* #t12 = new self::Class::•() in let final void #t13 = self::Extension|set#field(let final self::Class* #t14 = c in #t14 == null ?{self::Class*} null : self::Extension|get#field(#t14), #t12) in #t12);
+  let final self::Class* #t15 = let final self::Class* #t16 = c in #t16 == null ?{self::Class*} null : self::Extension|get#field(#t16) in #t15 == null ?{self::Class*} null : self::Extension|set#field(#t15, new self::Class::•());
+  self::throws(() → self::Class* => let final self::Class* #t17 = self::Extension|get#field(let final self::Class* #t18 = c in #t18 == null ?{self::Class*} null : self::Extension|get#field(#t18)) in #t17 == null ?{self::Class*} null : let final self::Class* #t19 = new self::Class::•() in let final void #t20 = self::Extension|set#field(#t17, #t19) in #t19);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t21 = c in #t21 == null ?{self::Class*} null : self::Extension|get#field(#t21)));
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t22 = c in #t22 == null ?{self::Class*} null : let final self::Class* #t23 = new self::Class::•() in let final void #t24 = self::Extension|set#field(#t22, #t23) in #t23));
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t25 = c in #t25 == null ?{self::Class*} null : self::Extension|method(#t25)));
+  self::throws(() → self::Class* => c = let final self::Class* #t26 = new self::Class::•() in let final void #t27 = self::Extension|set#field(let final self::Class* #t28 = c in #t28 == null ?{self::Class*} null : self::Extension|get#field(#t28), #t26) in #t26);
+  c = let final self::Class* #t29 = let final self::Class* #t30 = c in #t30 == null ?{self::Class*} null : self::Extension|get#field(#t30) in #t29 == null ?{self::Class*} null : let final self::Class* #t31 = new self::Class::•() in let final void #t32 = self::Extension|set#field(#t29, #t31) in #t31;
+  self::throws(() → self::Class* => c = let final self::Class* #t33 = self::Extension|get#field(let final self::Class* #t34 = c in #t34 == null ?{self::Class*} null : self::Extension|get#field(#t34)) in #t33 == null ?{self::Class*} null : let final self::Class* #t35 = new self::Class::•() in let final void #t36 = self::Extension|set#field(#t33, #t35) in #t35);
+  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t37 = c in #t37 == null ?{self::Class*} null : self::Extension|get#field(#t37)));
+  let final self::Class* #t38 = c in #t38 == null ?{self::Class*} null : self::Extension|set#field(#t38, self::Extension|get#field(new self::Class::•()));
+  c = let final self::Class* #t39 = c in #t39 == null ?{self::Class*} null : let final self::Class* #t40 = self::Extension|get#field(new self::Class::•()) in let final void #t41 = self::Extension|set#field(#t39, #t40) in #t40;
+  let final self::Class* #t42 = c in #t42 == null ?{self::Class*} null : self::Extension|set#field(#t42, let final self::Class* #t43 = new self::Class::•() in let final void #t44 = self::Extension|set#field(new self::Class::•(), #t43) in #t43);
+  c = let final self::Class* #t45 = c in #t45 == null ?{self::Class*} null : let final self::Class* #t46 = let final self::Class* #t47 = new self::Class::•() in let final void #t48 = self::Extension|set#field(new self::Class::•(), #t47) in #t47 in let final void #t49 = self::Extension|set#field(#t45, #t46) in #t46;
+  let final self::Class* #t50 = c in #t50 == null ?{self::Class*} null : self::Extension|set#field(#t50, self::Extension|method(new self::Class::•()));
+  c = let final self::Class* #t51 = c in #t51 == null ?{self::Class*} null : let final self::Class* #t52 = self::Extension|method(new self::Class::•()) in let final void #t53 = self::Extension|set#field(#t51, #t52) in #t52;
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t54 = c in #t54 == null ?{self::Class*} null : self::Extension|method(#t54)));
+  self::throws(() → self::Class* => let final self::Class* #t55 = new self::Class::•() in let final void #t56 = self::Extension|set#field(let final self::Class* #t57 = c in #t57 == null ?{self::Class*} null : self::Extension|method(#t57), #t55) in #t55);
+  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t58 = c in #t58 == null ?{self::Class*} null : self::Extension|method(#t58)));
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t59 = c in #t59 == null ?{self::Class*} null : self::Extension|get#field(#t59))));
+  self::throws(() → self::Class* => let final self::Class* #t60 = new self::Class::•() in let final void #t61 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t62 = c in #t62 == null ?{self::Class*} null : self::Extension|get#field(#t62)), #t60) in #t60);
+  self::throws(() → self::Class* => c = let final self::Class* #t63 = new self::Class::•() in let final void #t64 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t65 = c in #t65 == null ?{self::Class*} null : self::Extension|get#field(#t65)), #t63) in #t63);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t66 = c in #t66 == null ?{self::Class*} null : self::Extension|get#field(#t66))));
+  let final self::Class* #t67 = c in #t67 == null ?{self::Class*} null : self::Extension|set#field(#t67, self::Extension|get#field(self::Extension|get#field(new self::Class::•())));
+  c = let final self::Class* #t68 = c in #t68 == null ?{self::Class*} null : let final self::Class* #t69 = self::Extension|get#field(self::Extension|get#field(new self::Class::•())) in let final void #t70 = self::Extension|set#field(#t68, #t69) in #t69;
+  let final self::Class* #t71 = c in #t71 == null ?{self::Class*} null : self::Extension|set#field(#t71, let final self::Class* #t72 = new self::Class::•() in let final void #t73 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t72) in #t72);
+  c = let final self::Class* #t74 = c in #t74 == null ?{self::Class*} null : let final self::Class* #t75 = let final self::Class* #t76 = new self::Class::•() in let final void #t77 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t76) in #t76 in let final void #t78 = self::Extension|set#field(#t74, #t75) in #t75;
+  let final self::Class* #t79 = c in #t79 == null ?{self::Class*} null : self::Extension|set#field(#t79, self::Extension|method(self::Extension|get#field(new self::Class::•())));
+  c = let final self::Class* #t80 = c in #t80 == null ?{self::Class*} null : let final self::Class* #t81 = self::Extension|method(self::Extension|get#field(new self::Class::•())) in let final void #t82 = self::Extension|set#field(#t80, #t81) in #t81;
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t83 = c in #t83 == null ?{self::Class*} null : self::Extension|method(#t83))));
+  self::throws(() → self::Class* => let final self::Class* #t84 = new self::Class::•() in let final void #t85 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t86 = c in #t86 == null ?{self::Class*} null : self::Extension|method(#t86)), #t84) in #t84);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t87 = c in #t87 == null ?{self::Class*} null : self::Extension|method(#t87))));
+  self::throws(() → self::Class* => let final self::Class* #t88 = self::Extension|get#field(new self::Class::•()) in let final void #t89 = self::Extension|set#field(let final self::Class* #t90 = c in #t90 == null ?{self::Class*} null : self::Extension|get#field(#t90), #t88) in #t88);
+  self::throws(() → self::Class* => c = let final self::Class* #t91 = self::Extension|get#field(new self::Class::•()) in let final void #t92 = self::Extension|set#field(let final self::Class* #t93 = c in #t93 == null ?{self::Class*} null : self::Extension|get#field(#t93), #t91) in #t91);
+  self::throws(() → self::Class* => let final self::Class* #t94 = let final self::Class* #t95 = new self::Class::•() in let final void #t96 = self::Extension|set#field(new self::Class::•(), #t95) in #t95 in let final void #t97 = self::Extension|set#field(let final self::Class* #t98 = c in #t98 == null ?{self::Class*} null : self::Extension|get#field(#t98), #t94) in #t94);
+  self::throws(() → self::Class* => c = let final self::Class* #t99 = let final self::Class* #t100 = new self::Class::•() in let final void #t101 = self::Extension|set#field(new self::Class::•(), #t100) in #t100 in let final void #t102 = self::Extension|set#field(let final self::Class* #t103 = c in #t103 == null ?{self::Class*} null : self::Extension|get#field(#t103), #t99) in #t99);
+  self::throws(() → self::Class* => let final self::Class* #t104 = self::Extension|method(new self::Class::•()) in let final void #t105 = self::Extension|set#field(let final self::Class* #t106 = c in #t106 == null ?{self::Class*} null : self::Extension|get#field(#t106), #t104) in #t104);
+  self::throws(() → self::Class* => c = let final self::Class* #t107 = self::Extension|method(new self::Class::•()) in let final void #t108 = self::Extension|set#field(let final self::Class* #t109 = c in #t109 == null ?{self::Class*} null : self::Extension|get#field(#t109), #t107) in #t107);
+  let final self::Class* #t110 = c in #t110 == null ?{self::Class*} null : self::Extension|set#field(#t110, let final self::Class* #t111 = self::Extension|get#field(new self::Class::•()) in let final void #t112 = self::Extension|set#field(new self::Class::•(), #t111) in #t111);
+  c = let final self::Class* #t113 = c in #t113 == null ?{self::Class*} null : let final self::Class* #t114 = let final self::Class* #t115 = self::Extension|get#field(new self::Class::•()) in let final void #t116 = self::Extension|set#field(new self::Class::•(), #t115) in #t115 in let final void #t117 = self::Extension|set#field(#t113, #t114) in #t114;
+  let final self::Class* #t118 = c in #t118 == null ?{self::Class*} null : self::Extension|set#field(#t118, let final self::Class* #t119 = let final self::Class* #t120 = new self::Class::•() in let final void #t121 = self::Extension|set#field(new self::Class::•(), #t120) in #t120 in let final void #t122 = self::Extension|set#field(new self::Class::•(), #t119) in #t119);
+  c = let final self::Class* #t123 = c in #t123 == null ?{self::Class*} null : let final self::Class* #t124 = let final self::Class* #t125 = let final self::Class* #t126 = new self::Class::•() in let final void #t127 = self::Extension|set#field(new self::Class::•(), #t126) in #t126 in let final void #t128 = self::Extension|set#field(new self::Class::•(), #t125) in #t125 in let final void #t129 = self::Extension|set#field(#t123, #t124) in #t124;
+  let final self::Class* #t130 = c in #t130 == null ?{self::Class*} null : self::Extension|set#field(#t130, let final self::Class* #t131 = self::Extension|method(new self::Class::•()) in let final void #t132 = self::Extension|set#field(new self::Class::•(), #t131) in #t131);
+  c = let final self::Class* #t133 = c in #t133 == null ?{self::Class*} null : let final self::Class* #t134 = let final self::Class* #t135 = self::Extension|method(new self::Class::•()) in let final void #t136 = self::Extension|set#field(new self::Class::•(), #t135) in #t135 in let final void #t137 = self::Extension|set#field(#t133, #t134) in #t134;
+  self::throws(() → self::Class* => let final self::Class* #t138 = self::Extension|get#field(new self::Class::•()) in let final void #t139 = self::Extension|set#field(let final self::Class* #t140 = c in #t140 == null ?{self::Class*} null : self::Extension|method(#t140), #t138) in #t138);
+  self::throws(() → self::Class* => c = let final self::Class* #t141 = self::Extension|get#field(new self::Class::•()) in let final void #t142 = self::Extension|set#field(let final self::Class* #t143 = c in #t143 == null ?{self::Class*} null : self::Extension|method(#t143), #t141) in #t141);
+  self::throws(() → self::Class* => let final self::Class* #t144 = let final self::Class* #t145 = new self::Class::•() in let final void #t146 = self::Extension|set#field(new self::Class::•(), #t145) in #t145 in let final void #t147 = self::Extension|set#field(let final self::Class* #t148 = c in #t148 == null ?{self::Class*} null : self::Extension|method(#t148), #t144) in #t144);
+  self::throws(() → self::Class* => c = let final self::Class* #t149 = let final self::Class* #t150 = new self::Class::•() in let final void #t151 = self::Extension|set#field(new self::Class::•(), #t150) in #t150 in let final void #t152 = self::Extension|set#field(let final self::Class* #t153 = c in #t153 == null ?{self::Class*} null : self::Extension|method(#t153), #t149) in #t149);
+  self::throws(() → self::Class* => let final self::Class* #t154 = self::Extension|method(new self::Class::•()) in let final void #t155 = self::Extension|set#field(let final self::Class* #t156 = c in #t156 == null ?{self::Class*} null : self::Extension|method(#t156), #t154) in #t154);
+  self::throws(() → self::Class* => c = let final self::Class* #t157 = self::Extension|method(new self::Class::•()) in let final void #t158 = self::Extension|set#field(let final self::Class* #t159 = c in #t159 == null ?{self::Class*} null : self::Extension|method(#t159), #t157) in #t157);
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t160 = c in #t160 == null ?{self::Class*} null : self::Extension|get#field(#t160))));
+  self::throws(() → self::Class* => let final self::Class* #t161 = new self::Class::•() in let final void #t162 = self::Extension|set#field(self::Extension|method(let final self::Class* #t163 = c in #t163 == null ?{self::Class*} null : self::Extension|get#field(#t163)), #t161) in #t161);
+  self::throws(() → self::Class* => c = let final self::Class* #t164 = new self::Class::•() in let final void #t165 = self::Extension|set#field(self::Extension|method(let final self::Class* #t166 = c in #t166 == null ?{self::Class*} null : self::Extension|get#field(#t166)), #t164) in #t164);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t167 = c in #t167 == null ?{self::Class*} null : self::Extension|get#field(#t167))));
+  let final self::Class* #t168 = c in #t168 == null ?{self::Class*} null : self::Extension|set#field(#t168, self::Extension|get#field(self::Extension|method(new self::Class::•())));
+  c = let final self::Class* #t169 = c in #t169 == null ?{self::Class*} null : let final self::Class* #t170 = self::Extension|get#field(self::Extension|method(new self::Class::•())) in let final void #t171 = self::Extension|set#field(#t169, #t170) in #t170;
+  let final self::Class* #t172 = c in #t172 == null ?{self::Class*} null : self::Extension|set#field(#t172, let final self::Class* #t173 = new self::Class::•() in let final void #t174 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t173) in #t173);
+  c = let final self::Class* #t175 = c in #t175 == null ?{self::Class*} null : let final self::Class* #t176 = let final self::Class* #t177 = new self::Class::•() in let final void #t178 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t177) in #t177 in let final void #t179 = self::Extension|set#field(#t175, #t176) in #t176;
+  let final self::Class* #t180 = c in #t180 == null ?{self::Class*} null : self::Extension|set#field(#t180, self::Extension|method(self::Extension|method(new self::Class::•())));
+  c = let final self::Class* #t181 = c in #t181 == null ?{self::Class*} null : let final self::Class* #t182 = self::Extension|method(self::Extension|method(new self::Class::•())) in let final void #t183 = self::Extension|set#field(#t181, #t182) in #t182;
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t184 = c in #t184 == null ?{self::Class*} null : self::Extension|method(#t184))));
+  self::throws(() → self::Class* => let final self::Class* #t185 = new self::Class::•() in let final void #t186 = self::Extension|set#field(self::Extension|method(let final self::Class* #t187 = c in #t187 == null ?{self::Class*} null : self::Extension|method(#t187)), #t185) in #t185);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t188 = c in #t188 == null ?{self::Class*} null : self::Extension|method(#t188))));
+  let final self::Class* #t189 = let final self::Class* #t190 = c in #t190 == null ?{self::Class*} null : self::Extension|method(#t190) in #t189 == null ?{self::Class*} null : self::Extension|method(#t189);
 }
 static method indexAccess(self::Class* c) → void {
-  self::throws(() → self::Class* => self::Extension|[](let final self::Class* #t191 = c in #t191.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t191), c));
-  self::throws(() → self::Class* => let final self::Class* #t192 = let final self::Class* #t193 = c in #t193.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t193) in let final self::Class* #t194 = c in let final self::Class* #t195 = new self::Class::•() in let final void #t196 = self::Extension|[]=(#t192, #t194, #t195) in #t195);
-  self::throws(() → self::Class* => c = let final self::Class* #t197 = let final self::Class* #t198 = c in #t198.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t198) in let final self::Class* #t199 = c in let final self::Class* #t200 = new self::Class::•() in let final void #t201 = self::Extension|[]=(#t197, #t199, #t200) in #t200);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](let final self::Class* #t202 = c in #t202.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t202), c)));
-  self::throws(() → self::Class* => let final self::Class* #t203 = let final self::Class* #t204 = c in #t204.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t204) in let final self::Class* #t205 = c in let final self::Class* #t206 = self::Extension|+(self::Extension|[](#t203, #t205), 0) in let final void #t207 = self::Extension|[]=(#t203, #t205, #t206) in #t206);
-  self::throws(() → self::Class* => c = let final self::Class* #t208 = let final self::Class* #t209 = c in #t209.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t209) in let final self::Class* #t210 = c in let final self::Class* #t211 = self::Extension|+(self::Extension|[](#t208, #t210), 0) in let final void #t212 = self::Extension|[]=(#t208, #t210, #t211) in #t211);
-  self::throws(() → self::Class* => let final self::Class* #t213 = let final self::Class* #t214 = c in #t214.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t214) in let final self::Class* #t215 = c in let final self::Class* #t216 = self::Extension|[](#t213, #t215) in let final void #t217 = self::Extension|[]=(#t213, #t215, self::Extension|+(#t216, 1)) in #t216);
-  self::throws(() → self::Class* => c = let final self::Class* #t218 = let final self::Class* #t219 = c in #t219.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t219) in let final self::Class* #t220 = c in let final self::Class* #t221 = self::Extension|[](#t218, #t220) in let final void #t222 = self::Extension|[]=(#t218, #t220, self::Extension|+(#t221, 1)) in #t221);
-  self::throws(() → self::Class* => let final self::Class* #t223 = let final self::Class* #t224 = c in #t224.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t224) in let final self::Class* #t225 = c in let final self::Class* #t226 = self::Extension|+(self::Extension|[](#t223, #t225), 1) in let final void #t227 = self::Extension|[]=(#t223, #t225, #t226) in #t226);
-  self::throws(() → self::Class* => c = let final self::Class* #t228 = let final self::Class* #t229 = c in #t229.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t229) in let final self::Class* #t230 = c in let final self::Class* #t231 = self::Extension|+(self::Extension|[](#t228, #t230), 1) in let final void #t232 = self::Extension|[]=(#t228, #t230, #t231) in #t231);
-  self::throws(() → self::Class* => self::Extension|[](self::Extension|[](let final self::Class* #t233 = c in #t233.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t233), c), c));
-  self::throws(() → self::Class* => let final self::Class* #t234 = self::Extension|[](let final self::Class* #t235 = c in #t235.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t235), c) in let final self::Class* #t236 = c in let final self::Class* #t237 = new self::Class::•() in let final void #t238 = self::Extension|[]=(#t234, #t236, #t237) in #t237);
-  self::throws(() → self::Class* => c = let final self::Class* #t239 = self::Extension|[](let final self::Class* #t240 = c in #t240.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t240), c) in let final self::Class* #t241 = c in let final self::Class* #t242 = new self::Class::•() in let final void #t243 = self::Extension|[]=(#t239, #t241, #t242) in #t242);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](self::Extension|[](let final self::Class* #t244 = c in #t244.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t244), c), c)));
-  self::throws(() → self::Class* => let final self::Class* #t245 = self::Extension|[](let final self::Class* #t246 = c in #t246.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t246), c) in let final self::Class* #t247 = c in let final self::Class* #t248 = self::Extension|+(self::Extension|[](#t245, #t247), 0) in let final void #t249 = self::Extension|[]=(#t245, #t247, #t248) in #t248);
-  self::throws(() → self::Class* => c = let final self::Class* #t250 = self::Extension|[](let final self::Class* #t251 = c in #t251.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t251), c) in let final self::Class* #t252 = c in let final self::Class* #t253 = self::Extension|+(self::Extension|[](#t250, #t252), 0) in let final void #t254 = self::Extension|[]=(#t250, #t252, #t253) in #t253);
-  self::throws(() → self::Class* => let final self::Class* #t255 = self::Extension|[](let final self::Class* #t256 = c in #t256.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t256), c) in let final self::Class* #t257 = c in let final self::Class* #t258 = self::Extension|[](#t255, #t257) in let final void #t259 = self::Extension|[]=(#t255, #t257, self::Extension|+(#t258, 1)) in #t258);
-  self::throws(() → self::Class* => c = let final self::Class* #t260 = self::Extension|[](let final self::Class* #t261 = c in #t261.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t261), c) in let final self::Class* #t262 = c in let final self::Class* #t263 = self::Extension|[](#t260, #t262) in let final void #t264 = self::Extension|[]=(#t260, #t262, self::Extension|+(#t263, 1)) in #t263);
-  self::throws(() → self::Class* => let final self::Class* #t265 = self::Extension|[](let final self::Class* #t266 = c in #t266.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t266), c) in let final self::Class* #t267 = c in let final self::Class* #t268 = self::Extension|+(self::Extension|[](#t265, #t267), 1) in let final void #t269 = self::Extension|[]=(#t265, #t267, #t268) in #t268);
-  self::throws(() → self::Class* => c = let final self::Class* #t270 = self::Extension|[](let final self::Class* #t271 = c in #t271.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t271), c) in let final self::Class* #t272 = c in let final self::Class* #t273 = self::Extension|+(self::Extension|[](#t270, #t272), 1) in let final void #t274 = self::Extension|[]=(#t270, #t272, #t273) in #t273);
+  self::throws(() → self::Class* => self::Extension|[](let final self::Class* #t191 = c in #t191 == null ?{self::Class*} null : self::Extension|get#field(#t191), c));
+  self::throws(() → self::Class* => let final self::Class* #t192 = let final self::Class* #t193 = c in #t193 == null ?{self::Class*} null : self::Extension|get#field(#t193) in let final self::Class* #t194 = c in let final self::Class* #t195 = new self::Class::•() in let final void #t196 = self::Extension|[]=(#t192, #t194, #t195) in #t195);
+  self::throws(() → self::Class* => c = let final self::Class* #t197 = let final self::Class* #t198 = c in #t198 == null ?{self::Class*} null : self::Extension|get#field(#t198) in let final self::Class* #t199 = c in let final self::Class* #t200 = new self::Class::•() in let final void #t201 = self::Extension|[]=(#t197, #t199, #t200) in #t200);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](let final self::Class* #t202 = c in #t202 == null ?{self::Class*} null : self::Extension|get#field(#t202), c)));
+  self::throws(() → self::Class* => let final self::Class* #t203 = let final self::Class* #t204 = c in #t204 == null ?{self::Class*} null : self::Extension|get#field(#t204) in let final self::Class* #t205 = c in let final self::Class* #t206 = self::Extension|+(self::Extension|[](#t203, #t205), 0) in let final void #t207 = self::Extension|[]=(#t203, #t205, #t206) in #t206);
+  self::throws(() → self::Class* => c = let final self::Class* #t208 = let final self::Class* #t209 = c in #t209 == null ?{self::Class*} null : self::Extension|get#field(#t209) in let final self::Class* #t210 = c in let final self::Class* #t211 = self::Extension|+(self::Extension|[](#t208, #t210), 0) in let final void #t212 = self::Extension|[]=(#t208, #t210, #t211) in #t211);
+  self::throws(() → self::Class* => let final self::Class* #t213 = let final self::Class* #t214 = c in #t214 == null ?{self::Class*} null : self::Extension|get#field(#t214) in let final self::Class* #t215 = c in let final self::Class* #t216 = self::Extension|[](#t213, #t215) in let final void #t217 = self::Extension|[]=(#t213, #t215, self::Extension|+(#t216, 1)) in #t216);
+  self::throws(() → self::Class* => c = let final self::Class* #t218 = let final self::Class* #t219 = c in #t219 == null ?{self::Class*} null : self::Extension|get#field(#t219) in let final self::Class* #t220 = c in let final self::Class* #t221 = self::Extension|[](#t218, #t220) in let final void #t222 = self::Extension|[]=(#t218, #t220, self::Extension|+(#t221, 1)) in #t221);
+  self::throws(() → self::Class* => let final self::Class* #t223 = let final self::Class* #t224 = c in #t224 == null ?{self::Class*} null : self::Extension|get#field(#t224) in let final self::Class* #t225 = c in let final self::Class* #t226 = self::Extension|+(self::Extension|[](#t223, #t225), 1) in let final void #t227 = self::Extension|[]=(#t223, #t225, #t226) in #t226);
+  self::throws(() → self::Class* => c = let final self::Class* #t228 = let final self::Class* #t229 = c in #t229 == null ?{self::Class*} null : self::Extension|get#field(#t229) in let final self::Class* #t230 = c in let final self::Class* #t231 = self::Extension|+(self::Extension|[](#t228, #t230), 1) in let final void #t232 = self::Extension|[]=(#t228, #t230, #t231) in #t231);
+  self::throws(() → self::Class* => self::Extension|[](self::Extension|[](let final self::Class* #t233 = c in #t233 == null ?{self::Class*} null : self::Extension|get#field(#t233), c), c));
+  self::throws(() → self::Class* => let final self::Class* #t234 = self::Extension|[](let final self::Class* #t235 = c in #t235 == null ?{self::Class*} null : self::Extension|get#field(#t235), c) in let final self::Class* #t236 = c in let final self::Class* #t237 = new self::Class::•() in let final void #t238 = self::Extension|[]=(#t234, #t236, #t237) in #t237);
+  self::throws(() → self::Class* => c = let final self::Class* #t239 = self::Extension|[](let final self::Class* #t240 = c in #t240 == null ?{self::Class*} null : self::Extension|get#field(#t240), c) in let final self::Class* #t241 = c in let final self::Class* #t242 = new self::Class::•() in let final void #t243 = self::Extension|[]=(#t239, #t241, #t242) in #t242);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](self::Extension|[](let final self::Class* #t244 = c in #t244 == null ?{self::Class*} null : self::Extension|get#field(#t244), c), c)));
+  self::throws(() → self::Class* => let final self::Class* #t245 = self::Extension|[](let final self::Class* #t246 = c in #t246 == null ?{self::Class*} null : self::Extension|get#field(#t246), c) in let final self::Class* #t247 = c in let final self::Class* #t248 = self::Extension|+(self::Extension|[](#t245, #t247), 0) in let final void #t249 = self::Extension|[]=(#t245, #t247, #t248) in #t248);
+  self::throws(() → self::Class* => c = let final self::Class* #t250 = self::Extension|[](let final self::Class* #t251 = c in #t251 == null ?{self::Class*} null : self::Extension|get#field(#t251), c) in let final self::Class* #t252 = c in let final self::Class* #t253 = self::Extension|+(self::Extension|[](#t250, #t252), 0) in let final void #t254 = self::Extension|[]=(#t250, #t252, #t253) in #t253);
+  self::throws(() → self::Class* => let final self::Class* #t255 = self::Extension|[](let final self::Class* #t256 = c in #t256 == null ?{self::Class*} null : self::Extension|get#field(#t256), c) in let final self::Class* #t257 = c in let final self::Class* #t258 = self::Extension|[](#t255, #t257) in let final void #t259 = self::Extension|[]=(#t255, #t257, self::Extension|+(#t258, 1)) in #t258);
+  self::throws(() → self::Class* => c = let final self::Class* #t260 = self::Extension|[](let final self::Class* #t261 = c in #t261 == null ?{self::Class*} null : self::Extension|get#field(#t261), c) in let final self::Class* #t262 = c in let final self::Class* #t263 = self::Extension|[](#t260, #t262) in let final void #t264 = self::Extension|[]=(#t260, #t262, self::Extension|+(#t263, 1)) in #t263);
+  self::throws(() → self::Class* => let final self::Class* #t265 = self::Extension|[](let final self::Class* #t266 = c in #t266 == null ?{self::Class*} null : self::Extension|get#field(#t266), c) in let final self::Class* #t267 = c in let final self::Class* #t268 = self::Extension|+(self::Extension|[](#t265, #t267), 1) in let final void #t269 = self::Extension|[]=(#t265, #t267, #t268) in #t268);
+  self::throws(() → self::Class* => c = let final self::Class* #t270 = self::Extension|[](let final self::Class* #t271 = c in #t271 == null ?{self::Class*} null : self::Extension|get#field(#t271), c) in let final self::Class* #t272 = c in let final self::Class* #t273 = self::Extension|+(self::Extension|[](#t270, #t272), 1) in let final void #t274 = self::Extension|[]=(#t270, #t272, #t273) in #t273);
 }
 static method operatorAccess(self::Class* c) → void {
-  self::throws(() → self::Class* => self::Extension|+(let final self::Class* #t275 = c in #t275.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t275), 0));
-  self::throws(() → self::Class* => self::Extension|unary-(let final self::Class* #t276 = c in #t276.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t276)));
-  let final self::Class* #t277 = c in #t277.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t277, self::Extension|+(self::Extension|get#field(#t277), 0));
-  c = let final self::Class* #t278 = c in #t278.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t279 = self::Extension|+(self::Extension|get#field(#t278), 0) in let final void #t280 = self::Extension|set#field(#t278, #t279) in #t279;
-  self::throws(() → self::Class* => let final self::Class* #t281 = let final self::Class* #t282 = c in #t282.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t282) in let final self::Class* #t283 = self::Extension|+(self::Extension|get#field(#t281), 0) in let final void #t284 = self::Extension|set#field(#t281, #t283) in #t283);
-  self::throws(() → self::Class* => c = let final self::Class* #t285 = let final self::Class* #t286 = c in #t286.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t286) in let final self::Class* #t287 = self::Extension|+(self::Extension|get#field(#t285), 0) in let final void #t288 = self::Extension|set#field(#t285, #t287) in #t287);
-  let final self::Class* #t289 = c in #t289.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t289, self::Extension|+(self::Extension|get#field(#t289), 1));
-  c = let final self::Class* #t290 = c in #t290.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t291 = self::Extension|get#field(#t290) in let final void #t292 = self::Extension|set#field(#t290, self::Extension|+(#t291, 1)) in #t291;
-  let final self::Class* #t293 = c in #t293.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t294 = self::Extension|+(self::Extension|get#field(#t293), 1) in let final void #t295 = self::Extension|set#field(#t293, #t294) in #t294;
-  c = let final self::Class* #t296 = c in #t296.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t297 = self::Extension|+(self::Extension|get#field(#t296), 1) in let final void #t298 = self::Extension|set#field(#t296, #t297) in #t297;
+  self::throws(() → self::Class* => self::Extension|+(let final self::Class* #t275 = c in #t275 == null ?{self::Class*} null : self::Extension|get#field(#t275), 0));
+  self::throws(() → self::Class* => self::Extension|unary-(let final self::Class* #t276 = c in #t276 == null ?{self::Class*} null : self::Extension|get#field(#t276)));
+  let final self::Class* #t277 = c in #t277 == null ?{self::Class*} null : self::Extension|set#field(#t277, self::Extension|+(self::Extension|get#field(#t277), 0));
+  c = let final self::Class* #t278 = c in #t278 == null ?{self::Class*} null : let final self::Class* #t279 = self::Extension|+(self::Extension|get#field(#t278), 0) in let final void #t280 = self::Extension|set#field(#t278, #t279) in #t279;
+  self::throws(() → self::Class* => let final self::Class* #t281 = let final self::Class* #t282 = c in #t282 == null ?{self::Class*} null : self::Extension|get#field(#t282) in let final self::Class* #t283 = self::Extension|+(self::Extension|get#field(#t281), 0) in let final void #t284 = self::Extension|set#field(#t281, #t283) in #t283);
+  self::throws(() → self::Class* => c = let final self::Class* #t285 = let final self::Class* #t286 = c in #t286 == null ?{self::Class*} null : self::Extension|get#field(#t286) in let final self::Class* #t287 = self::Extension|+(self::Extension|get#field(#t285), 0) in let final void #t288 = self::Extension|set#field(#t285, #t287) in #t287);
+  let final self::Class* #t289 = c in #t289 == null ?{self::Class*} null : self::Extension|set#field(#t289, self::Extension|+(self::Extension|get#field(#t289), 1));
+  c = let final self::Class* #t290 = c in #t290 == null ?{self::Class*} null : let final self::Class* #t291 = self::Extension|get#field(#t290) in let final void #t292 = self::Extension|set#field(#t290, self::Extension|+(#t291, 1)) in #t291;
+  let final self::Class* #t293 = c in #t293 == null ?{self::Class*} null : let final self::Class* #t294 = self::Extension|+(self::Extension|get#field(#t293), 1) in let final void #t295 = self::Extension|set#field(#t293, #t294) in #t294;
+  c = let final self::Class* #t296 = c in #t296 == null ?{self::Class*} null : let final self::Class* #t297 = self::Extension|+(self::Extension|get#field(#t296), 1) in let final void #t298 = self::Extension|set#field(#t296, #t297) in #t297;
 }
 static method ifNull(self::Class* c) → void {
-  let final self::Class* #t299 = c in #t299.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t299).{self::Class::==}(null) ?{self::Class*} self::Extension|set#field(#t299, c) : null;
-  c = let final self::Class* #t300 = c in #t300.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t301 = self::Extension|get#field(#t300) in #t301.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t302 = c in let final void #t303 = self::Extension|set#field(#t300, #t302) in #t302 : #t301;
-  self::throws(() → self::Class* => let final self::Class* #t304 = let final self::Class* #t305 = c in #t305.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t305) in let final self::Class* #t306 = self::Extension|get#field(#t304) in #t306.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t307 = c in let final void #t308 = self::Extension|set#field(#t304, #t307) in #t307 : #t306);
-  self::throws(() → self::Class* => c = let final self::Class* #t309 = let final self::Class* #t310 = c in #t310.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t310) in let final self::Class* #t311 = self::Extension|get#field(#t309) in #t311.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t312 = c in let final void #t313 = self::Extension|set#field(#t309, #t312) in #t312 : #t311);
-  self::throws(() → self::Class* => let final self::Class* #t314 = let final self::Class* #t315 = c in #t315.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t315) in let final self::Class* #t316 = c in let final self::Class* #t317 = self::Extension|[](#t314, #t316) in #t317.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t318 = c in let final void #t319 = self::Extension|[]=(#t314, #t316, #t318) in #t318 : #t317);
-  self::throws(() → self::Class* => c = let final self::Class* #t320 = let final self::Class* #t321 = c in #t321.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t321) in let final self::Class* #t322 = c in let final self::Class* #t323 = self::Extension|[](#t320, #t322) in #t323.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t324 = c in let final void #t325 = self::Extension|[]=(#t320, #t322, #t324) in #t324 : #t323);
+  let final self::Class* #t299 = c in #t299 == null ?{self::Class*} null : self::Extension|get#field(#t299) == null ?{self::Class*} self::Extension|set#field(#t299, c) : null;
+  c = let final self::Class* #t300 = c in #t300 == null ?{self::Class*} null : let final self::Class* #t301 = self::Extension|get#field(#t300) in #t301 == null ?{self::Class*} let final self::Class* #t302 = c in let final void #t303 = self::Extension|set#field(#t300, #t302) in #t302 : #t301;
+  self::throws(() → self::Class* => let final self::Class* #t304 = let final self::Class* #t305 = c in #t305 == null ?{self::Class*} null : self::Extension|get#field(#t305) in let final self::Class* #t306 = self::Extension|get#field(#t304) in #t306 == null ?{self::Class*} let final self::Class* #t307 = c in let final void #t308 = self::Extension|set#field(#t304, #t307) in #t307 : #t306);
+  self::throws(() → self::Class* => c = let final self::Class* #t309 = let final self::Class* #t310 = c in #t310 == null ?{self::Class*} null : self::Extension|get#field(#t310) in let final self::Class* #t311 = self::Extension|get#field(#t309) in #t311 == null ?{self::Class*} let final self::Class* #t312 = c in let final void #t313 = self::Extension|set#field(#t309, #t312) in #t312 : #t311);
+  self::throws(() → self::Class* => let final self::Class* #t314 = let final self::Class* #t315 = c in #t315 == null ?{self::Class*} null : self::Extension|get#field(#t315) in let final self::Class* #t316 = c in let final self::Class* #t317 = self::Extension|[](#t314, #t316) in #t317 == null ?{self::Class*} let final self::Class* #t318 = c in let final void #t319 = self::Extension|[]=(#t314, #t316, #t318) in #t318 : #t317);
+  self::throws(() → self::Class* => c = let final self::Class* #t320 = let final self::Class* #t321 = c in #t321 == null ?{self::Class*} null : self::Extension|get#field(#t321) in let final self::Class* #t322 = c in let final self::Class* #t323 = self::Extension|[](#t320, #t322) in #t323 == null ?{self::Class*} let final self::Class* #t324 = c in let final void #t325 = self::Extension|[]=(#t320, #t322, #t324) in #t324 : #t323);
 }
 static method throws(() →* void f) → void {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.transformed.expect
index 6b754ec..ce52b2a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
   set field = self::Extension|set#field;
 }
 static method Extension|get#field(lowered final self::Class* #this) → self::Class*
-  return #this.{self::Class::_field};
+  return #this.{self::Class::_field}{self::Class*};
 static method Extension|set#field(lowered final self::Class* #this, self::Class* value) → void {
   #this.{self::Class::_field} = value;
 }
@@ -53,123 +53,123 @@
   self::ifNull(null);
 }
 static method propertyAccess(self::Class* c) → void {
-  let final self::Class* #t1 = c in #t1.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t1);
-  let final self::Class* #t2 = c in #t2.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t2, new self::Class::•());
-  c = let final self::Class* #t3 = c in #t3.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t4 = new self::Class::•() in let final void #t5 = self::Extension|set#field(#t3, #t4) in #t4;
-  let final self::Class* #t6 = c in #t6.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t6);
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t7 = c in #t7.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t7)));
-  let final self::Class* #t8 = let final self::Class* #t9 = c in #t9.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t9) in #t8.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t8);
-  self::throws(() → self::Class* => let final self::Class* #t10 = self::Extension|get#field(let final self::Class* #t11 = c in #t11.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t11)) in #t10.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t10));
-  self::throws(() → self::Class* => let final self::Class* #t12 = new self::Class::•() in let final void #t13 = self::Extension|set#field(let final self::Class* #t14 = c in #t14.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t14), #t12) in #t12);
-  let final self::Class* #t15 = let final self::Class* #t16 = c in #t16.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t16) in #t15.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t15, new self::Class::•());
-  self::throws(() → self::Class* => let final self::Class* #t17 = self::Extension|get#field(let final self::Class* #t18 = c in #t18.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t18)) in #t17.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t19 = new self::Class::•() in let final void #t20 = self::Extension|set#field(#t17, #t19) in #t19);
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t21 = c in #t21.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t21)));
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t22 = c in #t22.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t23 = new self::Class::•() in let final void #t24 = self::Extension|set#field(#t22, #t23) in #t23));
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t25 = c in #t25.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t25)));
-  self::throws(() → self::Class* => c = let final self::Class* #t26 = new self::Class::•() in let final void #t27 = self::Extension|set#field(let final self::Class* #t28 = c in #t28.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t28), #t26) in #t26);
-  c = let final self::Class* #t29 = let final self::Class* #t30 = c in #t30.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t30) in #t29.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t31 = new self::Class::•() in let final void #t32 = self::Extension|set#field(#t29, #t31) in #t31;
-  self::throws(() → self::Class* => c = let final self::Class* #t33 = self::Extension|get#field(let final self::Class* #t34 = c in #t34.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t34)) in #t33.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t35 = new self::Class::•() in let final void #t36 = self::Extension|set#field(#t33, #t35) in #t35);
-  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t37 = c in #t37.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t37)));
-  let final self::Class* #t38 = c in #t38.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t38, self::Extension|get#field(new self::Class::•()));
-  c = let final self::Class* #t39 = c in #t39.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t40 = self::Extension|get#field(new self::Class::•()) in let final void #t41 = self::Extension|set#field(#t39, #t40) in #t40;
-  let final self::Class* #t42 = c in #t42.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t42, let final self::Class* #t43 = new self::Class::•() in let final void #t44 = self::Extension|set#field(new self::Class::•(), #t43) in #t43);
-  c = let final self::Class* #t45 = c in #t45.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t46 = let final self::Class* #t47 = new self::Class::•() in let final void #t48 = self::Extension|set#field(new self::Class::•(), #t47) in #t47 in let final void #t49 = self::Extension|set#field(#t45, #t46) in #t46;
-  let final self::Class* #t50 = c in #t50.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t50, self::Extension|method(new self::Class::•()));
-  c = let final self::Class* #t51 = c in #t51.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t52 = self::Extension|method(new self::Class::•()) in let final void #t53 = self::Extension|set#field(#t51, #t52) in #t52;
-  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t54 = c in #t54.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t54)));
-  self::throws(() → self::Class* => let final self::Class* #t55 = new self::Class::•() in let final void #t56 = self::Extension|set#field(let final self::Class* #t57 = c in #t57.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t57), #t55) in #t55);
-  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t58 = c in #t58.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t58)));
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t59 = c in #t59.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t59))));
-  self::throws(() → self::Class* => let final self::Class* #t60 = new self::Class::•() in let final void #t61 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t62 = c in #t62.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t62)), #t60) in #t60);
-  self::throws(() → self::Class* => c = let final self::Class* #t63 = new self::Class::•() in let final void #t64 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t65 = c in #t65.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t65)), #t63) in #t63);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t66 = c in #t66.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t66))));
-  let final self::Class* #t67 = c in #t67.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t67, self::Extension|get#field(self::Extension|get#field(new self::Class::•())));
-  c = let final self::Class* #t68 = c in #t68.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t69 = self::Extension|get#field(self::Extension|get#field(new self::Class::•())) in let final void #t70 = self::Extension|set#field(#t68, #t69) in #t69;
-  let final self::Class* #t71 = c in #t71.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t71, let final self::Class* #t72 = new self::Class::•() in let final void #t73 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t72) in #t72);
-  c = let final self::Class* #t74 = c in #t74.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t75 = let final self::Class* #t76 = new self::Class::•() in let final void #t77 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t76) in #t76 in let final void #t78 = self::Extension|set#field(#t74, #t75) in #t75;
-  let final self::Class* #t79 = c in #t79.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t79, self::Extension|method(self::Extension|get#field(new self::Class::•())));
-  c = let final self::Class* #t80 = c in #t80.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t81 = self::Extension|method(self::Extension|get#field(new self::Class::•())) in let final void #t82 = self::Extension|set#field(#t80, #t81) in #t81;
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t83 = c in #t83.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t83))));
-  self::throws(() → self::Class* => let final self::Class* #t84 = new self::Class::•() in let final void #t85 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t86 = c in #t86.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t86)), #t84) in #t84);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t87 = c in #t87.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t87))));
-  self::throws(() → self::Class* => let final self::Class* #t88 = self::Extension|get#field(new self::Class::•()) in let final void #t89 = self::Extension|set#field(let final self::Class* #t90 = c in #t90.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t90), #t88) in #t88);
-  self::throws(() → self::Class* => c = let final self::Class* #t91 = self::Extension|get#field(new self::Class::•()) in let final void #t92 = self::Extension|set#field(let final self::Class* #t93 = c in #t93.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t93), #t91) in #t91);
-  self::throws(() → self::Class* => let final self::Class* #t94 = let final self::Class* #t95 = new self::Class::•() in let final void #t96 = self::Extension|set#field(new self::Class::•(), #t95) in #t95 in let final void #t97 = self::Extension|set#field(let final self::Class* #t98 = c in #t98.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t98), #t94) in #t94);
-  self::throws(() → self::Class* => c = let final self::Class* #t99 = let final self::Class* #t100 = new self::Class::•() in let final void #t101 = self::Extension|set#field(new self::Class::•(), #t100) in #t100 in let final void #t102 = self::Extension|set#field(let final self::Class* #t103 = c in #t103.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t103), #t99) in #t99);
-  self::throws(() → self::Class* => let final self::Class* #t104 = self::Extension|method(new self::Class::•()) in let final void #t105 = self::Extension|set#field(let final self::Class* #t106 = c in #t106.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t106), #t104) in #t104);
-  self::throws(() → self::Class* => c = let final self::Class* #t107 = self::Extension|method(new self::Class::•()) in let final void #t108 = self::Extension|set#field(let final self::Class* #t109 = c in #t109.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t109), #t107) in #t107);
-  let final self::Class* #t110 = c in #t110.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t110, let final self::Class* #t111 = self::Extension|get#field(new self::Class::•()) in let final void #t112 = self::Extension|set#field(new self::Class::•(), #t111) in #t111);
-  c = let final self::Class* #t113 = c in #t113.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t114 = let final self::Class* #t115 = self::Extension|get#field(new self::Class::•()) in let final void #t116 = self::Extension|set#field(new self::Class::•(), #t115) in #t115 in let final void #t117 = self::Extension|set#field(#t113, #t114) in #t114;
-  let final self::Class* #t118 = c in #t118.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t118, let final self::Class* #t119 = let final self::Class* #t120 = new self::Class::•() in let final void #t121 = self::Extension|set#field(new self::Class::•(), #t120) in #t120 in let final void #t122 = self::Extension|set#field(new self::Class::•(), #t119) in #t119);
-  c = let final self::Class* #t123 = c in #t123.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t124 = let final self::Class* #t125 = let final self::Class* #t126 = new self::Class::•() in let final void #t127 = self::Extension|set#field(new self::Class::•(), #t126) in #t126 in let final void #t128 = self::Extension|set#field(new self::Class::•(), #t125) in #t125 in let final void #t129 = self::Extension|set#field(#t123, #t124) in #t124;
-  let final self::Class* #t130 = c in #t130.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t130, let final self::Class* #t131 = self::Extension|method(new self::Class::•()) in let final void #t132 = self::Extension|set#field(new self::Class::•(), #t131) in #t131);
-  c = let final self::Class* #t133 = c in #t133.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t134 = let final self::Class* #t135 = self::Extension|method(new self::Class::•()) in let final void #t136 = self::Extension|set#field(new self::Class::•(), #t135) in #t135 in let final void #t137 = self::Extension|set#field(#t133, #t134) in #t134;
-  self::throws(() → self::Class* => let final self::Class* #t138 = self::Extension|get#field(new self::Class::•()) in let final void #t139 = self::Extension|set#field(let final self::Class* #t140 = c in #t140.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t140), #t138) in #t138);
-  self::throws(() → self::Class* => c = let final self::Class* #t141 = self::Extension|get#field(new self::Class::•()) in let final void #t142 = self::Extension|set#field(let final self::Class* #t143 = c in #t143.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t143), #t141) in #t141);
-  self::throws(() → self::Class* => let final self::Class* #t144 = let final self::Class* #t145 = new self::Class::•() in let final void #t146 = self::Extension|set#field(new self::Class::•(), #t145) in #t145 in let final void #t147 = self::Extension|set#field(let final self::Class* #t148 = c in #t148.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t148), #t144) in #t144);
-  self::throws(() → self::Class* => c = let final self::Class* #t149 = let final self::Class* #t150 = new self::Class::•() in let final void #t151 = self::Extension|set#field(new self::Class::•(), #t150) in #t150 in let final void #t152 = self::Extension|set#field(let final self::Class* #t153 = c in #t153.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t153), #t149) in #t149);
-  self::throws(() → self::Class* => let final self::Class* #t154 = self::Extension|method(new self::Class::•()) in let final void #t155 = self::Extension|set#field(let final self::Class* #t156 = c in #t156.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t156), #t154) in #t154);
-  self::throws(() → self::Class* => c = let final self::Class* #t157 = self::Extension|method(new self::Class::•()) in let final void #t158 = self::Extension|set#field(let final self::Class* #t159 = c in #t159.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t159), #t157) in #t157);
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t160 = c in #t160.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t160))));
-  self::throws(() → self::Class* => let final self::Class* #t161 = new self::Class::•() in let final void #t162 = self::Extension|set#field(self::Extension|method(let final self::Class* #t163 = c in #t163.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t163)), #t161) in #t161);
-  self::throws(() → self::Class* => c = let final self::Class* #t164 = new self::Class::•() in let final void #t165 = self::Extension|set#field(self::Extension|method(let final self::Class* #t166 = c in #t166.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t166)), #t164) in #t164);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t167 = c in #t167.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t167))));
-  let final self::Class* #t168 = c in #t168.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t168, self::Extension|get#field(self::Extension|method(new self::Class::•())));
-  c = let final self::Class* #t169 = c in #t169.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t170 = self::Extension|get#field(self::Extension|method(new self::Class::•())) in let final void #t171 = self::Extension|set#field(#t169, #t170) in #t170;
-  let final self::Class* #t172 = c in #t172.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t172, let final self::Class* #t173 = new self::Class::•() in let final void #t174 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t173) in #t173);
-  c = let final self::Class* #t175 = c in #t175.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t176 = let final self::Class* #t177 = new self::Class::•() in let final void #t178 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t177) in #t177 in let final void #t179 = self::Extension|set#field(#t175, #t176) in #t176;
-  let final self::Class* #t180 = c in #t180.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t180, self::Extension|method(self::Extension|method(new self::Class::•())));
-  c = let final self::Class* #t181 = c in #t181.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t182 = self::Extension|method(self::Extension|method(new self::Class::•())) in let final void #t183 = self::Extension|set#field(#t181, #t182) in #t182;
-  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t184 = c in #t184.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t184))));
-  self::throws(() → self::Class* => let final self::Class* #t185 = new self::Class::•() in let final void #t186 = self::Extension|set#field(self::Extension|method(let final self::Class* #t187 = c in #t187.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t187)), #t185) in #t185);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t188 = c in #t188.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t188))));
-  let final self::Class* #t189 = let final self::Class* #t190 = c in #t190.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t190) in #t189.{self::Class::==}(null) ?{self::Class*} null : self::Extension|method(#t189);
+  let final self::Class* #t1 = c in #t1 == null ?{self::Class*} null : self::Extension|get#field(#t1);
+  let final self::Class* #t2 = c in #t2 == null ?{self::Class*} null : self::Extension|set#field(#t2, new self::Class::•());
+  c = let final self::Class* #t3 = c in #t3 == null ?{self::Class*} null : let final self::Class* #t4 = new self::Class::•() in let final void #t5 = self::Extension|set#field(#t3, #t4) in #t4;
+  let final self::Class* #t6 = c in #t6 == null ?{self::Class*} null : self::Extension|method(#t6);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t7 = c in #t7 == null ?{self::Class*} null : self::Extension|get#field(#t7)));
+  let final self::Class* #t8 = let final self::Class* #t9 = c in #t9 == null ?{self::Class*} null : self::Extension|get#field(#t9) in #t8 == null ?{self::Class*} null : self::Extension|get#field(#t8);
+  self::throws(() → self::Class* => let final self::Class* #t10 = self::Extension|get#field(let final self::Class* #t11 = c in #t11 == null ?{self::Class*} null : self::Extension|get#field(#t11)) in #t10 == null ?{self::Class*} null : self::Extension|get#field(#t10));
+  self::throws(() → self::Class* => let final self::Class* #t12 = new self::Class::•() in let final void #t13 = self::Extension|set#field(let final self::Class* #t14 = c in #t14 == null ?{self::Class*} null : self::Extension|get#field(#t14), #t12) in #t12);
+  let final self::Class* #t15 = let final self::Class* #t16 = c in #t16 == null ?{self::Class*} null : self::Extension|get#field(#t16) in #t15 == null ?{self::Class*} null : self::Extension|set#field(#t15, new self::Class::•());
+  self::throws(() → self::Class* => let final self::Class* #t17 = self::Extension|get#field(let final self::Class* #t18 = c in #t18 == null ?{self::Class*} null : self::Extension|get#field(#t18)) in #t17 == null ?{self::Class*} null : let final self::Class* #t19 = new self::Class::•() in let final void #t20 = self::Extension|set#field(#t17, #t19) in #t19);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t21 = c in #t21 == null ?{self::Class*} null : self::Extension|get#field(#t21)));
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t22 = c in #t22 == null ?{self::Class*} null : let final self::Class* #t23 = new self::Class::•() in let final void #t24 = self::Extension|set#field(#t22, #t23) in #t23));
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t25 = c in #t25 == null ?{self::Class*} null : self::Extension|method(#t25)));
+  self::throws(() → self::Class* => c = let final self::Class* #t26 = new self::Class::•() in let final void #t27 = self::Extension|set#field(let final self::Class* #t28 = c in #t28 == null ?{self::Class*} null : self::Extension|get#field(#t28), #t26) in #t26);
+  c = let final self::Class* #t29 = let final self::Class* #t30 = c in #t30 == null ?{self::Class*} null : self::Extension|get#field(#t30) in #t29 == null ?{self::Class*} null : let final self::Class* #t31 = new self::Class::•() in let final void #t32 = self::Extension|set#field(#t29, #t31) in #t31;
+  self::throws(() → self::Class* => c = let final self::Class* #t33 = self::Extension|get#field(let final self::Class* #t34 = c in #t34 == null ?{self::Class*} null : self::Extension|get#field(#t34)) in #t33 == null ?{self::Class*} null : let final self::Class* #t35 = new self::Class::•() in let final void #t36 = self::Extension|set#field(#t33, #t35) in #t35);
+  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t37 = c in #t37 == null ?{self::Class*} null : self::Extension|get#field(#t37)));
+  let final self::Class* #t38 = c in #t38 == null ?{self::Class*} null : self::Extension|set#field(#t38, self::Extension|get#field(new self::Class::•()));
+  c = let final self::Class* #t39 = c in #t39 == null ?{self::Class*} null : let final self::Class* #t40 = self::Extension|get#field(new self::Class::•()) in let final void #t41 = self::Extension|set#field(#t39, #t40) in #t40;
+  let final self::Class* #t42 = c in #t42 == null ?{self::Class*} null : self::Extension|set#field(#t42, let final self::Class* #t43 = new self::Class::•() in let final void #t44 = self::Extension|set#field(new self::Class::•(), #t43) in #t43);
+  c = let final self::Class* #t45 = c in #t45 == null ?{self::Class*} null : let final self::Class* #t46 = let final self::Class* #t47 = new self::Class::•() in let final void #t48 = self::Extension|set#field(new self::Class::•(), #t47) in #t47 in let final void #t49 = self::Extension|set#field(#t45, #t46) in #t46;
+  let final self::Class* #t50 = c in #t50 == null ?{self::Class*} null : self::Extension|set#field(#t50, self::Extension|method(new self::Class::•()));
+  c = let final self::Class* #t51 = c in #t51 == null ?{self::Class*} null : let final self::Class* #t52 = self::Extension|method(new self::Class::•()) in let final void #t53 = self::Extension|set#field(#t51, #t52) in #t52;
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t54 = c in #t54 == null ?{self::Class*} null : self::Extension|method(#t54)));
+  self::throws(() → self::Class* => let final self::Class* #t55 = new self::Class::•() in let final void #t56 = self::Extension|set#field(let final self::Class* #t57 = c in #t57 == null ?{self::Class*} null : self::Extension|method(#t57), #t55) in #t55);
+  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t58 = c in #t58 == null ?{self::Class*} null : self::Extension|method(#t58)));
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t59 = c in #t59 == null ?{self::Class*} null : self::Extension|get#field(#t59))));
+  self::throws(() → self::Class* => let final self::Class* #t60 = new self::Class::•() in let final void #t61 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t62 = c in #t62 == null ?{self::Class*} null : self::Extension|get#field(#t62)), #t60) in #t60);
+  self::throws(() → self::Class* => c = let final self::Class* #t63 = new self::Class::•() in let final void #t64 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t65 = c in #t65 == null ?{self::Class*} null : self::Extension|get#field(#t65)), #t63) in #t63);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t66 = c in #t66 == null ?{self::Class*} null : self::Extension|get#field(#t66))));
+  let final self::Class* #t67 = c in #t67 == null ?{self::Class*} null : self::Extension|set#field(#t67, self::Extension|get#field(self::Extension|get#field(new self::Class::•())));
+  c = let final self::Class* #t68 = c in #t68 == null ?{self::Class*} null : let final self::Class* #t69 = self::Extension|get#field(self::Extension|get#field(new self::Class::•())) in let final void #t70 = self::Extension|set#field(#t68, #t69) in #t69;
+  let final self::Class* #t71 = c in #t71 == null ?{self::Class*} null : self::Extension|set#field(#t71, let final self::Class* #t72 = new self::Class::•() in let final void #t73 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t72) in #t72);
+  c = let final self::Class* #t74 = c in #t74 == null ?{self::Class*} null : let final self::Class* #t75 = let final self::Class* #t76 = new self::Class::•() in let final void #t77 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t76) in #t76 in let final void #t78 = self::Extension|set#field(#t74, #t75) in #t75;
+  let final self::Class* #t79 = c in #t79 == null ?{self::Class*} null : self::Extension|set#field(#t79, self::Extension|method(self::Extension|get#field(new self::Class::•())));
+  c = let final self::Class* #t80 = c in #t80 == null ?{self::Class*} null : let final self::Class* #t81 = self::Extension|method(self::Extension|get#field(new self::Class::•())) in let final void #t82 = self::Extension|set#field(#t80, #t81) in #t81;
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t83 = c in #t83 == null ?{self::Class*} null : self::Extension|method(#t83))));
+  self::throws(() → self::Class* => let final self::Class* #t84 = new self::Class::•() in let final void #t85 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t86 = c in #t86 == null ?{self::Class*} null : self::Extension|method(#t86)), #t84) in #t84);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t87 = c in #t87 == null ?{self::Class*} null : self::Extension|method(#t87))));
+  self::throws(() → self::Class* => let final self::Class* #t88 = self::Extension|get#field(new self::Class::•()) in let final void #t89 = self::Extension|set#field(let final self::Class* #t90 = c in #t90 == null ?{self::Class*} null : self::Extension|get#field(#t90), #t88) in #t88);
+  self::throws(() → self::Class* => c = let final self::Class* #t91 = self::Extension|get#field(new self::Class::•()) in let final void #t92 = self::Extension|set#field(let final self::Class* #t93 = c in #t93 == null ?{self::Class*} null : self::Extension|get#field(#t93), #t91) in #t91);
+  self::throws(() → self::Class* => let final self::Class* #t94 = let final self::Class* #t95 = new self::Class::•() in let final void #t96 = self::Extension|set#field(new self::Class::•(), #t95) in #t95 in let final void #t97 = self::Extension|set#field(let final self::Class* #t98 = c in #t98 == null ?{self::Class*} null : self::Extension|get#field(#t98), #t94) in #t94);
+  self::throws(() → self::Class* => c = let final self::Class* #t99 = let final self::Class* #t100 = new self::Class::•() in let final void #t101 = self::Extension|set#field(new self::Class::•(), #t100) in #t100 in let final void #t102 = self::Extension|set#field(let final self::Class* #t103 = c in #t103 == null ?{self::Class*} null : self::Extension|get#field(#t103), #t99) in #t99);
+  self::throws(() → self::Class* => let final self::Class* #t104 = self::Extension|method(new self::Class::•()) in let final void #t105 = self::Extension|set#field(let final self::Class* #t106 = c in #t106 == null ?{self::Class*} null : self::Extension|get#field(#t106), #t104) in #t104);
+  self::throws(() → self::Class* => c = let final self::Class* #t107 = self::Extension|method(new self::Class::•()) in let final void #t108 = self::Extension|set#field(let final self::Class* #t109 = c in #t109 == null ?{self::Class*} null : self::Extension|get#field(#t109), #t107) in #t107);
+  let final self::Class* #t110 = c in #t110 == null ?{self::Class*} null : self::Extension|set#field(#t110, let final self::Class* #t111 = self::Extension|get#field(new self::Class::•()) in let final void #t112 = self::Extension|set#field(new self::Class::•(), #t111) in #t111);
+  c = let final self::Class* #t113 = c in #t113 == null ?{self::Class*} null : let final self::Class* #t114 = let final self::Class* #t115 = self::Extension|get#field(new self::Class::•()) in let final void #t116 = self::Extension|set#field(new self::Class::•(), #t115) in #t115 in let final void #t117 = self::Extension|set#field(#t113, #t114) in #t114;
+  let final self::Class* #t118 = c in #t118 == null ?{self::Class*} null : self::Extension|set#field(#t118, let final self::Class* #t119 = let final self::Class* #t120 = new self::Class::•() in let final void #t121 = self::Extension|set#field(new self::Class::•(), #t120) in #t120 in let final void #t122 = self::Extension|set#field(new self::Class::•(), #t119) in #t119);
+  c = let final self::Class* #t123 = c in #t123 == null ?{self::Class*} null : let final self::Class* #t124 = let final self::Class* #t125 = let final self::Class* #t126 = new self::Class::•() in let final void #t127 = self::Extension|set#field(new self::Class::•(), #t126) in #t126 in let final void #t128 = self::Extension|set#field(new self::Class::•(), #t125) in #t125 in let final void #t129 = self::Extension|set#field(#t123, #t124) in #t124;
+  let final self::Class* #t130 = c in #t130 == null ?{self::Class*} null : self::Extension|set#field(#t130, let final self::Class* #t131 = self::Extension|method(new self::Class::•()) in let final void #t132 = self::Extension|set#field(new self::Class::•(), #t131) in #t131);
+  c = let final self::Class* #t133 = c in #t133 == null ?{self::Class*} null : let final self::Class* #t134 = let final self::Class* #t135 = self::Extension|method(new self::Class::•()) in let final void #t136 = self::Extension|set#field(new self::Class::•(), #t135) in #t135 in let final void #t137 = self::Extension|set#field(#t133, #t134) in #t134;
+  self::throws(() → self::Class* => let final self::Class* #t138 = self::Extension|get#field(new self::Class::•()) in let final void #t139 = self::Extension|set#field(let final self::Class* #t140 = c in #t140 == null ?{self::Class*} null : self::Extension|method(#t140), #t138) in #t138);
+  self::throws(() → self::Class* => c = let final self::Class* #t141 = self::Extension|get#field(new self::Class::•()) in let final void #t142 = self::Extension|set#field(let final self::Class* #t143 = c in #t143 == null ?{self::Class*} null : self::Extension|method(#t143), #t141) in #t141);
+  self::throws(() → self::Class* => let final self::Class* #t144 = let final self::Class* #t145 = new self::Class::•() in let final void #t146 = self::Extension|set#field(new self::Class::•(), #t145) in #t145 in let final void #t147 = self::Extension|set#field(let final self::Class* #t148 = c in #t148 == null ?{self::Class*} null : self::Extension|method(#t148), #t144) in #t144);
+  self::throws(() → self::Class* => c = let final self::Class* #t149 = let final self::Class* #t150 = new self::Class::•() in let final void #t151 = self::Extension|set#field(new self::Class::•(), #t150) in #t150 in let final void #t152 = self::Extension|set#field(let final self::Class* #t153 = c in #t153 == null ?{self::Class*} null : self::Extension|method(#t153), #t149) in #t149);
+  self::throws(() → self::Class* => let final self::Class* #t154 = self::Extension|method(new self::Class::•()) in let final void #t155 = self::Extension|set#field(let final self::Class* #t156 = c in #t156 == null ?{self::Class*} null : self::Extension|method(#t156), #t154) in #t154);
+  self::throws(() → self::Class* => c = let final self::Class* #t157 = self::Extension|method(new self::Class::•()) in let final void #t158 = self::Extension|set#field(let final self::Class* #t159 = c in #t159 == null ?{self::Class*} null : self::Extension|method(#t159), #t157) in #t157);
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t160 = c in #t160 == null ?{self::Class*} null : self::Extension|get#field(#t160))));
+  self::throws(() → self::Class* => let final self::Class* #t161 = new self::Class::•() in let final void #t162 = self::Extension|set#field(self::Extension|method(let final self::Class* #t163 = c in #t163 == null ?{self::Class*} null : self::Extension|get#field(#t163)), #t161) in #t161);
+  self::throws(() → self::Class* => c = let final self::Class* #t164 = new self::Class::•() in let final void #t165 = self::Extension|set#field(self::Extension|method(let final self::Class* #t166 = c in #t166 == null ?{self::Class*} null : self::Extension|get#field(#t166)), #t164) in #t164);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t167 = c in #t167 == null ?{self::Class*} null : self::Extension|get#field(#t167))));
+  let final self::Class* #t168 = c in #t168 == null ?{self::Class*} null : self::Extension|set#field(#t168, self::Extension|get#field(self::Extension|method(new self::Class::•())));
+  c = let final self::Class* #t169 = c in #t169 == null ?{self::Class*} null : let final self::Class* #t170 = self::Extension|get#field(self::Extension|method(new self::Class::•())) in let final void #t171 = self::Extension|set#field(#t169, #t170) in #t170;
+  let final self::Class* #t172 = c in #t172 == null ?{self::Class*} null : self::Extension|set#field(#t172, let final self::Class* #t173 = new self::Class::•() in let final void #t174 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t173) in #t173);
+  c = let final self::Class* #t175 = c in #t175 == null ?{self::Class*} null : let final self::Class* #t176 = let final self::Class* #t177 = new self::Class::•() in let final void #t178 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t177) in #t177 in let final void #t179 = self::Extension|set#field(#t175, #t176) in #t176;
+  let final self::Class* #t180 = c in #t180 == null ?{self::Class*} null : self::Extension|set#field(#t180, self::Extension|method(self::Extension|method(new self::Class::•())));
+  c = let final self::Class* #t181 = c in #t181 == null ?{self::Class*} null : let final self::Class* #t182 = self::Extension|method(self::Extension|method(new self::Class::•())) in let final void #t183 = self::Extension|set#field(#t181, #t182) in #t182;
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t184 = c in #t184 == null ?{self::Class*} null : self::Extension|method(#t184))));
+  self::throws(() → self::Class* => let final self::Class* #t185 = new self::Class::•() in let final void #t186 = self::Extension|set#field(self::Extension|method(let final self::Class* #t187 = c in #t187 == null ?{self::Class*} null : self::Extension|method(#t187)), #t185) in #t185);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t188 = c in #t188 == null ?{self::Class*} null : self::Extension|method(#t188))));
+  let final self::Class* #t189 = let final self::Class* #t190 = c in #t190 == null ?{self::Class*} null : self::Extension|method(#t190) in #t189 == null ?{self::Class*} null : self::Extension|method(#t189);
 }
 static method indexAccess(self::Class* c) → void {
-  self::throws(() → self::Class* => self::Extension|[](let final self::Class* #t191 = c in #t191.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t191), c));
-  self::throws(() → self::Class* => let final self::Class* #t192 = let final self::Class* #t193 = c in #t193.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t193) in let final self::Class* #t194 = c in let final self::Class* #t195 = new self::Class::•() in let final void #t196 = self::Extension|[]=(#t192, #t194, #t195) in #t195);
-  self::throws(() → self::Class* => c = let final self::Class* #t197 = let final self::Class* #t198 = c in #t198.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t198) in let final self::Class* #t199 = c in let final self::Class* #t200 = new self::Class::•() in let final void #t201 = self::Extension|[]=(#t197, #t199, #t200) in #t200);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](let final self::Class* #t202 = c in #t202.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t202), c)));
-  self::throws(() → self::Class* => let final self::Class* #t203 = let final self::Class* #t204 = c in #t204.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t204) in let final self::Class* #t205 = c in let final self::Class* #t206 = self::Extension|+(self::Extension|[](#t203, #t205), 0) in let final void #t207 = self::Extension|[]=(#t203, #t205, #t206) in #t206);
-  self::throws(() → self::Class* => c = let final self::Class* #t208 = let final self::Class* #t209 = c in #t209.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t209) in let final self::Class* #t210 = c in let final self::Class* #t211 = self::Extension|+(self::Extension|[](#t208, #t210), 0) in let final void #t212 = self::Extension|[]=(#t208, #t210, #t211) in #t211);
-  self::throws(() → self::Class* => let final self::Class* #t213 = let final self::Class* #t214 = c in #t214.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t214) in let final self::Class* #t215 = c in let final self::Class* #t216 = self::Extension|[](#t213, #t215) in let final void #t217 = self::Extension|[]=(#t213, #t215, self::Extension|+(#t216, 1)) in #t216);
-  self::throws(() → self::Class* => c = let final self::Class* #t218 = let final self::Class* #t219 = c in #t219.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t219) in let final self::Class* #t220 = c in let final self::Class* #t221 = self::Extension|[](#t218, #t220) in let final void #t222 = self::Extension|[]=(#t218, #t220, self::Extension|+(#t221, 1)) in #t221);
-  self::throws(() → self::Class* => let final self::Class* #t223 = let final self::Class* #t224 = c in #t224.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t224) in let final self::Class* #t225 = c in let final self::Class* #t226 = self::Extension|+(self::Extension|[](#t223, #t225), 1) in let final void #t227 = self::Extension|[]=(#t223, #t225, #t226) in #t226);
-  self::throws(() → self::Class* => c = let final self::Class* #t228 = let final self::Class* #t229 = c in #t229.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t229) in let final self::Class* #t230 = c in let final self::Class* #t231 = self::Extension|+(self::Extension|[](#t228, #t230), 1) in let final void #t232 = self::Extension|[]=(#t228, #t230, #t231) in #t231);
-  self::throws(() → self::Class* => self::Extension|[](self::Extension|[](let final self::Class* #t233 = c in #t233.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t233), c), c));
-  self::throws(() → self::Class* => let final self::Class* #t234 = self::Extension|[](let final self::Class* #t235 = c in #t235.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t235), c) in let final self::Class* #t236 = c in let final self::Class* #t237 = new self::Class::•() in let final void #t238 = self::Extension|[]=(#t234, #t236, #t237) in #t237);
-  self::throws(() → self::Class* => c = let final self::Class* #t239 = self::Extension|[](let final self::Class* #t240 = c in #t240.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t240), c) in let final self::Class* #t241 = c in let final self::Class* #t242 = new self::Class::•() in let final void #t243 = self::Extension|[]=(#t239, #t241, #t242) in #t242);
-  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](self::Extension|[](let final self::Class* #t244 = c in #t244.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t244), c), c)));
-  self::throws(() → self::Class* => let final self::Class* #t245 = self::Extension|[](let final self::Class* #t246 = c in #t246.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t246), c) in let final self::Class* #t247 = c in let final self::Class* #t248 = self::Extension|+(self::Extension|[](#t245, #t247), 0) in let final void #t249 = self::Extension|[]=(#t245, #t247, #t248) in #t248);
-  self::throws(() → self::Class* => c = let final self::Class* #t250 = self::Extension|[](let final self::Class* #t251 = c in #t251.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t251), c) in let final self::Class* #t252 = c in let final self::Class* #t253 = self::Extension|+(self::Extension|[](#t250, #t252), 0) in let final void #t254 = self::Extension|[]=(#t250, #t252, #t253) in #t253);
-  self::throws(() → self::Class* => let final self::Class* #t255 = self::Extension|[](let final self::Class* #t256 = c in #t256.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t256), c) in let final self::Class* #t257 = c in let final self::Class* #t258 = self::Extension|[](#t255, #t257) in let final void #t259 = self::Extension|[]=(#t255, #t257, self::Extension|+(#t258, 1)) in #t258);
-  self::throws(() → self::Class* => c = let final self::Class* #t260 = self::Extension|[](let final self::Class* #t261 = c in #t261.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t261), c) in let final self::Class* #t262 = c in let final self::Class* #t263 = self::Extension|[](#t260, #t262) in let final void #t264 = self::Extension|[]=(#t260, #t262, self::Extension|+(#t263, 1)) in #t263);
-  self::throws(() → self::Class* => let final self::Class* #t265 = self::Extension|[](let final self::Class* #t266 = c in #t266.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t266), c) in let final self::Class* #t267 = c in let final self::Class* #t268 = self::Extension|+(self::Extension|[](#t265, #t267), 1) in let final void #t269 = self::Extension|[]=(#t265, #t267, #t268) in #t268);
-  self::throws(() → self::Class* => c = let final self::Class* #t270 = self::Extension|[](let final self::Class* #t271 = c in #t271.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t271), c) in let final self::Class* #t272 = c in let final self::Class* #t273 = self::Extension|+(self::Extension|[](#t270, #t272), 1) in let final void #t274 = self::Extension|[]=(#t270, #t272, #t273) in #t273);
+  self::throws(() → self::Class* => self::Extension|[](let final self::Class* #t191 = c in #t191 == null ?{self::Class*} null : self::Extension|get#field(#t191), c));
+  self::throws(() → self::Class* => let final self::Class* #t192 = let final self::Class* #t193 = c in #t193 == null ?{self::Class*} null : self::Extension|get#field(#t193) in let final self::Class* #t194 = c in let final self::Class* #t195 = new self::Class::•() in let final void #t196 = self::Extension|[]=(#t192, #t194, #t195) in #t195);
+  self::throws(() → self::Class* => c = let final self::Class* #t197 = let final self::Class* #t198 = c in #t198 == null ?{self::Class*} null : self::Extension|get#field(#t198) in let final self::Class* #t199 = c in let final self::Class* #t200 = new self::Class::•() in let final void #t201 = self::Extension|[]=(#t197, #t199, #t200) in #t200);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](let final self::Class* #t202 = c in #t202 == null ?{self::Class*} null : self::Extension|get#field(#t202), c)));
+  self::throws(() → self::Class* => let final self::Class* #t203 = let final self::Class* #t204 = c in #t204 == null ?{self::Class*} null : self::Extension|get#field(#t204) in let final self::Class* #t205 = c in let final self::Class* #t206 = self::Extension|+(self::Extension|[](#t203, #t205), 0) in let final void #t207 = self::Extension|[]=(#t203, #t205, #t206) in #t206);
+  self::throws(() → self::Class* => c = let final self::Class* #t208 = let final self::Class* #t209 = c in #t209 == null ?{self::Class*} null : self::Extension|get#field(#t209) in let final self::Class* #t210 = c in let final self::Class* #t211 = self::Extension|+(self::Extension|[](#t208, #t210), 0) in let final void #t212 = self::Extension|[]=(#t208, #t210, #t211) in #t211);
+  self::throws(() → self::Class* => let final self::Class* #t213 = let final self::Class* #t214 = c in #t214 == null ?{self::Class*} null : self::Extension|get#field(#t214) in let final self::Class* #t215 = c in let final self::Class* #t216 = self::Extension|[](#t213, #t215) in let final void #t217 = self::Extension|[]=(#t213, #t215, self::Extension|+(#t216, 1)) in #t216);
+  self::throws(() → self::Class* => c = let final self::Class* #t218 = let final self::Class* #t219 = c in #t219 == null ?{self::Class*} null : self::Extension|get#field(#t219) in let final self::Class* #t220 = c in let final self::Class* #t221 = self::Extension|[](#t218, #t220) in let final void #t222 = self::Extension|[]=(#t218, #t220, self::Extension|+(#t221, 1)) in #t221);
+  self::throws(() → self::Class* => let final self::Class* #t223 = let final self::Class* #t224 = c in #t224 == null ?{self::Class*} null : self::Extension|get#field(#t224) in let final self::Class* #t225 = c in let final self::Class* #t226 = self::Extension|+(self::Extension|[](#t223, #t225), 1) in let final void #t227 = self::Extension|[]=(#t223, #t225, #t226) in #t226);
+  self::throws(() → self::Class* => c = let final self::Class* #t228 = let final self::Class* #t229 = c in #t229 == null ?{self::Class*} null : self::Extension|get#field(#t229) in let final self::Class* #t230 = c in let final self::Class* #t231 = self::Extension|+(self::Extension|[](#t228, #t230), 1) in let final void #t232 = self::Extension|[]=(#t228, #t230, #t231) in #t231);
+  self::throws(() → self::Class* => self::Extension|[](self::Extension|[](let final self::Class* #t233 = c in #t233 == null ?{self::Class*} null : self::Extension|get#field(#t233), c), c));
+  self::throws(() → self::Class* => let final self::Class* #t234 = self::Extension|[](let final self::Class* #t235 = c in #t235 == null ?{self::Class*} null : self::Extension|get#field(#t235), c) in let final self::Class* #t236 = c in let final self::Class* #t237 = new self::Class::•() in let final void #t238 = self::Extension|[]=(#t234, #t236, #t237) in #t237);
+  self::throws(() → self::Class* => c = let final self::Class* #t239 = self::Extension|[](let final self::Class* #t240 = c in #t240 == null ?{self::Class*} null : self::Extension|get#field(#t240), c) in let final self::Class* #t241 = c in let final self::Class* #t242 = new self::Class::•() in let final void #t243 = self::Extension|[]=(#t239, #t241, #t242) in #t242);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](self::Extension|[](let final self::Class* #t244 = c in #t244 == null ?{self::Class*} null : self::Extension|get#field(#t244), c), c)));
+  self::throws(() → self::Class* => let final self::Class* #t245 = self::Extension|[](let final self::Class* #t246 = c in #t246 == null ?{self::Class*} null : self::Extension|get#field(#t246), c) in let final self::Class* #t247 = c in let final self::Class* #t248 = self::Extension|+(self::Extension|[](#t245, #t247), 0) in let final void #t249 = self::Extension|[]=(#t245, #t247, #t248) in #t248);
+  self::throws(() → self::Class* => c = let final self::Class* #t250 = self::Extension|[](let final self::Class* #t251 = c in #t251 == null ?{self::Class*} null : self::Extension|get#field(#t251), c) in let final self::Class* #t252 = c in let final self::Class* #t253 = self::Extension|+(self::Extension|[](#t250, #t252), 0) in let final void #t254 = self::Extension|[]=(#t250, #t252, #t253) in #t253);
+  self::throws(() → self::Class* => let final self::Class* #t255 = self::Extension|[](let final self::Class* #t256 = c in #t256 == null ?{self::Class*} null : self::Extension|get#field(#t256), c) in let final self::Class* #t257 = c in let final self::Class* #t258 = self::Extension|[](#t255, #t257) in let final void #t259 = self::Extension|[]=(#t255, #t257, self::Extension|+(#t258, 1)) in #t258);
+  self::throws(() → self::Class* => c = let final self::Class* #t260 = self::Extension|[](let final self::Class* #t261 = c in #t261 == null ?{self::Class*} null : self::Extension|get#field(#t261), c) in let final self::Class* #t262 = c in let final self::Class* #t263 = self::Extension|[](#t260, #t262) in let final void #t264 = self::Extension|[]=(#t260, #t262, self::Extension|+(#t263, 1)) in #t263);
+  self::throws(() → self::Class* => let final self::Class* #t265 = self::Extension|[](let final self::Class* #t266 = c in #t266 == null ?{self::Class*} null : self::Extension|get#field(#t266), c) in let final self::Class* #t267 = c in let final self::Class* #t268 = self::Extension|+(self::Extension|[](#t265, #t267), 1) in let final void #t269 = self::Extension|[]=(#t265, #t267, #t268) in #t268);
+  self::throws(() → self::Class* => c = let final self::Class* #t270 = self::Extension|[](let final self::Class* #t271 = c in #t271 == null ?{self::Class*} null : self::Extension|get#field(#t271), c) in let final self::Class* #t272 = c in let final self::Class* #t273 = self::Extension|+(self::Extension|[](#t270, #t272), 1) in let final void #t274 = self::Extension|[]=(#t270, #t272, #t273) in #t273);
 }
 static method operatorAccess(self::Class* c) → void {
-  self::throws(() → self::Class* => self::Extension|+(let final self::Class* #t275 = c in #t275.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t275), 0));
-  self::throws(() → self::Class* => self::Extension|unary-(let final self::Class* #t276 = c in #t276.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t276)));
-  let final self::Class* #t277 = c in #t277.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t277, self::Extension|+(self::Extension|get#field(#t277), 0));
-  c = let final self::Class* #t278 = c in #t278.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t279 = self::Extension|+(self::Extension|get#field(#t278), 0) in let final void #t280 = self::Extension|set#field(#t278, #t279) in #t279;
-  self::throws(() → self::Class* => let final self::Class* #t281 = let final self::Class* #t282 = c in #t282.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t282) in let final self::Class* #t283 = self::Extension|+(self::Extension|get#field(#t281), 0) in let final void #t284 = self::Extension|set#field(#t281, #t283) in #t283);
-  self::throws(() → self::Class* => c = let final self::Class* #t285 = let final self::Class* #t286 = c in #t286.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t286) in let final self::Class* #t287 = self::Extension|+(self::Extension|get#field(#t285), 0) in let final void #t288 = self::Extension|set#field(#t285, #t287) in #t287);
-  let final self::Class* #t289 = c in #t289.{self::Class::==}(null) ?{self::Class*} null : self::Extension|set#field(#t289, self::Extension|+(self::Extension|get#field(#t289), 1));
-  c = let final self::Class* #t290 = c in #t290.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t291 = self::Extension|get#field(#t290) in let final void #t292 = self::Extension|set#field(#t290, self::Extension|+(#t291, 1)) in #t291;
-  let final self::Class* #t293 = c in #t293.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t294 = self::Extension|+(self::Extension|get#field(#t293), 1) in let final void #t295 = self::Extension|set#field(#t293, #t294) in #t294;
-  c = let final self::Class* #t296 = c in #t296.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t297 = self::Extension|+(self::Extension|get#field(#t296), 1) in let final void #t298 = self::Extension|set#field(#t296, #t297) in #t297;
+  self::throws(() → self::Class* => self::Extension|+(let final self::Class* #t275 = c in #t275 == null ?{self::Class*} null : self::Extension|get#field(#t275), 0));
+  self::throws(() → self::Class* => self::Extension|unary-(let final self::Class* #t276 = c in #t276 == null ?{self::Class*} null : self::Extension|get#field(#t276)));
+  let final self::Class* #t277 = c in #t277 == null ?{self::Class*} null : self::Extension|set#field(#t277, self::Extension|+(self::Extension|get#field(#t277), 0));
+  c = let final self::Class* #t278 = c in #t278 == null ?{self::Class*} null : let final self::Class* #t279 = self::Extension|+(self::Extension|get#field(#t278), 0) in let final void #t280 = self::Extension|set#field(#t278, #t279) in #t279;
+  self::throws(() → self::Class* => let final self::Class* #t281 = let final self::Class* #t282 = c in #t282 == null ?{self::Class*} null : self::Extension|get#field(#t282) in let final self::Class* #t283 = self::Extension|+(self::Extension|get#field(#t281), 0) in let final void #t284 = self::Extension|set#field(#t281, #t283) in #t283);
+  self::throws(() → self::Class* => c = let final self::Class* #t285 = let final self::Class* #t286 = c in #t286 == null ?{self::Class*} null : self::Extension|get#field(#t286) in let final self::Class* #t287 = self::Extension|+(self::Extension|get#field(#t285), 0) in let final void #t288 = self::Extension|set#field(#t285, #t287) in #t287);
+  let final self::Class* #t289 = c in #t289 == null ?{self::Class*} null : self::Extension|set#field(#t289, self::Extension|+(self::Extension|get#field(#t289), 1));
+  c = let final self::Class* #t290 = c in #t290 == null ?{self::Class*} null : let final self::Class* #t291 = self::Extension|get#field(#t290) in let final void #t292 = self::Extension|set#field(#t290, self::Extension|+(#t291, 1)) in #t291;
+  let final self::Class* #t293 = c in #t293 == null ?{self::Class*} null : let final self::Class* #t294 = self::Extension|+(self::Extension|get#field(#t293), 1) in let final void #t295 = self::Extension|set#field(#t293, #t294) in #t294;
+  c = let final self::Class* #t296 = c in #t296 == null ?{self::Class*} null : let final self::Class* #t297 = self::Extension|+(self::Extension|get#field(#t296), 1) in let final void #t298 = self::Extension|set#field(#t296, #t297) in #t297;
 }
 static method ifNull(self::Class* c) → void {
-  let final self::Class* #t299 = c in #t299.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t299).{self::Class::==}(null) ?{self::Class*} self::Extension|set#field(#t299, c) : null;
-  c = let final self::Class* #t300 = c in #t300.{self::Class::==}(null) ?{self::Class*} null : let final self::Class* #t301 = self::Extension|get#field(#t300) in #t301.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t302 = c in let final void #t303 = self::Extension|set#field(#t300, #t302) in #t302 : #t301;
-  self::throws(() → self::Class* => let final self::Class* #t304 = let final self::Class* #t305 = c in #t305.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t305) in let final self::Class* #t306 = self::Extension|get#field(#t304) in #t306.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t307 = c in let final void #t308 = self::Extension|set#field(#t304, #t307) in #t307 : #t306);
-  self::throws(() → self::Class* => c = let final self::Class* #t309 = let final self::Class* #t310 = c in #t310.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t310) in let final self::Class* #t311 = self::Extension|get#field(#t309) in #t311.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t312 = c in let final void #t313 = self::Extension|set#field(#t309, #t312) in #t312 : #t311);
-  self::throws(() → self::Class* => let final self::Class* #t314 = let final self::Class* #t315 = c in #t315.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t315) in let final self::Class* #t316 = c in let final self::Class* #t317 = self::Extension|[](#t314, #t316) in #t317.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t318 = c in let final void #t319 = self::Extension|[]=(#t314, #t316, #t318) in #t318 : #t317);
-  self::throws(() → self::Class* => c = let final self::Class* #t320 = let final self::Class* #t321 = c in #t321.{self::Class::==}(null) ?{self::Class*} null : self::Extension|get#field(#t321) in let final self::Class* #t322 = c in let final self::Class* #t323 = self::Extension|[](#t320, #t322) in #t323.{self::Class::==}(null) ?{self::Class*} let final self::Class* #t324 = c in let final void #t325 = self::Extension|[]=(#t320, #t322, #t324) in #t324 : #t323);
+  let final self::Class* #t299 = c in #t299 == null ?{self::Class*} null : self::Extension|get#field(#t299) == null ?{self::Class*} self::Extension|set#field(#t299, c) : null;
+  c = let final self::Class* #t300 = c in #t300 == null ?{self::Class*} null : let final self::Class* #t301 = self::Extension|get#field(#t300) in #t301 == null ?{self::Class*} let final self::Class* #t302 = c in let final void #t303 = self::Extension|set#field(#t300, #t302) in #t302 : #t301;
+  self::throws(() → self::Class* => let final self::Class* #t304 = let final self::Class* #t305 = c in #t305 == null ?{self::Class*} null : self::Extension|get#field(#t305) in let final self::Class* #t306 = self::Extension|get#field(#t304) in #t306 == null ?{self::Class*} let final self::Class* #t307 = c in let final void #t308 = self::Extension|set#field(#t304, #t307) in #t307 : #t306);
+  self::throws(() → self::Class* => c = let final self::Class* #t309 = let final self::Class* #t310 = c in #t310 == null ?{self::Class*} null : self::Extension|get#field(#t310) in let final self::Class* #t311 = self::Extension|get#field(#t309) in #t311 == null ?{self::Class*} let final self::Class* #t312 = c in let final void #t313 = self::Extension|set#field(#t309, #t312) in #t312 : #t311);
+  self::throws(() → self::Class* => let final self::Class* #t314 = let final self::Class* #t315 = c in #t315 == null ?{self::Class*} null : self::Extension|get#field(#t315) in let final self::Class* #t316 = c in let final self::Class* #t317 = self::Extension|[](#t314, #t316) in #t317 == null ?{self::Class*} let final self::Class* #t318 = c in let final void #t319 = self::Extension|[]=(#t314, #t316, #t318) in #t318 : #t317);
+  self::throws(() → self::Class* => c = let final self::Class* #t320 = let final self::Class* #t321 = c in #t321 == null ?{self::Class*} null : self::Extension|get#field(#t321) in let final self::Class* #t322 = c in let final self::Class* #t323 = self::Extension|[](#t320, #t322) in #t323 == null ?{self::Class*} let final self::Class* #t324 = c in let final void #t325 = self::Extension|[]=(#t320, #t322, #t324) in #t324 : #t323);
 }
 static method throws(() →* void f) → void {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic _) {
     return;
diff --git a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.expect
index 16c5070..9262574 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.expect
@@ -79,7 +79,7 @@
     : super core::Object::•()
     ;
   method method(core::int? i) → core::int
-    return let final core::int? #t1 = i in #t1.{core::num::==}(null) ?{core::int} 0 : #t1{core::int};
+    return let final core::int? #t1 = i in #t1 == null ?{core::int} 0 : #t1{core::int};
   method genericMethod1<T extends core::Object? = dynamic>(nsm::A::genericMethod1::T% t) → nsm::A::genericMethod1::T%
     return t;
   method genericMethod2<T extends core::Object?>(nsm::A::genericMethod2::T% t) → nsm::A::genericMethod2::T%
diff --git a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.transformed.expect
index 16c5070..9262574 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.transformed.expect
@@ -79,7 +79,7 @@
     : super core::Object::•()
     ;
   method method(core::int? i) → core::int
-    return let final core::int? #t1 = i in #t1.{core::num::==}(null) ?{core::int} 0 : #t1{core::int};
+    return let final core::int? #t1 = i in #t1 == null ?{core::int} 0 : #t1{core::int};
   method genericMethod1<T extends core::Object? = dynamic>(nsm::A::genericMethod1::T% t) → nsm::A::genericMethod1::T%
     return t;
   method genericMethod2<T extends core::Object?>(nsm::A::genericMethod2::T% t) → nsm::A::genericMethod2::T%
diff --git a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.expect
index da4369b..f4ebaa4 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.expect
@@ -15,7 +15,7 @@
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.transformed.expect
index da4369b..f4ebaa4 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.expect
index 3e54fc2..6bba169 100644
--- a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.expect
@@ -33,10 +33,10 @@
   late core::int local = 42;
   core::String? s = null;
   dynamic c;
-  let final dynamic #t1 = c in #t1.{core::Object::==}(null) ?{dynamic} null : block {
-    #t1.f;
+  let final dynamic #t1 = c in #t1 == null ?{dynamic} null : block {
+    #t1{dynamic}.f;
   } =>#t1;
-  let final dynamic #t2 = c in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.[](0);
+  let final dynamic #t2 = c in #t2 == null ?{dynamic} null : #t2{dynamic}.[](0);
 }
 
 library;
@@ -172,8 +172,8 @@
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:36:6: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   c?..f;
-     ^".f;
-  let final dynamic #t3 = c in #t3.{core::Object::==}(null) ?{dynamic} null : #t3.[](0);
+     ^"{dynamic}.f;
+  let final dynamic #t3 = c in #t3 == null ?{dynamic} null : #t3{dynamic}.[](0);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.transformed.expect
index 3924be2..59b31ed 100644
--- a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.transformed.expect
@@ -33,10 +33,10 @@
   late core::int local = 42;
   core::String? s = null;
   dynamic c;
-  let final dynamic #t1 = c in #t1.{core::Object::==}(null) ?{dynamic} null : block {
-    #t1.f;
+  let final dynamic #t1 = c in #t1 == null ?{dynamic} null : block {
+    #t1{dynamic}.f;
   } =>#t1;
-  let final dynamic #t2 = c in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.[](0);
+  let final dynamic #t2 = c in #t2 == null ?{dynamic} null : #t2{dynamic}.[](0);
 }
 
 library;
@@ -172,8 +172,8 @@
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:36:6: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
   c?..f;
-     ^".f;
-  let final dynamic #t3 = c in #t3.{core::Object::==}(null) ?{dynamic} null : #t3.[](0);
+     ^"{dynamic}.f;
+  let final dynamic #t3 = c in #t3 == null ?{dynamic} null : #t3{dynamic}.[](0);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd_mixed/regress_null_aware.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/regress_null_aware.dart.weak.expect
index 9650648..c4d17c9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/regress_null_aware.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/regress_null_aware.dart.weak.expect
@@ -9,11 +9,11 @@
     : super core::Object::•()
     ;
   method method(core::String* node, core::Set<core::String*>* set) → core::List<core::String*>*
-    return set.{core::Set::add}(node) ?{core::List<core::String*>*} block {
+    return set.{core::Set::add}(node){(core::String*) →* core::bool*} ?{core::List<core::String*>*} block {
       final core::List<core::String*>* #t1 = <core::String*>[node];
-      final core::Iterable<core::String*>* #t2 = let final core::Iterable<core::String*>* #t3 = let final core::Set<core::String*>* #t4 = this.{self::Class::map}.{core::Map::[]}(node) in #t4.{core::Object::==}(null) ?{core::Iterable<core::String*>*} null : #t4.{core::Iterable::expand}<core::String*>((core::String* node) → core::List<core::String*>* => this.{self::Class::method}(node, set)) in #t3.{core::Object::==}(null) ?{core::List<core::String*>*} null : #t3.{core::Iterable::toList}();
-      if(!#t2.{core::Object::==}(null))
-        #t1.{core::List::addAll}{Invariant}(#t2);
+      final core::Iterable<core::String*>* #t2 = let final core::Iterable<core::String*>* #t3 = let final core::Set<core::String*>* #t4 = this.{self::Class::map}{core::Map<core::String*, core::Set<core::String*>*>*}.{core::Map::[]}(node){(core::Object*) →* core::Set<core::String*>*} in #t4 == null ?{core::Iterable<core::String*>*} null : #t4.{core::Iterable::expand}<core::String*>((core::String* node) → core::List<core::String*>* => this.{self::Class::method}(node, set){(core::String*, core::Set<core::String*>*) →* core::List<core::String*>*}){((core::String*) →* core::Iterable<core::String*>*) →* core::Iterable<core::String*>*} in #t3 == null ?{core::List<core::String*>*} null : #t3.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+      if(!(#t2 == null))
+        #t1.{core::List::addAll}(#t2){(core::Iterable<core::String*>*) →* void};
     } =>#t1 : <core::String*>[];
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -30,5 +30,5 @@
   if(false)
     new self::Class::•().{self::Class::method}("", block {
       final core::Set<core::String*>* #t5 = col::LinkedHashSet::•<core::String*>();
-    } =>#t5);
+    } =>#t5){(core::String*, core::Set<core::String*>*) →* core::List<core::String*>*};
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/regress_null_aware.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/regress_null_aware.dart.weak.transformed.expect
index a873a8e..eb3b7ce 100644
--- a/pkg/front_end/testcases/nnbd_mixed/regress_null_aware.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/regress_null_aware.dart.weak.transformed.expect
@@ -9,11 +9,11 @@
     : super core::Object::•()
     ;
   method method(core::String* node, core::Set<core::String*>* set) → core::List<core::String*>*
-    return set.{core::Set::add}(node) ?{core::List<core::String*>*} block {
+    return set.{core::Set::add}(node){(core::String*) →* core::bool*} ?{core::List<core::String*>*} block {
       final core::List<core::String*>* #t1 = core::_GrowableList::_literal1<core::String*>(node);
-      final core::Iterable<core::String*>* #t2 = let final core::Iterable<core::String*>* #t3 = let final core::Set<core::String*>* #t4 = this.{self::Class::map}.{core::Map::[]}(node) in #t4.{core::Object::==}(null) ?{core::Iterable<core::String*>*} null : #t4.{core::Iterable::expand}<core::String*>((core::String* node) → core::List<core::String*>* => this.{self::Class::method}(node, set)) in #t3.{core::Object::==}(null) ?{core::List<core::String*>*} null : #t3.{core::Iterable::toList}();
-      if(!#t2.{core::Object::==}(null))
-        #t1.{core::List::addAll}{Invariant}(#t2);
+      final core::Iterable<core::String*>* #t2 = let final core::Iterable<core::String*>* #t3 = let final core::Set<core::String*>* #t4 = this.{self::Class::map}{core::Map<core::String*, core::Set<core::String*>*>*}.{core::Map::[]}(node){(core::Object*) →* core::Set<core::String*>*} in #t4 == null ?{core::Iterable<core::String*>*} null : #t4.{core::Iterable::expand}<core::String*>((core::String* node) → core::List<core::String*>* => this.{self::Class::method}(node, set){(core::String*, core::Set<core::String*>*) →* core::List<core::String*>*}){((core::String*) →* core::Iterable<core::String*>*) →* core::Iterable<core::String*>*} in #t3 == null ?{core::List<core::String*>*} null : #t3.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+      if(!(#t2 == null))
+        #t1.{core::List::addAll}(#t2){(core::Iterable<core::String*>*) →* void};
     } =>#t1 : core::_GrowableList::•<core::String*>(0);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -30,5 +30,5 @@
   if(false)
     new self::Class::•().{self::Class::method}("", block {
       final core::Set<core::String*>* #t5 = new col::_CompactLinkedHashSet::•<core::String*>();
-    } =>#t5);
+    } =>#t5){(core::String*, core::Set<core::String*>*) →* core::List<core::String*>*};
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.expect
index eea3841..90a553a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.expect
@@ -39,9 +39,9 @@
   abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
 }
 static method main() → dynamic {
-  new self::A::•().{self::A::test_default}(i: 1);
-  new self::A::•().{self::A::test_nondefault}(i: 1);
-  new self::A::•().{self::A::test_legacy}(i: 1);
+  new self::A::•().{self::A::test_default}(i: 1){({required i: core::int?}) → void};
+  new self::A::•().{self::A::test_nondefault}(i: 1){({required i: core::int?}) → void};
+  new self::A::•().{self::A::test_legacy}(i: 1){({required i: core::int?}) → void};
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.transformed.expect
index eea3841..90a553a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.transformed.expect
@@ -39,9 +39,9 @@
   abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
 }
 static method main() → dynamic {
-  new self::A::•().{self::A::test_default}(i: 1);
-  new self::A::•().{self::A::test_nondefault}(i: 1);
-  new self::A::•().{self::A::test_legacy}(i: 1);
+  new self::A::•().{self::A::test_default}(i: 1){({required i: core::int?}) → void};
+  new self::A::•().{self::A::test_nondefault}(i: 1){({required i: core::int?}) → void};
+  new self::A::•().{self::A::test_legacy}(i: 1){({required i: core::int?}) → void};
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.expect
index cd3de48..184f291 100644
--- a/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.expect
@@ -23,13 +23,13 @@
 }
 static method main() → dynamic {
   self::C<core::num, core::num, core::num> c = new self::C::•<core::num, core::num, core::num>();
-  c.{self::C::promoteNullable}(null);
-  c.{self::C::promoteNullable}(0);
-  c.{self::C::nullableAsUndetermined}(null);
-  c.{self::C::nullableAsUndetermined}(0);
+  c.{self::C::promoteNullable}(null){(core::num?) → void};
+  c.{self::C::promoteNullable}(0){(core::num?) → void};
+  c.{self::C::nullableAsUndetermined}(null){(core::num?) → void};
+  c.{self::C::nullableAsUndetermined}(0){(core::num?) → void};
   typ::D<core::num> d = new typ::D::•<core::num>();
-  d.{typ::D::promoteLegacy}(null);
-  d.{typ::D::promoteLegacy}(0);
+  d.{typ::D::promoteLegacy}(null){(core::num*) →* void};
+  d.{typ::D::promoteLegacy}(0){(core::num*) →* void};
 }
 
 library;
@@ -42,7 +42,7 @@
     ;
   method promoteLegacy(generic-covariant-impl typ::D::T* t) → void {
     if(t is core::int*) {
-      let final typ::D::T* & core::int* /* '*' & '*' = '*' */ #t1 = t{typ::D::T* & core::int* /* '*' & '*' = '*' */} in #t1.{core::num::==}(null) ?{core::bool*} null : #t1.{core::int::isEven};
+      let final typ::D::T* & core::int* /* '*' & '*' = '*' */ #t1 = t{typ::D::T* & core::int* /* '*' & '*' = '*' */} in #t1 == null ?{core::bool*} null : #t1.{core::int::isEven}{core::bool*};
     }
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.transformed.expect
index cd3de48..184f291 100644
--- a/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.transformed.expect
@@ -23,13 +23,13 @@
 }
 static method main() → dynamic {
   self::C<core::num, core::num, core::num> c = new self::C::•<core::num, core::num, core::num>();
-  c.{self::C::promoteNullable}(null);
-  c.{self::C::promoteNullable}(0);
-  c.{self::C::nullableAsUndetermined}(null);
-  c.{self::C::nullableAsUndetermined}(0);
+  c.{self::C::promoteNullable}(null){(core::num?) → void};
+  c.{self::C::promoteNullable}(0){(core::num?) → void};
+  c.{self::C::nullableAsUndetermined}(null){(core::num?) → void};
+  c.{self::C::nullableAsUndetermined}(0){(core::num?) → void};
   typ::D<core::num> d = new typ::D::•<core::num>();
-  d.{typ::D::promoteLegacy}(null);
-  d.{typ::D::promoteLegacy}(0);
+  d.{typ::D::promoteLegacy}(null){(core::num*) →* void};
+  d.{typ::D::promoteLegacy}(0){(core::num*) →* void};
 }
 
 library;
@@ -42,7 +42,7 @@
     ;
   method promoteLegacy(generic-covariant-impl typ::D::T* t) → void {
     if(t is core::int*) {
-      let final typ::D::T* & core::int* /* '*' & '*' = '*' */ #t1 = t{typ::D::T* & core::int* /* '*' & '*' = '*' */} in #t1.{core::num::==}(null) ?{core::bool*} null : #t1.{core::int::isEven};
+      let final typ::D::T* & core::int* /* '*' & '*' = '*' */ #t1 = t{typ::D::T* & core::int* /* '*' & '*' = '*' */} in #t1 == null ?{core::bool*} null : #t1.{core::int::isEven}{core::bool*};
     }
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
index 0b77ed6..b130d3b 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
@@ -77,9 +77,9 @@
     : super self::OptOutSuperClass4::•()
     ;
   method method(core::int* i) → dynamic
-    return let final core::int* #t1 = i in let final core::int* #t2 = super.{self::OptOutSuperClass4::[]}(#t1) in #t2.{core::num::==}(null) ?{core::int*} let final core::int* #t3 = 42 in let final void #t4 = super.{self::OptOutSuperClass4::[]=}(#t1, #t3) in #t3 : #t2;
+    return let final core::int* #t1 = i in let final core::int* #t2 = super.{self::OptOutSuperClass4::[]}(#t1) in #t2 == null ?{core::int*} let final core::int* #t3 = 42 in let final void #t4 = super.{self::OptOutSuperClass4::[]=}(#t1, #t3) in #t3 : #t2;
   method methodForEffect(core::int* i) → dynamic {
-    let final core::int* #t5 = i in super.{self::OptOutSuperClass4::[]}(#t5).{core::num::==}(null) ?{core::int*} super.{self::OptOutSuperClass4::[]=}(#t5, 42) : null;
+    let final core::int* #t5 = i in super.{self::OptOutSuperClass4::[]}(#t5) == null ?{core::int*} super.{self::OptOutSuperClass4::[]=}(#t5, 42) : null;
   }
 }
 class OptOutClass5 extends core::Object {
@@ -103,55 +103,55 @@
   operator []= = self::OptOutExtension|[]=;
 }
 static method isNullOptOut1(core::int* i) → dynamic
-  return i.{core::num::==}(null);
+  return i == null;
 static method isNotNullOptOut1(core::int* i) → dynamic
-  return !i.{core::num::==}(null);
+  return !(i == null);
 static method isNullOptOut2(core::int* i) → dynamic
-  return null.{core::Object::==}(i);
+  return i == null;
 static method isNotNullOptOut2(core::int* i) → dynamic
-  return !null.{core::Object::==}(i);
+  return !(i == null);
 static method ifNullOptOut(core::int* i) → dynamic
-  return let final core::int* #t6 = i in #t6.{core::num::==}(null) ?{core::int*} 42 : #t6;
+  return let final core::int* #t6 = i in #t6 == null ?{core::int*} 42 : #t6;
 static method OptOutExtension|[](lowered final self::OptOutClass1* #this, core::int* index) → core::int*
   return index;
 static method OptOutExtension|[]=(lowered final self::OptOutClass1* #this, core::int* index, core::int* value) → void {}
 static method extensionIfNullOptOut1(core::int* i) → dynamic
-  return let final self::OptOutClass1* #t7 = new self::OptOutClass1::•() in let final core::int* #t8 = i in let final core::int* #t9 = self::OptOutExtension|[](#t7, #t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 42 in let final void #t11 = self::OptOutExtension|[]=(#t7, #t8, #t10) in #t10 : #t9;
+  return let final self::OptOutClass1* #t7 = new self::OptOutClass1::•() in let final core::int* #t8 = i in let final core::int* #t9 = self::OptOutExtension|[](#t7, #t8) in #t9 == null ?{core::int*} let final core::int* #t10 = 42 in let final void #t11 = self::OptOutExtension|[]=(#t7, #t8, #t10) in #t10 : #t9;
 static method extensionIfNullOptOut1ForEffect(core::int* i) → dynamic {
-  let final self::OptOutClass1* #t12 = new self::OptOutClass1::•() in let final core::int* #t13 = i in self::OptOutExtension|[](#t12, #t13).{core::num::==}(null) ?{core::int*} self::OptOutExtension|[]=(#t12, #t13, 42) : null;
+  let final self::OptOutClass1* #t12 = new self::OptOutClass1::•() in let final core::int* #t13 = i in self::OptOutExtension|[](#t12, #t13) == null ?{core::int*} self::OptOutExtension|[]=(#t12, #t13, 42) : null;
 }
 static method extensionIfNullOptOut2(core::int* i) → dynamic
-  return let final self::OptOutClass1* #t14 = new self::OptOutClass1::•() in let final core::int* #t15 = i in let final core::int* #t16 = self::OptOutExtension|[](#t14, #t15) in #t16.{core::num::==}(null) ?{core::int*} let final core::int* #t17 = 42 in let final void #t18 = self::OptOutExtension|[]=(#t14, #t15, #t17) in #t17 : #t16;
+  return let final self::OptOutClass1* #t14 = new self::OptOutClass1::•() in let final core::int* #t15 = i in let final core::int* #t16 = self::OptOutExtension|[](#t14, #t15) in #t16 == null ?{core::int*} let final core::int* #t17 = 42 in let final void #t18 = self::OptOutExtension|[]=(#t14, #t15, #t17) in #t17 : #t16;
 static method extensionIfNullOptOut2ForEffect(core::int* i) → dynamic {
-  let final self::OptOutClass1* #t19 = new self::OptOutClass1::•() in let final core::int* #t20 = i in self::OptOutExtension|[](#t19, #t20).{core::num::==}(null) ?{core::int*} self::OptOutExtension|[]=(#t19, #t20, 42) : null;
+  let final self::OptOutClass1* #t19 = new self::OptOutClass1::•() in let final core::int* #t20 = i in self::OptOutExtension|[](#t19, #t20) == null ?{core::int*} self::OptOutExtension|[]=(#t19, #t20, 42) : null;
 }
 static method ifNullIndexSetOptOut(core::int* i) → dynamic
-  return let final self::OptOutClass2* #t21 = new self::OptOutClass2::•() in let final core::int* #t22 = i in let final core::int* #t23 = #t21.{self::OptOutClass2::[]}(#t22) in #t23.{core::num::==}(null) ?{core::int*} let final core::int* #t24 = 42 in let final void #t25 = #t21.{self::OptOutClass2::[]=}(#t22, #t24) in #t24 : #t23;
+  return let final self::OptOutClass2* #t21 = new self::OptOutClass2::•() in let final core::int* #t22 = i in let final core::int* #t23 = #t21.{self::OptOutClass2::[]}(#t22){(core::int*) →* core::int*} in #t23 == null ?{core::int*} let final core::int* #t24 = 42 in let final void #t25 = #t21.{self::OptOutClass2::[]=}(#t22, #t24){(core::int*, core::int*) →* void} in #t24 : #t23;
 static method ifNullIndexSetOptOutForEffect(core::int* i) → dynamic {
-  let final self::OptOutClass2* #t26 = new self::OptOutClass2::•() in let final core::int* #t27 = i in #t26.{self::OptOutClass2::[]}(#t27).{core::num::==}(null) ?{core::int*} #t26.{self::OptOutClass2::[]=}(#t27, 42) : null;
+  let final self::OptOutClass2* #t26 = new self::OptOutClass2::•() in let final core::int* #t27 = i in #t26.{self::OptOutClass2::[]}(#t27){(core::int*) →* core::int*} == null ?{core::int*} #t26.{self::OptOutClass2::[]=}(#t27, 42){(core::int*, core::int*) →* void} : null;
 }
 static method ifNullPropertySetOptOut(core::int* i) → dynamic
-  return let final self::OptOutClass3* #t28 = new self::OptOutClass3::•(i) in let final core::int* #t29 = #t28.{self::OptOutClass3::field} in #t29.{core::num::==}(null) ?{core::int*} #t28.{self::OptOutClass3::field} = 42 : #t29;
+  return let final self::OptOutClass3* #t28 = new self::OptOutClass3::•(i) in let final core::int* #t29 = #t28.{self::OptOutClass3::field}{core::int*} in #t29 == null ?{core::int*} #t28.{self::OptOutClass3::field} = 42 : #t29;
 static method ifNullPropertySetOptOutForEffect(core::int* i) → dynamic {
-  let final self::OptOutClass3* #t30 = new self::OptOutClass3::•(i) in #t30.{self::OptOutClass3::field}.{core::num::==}(null) ?{core::int*} #t30.{self::OptOutClass3::field} = 42 : null;
+  let final self::OptOutClass3* #t30 = new self::OptOutClass3::•(i) in #t30.{self::OptOutClass3::field}{core::int*} == null ?{core::int*} #t30.{self::OptOutClass3::field} = 42 : null;
 }
 static method ifNullSetOptOut(core::int* i) → dynamic
-  return let final core::int* #t31 = i in #t31.{core::num::==}(null) ?{core::int*} i = 42 : #t31;
+  return let final core::int* #t31 = i in #t31 == null ?{core::int*} i = 42 : #t31;
 static method ifNullSetOptOutForEffect(core::int* i) → dynamic {
-  i.{core::num::==}(null) ?{core::int*} i = 42 : null;
+  i == null ?{core::int*} i = 42 : null;
 }
 static method ifNullSuperIndexSetOptOut(core::int* i) → dynamic
-  return new self::OptOutClass4::•().{self::OptOutClass4::method}(i);
+  return new self::OptOutClass4::•().{self::OptOutClass4::method}(i){(core::int*) →* dynamic};
 static method ifNullSuperIndexSetOptOutForEffect(core::int* i) → dynamic {
-  new self::OptOutClass4::•().{self::OptOutClass4::methodForEffect}(i);
+  new self::OptOutClass4::•().{self::OptOutClass4::methodForEffect}(i){(core::int*) →* dynamic};
 }
 static method nullAwareIfNullSetOptOut(core::int* i) → dynamic {
   self::OptOutClass5* o = new self::OptOutClass5::•(i);
-  return let final self::OptOutClass5* #t32 = o in #t32.{self::OptOutClass5::==}(null) ?{core::int*} null : let final core::int* #t33 = #t32.{self::OptOutClass5::field} in #t33.{core::num::==}(null) ?{core::int*} #t32.{self::OptOutClass5::field} = 42 : #t33;
+  return let final self::OptOutClass5* #t32 = o in #t32 == null ?{core::int*} null : let final core::int* #t33 = #t32.{self::OptOutClass5::field}{core::int*} in #t33 == null ?{core::int*} #t32.{self::OptOutClass5::field} = 42 : #t33;
 }
 static method nullAwareIfNullSetOptOutForEffect(core::int* i) → dynamic {
   self::OptOutClass5* o = new self::OptOutClass5::•(i);
-  let final self::OptOutClass5* #t34 = o in #t34.{self::OptOutClass5::==}(null) ?{core::int*} null : #t34.{self::OptOutClass5::field}.{core::num::==}(null) ?{core::int*} #t34.{self::OptOutClass5::field} = 42 : null;
+  let final self::OptOutClass5* #t34 = o in #t34 == null ?{core::int*} null : #t34.{self::OptOutClass5::field}{core::int*} == null ?{core::int*} #t34.{self::OptOutClass5::field} = 42 : null;
 }
 static method isTestOptOut(core::int* i) → dynamic
   return i is core::int*;
@@ -254,7 +254,7 @@
   uns::unnecessaryIfNullAssign(<core::int*>[null], () → core::int* => 42);
   uns::unnecessaryNullAwareAccess(() → core::int* => 0);
   uns::unnecessaryNullAwareAccess(() → Null => null);
-  self::throws(() → dynamic => uns::callReturningNever(() → Null => throw "foo"), (core::Object* e) → core::bool* => e.{core::Object::==}("foo"));
+  self::throws(() → dynamic => uns::callReturningNever(() → Null => throw "foo"), (core::Object* e) → core::bool* => e =={core::Object::==}{(core::Object*) →* core::bool*} "foo");
   () →* Null f = () → Null => null;
   self::throws(() → dynamic => uns::callReturningNever(f));
   uns::switchOnEnum(#C3);
@@ -271,15 +271,15 @@
   self::throws(() → dynamic => uns::switchOnEnumWithFallThrough2(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() →* void f, [(core::Object*) →* core::bool* testException = #C7]) → dynamic {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic e) {
-    if(!testException.{core::Object::==}(null) && !testException.call(e)) {
+    if(!(testException == null) && !testException(e){(core::Object*) →* core::bool*}) {
       throw "Unexpected exception: ${e}";
     }
     core::print(e);
@@ -405,9 +405,9 @@
     : super uns::OptInSuperClass4::•()
     ;
   method method(core::int i) → dynamic
-    return let final core::int #t35 = i in let final core::int #t36 = super.{uns::OptInSuperClass4::[]}(#t35) in #t36.{core::num::==}(null) ?{core::int} let final core::int #t37 = 42 in let final void #t38 = super.{uns::OptInSuperClass4::[]=}(#t35, #t37) in #t37 : #t36;
+    return let final core::int #t35 = i in let final core::int #t36 = super.{uns::OptInSuperClass4::[]}(#t35) in #t36 == null ?{core::int} let final core::int #t37 = 42 in let final void #t38 = super.{uns::OptInSuperClass4::[]=}(#t35, #t37) in #t37 : #t36;
   method methodForEffect(core::int i) → dynamic {
-    let final core::int #t39 = i in super.{uns::OptInSuperClass4::[]}(#t39).{core::num::==}(null) ?{core::int} super.{uns::OptInSuperClass4::[]=}(#t39, 42) : null;
+    let final core::int #t39 = i in super.{uns::OptInSuperClass4::[]}(#t39) == null ?{core::int} super.{uns::OptInSuperClass4::[]=}(#t39, 42) : null;
   }
 }
 class OptInClass5 extends core::Object {
@@ -438,91 +438,91 @@
     : uns::E::index = index, uns::E::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{uns::E::_name};
+    return this.{uns::E::_name}{core::String};
 }
 extension OptInExtension on uns::OptInClass1 {
   operator [] = uns::OptInExtension|[];
   operator []= = uns::OptInExtension|[]=;
 }
 static method isNullOptIn1(core::int i) → dynamic
-  return i.{core::num::==}(null);
+  return i == null;
 static method isNotNullOptIn1(core::int i) → dynamic
-  return !i.{core::num::==}(null);
+  return !(i == null);
 static method isNullOptIn2(core::int i) → dynamic
-  return null.{core::Object::==}(i);
+  return i == null;
 static method isNotNullOptIn2(core::int i) → dynamic
-  return !null.{core::Object::==}(i);
+  return !(i == null);
 static method ifNullOptIn(core::int i) → dynamic
-  return let final core::int #t40 = i in #t40.{core::num::==}(null) ?{core::int} 42 : #t40;
+  return let final core::int #t40 = i in #t40 == null ?{core::int} 42 : #t40;
 static method OptInExtension|[](lowered final uns::OptInClass1 #this, core::int index) → core::int
   return index;
 static method OptInExtension|[]=(lowered final uns::OptInClass1 #this, core::int index, core::int value) → void {}
 static method extensionIfNullOptIn1(core::int i) → dynamic
-  return let final uns::OptInClass1 #t41 = new uns::OptInClass1::•() in let final core::int #t42 = i in let final core::int #t43 = uns::OptInExtension|[](#t41, #t42) in #t43.{core::num::==}(null) ?{core::int} let final core::int #t44 = 42 in let final void #t45 = uns::OptInExtension|[]=(#t41, #t42, #t44) in #t44 : #t43;
+  return let final uns::OptInClass1 #t41 = new uns::OptInClass1::•() in let final core::int #t42 = i in let final core::int #t43 = uns::OptInExtension|[](#t41, #t42) in #t43 == null ?{core::int} let final core::int #t44 = 42 in let final void #t45 = uns::OptInExtension|[]=(#t41, #t42, #t44) in #t44 : #t43;
 static method extensionIfNullOptIn1ForEffect(core::int i) → dynamic {
-  let final uns::OptInClass1 #t46 = new uns::OptInClass1::•() in let final core::int #t47 = i in uns::OptInExtension|[](#t46, #t47).{core::num::==}(null) ?{core::int} uns::OptInExtension|[]=(#t46, #t47, 42) : null;
+  let final uns::OptInClass1 #t46 = new uns::OptInClass1::•() in let final core::int #t47 = i in uns::OptInExtension|[](#t46, #t47) == null ?{core::int} uns::OptInExtension|[]=(#t46, #t47, 42) : null;
 }
 static method extensionIfNullOptIn2(core::int i) → dynamic
-  return let final uns::OptInClass1 #t48 = new uns::OptInClass1::•() in let final core::int #t49 = i in let final core::int #t50 = uns::OptInExtension|[](#t48, #t49) in #t50.{core::num::==}(null) ?{core::int} let final core::int #t51 = 42 in let final void #t52 = uns::OptInExtension|[]=(#t48, #t49, #t51) in #t51 : #t50;
+  return let final uns::OptInClass1 #t48 = new uns::OptInClass1::•() in let final core::int #t49 = i in let final core::int #t50 = uns::OptInExtension|[](#t48, #t49) in #t50 == null ?{core::int} let final core::int #t51 = 42 in let final void #t52 = uns::OptInExtension|[]=(#t48, #t49, #t51) in #t51 : #t50;
 static method extensionIfNullOptIn2ForEffect(core::int i) → dynamic {
-  let final uns::OptInClass1 #t53 = new uns::OptInClass1::•() in let final core::int #t54 = i in uns::OptInExtension|[](#t53, #t54).{core::num::==}(null) ?{core::int} uns::OptInExtension|[]=(#t53, #t54, 42) : null;
+  let final uns::OptInClass1 #t53 = new uns::OptInClass1::•() in let final core::int #t54 = i in uns::OptInExtension|[](#t53, #t54) == null ?{core::int} uns::OptInExtension|[]=(#t53, #t54, 42) : null;
 }
 static method ifNullIndexSetOptIn(core::int i) → dynamic
-  return let final uns::OptInClass2 #t55 = new uns::OptInClass2::•() in let final core::int #t56 = i in let final core::int #t57 = #t55.{uns::OptInClass2::[]}(#t56) in #t57.{core::num::==}(null) ?{core::int} let final core::int #t58 = 42 in let final void #t59 = #t55.{uns::OptInClass2::[]=}(#t56, #t58) in #t58 : #t57;
+  return let final uns::OptInClass2 #t55 = new uns::OptInClass2::•() in let final core::int #t56 = i in let final core::int #t57 = #t55.{uns::OptInClass2::[]}(#t56){(core::int) → core::int} in #t57 == null ?{core::int} let final core::int #t58 = 42 in let final void #t59 = #t55.{uns::OptInClass2::[]=}(#t56, #t58){(core::int, core::int) → void} in #t58 : #t57;
 static method ifNullIndexSetOptInForEffect(core::int i) → dynamic {
-  let final uns::OptInClass2 #t60 = new uns::OptInClass2::•() in let final core::int #t61 = i in #t60.{uns::OptInClass2::[]}(#t61).{core::num::==}(null) ?{core::int} #t60.{uns::OptInClass2::[]=}(#t61, 42) : null;
+  let final uns::OptInClass2 #t60 = new uns::OptInClass2::•() in let final core::int #t61 = i in #t60.{uns::OptInClass2::[]}(#t61){(core::int) → core::int} == null ?{core::int} #t60.{uns::OptInClass2::[]=}(#t61, 42){(core::int, core::int) → void} : null;
 }
 static method ifNullPropertySetOptIn(core::int i) → dynamic
-  return let final uns::OptInClass3 #t62 = new uns::OptInClass3::•(i) in let final core::int #t63 = #t62.{uns::OptInClass3::field} in #t63.{core::num::==}(null) ?{core::int} #t62.{uns::OptInClass3::field} = 42 : #t63;
+  return let final uns::OptInClass3 #t62 = new uns::OptInClass3::•(i) in let final core::int #t63 = #t62.{uns::OptInClass3::field}{core::int} in #t63 == null ?{core::int} #t62.{uns::OptInClass3::field} = 42 : #t63;
 static method ifNullPropertySetOptInForEffect(core::int i) → dynamic {
-  let final uns::OptInClass3 #t64 = new uns::OptInClass3::•(i) in #t64.{uns::OptInClass3::field}.{core::num::==}(null) ?{core::int} #t64.{uns::OptInClass3::field} = 42 : null;
+  let final uns::OptInClass3 #t64 = new uns::OptInClass3::•(i) in #t64.{uns::OptInClass3::field}{core::int} == null ?{core::int} #t64.{uns::OptInClass3::field} = 42 : null;
 }
 static method ifNullSetOptIn(core::int i) → dynamic
-  return let final core::int #t65 = i in #t65.{core::num::==}(null) ?{core::int} i = 42 : #t65;
+  return let final core::int #t65 = i in #t65 == null ?{core::int} i = 42 : #t65;
 static method ifNullSetOptInForEffect(core::int i) → dynamic {
-  i.{core::num::==}(null) ?{core::int} i = 42 : null;
+  i == null ?{core::int} i = 42 : null;
 }
 static method ifNullSuperIndexSetOptIn(core::int i) → dynamic
-  return new uns::OptInClass4::•().{uns::OptInClass4::method}(i);
+  return new uns::OptInClass4::•().{uns::OptInClass4::method}(i){(core::int) → dynamic};
 static method ifNullSuperIndexSetOptInForEffect(core::int i) → dynamic {
-  new uns::OptInClass4::•().{uns::OptInClass4::methodForEffect}(i);
+  new uns::OptInClass4::•().{uns::OptInClass4::methodForEffect}(i){(core::int) → dynamic};
 }
 static method nullAwareIfNullSetOptIn(core::int i) → dynamic {
   uns::OptInClass5? o = new uns::OptInClass5::•(i) as{ForNonNullableByDefault} uns::OptInClass5?;
-  return let final uns::OptInClass5? #t66 = o in #t66.{core::Object::==}(null) ?{core::int?} null : let final core::int #t67 = #t66.{uns::OptInClass5::field} in #t67.{core::num::==}(null) ?{core::int} #t66.{uns::OptInClass5::field} = 42 : #t67;
+  return let final uns::OptInClass5? #t66 = o in #t66 == null ?{core::int?} null : let final core::int #t67 = #t66.{uns::OptInClass5::field}{core::int} in #t67 == null ?{core::int} #t66.{uns::OptInClass5::field} = 42 : #t67;
 }
 static method nullAwareIfNullSetOptInForEffect(core::int i) → dynamic {
   uns::OptInClass5? o = new uns::OptInClass5::•(i) as{ForNonNullableByDefault} uns::OptInClass5?;
-  let final uns::OptInClass5? #t68 = o in #t68.{core::Object::==}(null) ?{core::int?} null : #t68.{uns::OptInClass5::field}.{core::num::==}(null) ?{core::int} #t68.{uns::OptInClass5::field} = 42 : null;
+  let final uns::OptInClass5? #t68 = o in #t68 == null ?{core::int?} null : #t68.{uns::OptInClass5::field}{core::int} == null ?{core::int} #t68.{uns::OptInClass5::field} = 42 : null;
 }
 static method isTestOptIn(core::int i) → dynamic
   return i is{ForNonNullableByDefault} core::int;
 static method isNotTestOptIn(core::int i) → dynamic
   return !(i is{ForNonNullableByDefault} core::int);
 static method nullAwareAccess1(core::int i) → dynamic
-  return let final core::int #t69 = i in #t69.{core::num::==}(null) ?{core::bool?} null : #t69.{core::int::isEven};
+  return let final core::int #t69 = i in #t69 == null ?{core::bool?} null : #t69.{core::int::isEven}{core::bool};
 static method nullAwareAccessForEffect1(core::int i) → dynamic {
-  let final core::int #t70 = i in #t70.{core::num::==}(null) ?{core::bool?} null : #t70.{core::int::isEven};
+  let final core::int #t70 = i in #t70 == null ?{core::bool?} null : #t70.{core::int::isEven}{core::bool};
 }
 static method promotionToNever(core::int i) → dynamic {
   if(i is{ForNonNullableByDefault} core::int)
     return;
 }
 static method unnecessaryNullCheck(() → core::int f) → dynamic {
-  if(!f.call().{core::num::==}(null))
+  if(!(f(){() → core::int} == null))
     return;
 }
 static method unnecessaryIfNull(() → core::int f, () → core::int g) → dynamic {
-  return let final core::int #t71 = f.call() in #t71.{core::num::==}(null) ?{core::int} g.call() : #t71;
+  return let final core::int #t71 = f(){() → core::int} in #t71 == null ?{core::int} g(){() → core::int} : #t71;
 }
 static method unnecessaryIfNullAssign(core::List<core::int> x, () → core::int f) → dynamic {
-  let final core::List<core::int> #t72 = x in let final core::int #t73 = 0 in #t72.{core::List::[]}(#t73).{core::num::==}(null) ?{core::int} #t72.{core::List::[]=}(#t73, f.call()) : null;
+  let final core::List<core::int> #t72 = x in let final core::int #t73 = 0 in #t72.{core::List::[]}(#t73){(core::int) → core::int} == null ?{core::int} #t72.{core::List::[]=}(#t73, f(){() → core::int}){(core::int, core::int) → void} : null;
 }
 static method unnecessaryNullAwareAccess(() → core::int f) → dynamic {
-  let final core::int #t74 = f.call() in #t74.{core::num::==}(null) ?{core::int?} null : #t74.{core::int::gcd}(0);
+  let final core::int #t74 = f(){() → core::int} in #t74 == null ?{core::int?} null : #t74.{core::int::gcd}(0){(core::int) → core::int};
 }
 static method callReturningNever(() → Never f) → dynamic {
-  let final Never #t75 = f.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t75 = f(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 }
 static method switchOnEnum(uns::E e) → dynamic {
   switch(e) {
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.outline.expect
index a1c7eb4..d853a42 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.outline.expect
@@ -211,7 +211,7 @@
     : self2::E::index = index, self2::E::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self2::E::_name};
+    return this.{self2::E::_name}{core::String};
 }
 extension OptInExtension on self2::OptInClass1 {
   operator [] = self2::OptInExtension|[];
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
index 3e7492c..f635ea8 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
@@ -77,9 +77,9 @@
     : super self::OptOutSuperClass4::•()
     ;
   method method(core::int* i) → dynamic
-    return let final core::int* #t1 = i in let final core::int* #t2 = super.{self::OptOutSuperClass4::[]}(#t1) in #t2.{core::num::==}(null) ?{core::int*} let final core::int* #t3 = 42 in let final void #t4 = super.{self::OptOutSuperClass4::[]=}(#t1, #t3) in #t3 : #t2;
+    return let final core::int* #t1 = i in let final core::int* #t2 = super.{self::OptOutSuperClass4::[]}(#t1) in #t2 == null ?{core::int*} let final core::int* #t3 = 42 in let final void #t4 = super.{self::OptOutSuperClass4::[]=}(#t1, #t3) in #t3 : #t2;
   method methodForEffect(core::int* i) → dynamic {
-    let final core::int* #t5 = i in super.{self::OptOutSuperClass4::[]}(#t5).{core::num::==}(null) ?{core::int*} super.{self::OptOutSuperClass4::[]=}(#t5, 42) : null;
+    let final core::int* #t5 = i in super.{self::OptOutSuperClass4::[]}(#t5) == null ?{core::int*} super.{self::OptOutSuperClass4::[]=}(#t5, 42) : null;
   }
 }
 class OptOutClass5 extends core::Object {
@@ -103,55 +103,55 @@
   operator []= = self::OptOutExtension|[]=;
 }
 static method isNullOptOut1(core::int* i) → dynamic
-  return i.{core::num::==}(null);
+  return i == null;
 static method isNotNullOptOut1(core::int* i) → dynamic
-  return !i.{core::num::==}(null);
+  return !(i == null);
 static method isNullOptOut2(core::int* i) → dynamic
-  return null.{core::Object::==}(i);
+  return i == null;
 static method isNotNullOptOut2(core::int* i) → dynamic
-  return !null.{core::Object::==}(i);
+  return !(i == null);
 static method ifNullOptOut(core::int* i) → dynamic
-  return let final core::int* #t6 = i in #t6.{core::num::==}(null) ?{core::int*} 42 : #t6;
+  return let final core::int* #t6 = i in #t6 == null ?{core::int*} 42 : #t6;
 static method OptOutExtension|[](lowered final self::OptOutClass1* #this, core::int* index) → core::int*
   return index;
 static method OptOutExtension|[]=(lowered final self::OptOutClass1* #this, core::int* index, core::int* value) → void {}
 static method extensionIfNullOptOut1(core::int* i) → dynamic
-  return let final self::OptOutClass1* #t7 = new self::OptOutClass1::•() in let final core::int* #t8 = i in let final core::int* #t9 = self::OptOutExtension|[](#t7, #t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 42 in let final void #t11 = self::OptOutExtension|[]=(#t7, #t8, #t10) in #t10 : #t9;
+  return let final self::OptOutClass1* #t7 = new self::OptOutClass1::•() in let final core::int* #t8 = i in let final core::int* #t9 = self::OptOutExtension|[](#t7, #t8) in #t9 == null ?{core::int*} let final core::int* #t10 = 42 in let final void #t11 = self::OptOutExtension|[]=(#t7, #t8, #t10) in #t10 : #t9;
 static method extensionIfNullOptOut1ForEffect(core::int* i) → dynamic {
-  let final self::OptOutClass1* #t12 = new self::OptOutClass1::•() in let final core::int* #t13 = i in self::OptOutExtension|[](#t12, #t13).{core::num::==}(null) ?{core::int*} self::OptOutExtension|[]=(#t12, #t13, 42) : null;
+  let final self::OptOutClass1* #t12 = new self::OptOutClass1::•() in let final core::int* #t13 = i in self::OptOutExtension|[](#t12, #t13) == null ?{core::int*} self::OptOutExtension|[]=(#t12, #t13, 42) : null;
 }
 static method extensionIfNullOptOut2(core::int* i) → dynamic
-  return let final self::OptOutClass1* #t14 = new self::OptOutClass1::•() in let final core::int* #t15 = i in let final core::int* #t16 = self::OptOutExtension|[](#t14, #t15) in #t16.{core::num::==}(null) ?{core::int*} let final core::int* #t17 = 42 in let final void #t18 = self::OptOutExtension|[]=(#t14, #t15, #t17) in #t17 : #t16;
+  return let final self::OptOutClass1* #t14 = new self::OptOutClass1::•() in let final core::int* #t15 = i in let final core::int* #t16 = self::OptOutExtension|[](#t14, #t15) in #t16 == null ?{core::int*} let final core::int* #t17 = 42 in let final void #t18 = self::OptOutExtension|[]=(#t14, #t15, #t17) in #t17 : #t16;
 static method extensionIfNullOptOut2ForEffect(core::int* i) → dynamic {
-  let final self::OptOutClass1* #t19 = new self::OptOutClass1::•() in let final core::int* #t20 = i in self::OptOutExtension|[](#t19, #t20).{core::num::==}(null) ?{core::int*} self::OptOutExtension|[]=(#t19, #t20, 42) : null;
+  let final self::OptOutClass1* #t19 = new self::OptOutClass1::•() in let final core::int* #t20 = i in self::OptOutExtension|[](#t19, #t20) == null ?{core::int*} self::OptOutExtension|[]=(#t19, #t20, 42) : null;
 }
 static method ifNullIndexSetOptOut(core::int* i) → dynamic
-  return let final self::OptOutClass2* #t21 = new self::OptOutClass2::•() in let final core::int* #t22 = i in let final core::int* #t23 = #t21.{self::OptOutClass2::[]}(#t22) in #t23.{core::num::==}(null) ?{core::int*} let final core::int* #t24 = 42 in let final void #t25 = #t21.{self::OptOutClass2::[]=}(#t22, #t24) in #t24 : #t23;
+  return let final self::OptOutClass2* #t21 = new self::OptOutClass2::•() in let final core::int* #t22 = i in let final core::int* #t23 = #t21.{self::OptOutClass2::[]}(#t22){(core::int*) →* core::int*} in #t23 == null ?{core::int*} let final core::int* #t24 = 42 in let final void #t25 = #t21.{self::OptOutClass2::[]=}(#t22, #t24){(core::int*, core::int*) →* void} in #t24 : #t23;
 static method ifNullIndexSetOptOutForEffect(core::int* i) → dynamic {
-  let final self::OptOutClass2* #t26 = new self::OptOutClass2::•() in let final core::int* #t27 = i in #t26.{self::OptOutClass2::[]}(#t27).{core::num::==}(null) ?{core::int*} #t26.{self::OptOutClass2::[]=}(#t27, 42) : null;
+  let final self::OptOutClass2* #t26 = new self::OptOutClass2::•() in let final core::int* #t27 = i in #t26.{self::OptOutClass2::[]}(#t27){(core::int*) →* core::int*} == null ?{core::int*} #t26.{self::OptOutClass2::[]=}(#t27, 42){(core::int*, core::int*) →* void} : null;
 }
 static method ifNullPropertySetOptOut(core::int* i) → dynamic
-  return let final self::OptOutClass3* #t28 = new self::OptOutClass3::•(i) in let final core::int* #t29 = #t28.{self::OptOutClass3::field} in #t29.{core::num::==}(null) ?{core::int*} #t28.{self::OptOutClass3::field} = 42 : #t29;
+  return let final self::OptOutClass3* #t28 = new self::OptOutClass3::•(i) in let final core::int* #t29 = #t28.{self::OptOutClass3::field}{core::int*} in #t29 == null ?{core::int*} #t28.{self::OptOutClass3::field} = 42 : #t29;
 static method ifNullPropertySetOptOutForEffect(core::int* i) → dynamic {
-  let final self::OptOutClass3* #t30 = new self::OptOutClass3::•(i) in #t30.{self::OptOutClass3::field}.{core::num::==}(null) ?{core::int*} #t30.{self::OptOutClass3::field} = 42 : null;
+  let final self::OptOutClass3* #t30 = new self::OptOutClass3::•(i) in #t30.{self::OptOutClass3::field}{core::int*} == null ?{core::int*} #t30.{self::OptOutClass3::field} = 42 : null;
 }
 static method ifNullSetOptOut(core::int* i) → dynamic
-  return let final core::int* #t31 = i in #t31.{core::num::==}(null) ?{core::int*} i = 42 : #t31;
+  return let final core::int* #t31 = i in #t31 == null ?{core::int*} i = 42 : #t31;
 static method ifNullSetOptOutForEffect(core::int* i) → dynamic {
-  i.{core::num::==}(null) ?{core::int*} i = 42 : null;
+  i == null ?{core::int*} i = 42 : null;
 }
 static method ifNullSuperIndexSetOptOut(core::int* i) → dynamic
-  return new self::OptOutClass4::•().{self::OptOutClass4::method}(i);
+  return new self::OptOutClass4::•().{self::OptOutClass4::method}(i){(core::int*) →* dynamic};
 static method ifNullSuperIndexSetOptOutForEffect(core::int* i) → dynamic {
-  new self::OptOutClass4::•().{self::OptOutClass4::methodForEffect}(i);
+  new self::OptOutClass4::•().{self::OptOutClass4::methodForEffect}(i){(core::int*) →* dynamic};
 }
 static method nullAwareIfNullSetOptOut(core::int* i) → dynamic {
   self::OptOutClass5* o = new self::OptOutClass5::•(i);
-  return let final self::OptOutClass5* #t32 = o in #t32.{self::OptOutClass5::==}(null) ?{core::int*} null : let final core::int* #t33 = #t32.{self::OptOutClass5::field} in #t33.{core::num::==}(null) ?{core::int*} #t32.{self::OptOutClass5::field} = 42 : #t33;
+  return let final self::OptOutClass5* #t32 = o in #t32 == null ?{core::int*} null : let final core::int* #t33 = #t32.{self::OptOutClass5::field}{core::int*} in #t33 == null ?{core::int*} #t32.{self::OptOutClass5::field} = 42 : #t33;
 }
 static method nullAwareIfNullSetOptOutForEffect(core::int* i) → dynamic {
   self::OptOutClass5* o = new self::OptOutClass5::•(i);
-  let final self::OptOutClass5* #t34 = o in #t34.{self::OptOutClass5::==}(null) ?{core::int*} null : #t34.{self::OptOutClass5::field}.{core::num::==}(null) ?{core::int*} #t34.{self::OptOutClass5::field} = 42 : null;
+  let final self::OptOutClass5* #t34 = o in #t34 == null ?{core::int*} null : #t34.{self::OptOutClass5::field}{core::int*} == null ?{core::int*} #t34.{self::OptOutClass5::field} = 42 : null;
 }
 static method isTestOptOut(core::int* i) → dynamic
   return i is core::int*;
@@ -254,7 +254,7 @@
   uns::unnecessaryIfNullAssign(core::_GrowableList::_literal1<core::int*>(null), () → core::int* => 42);
   uns::unnecessaryNullAwareAccess(() → core::int* => 0);
   uns::unnecessaryNullAwareAccess(() → Null => null);
-  self::throws(() → dynamic => uns::callReturningNever(() → Null => throw "foo"), (core::Object* e) → core::bool* => e.{core::Object::==}("foo"));
+  self::throws(() → dynamic => uns::callReturningNever(() → Null => throw "foo"), (core::Object* e) → core::bool* => e =={core::Object::==}{(core::Object*) →* core::bool*} "foo");
   () →* Null f = () → Null => null;
   self::throws(() → dynamic => uns::callReturningNever(f));
   uns::switchOnEnum(#C3);
@@ -271,15 +271,15 @@
   self::throws(() → dynamic => uns::switchOnEnumWithFallThrough2(null));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() →* void f, [(core::Object*) →* core::bool* testException = #C7]) → dynamic {
   try {
-    f.call();
+    f(){() →* void};
   }
   on dynamic catch(final dynamic e) {
-    if(!testException.{core::Object::==}(null) && !testException.call(e)) {
+    if(!(testException == null) && !testException(e){(core::Object*) →* core::bool*}) {
       throw "Unexpected exception: ${e}";
     }
     core::print(e);
@@ -405,9 +405,9 @@
     : super uns::OptInSuperClass4::•()
     ;
   method method(core::int i) → dynamic
-    return let final core::int #t35 = i in let final core::int #t36 = super.{uns::OptInSuperClass4::[]}(#t35) in #t36.{core::num::==}(null) ?{core::int} let final core::int #t37 = 42 in let final void #t38 = super.{uns::OptInSuperClass4::[]=}(#t35, #t37) in #t37 : #t36;
+    return let final core::int #t35 = i in let final core::int #t36 = super.{uns::OptInSuperClass4::[]}(#t35) in #t36 == null ?{core::int} let final core::int #t37 = 42 in let final void #t38 = super.{uns::OptInSuperClass4::[]=}(#t35, #t37) in #t37 : #t36;
   method methodForEffect(core::int i) → dynamic {
-    let final core::int #t39 = i in super.{uns::OptInSuperClass4::[]}(#t39).{core::num::==}(null) ?{core::int} super.{uns::OptInSuperClass4::[]=}(#t39, 42) : null;
+    let final core::int #t39 = i in super.{uns::OptInSuperClass4::[]}(#t39) == null ?{core::int} super.{uns::OptInSuperClass4::[]=}(#t39, 42) : null;
   }
 }
 class OptInClass5 extends core::Object {
@@ -438,91 +438,91 @@
     : uns::E::index = index, uns::E::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{uns::E::_name};
+    return this.{uns::E::_name}{core::String};
 }
 extension OptInExtension on uns::OptInClass1 {
   operator [] = uns::OptInExtension|[];
   operator []= = uns::OptInExtension|[]=;
 }
 static method isNullOptIn1(core::int i) → dynamic
-  return i.{core::num::==}(null);
+  return i == null;
 static method isNotNullOptIn1(core::int i) → dynamic
-  return !i.{core::num::==}(null);
+  return !(i == null);
 static method isNullOptIn2(core::int i) → dynamic
-  return null.{core::Object::==}(i);
+  return i == null;
 static method isNotNullOptIn2(core::int i) → dynamic
-  return !null.{core::Object::==}(i);
+  return !(i == null);
 static method ifNullOptIn(core::int i) → dynamic
-  return let final core::int #t40 = i in #t40.{core::num::==}(null) ?{core::int} 42 : #t40;
+  return let final core::int #t40 = i in #t40 == null ?{core::int} 42 : #t40;
 static method OptInExtension|[](lowered final uns::OptInClass1 #this, core::int index) → core::int
   return index;
 static method OptInExtension|[]=(lowered final uns::OptInClass1 #this, core::int index, core::int value) → void {}
 static method extensionIfNullOptIn1(core::int i) → dynamic
-  return let final uns::OptInClass1 #t41 = new uns::OptInClass1::•() in let final core::int #t42 = i in let final core::int #t43 = uns::OptInExtension|[](#t41, #t42) in #t43.{core::num::==}(null) ?{core::int} let final core::int #t44 = 42 in let final void #t45 = uns::OptInExtension|[]=(#t41, #t42, #t44) in #t44 : #t43;
+  return let final uns::OptInClass1 #t41 = new uns::OptInClass1::•() in let final core::int #t42 = i in let final core::int #t43 = uns::OptInExtension|[](#t41, #t42) in #t43 == null ?{core::int} let final core::int #t44 = 42 in let final void #t45 = uns::OptInExtension|[]=(#t41, #t42, #t44) in #t44 : #t43;
 static method extensionIfNullOptIn1ForEffect(core::int i) → dynamic {
-  let final uns::OptInClass1 #t46 = new uns::OptInClass1::•() in let final core::int #t47 = i in uns::OptInExtension|[](#t46, #t47).{core::num::==}(null) ?{core::int} uns::OptInExtension|[]=(#t46, #t47, 42) : null;
+  let final uns::OptInClass1 #t46 = new uns::OptInClass1::•() in let final core::int #t47 = i in uns::OptInExtension|[](#t46, #t47) == null ?{core::int} uns::OptInExtension|[]=(#t46, #t47, 42) : null;
 }
 static method extensionIfNullOptIn2(core::int i) → dynamic
-  return let final uns::OptInClass1 #t48 = new uns::OptInClass1::•() in let final core::int #t49 = i in let final core::int #t50 = uns::OptInExtension|[](#t48, #t49) in #t50.{core::num::==}(null) ?{core::int} let final core::int #t51 = 42 in let final void #t52 = uns::OptInExtension|[]=(#t48, #t49, #t51) in #t51 : #t50;
+  return let final uns::OptInClass1 #t48 = new uns::OptInClass1::•() in let final core::int #t49 = i in let final core::int #t50 = uns::OptInExtension|[](#t48, #t49) in #t50 == null ?{core::int} let final core::int #t51 = 42 in let final void #t52 = uns::OptInExtension|[]=(#t48, #t49, #t51) in #t51 : #t50;
 static method extensionIfNullOptIn2ForEffect(core::int i) → dynamic {
-  let final uns::OptInClass1 #t53 = new uns::OptInClass1::•() in let final core::int #t54 = i in uns::OptInExtension|[](#t53, #t54).{core::num::==}(null) ?{core::int} uns::OptInExtension|[]=(#t53, #t54, 42) : null;
+  let final uns::OptInClass1 #t53 = new uns::OptInClass1::•() in let final core::int #t54 = i in uns::OptInExtension|[](#t53, #t54) == null ?{core::int} uns::OptInExtension|[]=(#t53, #t54, 42) : null;
 }
 static method ifNullIndexSetOptIn(core::int i) → dynamic
-  return let final uns::OptInClass2 #t55 = new uns::OptInClass2::•() in let final core::int #t56 = i in let final core::int #t57 = #t55.{uns::OptInClass2::[]}(#t56) in #t57.{core::num::==}(null) ?{core::int} let final core::int #t58 = 42 in let final void #t59 = #t55.{uns::OptInClass2::[]=}(#t56, #t58) in #t58 : #t57;
+  return let final uns::OptInClass2 #t55 = new uns::OptInClass2::•() in let final core::int #t56 = i in let final core::int #t57 = #t55.{uns::OptInClass2::[]}(#t56){(core::int) → core::int} in #t57 == null ?{core::int} let final core::int #t58 = 42 in let final void #t59 = #t55.{uns::OptInClass2::[]=}(#t56, #t58){(core::int, core::int) → void} in #t58 : #t57;
 static method ifNullIndexSetOptInForEffect(core::int i) → dynamic {
-  let final uns::OptInClass2 #t60 = new uns::OptInClass2::•() in let final core::int #t61 = i in #t60.{uns::OptInClass2::[]}(#t61).{core::num::==}(null) ?{core::int} #t60.{uns::OptInClass2::[]=}(#t61, 42) : null;
+  let final uns::OptInClass2 #t60 = new uns::OptInClass2::•() in let final core::int #t61 = i in #t60.{uns::OptInClass2::[]}(#t61){(core::int) → core::int} == null ?{core::int} #t60.{uns::OptInClass2::[]=}(#t61, 42){(core::int, core::int) → void} : null;
 }
 static method ifNullPropertySetOptIn(core::int i) → dynamic
-  return let final uns::OptInClass3 #t62 = new uns::OptInClass3::•(i) in let final core::int #t63 = #t62.{uns::OptInClass3::field} in #t63.{core::num::==}(null) ?{core::int} #t62.{uns::OptInClass3::field} = 42 : #t63;
+  return let final uns::OptInClass3 #t62 = new uns::OptInClass3::•(i) in let final core::int #t63 = #t62.{uns::OptInClass3::field}{core::int} in #t63 == null ?{core::int} #t62.{uns::OptInClass3::field} = 42 : #t63;
 static method ifNullPropertySetOptInForEffect(core::int i) → dynamic {
-  let final uns::OptInClass3 #t64 = new uns::OptInClass3::•(i) in #t64.{uns::OptInClass3::field}.{core::num::==}(null) ?{core::int} #t64.{uns::OptInClass3::field} = 42 : null;
+  let final uns::OptInClass3 #t64 = new uns::OptInClass3::•(i) in #t64.{uns::OptInClass3::field}{core::int} == null ?{core::int} #t64.{uns::OptInClass3::field} = 42 : null;
 }
 static method ifNullSetOptIn(core::int i) → dynamic
-  return let final core::int #t65 = i in #t65.{core::num::==}(null) ?{core::int} i = 42 : #t65;
+  return let final core::int #t65 = i in #t65 == null ?{core::int} i = 42 : #t65;
 static method ifNullSetOptInForEffect(core::int i) → dynamic {
-  i.{core::num::==}(null) ?{core::int} i = 42 : null;
+  i == null ?{core::int} i = 42 : null;
 }
 static method ifNullSuperIndexSetOptIn(core::int i) → dynamic
-  return new uns::OptInClass4::•().{uns::OptInClass4::method}(i);
+  return new uns::OptInClass4::•().{uns::OptInClass4::method}(i){(core::int) → dynamic};
 static method ifNullSuperIndexSetOptInForEffect(core::int i) → dynamic {
-  new uns::OptInClass4::•().{uns::OptInClass4::methodForEffect}(i);
+  new uns::OptInClass4::•().{uns::OptInClass4::methodForEffect}(i){(core::int) → dynamic};
 }
 static method nullAwareIfNullSetOptIn(core::int i) → dynamic {
   uns::OptInClass5? o = new uns::OptInClass5::•(i);
-  return let final uns::OptInClass5? #t66 = o in #t66.{core::Object::==}(null) ?{core::int?} null : let final core::int #t67 = #t66.{uns::OptInClass5::field} in #t67.{core::num::==}(null) ?{core::int} #t66.{uns::OptInClass5::field} = 42 : #t67;
+  return let final uns::OptInClass5? #t66 = o in #t66 == null ?{core::int?} null : let final core::int #t67 = #t66.{uns::OptInClass5::field}{core::int} in #t67 == null ?{core::int} #t66.{uns::OptInClass5::field} = 42 : #t67;
 }
 static method nullAwareIfNullSetOptInForEffect(core::int i) → dynamic {
   uns::OptInClass5? o = new uns::OptInClass5::•(i);
-  let final uns::OptInClass5? #t68 = o in #t68.{core::Object::==}(null) ?{core::int?} null : #t68.{uns::OptInClass5::field}.{core::num::==}(null) ?{core::int} #t68.{uns::OptInClass5::field} = 42 : null;
+  let final uns::OptInClass5? #t68 = o in #t68 == null ?{core::int?} null : #t68.{uns::OptInClass5::field}{core::int} == null ?{core::int} #t68.{uns::OptInClass5::field} = 42 : null;
 }
 static method isTestOptIn(core::int i) → dynamic
   return i is{ForNonNullableByDefault} core::int;
 static method isNotTestOptIn(core::int i) → dynamic
   return !(i is{ForNonNullableByDefault} core::int);
 static method nullAwareAccess1(core::int i) → dynamic
-  return let final core::int #t69 = i in #t69.{core::num::==}(null) ?{core::bool?} null : #t69.{core::int::isEven};
+  return let final core::int #t69 = i in #t69 == null ?{core::bool?} null : #t69.{core::int::isEven}{core::bool};
 static method nullAwareAccessForEffect1(core::int i) → dynamic {
-  let final core::int #t70 = i in #t70.{core::num::==}(null) ?{core::bool?} null : #t70.{core::int::isEven};
+  let final core::int #t70 = i in #t70 == null ?{core::bool?} null : #t70.{core::int::isEven}{core::bool};
 }
 static method promotionToNever(core::int i) → dynamic {
   if(i is{ForNonNullableByDefault} core::int)
     return;
 }
 static method unnecessaryNullCheck(() → core::int f) → dynamic {
-  if(!f.call().{core::num::==}(null))
+  if(!(f(){() → core::int} == null))
     return;
 }
 static method unnecessaryIfNull(() → core::int f, () → core::int g) → dynamic {
-  return let final core::int #t71 = f.call() in #t71.{core::num::==}(null) ?{core::int} g.call() : #t71;
+  return let final core::int #t71 = f(){() → core::int} in #t71 == null ?{core::int} g(){() → core::int} : #t71;
 }
 static method unnecessaryIfNullAssign(core::List<core::int> x, () → core::int f) → dynamic {
-  let final core::List<core::int> #t72 = x in let final core::int #t73 = 0 in #t72.{core::List::[]}(#t73).{core::num::==}(null) ?{core::int} #t72.{core::List::[]=}(#t73, f.call()) : null;
+  let final core::List<core::int> #t72 = x in let final core::int #t73 = 0 in #t72.{core::List::[]}(#t73){(core::int) → core::int} == null ?{core::int} #t72.{core::List::[]=}(#t73, f(){() → core::int}){(core::int, core::int) → void} : null;
 }
 static method unnecessaryNullAwareAccess(() → core::int f) → dynamic {
-  let final core::int #t74 = f.call() in #t74.{core::num::==}(null) ?{core::int?} null : #t74.{core::int::gcd}(0);
+  let final core::int #t74 = f(){() → core::int} in #t74 == null ?{core::int?} null : #t74.{core::int::gcd}(0){(core::int) → core::int};
 }
 static method callReturningNever(() → Never f) → dynamic {
-  let final Never #t75 = f.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t75 = f(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
 }
 static method switchOnEnum(uns::E e) → dynamic {
   switch(e) {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.expect
index 99db49e..7f113e8 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.expect
@@ -34,9 +34,9 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 class B extends self::A {
   synthetic constructor •() → self::B*
@@ -45,7 +45,7 @@
 }
 static method expectTypeError(() →* dynamic callback) → void {
   try {
-    callback.call();
+    callback(){() →* dynamic};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
@@ -53,8 +53,8 @@
 }
 static method main() → dynamic {
   self::A* a = new self::A::•();
-  self::expectTypeError(() → core::int* => a.{self::I::foo});
-  self::expectTypeError(() → core::String* => (a as dynamic).foo = "bar");
+  self::expectTypeError(() → core::int* => a.{self::I::foo}{core::int*});
+  self::expectTypeError(() → core::String* => (a as dynamic){dynamic}.foo = "bar");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.outline.expect
index 6a3fcc1..7186093 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.outline.expect
@@ -32,9 +32,9 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 class B extends self::A {
   synthetic constructor •() → self::B*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.transformed.expect
index 168474b..df2d4d7 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.transformed.expect
@@ -34,9 +34,9 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 class B extends self::A {
   synthetic constructor •() → self::B*
@@ -45,7 +45,7 @@
 }
 static method expectTypeError(() →* dynamic callback) → void {
   try {
-    callback.call();
+    callback(){() →* dynamic};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
@@ -53,8 +53,8 @@
 }
 static method main() → dynamic {
   self::A* a = new self::A::•();
-  self::expectTypeError(() → core::int* => a.{self::I::foo});
-  self::expectTypeError(() → core::String* => (a as dynamic).foo = "bar");
+  self::expectTypeError(() → core::int* => a.{self::I::foo}{core::int*});
+  self::expectTypeError(() → core::String* => (a as dynamic){dynamic}.foo = "bar");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.expect
index ffcf974..61e3a07 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.expect
@@ -23,7 +23,7 @@
     : super core::Object::•()
     ;
   method noSuchMethod(core::Invocation* i) → dynamic {
-    self::count = self::count.{core::num::+}(1);
+    self::count = self::count.{core::num::+}(1){(core::num*) →* core::int*};
     return null;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -36,9 +36,9 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 abstract class _C&Object&B = core::Object with self::B /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&B*
@@ -67,11 +67,11 @@
 static field core::int* count = 0;
 static method main() → dynamic {
   self::C* c = new self::C::•();
-  if(!c.{self::C::foo}.{core::num::==}(42)) {
+  if(!(c.{self::C::foo}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 42)) {
     throw "Value mismatch: c.foo != 42.";
   }
   c.{self::C::foo} = 43;
-  if(!self::count.{core::num::==}(0)) {
+  if(!(self::count =={core::num::==}{(core::Object*) →* core::bool*} 0)) {
     throw "Value mismatch: count != 0";
   }
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.outline.expect
index 7468edb..2893e4f 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.outline.expect
@@ -32,9 +32,9 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 abstract class _C&Object&B = core::Object with self::B /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&B*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.transformed.expect
index 4609d1a..3e76d00 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     : super core::Object::•()
     ;
   method noSuchMethod(core::Invocation* i) → dynamic {
-    self::count = self::count.{core::num::+}(1);
+    self::count = self::count.{core::num::+}(1){(core::num*) →* core::int*};
     return null;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -36,16 +36,16 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 abstract class _C&Object&B extends core::Object implements self::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&B*
     : super core::Object::•()
     ;
   method noSuchMethod(core::Invocation* i) → dynamic {
-    self::count = self::count.{core::num::+}(1);
+    self::count = self::count.{core::num::+}(1){(core::num*) →* core::int*};
     return null;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -69,11 +69,11 @@
 static field core::int* count = 0;
 static method main() → dynamic {
   self::C* c = new self::C::•();
-  if(!c.{self::C::foo}.{core::num::==}(42)) {
+  if(!(c.{self::C::foo}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 42)) {
     throw "Value mismatch: c.foo != 42.";
   }
   c.{self::C::foo} = 43;
-  if(!self::count.{core::num::==}(0)) {
+  if(!(self::count =={core::num::==}{(core::Object*) →* core::bool*} 0)) {
     throw "Value mismatch: count != 0";
   }
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.expect
index 1d02227..6a99e7d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.expect
@@ -41,7 +41,7 @@
     : super self::B::•()
     ;
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 abstract class D extends core::Object implements self::A {
   synthetic constructor •() → self::D*
@@ -65,11 +65,11 @@
     : super self::D::•()
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method expectTypeError(() →* dynamic callback) → void {
   try {
-    callback.call();
+    callback(){() →* dynamic};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
@@ -77,9 +77,9 @@
 }
 static method main() → dynamic {
   self::C* c = new self::C::•();
-  self::expectTypeError(() → core::String* => (c as dynamic).foo = "bar");
+  self::expectTypeError(() → core::String* => (c as dynamic){dynamic}.foo = "bar");
   self::E* e = new self::E::•();
-  self::expectTypeError(() → core::int* => e.{self::A::foo});
+  self::expectTypeError(() → core::int* => e.{self::A::foo}{core::int*});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.outline.expect
index 8db6c2b..1dc0f42 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.outline.expect
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::C*
     ;
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 abstract class D extends core::Object implements self::A {
   synthetic constructor •() → self::D*
@@ -61,7 +61,7 @@
   synthetic constructor •() → self::E*
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method expectTypeError(() →* dynamic callback) → void
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.transformed.expect
index 3640888..c260566 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.transformed.expect
@@ -41,7 +41,7 @@
     : super self::B::•()
     ;
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 abstract class D extends core::Object implements self::A {
   synthetic constructor •() → self::D*
@@ -65,11 +65,11 @@
     : super self::D::•()
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method expectTypeError(() →* dynamic callback) → void {
   try {
-    callback.call();
+    callback(){() →* dynamic};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
@@ -77,9 +77,9 @@
 }
 static method main() → dynamic {
   self::C* c = new self::C::•();
-  self::expectTypeError(() → core::String* => (c as dynamic).foo = "bar");
+  self::expectTypeError(() → core::String* => (c as dynamic){dynamic}.foo = "bar");
   self::E* e = new self::E::•();
-  self::expectTypeError(() → core::int* => e.{self::A::foo});
+  self::expectTypeError(() → core::int* => e.{self::A::foo}{core::int*});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.expect
index 94eb66f..bd14f88 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.expect
@@ -34,13 +34,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get foo() → core::List<core::int*>*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::List<core::int*>*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::List<core::int*>*;
   no-such-method-forwarder set foo(generic-covariant-impl core::List<core::int*>* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method expectTypeError(() →* dynamic callback) → void {
   try {
-    callback.call();
+    callback(){() →* dynamic};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
@@ -48,8 +48,8 @@
 }
 static method main() → dynamic {
   self::B* b = new self::B::•();
-  self::expectTypeError(() → core::List<core::int*>* => b.{self::A::foo});
-  self::expectTypeError(() → core::List<dynamic>* => (b as dynamic).foo = <dynamic>[]);
+  self::expectTypeError(() → core::List<core::int*>* => b.{self::A::foo}{core::List<core::int*>*});
+  self::expectTypeError(() → core::List<dynamic>* => (b as dynamic){dynamic}.foo = <dynamic>[]);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.outline.expect
index 5a8b1a0..34e2e03 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.outline.expect
@@ -32,9 +32,9 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get foo() → core::List<core::int*>*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::List<core::int*>*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::List<core::int*>*;
   no-such-method-forwarder set foo(generic-covariant-impl core::List<core::int*>* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method expectTypeError(() →* dynamic callback) → void
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.transformed.expect
index ba39cc0..f79ed2b 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.transformed.expect
@@ -34,13 +34,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get foo() → core::List<core::int*>*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::List<core::int*>*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::List<core::int*>*;
   no-such-method-forwarder set foo(generic-covariant-impl core::List<core::int*>* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method expectTypeError(() →* dynamic callback) → void {
   try {
-    callback.call();
+    callback(){() →* dynamic};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
@@ -48,8 +48,8 @@
 }
 static method main() → dynamic {
   self::B* b = new self::B::•();
-  self::expectTypeError(() → core::List<core::int*>* => b.{self::A::foo});
-  self::expectTypeError(() → core::List<dynamic>* => (b as dynamic).foo = core::_GrowableList::•<dynamic>(0));
+  self::expectTypeError(() → core::List<core::int*>* => b.{self::A::foo}{core::List<core::int*>*});
+  self::expectTypeError(() → core::List<dynamic>* => (b as dynamic){dynamic}.foo = core::_GrowableList::•<dynamic>(0));
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.expect
index 2182bea..f520300 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.expect
@@ -40,7 +40,7 @@
     : super self::A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.outline.expect
index ac147ed..63fd5b6 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.outline.expect
@@ -36,7 +36,7 @@
   synthetic constructor •() → self::B*
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.transformed.expect
index 2182bea..f520300 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.transformed.expect
@@ -40,7 +40,7 @@
     : super self::A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.expect
index 9b5b585..dc49492 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.expect
@@ -7,11 +7,11 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder set push(core::int* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set float(covariant core::int* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
-    return core::print("${this.{self::Base::runtimeType}}: ${i.{core::Invocation::positionalArguments}.{core::List::[]}(0)}");
+    return core::print("${this.{self::Base::runtimeType}{core::Type*}}: ${i.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic}}");
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -32,9 +32,9 @@
     : super self::Base::•()
     ;
   no-such-method-forwarder set push(core::num* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set float(covariant core::num* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {
   core::List<self::Base*>* list = <self::Base*>[new self::Me::•(), new self::You::•()];
@@ -46,14 +46,14 @@
       baba{self::You*}.{self::You::float} = 4.5;
     }
     try {
-      (baba as dynamic).push = 6.7;
+      (baba as dynamic){dynamic}.push = 6.7;
       baba is self::You* || (throw "Fail!");
     }
     on core::TypeError* catch(no-exception-var) {
       baba is self::Me* || (throw "Fail!");
     }
     try {
-      (baba as dynamic).float = 8.9;
+      (baba as dynamic){dynamic}.float = 8.9;
       baba is self::You* || (throw "Fail!");
     }
     on core::TypeError* catch(no-exception-var) {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.outline.expect
index a18f420..f455c15 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.outline.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → self::Base*
     ;
   no-such-method-forwarder set push(core::int* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#push=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#push=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set float(covariant core::int* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#float=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#float=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -29,9 +29,9 @@
   synthetic constructor •() → self::You*
     ;
   no-such-method-forwarder set push(core::num* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#push=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#push=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set float(covariant core::num* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#float=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#float=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.transformed.expect
index ca335bc..61aa1eb 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.transformed.expect
@@ -7,11 +7,11 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder set push(core::int* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set float(covariant core::int* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
-    return core::print("${this.{self::Base::runtimeType}}: ${i.{core::Invocation::positionalArguments}.{core::List::[]}(0)}");
+    return core::print("${this.{self::Base::runtimeType}{core::Type*}}: ${i.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic}}");
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -32,9 +32,9 @@
     : super self::Base::•()
     ;
   no-such-method-forwarder set push(core::num* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set float(covariant core::num* x) → void
-    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {
   core::List<self::Base*>* list = core::_GrowableList::_literal2<self::Base*>(new self::Me::•(), new self::You::•());
@@ -50,14 +50,14 @@
           baba{self::You*}.{self::You::float} = 4.5;
         }
         try {
-          (baba as dynamic).push = 6.7;
+          (baba as dynamic){dynamic}.push = 6.7;
           baba is self::You* || (throw "Fail!");
         }
         on core::TypeError* catch(no-exception-var) {
           baba is self::Me* || (throw "Fail!");
         }
         try {
-          (baba as dynamic).float = 8.9;
+          (baba as dynamic){dynamic}.float = 8.9;
           baba is self::You* || (throw "Fail!");
         }
         on core::TypeError* catch(no-exception-var) {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.expect
index b32f8e5..0cf425b 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.expect
@@ -24,8 +24,8 @@
     : super core::Object::•()
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic {
-    dynamic arg = invocation.{core::Invocation::positionalArguments}.{core::List::[]}(0);
-    return arg is core::String* && arg{core::String*}.{core::String::isNotEmpty};
+    dynamic arg = invocation.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic};
+    return arg is core::String* && arg{core::String*}.{core::String::isNotEmpty}{core::bool*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -37,7 +37,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method eatFood(core::String* food) → core::bool*
-    return this.{self::MockCat::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::MockCat::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 class MockCat2 extends self::MockCat {
   synthetic constructor •() → self::MockCat2*
@@ -50,14 +50,14 @@
     : super self::MockCat2::•()
     ;
   no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C5}) → core::bool*
-    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: amount}))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: amount}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 class MockCat4 extends self::MockCat2 implements self::HungryCat {
   synthetic constructor •() → self::MockCat4*
     : super self::MockCat2::•()
     ;
   no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C5, core::double* yetAnother = #C5}) → core::bool*
-    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: amount, #C7: yetAnother}))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: amount, #C7: yetAnother}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 abstract class HungryCat extends core::Object {
   synthetic constructor •() → self::HungryCat*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect
index 5a2927f..70cdbd7 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect
@@ -33,7 +33,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method eatFood(core::String* food) → core::bool*
-    return this.{self::MockCat::noSuchMethod}(new core::_InvocationMirror::_withType(#eatFood, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::MockCat::noSuchMethod}(new core::_InvocationMirror::_withType(#eatFood, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 class MockCat2 extends self::MockCat {
   synthetic constructor •() → self::MockCat2*
@@ -44,13 +44,13 @@
   synthetic constructor •() → self::MockCat3*
     ;
   no-such-method-forwarder method eatFood(core::String* food, {core::double* amount}) → core::bool*
-    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#eatFood, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#amount: amount}))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#eatFood, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#amount: amount}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 class MockCat4 extends self::MockCat2 implements self::HungryCat {
   synthetic constructor •() → self::MockCat4*
     ;
   no-such-method-forwarder method eatFood(core::String* food, {core::double* amount, core::double* yetAnother}) → core::bool*
-    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#eatFood, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#amount: amount, #yetAnother: yetAnother}))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#eatFood, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#amount: amount, #yetAnother: yetAnother}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 abstract class HungryCat extends core::Object {
   synthetic constructor •() → self::HungryCat*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.transformed.expect
index d5a49ee..708efab 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.transformed.expect
@@ -24,8 +24,8 @@
     : super core::Object::•()
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic {
-    dynamic arg = invocation.{core::Invocation::positionalArguments}.{core::List::[]}(0);
-    return arg is core::String* && arg{core::String*}.{core::String::isNotEmpty};
+    dynamic arg = invocation.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic};
+    return arg is core::String* && arg{core::String*}.{core::String::isNotEmpty}{core::bool*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -37,7 +37,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method eatFood(core::String* food) → core::bool*
-    return this.{self::MockCat::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(food)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::MockCat::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(food)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 class MockCat2 extends self::MockCat {
   synthetic constructor •() → self::MockCat2*
@@ -50,14 +50,14 @@
     : super self::MockCat2::•()
     ;
   no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C5}) → core::bool*
-    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(food)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: amount}))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(food)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: amount}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 class MockCat4 extends self::MockCat2 implements self::HungryCat {
   synthetic constructor •() → self::MockCat4*
     : super self::MockCat2::•()
     ;
   no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C5, core::double* yetAnother = #C5}) → core::bool*
-    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(food)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: amount, #C7: yetAnother}))) as{TypeError,ForDynamic} core::bool*;
+    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(food)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: amount, #C7: yetAnother}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 abstract class HungryCat extends core::Object {
   synthetic constructor •() → self::HungryCat*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.expect
index c38133a..5ca82cf 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.expect
@@ -50,7 +50,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method foo() → dynamic
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
 }
 abstract class _C&A&B = self::A with self::B /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_C&A&B*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.outline.expect
index 0ad0983..d512245 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.outline.expect
@@ -48,7 +48,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method foo() → dynamic
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
 }
 abstract class _C&A&B = self::A with self::B /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_C&A&B*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.transformed.expect
index 24aa28c..a104017 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.transformed.expect
@@ -50,7 +50,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method foo() → dynamic
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
 }
 abstract class _C&A&B extends self::A implements self::B /*isAnonymousMixin,isEliminatedMixin*/  {
   synthetic constructor •() → self::_C&A&B*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.expect
index 72909b5..daa0b7e 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.expect
@@ -7,12 +7,12 @@
     : super core::Object::•()
     ;
   method noSuchMethod(core::Invocation* i) → dynamic {
-    if(i.{core::Invocation::memberName}.{core::Symbol::==}(#C1)) {
-      return i.{core::Invocation::namedArguments}.{core::Map::[]}(#C2);
+    if(i.{core::Invocation::memberName}{core::Symbol*} =={core::Symbol::==}{(core::Object*) →* core::bool*} (#C1)) {
+      return i.{core::Invocation::namedArguments}{core::Map<core::Symbol*, dynamic>*}.{core::Map::[]}(#C2){(core::Object*) →* dynamic};
     }
     else
-      if(i.{core::Invocation::memberName}.{core::Symbol::==}(#C3)) {
-        return i.{core::Invocation::positionalArguments}.{core::List::[]}(0);
+      if(i.{core::Invocation::memberName}{core::Symbol*} =={core::Symbol::==}{(core::Object*) →* core::bool*} (#C3)) {
+        return i.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic};
       }
     return null;
   }
@@ -33,17 +33,17 @@
     : super self::A::•()
     ;
   no-such-method-forwarder method foo({core::String* bar = #C4}) → core::String*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))) as{TypeError,ForDynamic} core::String*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder method hest([core::int* fisk = #C5]) → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   self::B* b = new self::B::•();
   dynamic value;
-  if(!(value = b.{self::A::foo}()).{core::String::==}("baz")) {
+  if(!((value = b.{self::A::foo}(){({bar: core::String*}) →* core::String*}) =={core::String::==}{(core::Object*) →* core::bool*} "baz")) {
     throw "Unexpected value: '${value}'; expected 'baz'.";
   }
-  if(!(value = b.{self::A::hest}()).{core::num::==}(42)) {
+  if(!((value = b.{self::A::hest}(){([core::int*]) →* core::int*}) =={core::num::==}{(core::Object*) →* core::bool*} 42)) {
     throw "Unexpected value: '${value}'; expected '42'.";
   }
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.outline.expect
index 27e25ce..8b928ae 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.outline.expect
@@ -23,9 +23,9 @@
   synthetic constructor •() → self::B*
     ;
   no-such-method-forwarder method foo({core::String* bar}) → core::String*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#bar: bar}))) as{TypeError,ForDynamic} core::String*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#bar: bar}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder method hest([core::int* fisk]) → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#hest, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#hest, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.transformed.expect
index a5a0b39..8ad93c0 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.transformed.expect
@@ -7,12 +7,12 @@
     : super core::Object::•()
     ;
   method noSuchMethod(core::Invocation* i) → dynamic {
-    if(i.{core::Invocation::memberName}.{core::Symbol::==}(#C1)) {
-      return i.{core::Invocation::namedArguments}.{core::Map::[]}(#C2);
+    if(i.{core::Invocation::memberName}{core::Symbol*} =={core::Symbol::==}{(core::Object*) →* core::bool*} (#C1)) {
+      return i.{core::Invocation::namedArguments}{core::Map<core::Symbol*, dynamic>*}.{core::Map::[]}(#C2){(core::Object*) →* dynamic};
     }
     else
-      if(i.{core::Invocation::memberName}.{core::Symbol::==}(#C3)) {
-        return i.{core::Invocation::positionalArguments}.{core::List::[]}(0);
+      if(i.{core::Invocation::memberName}{core::Symbol*} =={core::Symbol::==}{(core::Object*) →* core::bool*} (#C3)) {
+        return i.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic};
       }
     return null;
   }
@@ -33,17 +33,17 @@
     : super self::A::•()
     ;
   no-such-method-forwarder method foo({core::String* bar = #C4}) → core::String*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))) as{TypeError,ForDynamic} core::String*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder method hest([core::int* fisk = #C5]) → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(fisk)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(fisk)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   self::B* b = new self::B::•();
   dynamic value;
-  if(!(value = b.{self::A::foo}()).{core::String::==}("baz")) {
+  if(!((value = b.{self::A::foo}(){({bar: core::String*}) →* core::String*}) =={core::String::==}{(core::Object*) →* core::bool*} "baz")) {
     throw "Unexpected value: '${value}'; expected 'baz'.";
   }
-  if(!(value = b.{self::A::hest}()).{core::num::==}(42)) {
+  if(!((value = b.{self::A::hest}(){([core::int*]) →* core::int*}) =={core::num::==}{(core::Object*) →* core::bool*} 42)) {
     throw "Unexpected value: '${value}'; expected '42'.";
   }
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.expect
index ff918a4..3633d99 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.expect
@@ -50,7 +50,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method foo() → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.outline.expect
index ce29ada..84fb848 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.outline.expect
@@ -47,7 +47,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method foo() → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.transformed.expect
index ff918a4..3633d99 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.transformed.expect
@@ -50,7 +50,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method foo() → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.expect
index d0e5a4c..d34e31b 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.expect
@@ -38,11 +38,11 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get bar() → core::int*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder method baz(core::int* x, {core::String* y = #C1, core::double* z = #C1}) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C7: y, #C8: z})));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C7: y, #C8: z}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
 }
 class C extends self::B {
   synthetic constructor •() → self::C*
@@ -64,15 +64,15 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateGetter() → core::int*
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder get /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateField() → core::int*
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder method /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateMethod() → void
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateSetter(core::int* value) → void
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateField(core::int* value) → void
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
 }
 class F extends self::E {
   synthetic constructor •() → self::F*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect
index dcd9757..094b3e6 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect
@@ -37,11 +37,11 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get bar() → core::int*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#bar, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#bar, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder method baz(core::int* x, {core::String* y, core::double* z}) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#baz, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#y: y, #z: z})));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#baz, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#y: y, #z: z}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 class C extends self::B {
   synthetic constructor •() → self::C*
@@ -61,15 +61,15 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateGetter() → core::int*
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#_privateGetter, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#_privateGetter, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder get /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateField() → core::int*
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#_privateField, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#_privateField, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder method /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateMethod() → void
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#_privateMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#_privateMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateSetter(core::int* value) → void
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#_privateSetter=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#_privateSetter=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateField(core::int* value) → void
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#_privateField=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#_privateField=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 class F extends self::E {
   synthetic constructor •() → self::F*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.transformed.expect
index 410396b..a9d34c1 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.transformed.expect
@@ -38,11 +38,11 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get bar() → core::int*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder method baz(core::int* x, {core::String* y = #C1, core::double* z = #C1}) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C7: y, #C8: z})));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C7: y, #C8: z}))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set foo(core::int* value) → void
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
 }
 class C extends self::B {
   synthetic constructor •() → self::C*
@@ -64,15 +64,15 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateGetter() → core::int*
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder get /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateField() → core::int*
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder method /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateMethod() → void
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateSetter(core::int* value) → void
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
   no-such-method-forwarder set /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateField(core::int* value) → void
-    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
 }
 class F extends self::E {
   synthetic constructor •() → self::F*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.expect
index d4f16a5..d1335fe 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.expect
@@ -34,7 +34,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 abstract class _B&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_B&Object&A*
@@ -57,7 +57,7 @@
     : super self::_B&Object&A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.outline.expect
index 9246c58..50e7958 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.outline.expect
@@ -32,7 +32,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 abstract class _B&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_B&Object&A*
@@ -54,7 +54,7 @@
   synthetic constructor •() → self::B*
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.transformed.expect
index 3a32356..34cb10d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 abstract class _B&Object&A extends core::Object implements self::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_B&Object&A*
@@ -57,7 +57,7 @@
     : super self::_B&Object&A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.expect
index acee4b7..c296d8d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.expect
@@ -40,7 +40,7 @@
     : super self::A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.outline.expect
index 6986170..a80f440 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.outline.expect
@@ -37,7 +37,7 @@
   synthetic constructor •() → self::B*
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.transformed.expect
index acee4b7..c296d8d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.transformed.expect
@@ -40,7 +40,7 @@
     : super self::A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.expect
index 0f6e0f1..11b038f 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.expect
@@ -9,7 +9,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     return null;
   no-such-method-forwarder method foo() → void
-    return this.{self::I::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::I::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -57,7 +57,7 @@
     : super self::_A&Object&M::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 abstract class _B&Object&M = core::Object with self::M /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_B&Object&M*
@@ -80,7 +80,7 @@
     : super self::_B&Object&M::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::_B&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_B&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.outline.expect
index c4af234..1e32f6d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.outline.expect
@@ -8,7 +8,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::I::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::I::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -54,7 +54,7 @@
   synthetic constructor •() → self::A*
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 abstract class _B&Object&M = core::Object with self::M /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_B&Object&M*
@@ -76,7 +76,7 @@
   synthetic constructor •() → self::B*
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::_B&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_B&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.transformed.expect
index a177218..f59813d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     return null;
   no-such-method-forwarder method foo() → void
-    return this.{self::I::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::I::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -57,7 +57,7 @@
     : super self::_A&Object&M::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 abstract class _B&Object&M extends core::Object implements self::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_B&Object&M*
@@ -80,7 +80,7 @@
     : super self::_B&Object&M::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::_B&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_B&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.expect
index 297ab3b..dabbcd8 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.expect
@@ -72,9 +72,9 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get bar() → Null
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} Null;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} Null;
   no-such-method-forwarder set foo(core::num* value) → void
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.outline.expect
index bc566ba..fd16e8c42 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.outline.expect
@@ -71,9 +71,9 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get bar() → Null
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#bar, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} Null;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#bar, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} Null;
   no-such-method-forwarder set foo(core::num* value) → void
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.transformed.expect
index d5f3d88..6b924bd 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.transformed.expect
@@ -72,9 +72,9 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get bar() → Null
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} Null;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} Null;
   no-such-method-forwarder set foo(core::num* value) → void
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.expect
index 068d744..70c94e6 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.expect
@@ -24,7 +24,7 @@
     : super self::A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.outline.expect
index c81571e..19eb325 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.outline.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::B*
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.transformed.expect
index 068d744..70c94e6 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
     : super self::A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.expect
index 920d9ef..3d97e3b 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.expect
@@ -29,7 +29,7 @@
     : super self::B::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.outline.expect
index 59a56b80..dfa0b76 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.outline.expect
@@ -26,7 +26,7 @@
   synthetic constructor •() → self::C*
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.transformed.expect
index 920d9ef..3d97e3b 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
     : super self::B::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.expect
index 9d5a43e..10936ab 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.expect
@@ -23,7 +23,7 @@
     : super self::M::•()
     ;
   no-such-method-forwarder method call(core::String* s) → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[s]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[s]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.outline.expect
index cf93dc7..568adcd 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.outline.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::A*
     ;
   no-such-method-forwarder method call(core::String* s) → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#call, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[s]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#call, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[s]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.transformed.expect
index 0428014..1562403 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     : super self::M::•()
     ;
   no-such-method-forwarder method call(core::String* s) → void
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(s)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(s)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.expect
index 7c7b366..6c574dd 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.expect
@@ -40,7 +40,7 @@
     : super self::_B&Object&A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.outline.expect
index 1a05075..7e408bc 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.outline.expect
@@ -37,7 +37,7 @@
   synthetic constructor •() → self::B*
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.transformed.expect
index a38cf96..2b5bfe3 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.transformed.expect
@@ -41,7 +41,7 @@
     : super self::_B&Object&A::•()
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.expect
index 735122a..fe2544d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.expect
@@ -26,7 +26,7 @@
     : super self::Foo::•()
     ;
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 class Baz extends self::Foo implements pri::Fisk {
   synthetic constructor •() → self::Baz*
@@ -35,7 +35,7 @@
   method _hest() → dynamic
     return null;
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.outline.expect
index 2d1038e..0808248 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.outline.expect
@@ -24,7 +24,7 @@
   synthetic constructor •() → self::Bar*
     ;
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_hest, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_hest, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 class Baz extends self::Foo implements pri::Fisk {
   synthetic constructor •() → self::Baz*
@@ -32,7 +32,7 @@
   method _hest() → dynamic
     ;
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_hest, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_hest, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.transformed.expect
index 735122a..fe2544d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
     : super self::Foo::•()
     ;
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 class Baz extends self::Foo implements pri::Fisk {
   synthetic constructor •() → self::Baz*
@@ -35,7 +35,7 @@
   method _hest() → dynamic
     return null;
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.expect
index 44124fc..ed53431 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.expect
@@ -25,7 +25,7 @@
   method noSuchMethod(core::Invocation* invocation) → dynamic
     return null;
   no-such-method-forwarder method _foo() → void
-    return this.{self::Bar::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Bar::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.outline.expect
index 40e53fb..0dd40c8 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.outline.expect
@@ -23,7 +23,7 @@
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
   no-such-method-forwarder method _foo() → void
-    return this.{self::Bar::noSuchMethod}(new core::_InvocationMirror::_withType(#_foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::Bar::noSuchMethod}(new core::_InvocationMirror::_withType(#_foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.transformed.expect
index 44124fc..ed53431 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
   method noSuchMethod(core::Invocation* invocation) → dynamic
     return null;
   no-such-method-forwarder method _foo() → void
-    return this.{self::Bar::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::Bar::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.expect
index d7d3047..864895d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.expect
@@ -10,7 +10,7 @@
     return null;
   }
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.outline.expect
index b321f75..98fba7e 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.outline.expect
@@ -8,7 +8,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.transformed.expect
index d7d3047..864895d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     return null;
   }
   no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.expect
index b37c6af5..938f3bd 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.expect
@@ -18,7 +18,7 @@
     ;
   method foo(core::int* x) → void {}
   no-such-method-forwarder set foo(core::int* x) → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.outline.expect
index 7c74a0a..5bae423 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.outline.expect
@@ -18,7 +18,7 @@
   method foo(core::int* x) → void
     ;
   no-such-method-forwarder set foo(core::int* x) → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.transformed.expect
index a110b1a..20c7622 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
     ;
   method foo(core::int* x) → void {}
   no-such-method-forwarder set foo(core::int* x) → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.expect
index 3676843..24d4686 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.expect
@@ -56,7 +56,7 @@
     : super self::_A&Object&M::•()
     ;
   no-such-method-forwarder method foo() → core::int*
-    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.outline.expect
index 80e949b..ca3cde3 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.outline.expect
@@ -52,7 +52,7 @@
   synthetic constructor •() → self::A*
     ;
   no-such-method-forwarder method foo() → core::int*
-    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.transformed.expect
index 84fdbfc..d830d60 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.transformed.expect
@@ -57,7 +57,7 @@
     : super self::_A&Object&M::•()
     ;
   no-such-method-forwarder method foo() → core::int*
-    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.strong.expect
index b0f5897..61ac447 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.strong.expect
@@ -116,26 +116,26 @@
     : super core::Object::•()
     ;
   method instance1<X extends self::A<self::Class::instance1::X> = self::A<dynamic>>(() → self::A<self::Class::instance1::X> g) → void
-    return g.call();
+    return g(){() → self::A<self::Class::instance1::X>};
   method instance2<X extends self::A<self::Class::instance2::X> = self::A<dynamic>>(() → self::A<self::Class::instance2::X> g) → void
-    return g.call();
+    return g(){() → self::A<self::Class::instance2::X>};
   method test() → void {
     function local1<X extends self::A<X> = self::A<dynamic>>(() → self::A<X> g) → void
-      return g.call();
+      return g(){() → self::A<X>};
     function local2<X extends self::A<X> = self::A<dynamic>>(() → self::A<X> g) → void
-      return g.call();
+      return g(){() → self::A<X>};
     <X extends self::A<X> = self::A<dynamic>>(() → self::A<X>) → void f1 = local1;
     <X extends self::A<X> = self::A<dynamic>>(() → self::A<X>) → void f2 = local2;
     new self::A::•<self::A<core::Object?>>();
     new self::A::•<self::A<core::Object?>>();
-    f1.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    f2.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    local1.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    local2.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
+    f1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    f2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    local1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    local2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
     self::topLevel1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
     self::topLevel2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    this.{self::Class::instance1}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    this.{self::Class::instance2}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
+    this.{self::Class::instance1}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    this.{self::Class::instance2}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
   }
 }
 class Subclass extends self::Class {
@@ -154,7 +154,7 @@
   throw "Error";
 }
 static method topLevel1<X extends self::A<self::topLevel1::X> = self::A<dynamic>>(() → self::A<self::topLevel1::X> g) → void
-  return g.call();
+  return g(){() → self::A<self::topLevel1::X>};
 static method topLevel2<X extends self::A<self::topLevel2::X> = self::A<dynamic>>(() → self::A<self::topLevel2::X> g) → void
-  return g.call();
+  return g(){() → self::A<self::topLevel2::X>};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.strong.transformed.expect
index b0f5897..61ac447 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.strong.transformed.expect
@@ -116,26 +116,26 @@
     : super core::Object::•()
     ;
   method instance1<X extends self::A<self::Class::instance1::X> = self::A<dynamic>>(() → self::A<self::Class::instance1::X> g) → void
-    return g.call();
+    return g(){() → self::A<self::Class::instance1::X>};
   method instance2<X extends self::A<self::Class::instance2::X> = self::A<dynamic>>(() → self::A<self::Class::instance2::X> g) → void
-    return g.call();
+    return g(){() → self::A<self::Class::instance2::X>};
   method test() → void {
     function local1<X extends self::A<X> = self::A<dynamic>>(() → self::A<X> g) → void
-      return g.call();
+      return g(){() → self::A<X>};
     function local2<X extends self::A<X> = self::A<dynamic>>(() → self::A<X> g) → void
-      return g.call();
+      return g(){() → self::A<X>};
     <X extends self::A<X> = self::A<dynamic>>(() → self::A<X>) → void f1 = local1;
     <X extends self::A<X> = self::A<dynamic>>(() → self::A<X>) → void f2 = local2;
     new self::A::•<self::A<core::Object?>>();
     new self::A::•<self::A<core::Object?>>();
-    f1.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    f2.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    local1.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    local2.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
+    f1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    f2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    local1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    local2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
     self::topLevel1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
     self::topLevel2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    this.{self::Class::instance1}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    this.{self::Class::instance2}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
+    this.{self::Class::instance1}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    this.{self::Class::instance2}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
   }
 }
 class Subclass extends self::Class {
@@ -154,7 +154,7 @@
   throw "Error";
 }
 static method topLevel1<X extends self::A<self::topLevel1::X> = self::A<dynamic>>(() → self::A<self::topLevel1::X> g) → void
-  return g.call();
+  return g(){() → self::A<self::topLevel1::X>};
 static method topLevel2<X extends self::A<self::topLevel2::X> = self::A<dynamic>>(() → self::A<self::topLevel2::X> g) → void
-  return g.call();
+  return g(){() → self::A<self::topLevel2::X>};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.weak.expect
index b0f5897..61ac447 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.weak.expect
@@ -116,26 +116,26 @@
     : super core::Object::•()
     ;
   method instance1<X extends self::A<self::Class::instance1::X> = self::A<dynamic>>(() → self::A<self::Class::instance1::X> g) → void
-    return g.call();
+    return g(){() → self::A<self::Class::instance1::X>};
   method instance2<X extends self::A<self::Class::instance2::X> = self::A<dynamic>>(() → self::A<self::Class::instance2::X> g) → void
-    return g.call();
+    return g(){() → self::A<self::Class::instance2::X>};
   method test() → void {
     function local1<X extends self::A<X> = self::A<dynamic>>(() → self::A<X> g) → void
-      return g.call();
+      return g(){() → self::A<X>};
     function local2<X extends self::A<X> = self::A<dynamic>>(() → self::A<X> g) → void
-      return g.call();
+      return g(){() → self::A<X>};
     <X extends self::A<X> = self::A<dynamic>>(() → self::A<X>) → void f1 = local1;
     <X extends self::A<X> = self::A<dynamic>>(() → self::A<X>) → void f2 = local2;
     new self::A::•<self::A<core::Object?>>();
     new self::A::•<self::A<core::Object?>>();
-    f1.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    f2.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    local1.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    local2.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
+    f1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    f2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    local1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    local2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
     self::topLevel1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
     self::topLevel2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    this.{self::Class::instance1}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    this.{self::Class::instance2}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
+    this.{self::Class::instance1}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    this.{self::Class::instance2}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
   }
 }
 class Subclass extends self::Class {
@@ -154,7 +154,7 @@
   throw "Error";
 }
 static method topLevel1<X extends self::A<self::topLevel1::X> = self::A<dynamic>>(() → self::A<self::topLevel1::X> g) → void
-  return g.call();
+  return g(){() → self::A<self::topLevel1::X>};
 static method topLevel2<X extends self::A<self::topLevel2::X> = self::A<dynamic>>(() → self::A<self::topLevel2::X> g) → void
-  return g.call();
+  return g(){() → self::A<self::topLevel2::X>};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.weak.transformed.expect
index b0f5897..61ac447 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.weak.transformed.expect
@@ -116,26 +116,26 @@
     : super core::Object::•()
     ;
   method instance1<X extends self::A<self::Class::instance1::X> = self::A<dynamic>>(() → self::A<self::Class::instance1::X> g) → void
-    return g.call();
+    return g(){() → self::A<self::Class::instance1::X>};
   method instance2<X extends self::A<self::Class::instance2::X> = self::A<dynamic>>(() → self::A<self::Class::instance2::X> g) → void
-    return g.call();
+    return g(){() → self::A<self::Class::instance2::X>};
   method test() → void {
     function local1<X extends self::A<X> = self::A<dynamic>>(() → self::A<X> g) → void
-      return g.call();
+      return g(){() → self::A<X>};
     function local2<X extends self::A<X> = self::A<dynamic>>(() → self::A<X> g) → void
-      return g.call();
+      return g(){() → self::A<X>};
     <X extends self::A<X> = self::A<dynamic>>(() → self::A<X>) → void f1 = local1;
     <X extends self::A<X> = self::A<dynamic>>(() → self::A<X>) → void f2 = local2;
     new self::A::•<self::A<core::Object?>>();
     new self::A::•<self::A<core::Object?>>();
-    f1.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    f2.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    local1.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    local2.call<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
+    f1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    f2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    local1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    local2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
     self::topLevel1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
     self::topLevel2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    this.{self::Class::instance1}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
-    this.{self::Class::instance2}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
+    this.{self::Class::instance1}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    this.{self::Class::instance2}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
   }
 }
 class Subclass extends self::Class {
@@ -154,7 +154,7 @@
   throw "Error";
 }
 static method topLevel1<X extends self::A<self::topLevel1::X> = self::A<dynamic>>(() → self::A<self::topLevel1::X> g) → void
-  return g.call();
+  return g(){() → self::A<self::topLevel1::X>};
 static method topLevel2<X extends self::A<self::topLevel2::X> = self::A<dynamic>>(() → self::A<self::topLevel2::X> g) → void
-  return g.call();
+  return g(){() → self::A<self::topLevel2::X>};
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/cascades.dart.weak.expect b/pkg/front_end/testcases/rasta/cascades.dart.weak.expect
index e2ebba6..73ffa41 100644
--- a/pkg/front_end/testcases/rasta/cascades.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/cascades.dart.weak.expect
@@ -24,6 +24,6 @@
   function f(dynamic x) → dynamic
     return x;
   let final self::A* #t1 = a in block {
-    #t1.{self::A::add}(f).call("WHAT");
+    #t1.{self::A::add}(f){(dynamic) →* dynamic}{dynamic}.call("WHAT");
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/rasta/cascades.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/cascades.dart.weak.transformed.expect
index e2ebba6..73ffa41 100644
--- a/pkg/front_end/testcases/rasta/cascades.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/cascades.dart.weak.transformed.expect
@@ -24,6 +24,6 @@
   function f(dynamic x) → dynamic
     return x;
   let final self::A* #t1 = a in block {
-    #t1.{self::A::add}(f).call("WHAT");
+    #t1.{self::A::add}(f){(dynamic) →* dynamic}{dynamic}.call("WHAT");
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.expect
index 0a4e983..71f1044 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.expect
@@ -12,7 +12,7 @@
     : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Foo::_name};
+    return this.{self::Foo::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.outline.expect
index a6d72f1..5df7acc 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Foo::_name};
+    return this.{self::Foo::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
index 0a4e983..71f1044 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
     : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
     ;
   method toString() → core::String*
-    return this.{self::Foo::_name};
+    return this.{self::Foo::_name}{core::String*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/rasta/for_loop.dart.weak.expect b/pkg/front_end/testcases/rasta/for_loop.dart.weak.expect
index e3bd4bb..94b2d41 100644
--- a/pkg/front_end/testcases/rasta/for_loop.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/for_loop.dart.weak.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* c = new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch};
-  for (core::int* i = 0; i.{core::num::<}(100); i = i.{core::num::+}(1)) {
-    core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1) in #t1);
+  core::int* c = new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*};
+  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1);
   }
-  for (core::int* i = 0; i.{core::num::<}(100); c.{core::num::<}(42) ?{core::int*} throw "fisk" : let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1) in #t3) {
-    core::print(let final core::int* #t5 = i in let final core::int* #t6 = i = #t5.{core::num::+}(1) in #t5);
+  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; c.{core::num::<}(42){(core::num*) →* core::bool*} ?{core::int*} throw "fisk" : let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3) {
+    core::print(let final core::int* #t5 = i in let final core::int* #t6 = i = #t5.{core::num::+}(1){(core::num*) →* core::int*} in #t5);
   }
 }
diff --git a/pkg/front_end/testcases/rasta/for_loop.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/for_loop.dart.weak.transformed.expect
index e3bd4bb..94b2d41 100644
--- a/pkg/front_end/testcases/rasta/for_loop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/for_loop.dart.weak.transformed.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::int* c = new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch};
-  for (core::int* i = 0; i.{core::num::<}(100); i = i.{core::num::+}(1)) {
-    core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1) in #t1);
+  core::int* c = new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*};
+  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1);
   }
-  for (core::int* i = 0; i.{core::num::<}(100); c.{core::num::<}(42) ?{core::int*} throw "fisk" : let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1) in #t3) {
-    core::print(let final core::int* #t5 = i in let final core::int* #t6 = i = #t5.{core::num::+}(1) in #t5);
+  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; c.{core::num::<}(42){(core::num*) →* core::bool*} ?{core::int*} throw "fisk" : let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3) {
+    core::print(let final core::int* #t5 = i in let final core::int* #t6 = i = #t5.{core::num::+}(1){(core::num*) →* core::int*} in #t5);
   }
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.expect
index 0b76554..90a6469 100644
--- a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.expect
@@ -27,6 +27,6 @@
 }
 static field core::List<core::int*>* list = <core::int*>[1, 2, 3];
 static method main() → dynamic {
-  exp::Expect::isTrue(typ::Uint8List::fromList(self::list).{core::List::[]}(1).{core::num::==}(2));
-  exp::Expect::isTrue(self::Foo::fac(10).{self::Foo::value}.{core::Object::==}(10));
+  exp::Expect::isTrue(typ::Uint8List::fromList(self::list).{core::List::[]}(1){(core::int*) →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2);
+  exp::Expect::isTrue(self::Foo::fac(10).{self::Foo::value}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 10);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.transformed.expect
index 669881c..8a8d79b 100644
--- a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.transformed.expect
@@ -27,6 +27,6 @@
 }
 static field core::List<core::int*>* list = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
 static method main() → dynamic {
-  exp::Expect::isTrue(typ::Uint8List::fromList(self::list).{core::List::[]}(1).{core::num::==}(2));
-  exp::Expect::isTrue(self::Foo::fac(10).{self::Foo::value}.{core::Object::==}(10));
+  exp::Expect::isTrue(typ::Uint8List::fromList(self::list).{core::List::[]}(1){(core::int*) →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2);
+  exp::Expect::isTrue(self::Foo::fac(10).{self::Foo::value}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 10);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.expect
index f7d1185..8b66203 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.expect
@@ -9,7 +9,7 @@
 static method fact4() → dynamic {
   core::int* f = 1;
   for (core::int* n in <core::int*>[1, 2, 3, 4]) {
-    f = f.{core::num::*}(n);
+    f = f.{core::num::*}(n){(core::num*) →* core::int*};
   }
   return f;
 }
@@ -18,7 +18,7 @@
   dynamic n;
   for (final dynamic #t1 in <dynamic>[1, 2, 3, 4, 5]) {
     n = #t1;
-    f = f.{core::num::*}(n as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
+    f = f.{core::num::*}(n as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
   }
   return f;
 }
@@ -26,12 +26,12 @@
   core::int* f = 1;
   for (final dynamic #t2 in <dynamic>[1, 2, 3, 4, 5, 6]) {
     self::global = #t2;
-    f = f.{core::num::*}(self::global as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
+    f = f.{core::num::*}(self::global as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
   }
   return f;
 }
 static method main() → dynamic {
-  exp::Expect::isTrue(self::fact4().{core::Object::==}(24));
-  exp::Expect::isTrue(self::fact5().{core::Object::==}(120));
-  exp::Expect::isTrue(self::fact6().{core::Object::==}(720));
+  exp::Expect::isTrue(self::fact4() =={core::Object::==}{(core::Object*) →* core::bool*} 24);
+  exp::Expect::isTrue(self::fact5() =={core::Object::==}{(core::Object*) →* core::bool*} 120);
+  exp::Expect::isTrue(self::fact6() =={core::Object::==}{(core::Object*) →* core::bool*} 720);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.transformed.expect
index 9abdbc2..533f9ab 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       core::int* n = :sync-for-iterator.{core::Iterator::current};
       {
-        f = f.{core::num::*}(n);
+        f = f.{core::num::*}(n){(core::num*) →* core::int*};
       }
     }
   }
@@ -28,7 +28,7 @@
       final dynamic #t1 = :sync-for-iterator.{core::Iterator::current};
       {
         n = #t1;
-        f = f.{core::num::*}(n as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
+        f = f.{core::num::*}(n as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
       }
     }
   }
@@ -42,14 +42,14 @@
       final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
       {
         self::global = #t2;
-        f = f.{core::num::*}(self::global as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
+        f = f.{core::num::*}(self::global as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
       }
     }
   }
   return f;
 }
 static method main() → dynamic {
-  exp::Expect::isTrue(self::fact4().{core::Object::==}(24));
-  exp::Expect::isTrue(self::fact5().{core::Object::==}(120));
-  exp::Expect::isTrue(self::fact6().{core::Object::==}(720));
+  exp::Expect::isTrue(self::fact4() =={core::Object::==}{(core::Object*) →* core::bool*} 24);
+  exp::Expect::isTrue(self::fact5() =={core::Object::==}{(core::Object*) →* core::bool*} 120);
+  exp::Expect::isTrue(self::fact6() =={core::Object::==}{(core::Object*) →* core::bool*} 720);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.expect
index a79616d..d8e5d49 100644
--- a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.expect
@@ -4,5 +4,5 @@
 
 static field core::List<core::int*>* list = <core::int*>[1, 2, 3];
 static method main() → dynamic {
-  self::list.{core::List::add}(1);
+  self::list.{core::List::add}(1){(core::int*) →* void};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.transformed.expect
index 435535b..f8135d2 100644
--- a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.transformed.expect
@@ -4,5 +4,5 @@
 
 static field core::List<core::int*>* list = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
 static method main() → dynamic {
-  self::list.{core::List::add}(1);
+  self::list.{core::List::add}(1){(core::int*) →* void};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.expect
index d37774c..6cd1688 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.expect
@@ -47,5 +47,5 @@
     ;
 }
 static method main() → dynamic {
-  new self::Sub::•().{self::_Sub&Base&Mixin::foo}();
+  new self::Sub::•().{self::_Sub&Base&Mixin::foo}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.transformed.expect
index 3961807..ed3512d 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.transformed.expect
@@ -47,5 +47,5 @@
     ;
 }
 static method main() → dynamic {
-  new self::Sub::•().{self::_Sub&Base&Mixin::foo}();
+  new self::Sub::•().{self::_Sub&Base&Mixin::foo}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.expect
index 955bf4c..e6e3429 100644
--- a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.expect
@@ -27,5 +27,5 @@
   }
 }
 static method main() → dynamic {
-  new self::B::•().{self::B::m}();
+  new self::B::•().{self::B::m}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.transformed.expect
index 955bf4c..e6e3429 100644
--- a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.transformed.expect
@@ -27,5 +27,5 @@
   }
 }
 static method main() → dynamic {
-  new self::B::•().{self::B::m}();
+  new self::B::•().{self::B::m}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.expect
index b3330742..9e127fd 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   field dynamic a = null;
   field core::int* b = 0;
-  field core::int* c = 1.{core::num::+}(2);
+  field core::int* c = 1.{core::num::+}(2){(core::num*) →* core::int*};
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
@@ -23,7 +23,7 @@
 class D extends core::Object {
   field dynamic a = null;
   field core::int* b = 1;
-  field core::int* c = 2.{core::num::-}(3);
+  field core::int* c = 2.{core::num::-}(3){(core::num*) →* core::int*};
   constructor •() → self::D*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.transformed.expect
index d8064f6..d859b4b 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   field dynamic a = null;
   field core::int* b = 0;
-  field core::int* c = 1.{core::num::+}(2);
+  field core::int* c = 1.{core::num::+}(2){(core::num*) →* core::int*};
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
@@ -23,7 +23,7 @@
 class D extends core::Object {
   field dynamic a = null;
   field core::int* b = 1;
-  field core::int* c = 2.{core::num::-}(3);
+  field core::int* c = 2.{core::num::-}(3){(core::num*) →* core::int*};
   constructor •() → self::D*
     : super core::Object::•()
     ;
@@ -45,6 +45,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///issue_000026.dart:8:13 -> IntConstant(3)
-Evaluated: MethodInvocation @ org-dartlang-testcase:///issue_000026.dart:14:13 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue_000026.dart:8:13 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue_000026.dart:14:13 -> IntConstant(-1)
 Extra constant evaluation: evaluated: 4, effectively constant: 2
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.expect
index 10e6c4d..0485f14 100644
--- a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.expect
@@ -15,6 +15,6 @@
   let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000031.dart:8:3: Error: A prefix can't be used as an expression.
   math..toString();
   ^^^^" in block {
-    #t1.{core::Object::toString}();
+    #t1.{core::Object::toString}(){() →* core::String*};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.transformed.expect
index 10e6c4d..0485f14 100644
--- a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.transformed.expect
@@ -15,6 +15,6 @@
   let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000031.dart:8:3: Error: A prefix can't be used as an expression.
   math..toString();
   ^^^^" in block {
-    #t1.{core::Object::toString}();
+    #t1.{core::Object::toString}(){() →* core::String*};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.expect
index 433f8d9..27dc313 100644
--- a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.expect
@@ -18,4 +18,4 @@
   return invalid-expression "pkg/front_end/testcases/rasta/issue_000036.dart:5:14: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
 main() => a. - 5;
-             ^".-(5);
+             ^"{dynamic}.-(5);
diff --git a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.transformed.expect
index 433f8d9..27dc313 100644
--- a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.transformed.expect
@@ -18,4 +18,4 @@
   return invalid-expression "pkg/front_end/testcases/rasta/issue_000036.dart:5:14: Error: Expected an identifier, but got ''.
 Try inserting an identifier before ''.
 main() => a. - 5;
-             ^".-(5);
+             ^"{dynamic}.-(5);
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.expect
index 0c48907..63fc41c 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.expect
@@ -22,7 +22,7 @@
   method test() → dynamic {
     self::use(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:9: Error: This couldn't be parsed.
     use(+super);
-        ^".+(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:10: Error: Can't use 'super' as an expression.
+        ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:10: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     use(+super);
          ^^^^^"));
@@ -41,5 +41,5 @@
 static method use(dynamic _) → dynamic
   return null;
 static method main() → dynamic {
-  new self::C::•().{self::C::test}();
+  new self::C::•().{self::C::test}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.transformed.expect
index 0c48907..63fc41c 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
   method test() → dynamic {
     self::use(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:9: Error: This couldn't be parsed.
     use(+super);
-        ^".+(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:10: Error: Can't use 'super' as an expression.
+        ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:10: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     use(+super);
          ^^^^^"));
@@ -41,5 +41,5 @@
 static method use(dynamic _) → dynamic
   return null;
 static method main() → dynamic {
-  new self::C::•().{self::C::test}();
+  new self::C::•().{self::C::test}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.expect
index dd43e98..0c2f2cb 100644
--- a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   get x() → dynamic
-    return "${#C1}".{core::String::hashCode};
+    return "${#C1}".{core::String::hashCode}{core::int*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.transformed.expect
index dd43e98..0c2f2cb 100644
--- a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   get x() → dynamic
-    return "${#C1}".{core::String::hashCode};
+    return "${#C1}".{core::String::hashCode}{core::int*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
index 24463fa..9513300 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
@@ -104,7 +104,7 @@
   print(const C.missingFactoryKeyword());
               ^");
   core::print(#C1);
-  core::print(new self::C::constant().{self::C::notEvenAConstructor}(null));
+  core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) →* self::C*});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
index 640e041..186f22a 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
@@ -104,7 +104,7 @@
   print(const C.missingFactoryKeyword());
               ^");
   core::print(#C1);
-  core::print(new self::C::constant().{self::C::notEvenAConstructor}(null));
+  core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) →* self::C*});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.expect
index bfd2076..4c2e652 100644
--- a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.expect
@@ -6,5 +6,5 @@
   function f() → Null {
     core::print("hello");
   }
-  f.call();
+  f(){() →* Null};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.transformed.expect
index bfd2076..4c2e652 100644
--- a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.transformed.expect
@@ -6,5 +6,5 @@
   function f() → Null {
     core::print("hello");
   }
-  f.call();
+  f(){() →* Null};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.expect
index b732bad..f4841de 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.expect
@@ -22,5 +22,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::test}();
+  new self::C::•().{self::C::test}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.transformed.expect
index b732bad..f4841de 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.transformed.expect
@@ -22,5 +22,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::test}();
+  new self::C::•().{self::C::test}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
index 72b1c0e..033c0fd 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
@@ -43,5 +43,5 @@
 }
 static method main() → dynamic {
   self::A* a = new self::D::•();
-  exp::Expect::equals(2, a.{self::A::m}());
+  exp::Expect::equals(2, a.{self::A::m}(){() →* core::int*});
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
index 78a21ce..d34604a 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
@@ -43,5 +43,5 @@
 }
 static method main() → dynamic {
   self::A* a = new self::D::•();
-  exp::Expect::equals(2, a.{self::A::m}());
+  exp::Expect::equals(2, a.{self::A::m}(){() →* core::int*});
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.expect
index 12a916f..07c2ec1 100644
--- a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.expect
@@ -5,7 +5,7 @@
 static method main() → dynamic {
   dynamic x;
   core::int* i = 0;
-  while ((let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1) in #t1).{core::num::<}(5)) {
+  while ((let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1).{core::num::<}(5){(core::num*) →* core::bool*}) {
     core::int* x = i;
   }
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.transformed.expect
index 12a916f..07c2ec1 100644
--- a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 static method main() → dynamic {
   dynamic x;
   core::int* i = 0;
-  while ((let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1) in #t1).{core::num::<}(5)) {
+  while ((let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1).{core::num::<}(5){(core::num*) →* core::bool*}) {
     core::int* x = i;
   }
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.expect
index fcbc6d2..18d9024 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.expect
@@ -22,7 +22,7 @@
     return new self::A::empty<self::A::f::N*, self::A::f::S*, self::A::f::U*>();
   }
   get getter() → core::List<self::A::U*>* {
-    return this.{self::A::field};
+    return this.{self::A::field}{core::List<self::A::U*>*};
   }
   set setter(generic-covariant-impl self::A::S* s) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -60,7 +60,7 @@
   new self::A::•<core::num*, core::double*, core::List<dynamic>*>(1, 2.0);
   self::A<dynamic, dynamic, dynamic>* a = self::A::f<core::int*, core::int*, core::int*>(1);
   #C3;
-  core::List<dynamic>* z = a.{self::A::getter};
+  core::List<dynamic>* z = a.{self::A::getter}{core::List<dynamic>*};
   a.{self::A::setter} = 1;
 }
 
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.transformed.expect
index 41a034d..9534f31 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
     return new self::A::empty<self::A::f::N*, self::A::f::S*, self::A::f::U*>();
   }
   get getter() → core::List<self::A::U*>* {
-    return this.{self::A::field};
+    return this.{self::A::field}{core::List<self::A::U*>*};
   }
   set setter(generic-covariant-impl self::A::S* s) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -60,7 +60,7 @@
   new self::A::•<core::num*, core::double*, core::List<dynamic>*>(1, 2.0);
   self::A<dynamic, dynamic, dynamic>* a = self::A::f<core::int*, core::int*, core::int*>(1);
   #C3;
-  core::List<dynamic>* z = a.{self::A::getter};
+  core::List<dynamic>* z = a.{self::A::getter}{core::List<dynamic>*};
   a.{self::A::setter} = 1;
 }
 
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.expect
index 102e810..e61a3ce 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.expect
@@ -53,5 +53,5 @@
 static method main() → dynamic {
   self::Foo* f = new self::Foo::•();
   f.{self::_Foo&Object&Mixin::field} = 42;
-  core::print(f.{self::Foo::bar}());
+  core::print(f.{self::Foo::bar}(){() →* dynamic});
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.transformed.expect
index c8a45db..8e37860 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.transformed.expect
@@ -50,5 +50,5 @@
 static method main() → dynamic {
   self::Foo* f = new self::Foo::•();
   f.{self::_Foo&Object&Mixin::field} = 42;
-  core::print(f.{self::Foo::bar}());
+  core::print(f.{self::Foo::bar}(){() →* dynamic});
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.expect
index a132ec8..5549963 100644
--- a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.expect
@@ -23,13 +23,13 @@
     : super self::Base::•()
     ;
   get hashCode() → core::int*
-    return let final core::int* #t1 = this.{self::Sub::_hashCode} in #t1.{core::num::==}(null) ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1;
+    return let final core::int* #t1 = this.{self::Sub::_hashCode}{core::int*} in #t1 == null ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1;
   method foo() → dynamic {
-    this.{self::Sub::_hashCode}.{core::num::==}(null) ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
+    this.{self::Sub::_hashCode}{core::int*} == null ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
   }
 }
 static method main() → dynamic {
-  core::print(new self::Sub::•().{self::Sub::hashCode});
+  core::print(new self::Sub::•().{self::Sub::hashCode}{core::int*});
   core::List<Null>* l = <Null>[null];
-  let final core::List<Null>* #t2 = l in let final core::int* #t3 = 0 in #t2.{core::List::[]}(#t3).{core::Object::==}(null) ?{core::String*} #t2.{core::List::[]=}(#t3, "fisk" as{TypeError} Null) : null;
+  let final core::List<Null>* #t2 = l in let final core::int* #t3 = 0 in #t2.{core::List::[]}(#t3){(core::int*) →* Null} == null ?{core::String*} #t2.{core::List::[]=}(#t3, "fisk" as{TypeError} Null){(core::int*, Null) →* void} : null;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.transformed.expect
index b1d4d3f..5e4e553 100644
--- a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.transformed.expect
@@ -23,15 +23,15 @@
     : super self::Base::•()
     ;
   get hashCode() → core::int*
-    return let final core::int* #t1 = this.{self::Sub::_hashCode} in #t1.{core::num::==}(null) ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1;
+    return let final core::int* #t1 = this.{self::Sub::_hashCode}{core::int*} in #t1 == null ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1;
   method foo() → dynamic {
-    this.{self::Sub::_hashCode}.{core::num::==}(null) ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
+    this.{self::Sub::_hashCode}{core::int*} == null ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
   }
 }
 static method main() → dynamic {
-  core::print(new self::Sub::•().{self::Sub::hashCode});
+  core::print(new self::Sub::•().{self::Sub::hashCode}{core::int*});
   core::List<Null>* l = core::_GrowableList::_literal1<Null>(null);
-  let final core::List<Null>* #t2 = l in let final core::int* #t3 = 0 in #t2.{core::List::[]}(#t3).{core::Object::==}(null) ?{core::String*} #t2.{core::List::[]=}(#t3, "fisk" as{TypeError} Null) : null;
+  let final core::List<Null>* #t2 = l in let final core::int* #t3 = 0 in #t2.{core::List::[]}(#t3){(core::int*) →* Null} == null ?{core::String*} #t2.{core::List::[]=}(#t3, "fisk" as{TypeError} Null){(core::int*, Null) →* void} : null;
 }
 
 
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.expect
index 353bded..bca934b 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.expect
@@ -18,7 +18,7 @@
     : super core::Object::•()
     ;
   method foo() → dynamic
-    return super.foo().+(self::f());
+    return super.foo(){dynamic}.+(self::f());
   method g(generic-covariant-impl self::Mixin::T* a) → self::Mixin::T*
     return null;
   method h() → dynamic
@@ -28,7 +28,7 @@
   method _privateMethod() → dynamic
     return 49;
   method publicMethod() → dynamic
-    return this.{self::Mixin::_privateMethod}();
+    return this.{self::Mixin::_privateMethod}(){() →* dynamic};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -47,4 +47,4 @@
 static method _private() → dynamic
   return 117;
 static method foo(dynamic m) → dynamic
-  return m._privateMethod();
+  return m{dynamic}._privateMethod();
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.weak.expect b/pkg/front_end/testcases/rasta/parser_error.dart.weak.expect
index 1b9b0f8..6547bf2 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.weak.expect
@@ -29,7 +29,7 @@
   if (?b) return b;  /// 01: compile-time error
         ^") as{TypeError,ForDynamic} core::bool*)
     return b as{TypeError,ForDynamic} core::int*;
-  return a.+(b).+(c) as{TypeError,ForDynamic} core::int*;
+  return a{dynamic}.+(b){dynamic}.+(c) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   exp::Expect::equals(6, self::test(1, b: 2, c: 3));
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/parser_error.dart.weak.transformed.expect
index a7bf51f..a26a0de 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
   if (?b) return b;  /// 01: compile-time error
         ^") as{TypeError,ForDynamic} core::bool*)
     return b as{TypeError,ForDynamic} core::int*;
-  return a.+(b).+(c) as{TypeError,ForDynamic} core::int*;
+  return a{dynamic}.+(b){dynamic}.+(c) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   exp::Expect::equals(6, self::test(1, b: 2, c: 3));
diff --git a/pkg/front_end/testcases/rasta/static.dart.weak.expect b/pkg/front_end/testcases/rasta/static.dart.weak.expect
index b43a9e5..79e268c 100644
--- a/pkg/front_end/testcases/rasta/static.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.weak.expect
@@ -183,7 +183,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic x) → dynamic {
-  if(x.{core::Object::==}(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
+  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
@@ -208,8 +208,8 @@
     self::use(let final core::int* #t1 = #C1 in let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant++);
             ^^^^^^^^^^^^^^" in #t1);
-    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1);
-    self::use(let final core::int* #t3 = self::Foo::staticField in let final core::int* #t4 = self::Foo::staticField = #t3.{core::num::+}(1) in #t3);
+    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
+    self::use(let final core::int* #t3 = self::Foo::staticField in let final core::int* #t4 = self::Foo::staticField = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:35:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction++;
         ^^^^^^^^^^^^^^";
@@ -224,18 +224,18 @@
             ^^^^^^^^^^^^" in #t7);
     self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:39:9: Error: Getter not found: 'staticSetter'.
     Foo.staticSetter++;
-        ^^^^^^^^^^^^".+(1);
+        ^^^^^^^^^^^^"{dynamic}.+(1);
     self::use(let final dynamic #t9 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:40:13: Error: Getter not found: 'staticSetter'.
     use(Foo.staticSetter++);
-            ^^^^^^^^^^^^" in let final dynamic #t10 = self::Foo::staticSetter = #t9.+(1) in #t9);
+            ^^^^^^^^^^^^" in let final dynamic #t10 = self::Foo::staticSetter = #t9{dynamic}.+(1) in #t9);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:42:11: Error: Setter not found: 'staticConstant'.
     ++Foo.staticConstant;
           ^^^^^^^^^^^^^^";
     self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:43:15: Error: Setter not found: 'staticConstant'.
     use(++Foo.staticConstant);
               ^^^^^^^^^^^^^^");
-    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1);
-    self::use(self::Foo::staticField = self::Foo::staticField.{core::num::+}(1));
+    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
+    self::use(self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*});
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:46:11: Error: Setter not found: 'staticFunction'.
     ++Foo.staticFunction;
           ^^^^^^^^^^^^^^";
@@ -250,10 +250,10 @@
               ^^^^^^^^^^^^");
     self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:50:11: Error: Getter not found: 'staticSetter'.
     ++Foo.staticSetter;
-          ^^^^^^^^^^^^".+(1);
+          ^^^^^^^^^^^^"{dynamic}.+(1);
     self::use(self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:51:15: Error: Getter not found: 'staticSetter'.
     use(++Foo.staticSetter);
-              ^^^^^^^^^^^^".+(1));
+              ^^^^^^^^^^^^"{dynamic}.+(1));
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:53:23: Error: The method 'call' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
     Foo.staticConstant();
@@ -272,14 +272,14 @@
                        ^");
     self::Foo::staticFunction();
     self::use(self::Foo::staticFunction());
-    self::Foo::staticGetter.call();
-    self::use(self::Foo::staticGetter.call());
+    self::Foo::staticGetter{dynamic}.call();
+    self::use(self::Foo::staticGetter{dynamic}.call());
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:61:9: Error: Getter not found: 'staticSetter'.
     Foo.staticSetter();
-        ^^^^^^^^^^^^".call();
+        ^^^^^^^^^^^^"{dynamic}.call();
     self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:62:13: Error: Getter not found: 'staticSetter'.
     use(Foo.staticSetter());
-            ^^^^^^^^^^^^".call());
+            ^^^^^^^^^^^^"{dynamic}.call());
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:64:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant = 87;
         ^^^^^^^^^^^^^^";
@@ -302,32 +302,32 @@
             ^^^^^^^^^^^^");
     self::Foo::staticSetter = 87;
     self::use(self::Foo::staticSetter = 87);
-    (#C1).{core::num::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
+    (#C1) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final core::int* #t11 = #C1 in #t11.{core::num::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
+    self::use(let final core::int* #t11 = #C1 in #t11 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant ??= 87);
             ^^^^^^^^^^^^^^" : #t11);
-    self::Foo::staticField.{core::num::==}(null) ?{core::int*} self::Foo::staticField = 87 : null;
-    self::use(let final core::int* #t12 = self::Foo::staticField in #t12.{core::num::==}(null) ?{core::int*} self::Foo::staticField = 87 : #t12);
-    (#C2).{core::Object::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
+    self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 87 : null;
+    self::use(let final core::int* #t12 = self::Foo::staticField in #t12 == null ?{core::int*} self::Foo::staticField = 87 : #t12);
+    (#C2) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final () →* dynamic #t13 = #C2 in #t13.{core::Object::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
+    self::use(let final () →* dynamic #t13 = #C2 in #t13 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
     use(Foo.staticFunction ??= 87);
             ^^^^^^^^^^^^^^" : #t13);
-    self::Foo::staticGetter.{core::Object::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
+    self::Foo::staticGetter == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
     Foo.staticGetter ??= 87;
         ^^^^^^^^^^^^" : null;
-    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14.{core::Object::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:82:13: Error: Setter not found: 'staticGetter'.
+    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:82:13: Error: Setter not found: 'staticGetter'.
     use(Foo.staticGetter ??= 87);
             ^^^^^^^^^^^^" : #t14);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:83:9: Error: Getter not found: 'staticSetter'.
     Foo.staticSetter ??= 87;
-        ^^^^^^^^^^^^".{core::Object::==}(null) ?{dynamic} self::Foo::staticSetter = 87 : null;
+        ^^^^^^^^^^^^" == null ?{dynamic} self::Foo::staticSetter = 87 : null;
     self::use(let final dynamic #t15 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:84:13: Error: Getter not found: 'staticSetter'.
     use(Foo.staticSetter ??= 87);
-            ^^^^^^^^^^^^" in #t15.{core::Object::==}(null) ?{dynamic} self::Foo::staticSetter = 87 : #t15);
+            ^^^^^^^^^^^^" in #t15 == null ?{dynamic} self::Foo::staticSetter = 87 : #t15);
   }
   on core::NoSuchMethodError* catch(no-exception-var) {
   }
diff --git a/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect
index 7c94fe0..fd27fff 100644
--- a/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect
@@ -183,7 +183,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic x) → dynamic {
-  if(x.{core::Object::==}(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
+  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
@@ -208,8 +208,8 @@
     self::use(let final core::int* #t1 = #C1 in let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant++);
             ^^^^^^^^^^^^^^" in #t1);
-    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1);
-    self::use(let final core::int* #t3 = self::Foo::staticField in let final core::int* #t4 = self::Foo::staticField = #t3.{core::num::+}(1) in #t3);
+    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
+    self::use(let final core::int* #t3 = self::Foo::staticField in let final core::int* #t4 = self::Foo::staticField = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:35:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction++;
         ^^^^^^^^^^^^^^";
@@ -224,18 +224,18 @@
             ^^^^^^^^^^^^" in #t7);
     self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:39:9: Error: Getter not found: 'staticSetter'.
     Foo.staticSetter++;
-        ^^^^^^^^^^^^".+(1);
+        ^^^^^^^^^^^^"{dynamic}.+(1);
     self::use(let final dynamic #t9 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:40:13: Error: Getter not found: 'staticSetter'.
     use(Foo.staticSetter++);
-            ^^^^^^^^^^^^" in let final dynamic #t10 = self::Foo::staticSetter = #t9.+(1) in #t9);
+            ^^^^^^^^^^^^" in let final dynamic #t10 = self::Foo::staticSetter = #t9{dynamic}.+(1) in #t9);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:42:11: Error: Setter not found: 'staticConstant'.
     ++Foo.staticConstant;
           ^^^^^^^^^^^^^^";
     self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:43:15: Error: Setter not found: 'staticConstant'.
     use(++Foo.staticConstant);
               ^^^^^^^^^^^^^^");
-    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1);
-    self::use(self::Foo::staticField = self::Foo::staticField.{core::num::+}(1));
+    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
+    self::use(self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*});
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:46:11: Error: Setter not found: 'staticFunction'.
     ++Foo.staticFunction;
           ^^^^^^^^^^^^^^";
@@ -250,10 +250,10 @@
               ^^^^^^^^^^^^");
     self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:50:11: Error: Getter not found: 'staticSetter'.
     ++Foo.staticSetter;
-          ^^^^^^^^^^^^".+(1);
+          ^^^^^^^^^^^^"{dynamic}.+(1);
     self::use(self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:51:15: Error: Getter not found: 'staticSetter'.
     use(++Foo.staticSetter);
-              ^^^^^^^^^^^^".+(1));
+              ^^^^^^^^^^^^"{dynamic}.+(1));
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:53:23: Error: The method 'call' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
     Foo.staticConstant();
@@ -272,14 +272,14 @@
                        ^");
     self::Foo::staticFunction();
     self::use(self::Foo::staticFunction());
-    self::Foo::staticGetter.call();
-    self::use(self::Foo::staticGetter.call());
+    self::Foo::staticGetter{dynamic}.call();
+    self::use(self::Foo::staticGetter{dynamic}.call());
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:61:9: Error: Getter not found: 'staticSetter'.
     Foo.staticSetter();
-        ^^^^^^^^^^^^".call();
+        ^^^^^^^^^^^^"{dynamic}.call();
     self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:62:13: Error: Getter not found: 'staticSetter'.
     use(Foo.staticSetter());
-            ^^^^^^^^^^^^".call());
+            ^^^^^^^^^^^^"{dynamic}.call());
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:64:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant = 87;
         ^^^^^^^^^^^^^^";
@@ -302,32 +302,32 @@
             ^^^^^^^^^^^^");
     self::Foo::staticSetter = 87;
     self::use(self::Foo::staticSetter = 87);
-    (#C1).{core::num::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
+    (#C1) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
     Foo.staticConstant ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final core::int* #t11 = #C1 in #t11.{core::num::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
+    self::use(let final core::int* #t11 = #C1 in #t11 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
     use(Foo.staticConstant ??= 87);
             ^^^^^^^^^^^^^^" : #t11);
-    self::Foo::staticField.{core::num::==}(null) ?{core::int*} self::Foo::staticField = 87 : null;
-    self::use(let final core::int* #t12 = self::Foo::staticField in #t12.{core::num::==}(null) ?{core::int*} self::Foo::staticField = 87 : #t12);
-    (#C2).{core::Object::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
+    self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 87 : null;
+    self::use(let final core::int* #t12 = self::Foo::staticField in #t12 == null ?{core::int*} self::Foo::staticField = 87 : #t12);
+    (#C2) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
     Foo.staticFunction ??= 87;
         ^^^^^^^^^^^^^^" : null;
-    self::use(let final () →* dynamic #t13 = #C2 in #t13.{core::Object::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
+    self::use(let final () →* dynamic #t13 = #C2 in #t13 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
     use(Foo.staticFunction ??= 87);
             ^^^^^^^^^^^^^^" : #t13);
-    self::Foo::staticGetter.{core::Object::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
+    self::Foo::staticGetter == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
     Foo.staticGetter ??= 87;
         ^^^^^^^^^^^^" : null;
-    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14.{core::Object::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:82:13: Error: Setter not found: 'staticGetter'.
+    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/static.dart:82:13: Error: Setter not found: 'staticGetter'.
     use(Foo.staticGetter ??= 87);
             ^^^^^^^^^^^^" : #t14);
     invalid-expression "pkg/front_end/testcases/rasta/static.dart:83:9: Error: Getter not found: 'staticSetter'.
     Foo.staticSetter ??= 87;
-        ^^^^^^^^^^^^".{core::Object::==}(null) ?{dynamic} self::Foo::staticSetter = 87 : null;
+        ^^^^^^^^^^^^" == null ?{dynamic} self::Foo::staticSetter = 87 : null;
     self::use(let final dynamic #t15 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:84:13: Error: Getter not found: 'staticSetter'.
     use(Foo.staticSetter ??= 87);
-            ^^^^^^^^^^^^" in #t15.{core::Object::==}(null) ?{dynamic} self::Foo::staticSetter = 87 : #t15);
+            ^^^^^^^^^^^^" in #t15 == null ?{dynamic} self::Foo::staticSetter = 87 : #t15);
   }
   on core::NoSuchMethodError* catch(no-exception-var) {
   }
diff --git a/pkg/front_end/testcases/rasta/super.dart.weak.expect b/pkg/front_end/testcases/rasta/super.dart.weak.expect
index 17305dd..2afaa67 100644
--- a/pkg/front_end/testcases/rasta/super.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.weak.expect
@@ -406,13 +406,13 @@
     self::use(super.{self::A::unary-}());
     invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:5: Error: This couldn't be parsed.
     +super;
-    ^".+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.
+    ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     +super;
      ^^^^^");
     self::use(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:9: Error: This couldn't be parsed.
     use(+super);
-        ^".+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.
+        ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     use(+super);
          ^^^^^"));
@@ -444,26 +444,26 @@
     self::use(super.{self::A::m});
     super.{self::A::n};
     self::use(super.{self::A::n});
-    super.{self::A::a} = super.{self::A::a}.+(1);
-    self::use(let final dynamic #t1 = super.{self::A::a} in let final dynamic #t2 = super.{self::A::a} = #t1.+(1) in #t1);
-    super.{self::A::b} = super.{self::B::b}.+(1);
-    self::use(let final dynamic #t3 = super.{self::B::b} in let final dynamic #t4 = super.{self::A::b} = #t3.+(1) in #t3);
-    super.{self::B::c} = super.{self::A::c}.+(1);
-    self::use(let final dynamic #t5 = super.{self::A::c} in let final dynamic #t6 = super.{self::B::c} = #t5.+(1) in #t5);
-    super.{self::A::d} = super.{self::B::d}.+(1);
-    self::use(let final dynamic #t7 = super.{self::B::d} in let final dynamic #t8 = super.{self::A::d} = #t7.+(1) in #t7);
-    super.e = super.{self::A::e}.+(1);
-    self::use(let final dynamic #t9 = super.{self::A::e} in let final dynamic #t10 = super.e = #t9.+(1) in #t9);
-    super.f = super.{self::A::f}.+(1);
-    self::use(let final dynamic #t11 = super.{self::A::f} in let final dynamic #t12 = super.f = #t11.+(1) in #t11);
-    super.{self::A::g} = super.g.+(1);
-    self::use(let final dynamic #t13 = super.g in let final dynamic #t14 = super.{self::A::g} = #t13.+(1) in #t13);
-    super.{self::A::h} = super.{self::A::h}.+(1);
-    self::use(let final dynamic #t15 = super.{self::A::h} in let final dynamic #t16 = super.{self::A::h} = #t15.+(1) in #t15);
-    super.{self::B::i} = super.{self::A::i}.+(1);
-    self::use(let final dynamic #t17 = super.{self::A::i} in let final dynamic #t18 = super.{self::B::i} = #t17.+(1) in #t17);
-    let final core::int* #t19 = 87 in super.{self::A::[]=}(#t19, super.{self::A::[]}(#t19).+(1));
-    self::use(let final core::int* #t20 = 87 in let final dynamic #t21 = super.{self::A::[]}(#t20) in let final void #t22 = super.{self::A::[]=}(#t20, #t21.+(1)) in #t21);
+    super.{self::A::a} = super.{self::A::a}{dynamic}.+(1);
+    self::use(let final dynamic #t1 = super.{self::A::a} in let final dynamic #t2 = super.{self::A::a} = #t1{dynamic}.+(1) in #t1);
+    super.{self::A::b} = super.{self::B::b}{dynamic}.+(1);
+    self::use(let final dynamic #t3 = super.{self::B::b} in let final dynamic #t4 = super.{self::A::b} = #t3{dynamic}.+(1) in #t3);
+    super.{self::B::c} = super.{self::A::c}{dynamic}.+(1);
+    self::use(let final dynamic #t5 = super.{self::A::c} in let final dynamic #t6 = super.{self::B::c} = #t5{dynamic}.+(1) in #t5);
+    super.{self::A::d} = super.{self::B::d}{dynamic}.+(1);
+    self::use(let final dynamic #t7 = super.{self::B::d} in let final dynamic #t8 = super.{self::A::d} = #t7{dynamic}.+(1) in #t7);
+    super.e = super.{self::A::e}{dynamic}.+(1);
+    self::use(let final dynamic #t9 = super.{self::A::e} in let final dynamic #t10 = super.e = #t9{dynamic}.+(1) in #t9);
+    super.f = super.{self::A::f}{dynamic}.+(1);
+    self::use(let final dynamic #t11 = super.{self::A::f} in let final dynamic #t12 = super.f = #t11{dynamic}.+(1) in #t11);
+    super.{self::A::g} = super.g{dynamic}.+(1);
+    self::use(let final dynamic #t13 = super.g in let final dynamic #t14 = super.{self::A::g} = #t13{dynamic}.+(1) in #t13);
+    super.{self::A::h} = super.{self::A::h}{dynamic}.+(1);
+    self::use(let final dynamic #t15 = super.{self::A::h} in let final dynamic #t16 = super.{self::A::h} = #t15{dynamic}.+(1) in #t15);
+    super.{self::B::i} = super.{self::A::i}{dynamic}.+(1);
+    self::use(let final dynamic #t17 = super.{self::A::i} in let final dynamic #t18 = super.{self::B::i} = #t17{dynamic}.+(1) in #t17);
+    let final core::int* #t19 = 87 in super.{self::A::[]=}(#t19, super.{self::A::[]}(#t19){dynamic}.+(1));
+    self::use(let final core::int* #t20 = 87 in let final dynamic #t21 = super.{self::A::[]}(#t20) in let final void #t22 = super.{self::A::[]=}(#t20, #t21{dynamic}.+(1)) in #t21);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:95:12: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     super.m++;
@@ -480,26 +480,26 @@
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.n++);
                ^" in #t25);
-    super.{self::A::a} = super.{self::A::a}.+(1);
-    self::use(super.{self::A::a} = super.{self::A::a}.+(1));
-    super.{self::A::b} = super.{self::B::b}.+(1);
-    self::use(super.{self::A::b} = super.{self::B::b}.+(1));
-    super.{self::B::c} = super.{self::A::c}.+(1);
-    self::use(super.{self::B::c} = super.{self::A::c}.+(1));
-    super.{self::A::d} = super.{self::B::d}.+(1);
-    self::use(super.{self::A::d} = super.{self::B::d}.+(1));
-    super.e = super.{self::A::e}.+(1);
-    self::use(super.e = super.{self::A::e}.+(1));
-    super.f = super.{self::A::f}.+(1);
-    self::use(super.f = super.{self::A::f}.+(1));
-    super.{self::A::g} = super.g.+(1);
-    self::use(super.{self::A::g} = super.g.+(1));
-    super.{self::A::h} = super.{self::A::h}.+(1);
-    self::use(super.{self::A::h} = super.{self::A::h}.+(1));
-    super.{self::B::i} = super.{self::A::i}.+(1);
-    self::use(super.{self::B::i} = super.{self::A::i}.+(1));
-    let final core::int* #t27 = 87 in let final dynamic #t28 = super.{self::A::[]}(#t27).+(1) in let final void #t29 = super.{self::A::[]=}(#t27, #t28) in #t28;
-    self::use(let final core::int* #t30 = 87 in let final dynamic #t31 = super.{self::A::[]}(#t30).+(1) in let final void #t32 = super.{self::A::[]=}(#t30, #t31) in #t31);
+    super.{self::A::a} = super.{self::A::a}{dynamic}.+(1);
+    self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(1));
+    super.{self::A::b} = super.{self::B::b}{dynamic}.+(1);
+    self::use(super.{self::A::b} = super.{self::B::b}{dynamic}.+(1));
+    super.{self::B::c} = super.{self::A::c}{dynamic}.+(1);
+    self::use(super.{self::B::c} = super.{self::A::c}{dynamic}.+(1));
+    super.{self::A::d} = super.{self::B::d}{dynamic}.+(1);
+    self::use(super.{self::A::d} = super.{self::B::d}{dynamic}.+(1));
+    super.e = super.{self::A::e}{dynamic}.+(1);
+    self::use(super.e = super.{self::A::e}{dynamic}.+(1));
+    super.f = super.{self::A::f}{dynamic}.+(1);
+    self::use(super.f = super.{self::A::f}{dynamic}.+(1));
+    super.{self::A::g} = super.g{dynamic}.+(1);
+    self::use(super.{self::A::g} = super.g{dynamic}.+(1));
+    super.{self::A::h} = super.{self::A::h}{dynamic}.+(1);
+    self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.+(1));
+    super.{self::B::i} = super.{self::A::i}{dynamic}.+(1);
+    self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.+(1));
+    let final core::int* #t27 = 87 in let final dynamic #t28 = super.{self::A::[]}(#t27){dynamic}.+(1) in let final void #t29 = super.{self::A::[]=}(#t27, #t28) in #t28;
+    self::use(let final core::int* #t30 = 87 in let final dynamic #t31 = super.{self::A::[]}(#t30){dynamic}.+(1) in let final void #t32 = super.{self::A::[]=}(#t30, #t31) in #t31);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:120:5: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     ++super.m;
@@ -516,26 +516,26 @@
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(++super.n);
         ^");
-    super.{self::A::a}.call();
-    self::use(super.{self::A::a}.call());
-    super.{self::B::b}.call();
-    self::use(super.{self::B::b}.call());
-    super.{self::A::c}.call();
-    self::use(super.{self::A::c}.call());
-    super.{self::B::d}.call();
-    self::use(super.{self::B::d}.call());
-    super.{self::A::e}.call();
-    self::use(super.{self::A::e}.call());
-    super.{self::A::f}.call();
-    self::use(super.{self::A::f}.call());
+    super.{self::A::a}{dynamic}.call();
+    self::use(super.{self::A::a}{dynamic}.call());
+    super.{self::B::b}{dynamic}.call();
+    self::use(super.{self::B::b}{dynamic}.call());
+    super.{self::A::c}{dynamic}.call();
+    self::use(super.{self::A::c}{dynamic}.call());
+    super.{self::B::d}{dynamic}.call();
+    self::use(super.{self::B::d}{dynamic}.call());
+    super.{self::A::e}{dynamic}.call();
+    self::use(super.{self::A::e}{dynamic}.call());
+    super.{self::A::f}{dynamic}.call();
+    self::use(super.{self::A::f}{dynamic}.call());
     super.g();
     self::use(super.g());
-    super.{self::A::h}.call();
-    self::use(super.{self::A::h}.call());
-    super.{self::A::i}.call();
-    self::use(super.{self::A::i}.call());
-    super.{self::A::[]}(87).call();
-    self::use(super.{self::A::[]}(87).call());
+    super.{self::A::h}{dynamic}.call();
+    self::use(super.{self::A::h}{dynamic}.call());
+    super.{self::A::i}{dynamic}.call();
+    self::use(super.{self::A::i}{dynamic}.call());
+    super.{self::A::[]}(87){dynamic}.call();
+    self::use(super.{self::A::[]}(87){dynamic}.call());
     super.{self::A::m}();
     self::use(let final Never* #t33 = invalid-expression "pkg/front_end/testcases/rasta/super.dart:146:15: Error: This expression has type 'void' and can't be used.
     use(super.m());
@@ -580,50 +580,50 @@
     self::use(super.m = 42);
     super.{self::A::n} = 42;
     self::use(super.{self::A::n} = 42);
-    super.{self::A::a}.{core::Object::==}(null) ?{dynamic} super.{self::A::a} = 42 : null;
-    self::use(let final dynamic #t41 = super.{self::A::a} in #t41.{core::Object::==}(null) ?{dynamic} super.{self::A::a} = 42 : #t41);
-    super.{self::B::b}.{core::Object::==}(null) ?{dynamic} super.{self::A::b} = 42 : null;
-    self::use(let final dynamic #t42 = super.{self::B::b} in #t42.{core::Object::==}(null) ?{dynamic} super.{self::A::b} = 42 : #t42);
-    super.{self::A::c}.{core::Object::==}(null) ?{dynamic} super.{self::B::c} = 42 : null;
-    self::use(let final dynamic #t43 = super.{self::A::c} in #t43.{core::Object::==}(null) ?{dynamic} super.{self::B::c} = 42 : #t43);
-    super.{self::B::d}.{core::Object::==}(null) ?{dynamic} super.{self::A::d} = 42 : null;
-    self::use(let final dynamic #t44 = super.{self::B::d} in #t44.{core::Object::==}(null) ?{dynamic} super.{self::A::d} = 42 : #t44);
-    super.{self::A::e}.{core::Object::==}(null) ?{dynamic} super.e = 42 : null;
-    self::use(let final dynamic #t45 = super.{self::A::e} in #t45.{core::Object::==}(null) ?{dynamic} super.e = 42 : #t45);
-    super.{self::A::f}.{core::Object::==}(null) ?{dynamic} super.f = 42 : null;
-    self::use(let final dynamic #t46 = super.{self::A::f} in #t46.{core::Object::==}(null) ?{dynamic} super.f = 42 : #t46);
-    super.g.{core::Object::==}(null) ?{dynamic} super.{self::A::g} = 42 : null;
-    self::use(let final dynamic #t47 = super.g in #t47.{core::Object::==}(null) ?{dynamic} super.{self::A::g} = 42 : #t47);
-    super.{self::A::h}.{core::Object::==}(null) ?{dynamic} super.{self::A::h} = 42 : null;
-    self::use(let final dynamic #t48 = super.{self::A::h} in #t48.{core::Object::==}(null) ?{dynamic} super.{self::A::h} = 42 : #t48);
-    super.{self::A::i}.{core::Object::==}(null) ?{dynamic} super.{self::B::i} = 42 : null;
-    self::use(let final dynamic #t49 = super.{self::A::i} in #t49.{core::Object::==}(null) ?{dynamic} super.{self::B::i} = 42 : #t49);
-    let final core::int* #t50 = 87 in super.{self::A::[]}(#t50).{core::Object::==}(null) ?{dynamic} super.{self::A::[]=}(#t50, 42) : null;
-    self::use(let final core::int* #t51 = 87 in let final dynamic #t52 = super.{self::A::[]}(#t51) in #t52.{core::Object::==}(null) ?{dynamic} let final core::int* #t53 = 42 in let final void #t54 = super.{self::A::[]=}(#t51, #t53) in #t53 : #t52);
-    super.{self::A::m}.{core::Object::==}(null) ?{core::Object*} super.m = 42 : null;
-    self::use(let final () →* void #t55 = super.{self::A::m} in #t55.{core::Object::==}(null) ?{core::Object*} super.m = 42 : #t55);
-    super.{self::A::n}.{core::Object::==}(null) ?{core::Object*} super.{self::A::n} = 42 : null;
-    self::use(let final () →* void #t56 = super.{self::A::n} in #t56.{core::Object::==}(null) ?{core::Object*} super.{self::A::n} = 42 : #t56);
-    super.{self::A::a} = super.{self::A::a}.+(42);
-    self::use(super.{self::A::a} = super.{self::A::a}.+(42));
-    super.{self::A::b} = super.{self::B::b}.+(42);
-    self::use(super.{self::A::b} = super.{self::B::b}.+(42));
-    super.{self::B::c} = super.{self::A::c}.+(42);
-    self::use(super.{self::B::c} = super.{self::A::c}.+(42));
-    super.{self::A::d} = super.{self::B::d}.+(42);
-    self::use(super.{self::A::d} = super.{self::B::d}.+(42));
-    super.e = super.{self::A::e}.+(42);
-    self::use(super.e = super.{self::A::e}.+(42));
-    super.f = super.{self::A::f}.+(42);
-    self::use(super.f = super.{self::A::f}.+(42));
-    super.{self::A::g} = super.g.+(42);
-    self::use(super.{self::A::g} = super.g.+(42));
-    super.{self::A::h} = super.{self::A::h}.+(42);
-    self::use(super.{self::A::h} = super.{self::A::h}.+(42));
-    super.{self::B::i} = super.{self::A::i}.+(42);
-    self::use(super.{self::B::i} = super.{self::A::i}.+(42));
-    let final core::int* #t57 = 87 in super.{self::A::[]=}(#t57, super.{self::A::[]}(#t57).+(42));
-    self::use(let final core::int* #t58 = 87 in let final dynamic #t59 = super.{self::A::[]}(#t58).+(42) in let final void #t60 = super.{self::A::[]=}(#t58, #t59) in #t59);
+    super.{self::A::a} == null ?{dynamic} super.{self::A::a} = 42 : null;
+    self::use(let final dynamic #t41 = super.{self::A::a} in #t41 == null ?{dynamic} super.{self::A::a} = 42 : #t41);
+    super.{self::B::b} == null ?{dynamic} super.{self::A::b} = 42 : null;
+    self::use(let final dynamic #t42 = super.{self::B::b} in #t42 == null ?{dynamic} super.{self::A::b} = 42 : #t42);
+    super.{self::A::c} == null ?{dynamic} super.{self::B::c} = 42 : null;
+    self::use(let final dynamic #t43 = super.{self::A::c} in #t43 == null ?{dynamic} super.{self::B::c} = 42 : #t43);
+    super.{self::B::d} == null ?{dynamic} super.{self::A::d} = 42 : null;
+    self::use(let final dynamic #t44 = super.{self::B::d} in #t44 == null ?{dynamic} super.{self::A::d} = 42 : #t44);
+    super.{self::A::e} == null ?{dynamic} super.e = 42 : null;
+    self::use(let final dynamic #t45 = super.{self::A::e} in #t45 == null ?{dynamic} super.e = 42 : #t45);
+    super.{self::A::f} == null ?{dynamic} super.f = 42 : null;
+    self::use(let final dynamic #t46 = super.{self::A::f} in #t46 == null ?{dynamic} super.f = 42 : #t46);
+    super.g == null ?{dynamic} super.{self::A::g} = 42 : null;
+    self::use(let final dynamic #t47 = super.g in #t47 == null ?{dynamic} super.{self::A::g} = 42 : #t47);
+    super.{self::A::h} == null ?{dynamic} super.{self::A::h} = 42 : null;
+    self::use(let final dynamic #t48 = super.{self::A::h} in #t48 == null ?{dynamic} super.{self::A::h} = 42 : #t48);
+    super.{self::A::i} == null ?{dynamic} super.{self::B::i} = 42 : null;
+    self::use(let final dynamic #t49 = super.{self::A::i} in #t49 == null ?{dynamic} super.{self::B::i} = 42 : #t49);
+    let final core::int* #t50 = 87 in super.{self::A::[]}(#t50) == null ?{dynamic} super.{self::A::[]=}(#t50, 42) : null;
+    self::use(let final core::int* #t51 = 87 in let final dynamic #t52 = super.{self::A::[]}(#t51) in #t52 == null ?{dynamic} let final core::int* #t53 = 42 in let final void #t54 = super.{self::A::[]=}(#t51, #t53) in #t53 : #t52);
+    super.{self::A::m} == null ?{core::Object*} super.m = 42 : null;
+    self::use(let final () →* void #t55 = super.{self::A::m} in #t55 == null ?{core::Object*} super.m = 42 : #t55);
+    super.{self::A::n} == null ?{core::Object*} super.{self::A::n} = 42 : null;
+    self::use(let final () →* void #t56 = super.{self::A::n} in #t56 == null ?{core::Object*} super.{self::A::n} = 42 : #t56);
+    super.{self::A::a} = super.{self::A::a}{dynamic}.+(42);
+    self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(42));
+    super.{self::A::b} = super.{self::B::b}{dynamic}.+(42);
+    self::use(super.{self::A::b} = super.{self::B::b}{dynamic}.+(42));
+    super.{self::B::c} = super.{self::A::c}{dynamic}.+(42);
+    self::use(super.{self::B::c} = super.{self::A::c}{dynamic}.+(42));
+    super.{self::A::d} = super.{self::B::d}{dynamic}.+(42);
+    self::use(super.{self::A::d} = super.{self::B::d}{dynamic}.+(42));
+    super.e = super.{self::A::e}{dynamic}.+(42);
+    self::use(super.e = super.{self::A::e}{dynamic}.+(42));
+    super.f = super.{self::A::f}{dynamic}.+(42);
+    self::use(super.f = super.{self::A::f}{dynamic}.+(42));
+    super.{self::A::g} = super.g{dynamic}.+(42);
+    self::use(super.{self::A::g} = super.g{dynamic}.+(42));
+    super.{self::A::h} = super.{self::A::h}{dynamic}.+(42);
+    self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.+(42));
+    super.{self::B::i} = super.{self::A::i}{dynamic}.+(42);
+    self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.+(42));
+    let final core::int* #t57 = 87 in super.{self::A::[]=}(#t57, super.{self::A::[]}(#t57){dynamic}.+(42));
+    self::use(let final core::int* #t58 = 87 in let final dynamic #t59 = super.{self::A::[]}(#t58){dynamic}.+(42) in let final void #t60 = super.{self::A::[]=}(#t58, #t59) in #t59);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:222:13: Error: The operator '+' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
     super.m += 42;
@@ -640,26 +640,26 @@
 Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.n += 42);
                 ^");
-    super.{self::A::a} = super.{self::A::a}.-(42);
-    self::use(super.{self::A::a} = super.{self::A::a}.-(42));
-    super.{self::A::b} = super.{self::B::b}.-(42);
-    self::use(super.{self::A::b} = super.{self::B::b}.-(42));
-    super.{self::B::c} = super.{self::A::c}.-(42);
-    self::use(super.{self::B::c} = super.{self::A::c}.-(42));
-    super.{self::A::d} = super.{self::B::d}.-(42);
-    self::use(super.{self::A::d} = super.{self::B::d}.-(42));
-    super.e = super.{self::A::e}.-(42);
-    self::use(super.e = super.{self::A::e}.-(42));
-    super.f = super.{self::A::f}.-(42);
-    self::use(super.f = super.{self::A::f}.-(42));
-    super.{self::A::g} = super.g.-(42);
-    self::use(super.{self::A::g} = super.g.-(42));
-    super.{self::A::h} = super.{self::A::h}.-(42);
-    self::use(super.{self::A::h} = super.{self::A::h}.-(42));
-    super.{self::B::i} = super.{self::A::i}.-(42);
-    self::use(super.{self::B::i} = super.{self::A::i}.-(42));
-    let final core::int* #t61 = 87 in super.{self::A::[]=}(#t61, super.{self::A::[]}(#t61).-(42));
-    self::use(let final core::int* #t62 = 87 in let final dynamic #t63 = super.{self::A::[]}(#t62).-(42) in let final void #t64 = super.{self::A::[]=}(#t62, #t63) in #t63);
+    super.{self::A::a} = super.{self::A::a}{dynamic}.-(42);
+    self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.-(42));
+    super.{self::A::b} = super.{self::B::b}{dynamic}.-(42);
+    self::use(super.{self::A::b} = super.{self::B::b}{dynamic}.-(42));
+    super.{self::B::c} = super.{self::A::c}{dynamic}.-(42);
+    self::use(super.{self::B::c} = super.{self::A::c}{dynamic}.-(42));
+    super.{self::A::d} = super.{self::B::d}{dynamic}.-(42);
+    self::use(super.{self::A::d} = super.{self::B::d}{dynamic}.-(42));
+    super.e = super.{self::A::e}{dynamic}.-(42);
+    self::use(super.e = super.{self::A::e}{dynamic}.-(42));
+    super.f = super.{self::A::f}{dynamic}.-(42);
+    self::use(super.f = super.{self::A::f}{dynamic}.-(42));
+    super.{self::A::g} = super.g{dynamic}.-(42);
+    self::use(super.{self::A::g} = super.g{dynamic}.-(42));
+    super.{self::A::h} = super.{self::A::h}{dynamic}.-(42);
+    self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.-(42));
+    super.{self::B::i} = super.{self::A::i}{dynamic}.-(42);
+    self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.-(42));
+    let final core::int* #t61 = 87 in super.{self::A::[]=}(#t61, super.{self::A::[]}(#t61){dynamic}.-(42));
+    self::use(let final core::int* #t62 = 87 in let final dynamic #t63 = super.{self::A::[]}(#t62){dynamic}.-(42) in let final void #t64 = super.{self::A::[]=}(#t62, #t63) in #t63);
     super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:247:13: Error: The operator '-' isn't defined for the class 'void Function()'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
     super.m -= 42;
@@ -679,9 +679,9 @@
   }
 }
 static method use(dynamic x) → dynamic {
-  if(x.{core::Object::==}(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
+  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::test}();
+  new self::C::•().{self::C::test}(){() →* dynamic};
 }
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.expect
index e19cafa..0c41919 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.expect
@@ -167,8 +167,8 @@
     return super.{mix::Mixin::publicMethod}();
 }
 static method main() → dynamic {
-  core::print(new self::C::•<dynamic>().{self::_C&Super&Mixin::foo}());
-  core::print(new self::C2::•<dynamic>().{self::C2::foo}());
+  core::print(new self::C::•<dynamic>().{self::_C&Super&Mixin::foo}(){() →* dynamic});
+  core::print(new self::C2::•<dynamic>().{self::C2::foo}(){() →* dynamic});
 }
 
 library test.mixin_library;
@@ -191,7 +191,7 @@
     : super core::Object::•()
     ;
   method foo() → dynamic
-    return super.foo().+(mix::f());
+    return super.foo(){dynamic}.+(mix::f());
   method g(generic-covariant-impl mix::Mixin::T* a) → mix::Mixin::T*
     return null;
   method h() → dynamic
@@ -201,7 +201,7 @@
   method _privateMethod() → dynamic
     return 49;
   method publicMethod() → dynamic
-    return this.{mix::Mixin::_privateMethod}();
+    return this.{mix::Mixin::_privateMethod}(){() →* dynamic};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -220,4 +220,4 @@
 static method _private() → dynamic
   return 117;
 static method foo(dynamic m) → dynamic
-  return m._privateMethod();
+  return m{dynamic}._privateMethod();
diff --git a/pkg/front_end/testcases/rasta/super_operator.dart.weak.expect b/pkg/front_end/testcases/rasta/super_operator.dart.weak.expect
index 33b1414..8b04b02 100644
--- a/pkg/front_end/testcases/rasta/super_operator.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/super_operator.dart.weak.expect
@@ -38,7 +38,7 @@
   operator [](dynamic i) → dynamic
     return super.{self::A::[]}(i);
   operator []=(dynamic i, dynamic val) → void
-    return let final dynamic #t1 = let final dynamic #t2 = i in let final dynamic #t3 = i = #t2.+(1) in #t2 in let final dynamic #t4 = super.{self::A::[]}(#t1).+(val) in let final void #t5 = super.{self::A::[]=}(#t1, #t4) in #t4;
+    return let final dynamic #t1 = let final dynamic #t2 = i in let final dynamic #t3 = i = #t2{dynamic}.+(1) in #t2 in let final dynamic #t4 = super.{self::A::[]}(#t1){dynamic}.+(val) in let final void #t5 = super.{self::A::[]=}(#t1, #t4) in #t4;
 }
 class Autobianchi extends core::Object {
   synthetic constructor •() → self::Autobianchi*
diff --git a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.expect b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.expect
index 7e456ad..37dfbd7 100644
--- a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method m(dynamic x) → dynamic
-    return this.{self::C::call}(x);
+    return this.{self::C::call}(x){(dynamic) →* dynamic};
   method call(dynamic x) → dynamic
     return 42;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -22,5 +22,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::C::m}(42));
+  core::print(new self::C::•().{self::C::m}(42){(dynamic) →* dynamic});
 }
diff --git a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.transformed.expect
index 7e456ad..37dfbd7 100644
--- a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method m(dynamic x) → dynamic
-    return this.{self::C::call}(x);
+    return this.{self::C::call}(x){(dynamic) →* dynamic};
   method call(dynamic x) → dynamic
     return 42;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -22,5 +22,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::C::m}(42));
+  core::print(new self::C::•().{self::C::m}(42){(dynamic) →* dynamic});
 }
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.weak.expect b/pkg/front_end/testcases/rasta/type_literals.dart.weak.expect
index d9cda9f..4b8a87c 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.weak.expect
@@ -439,28 +439,28 @@
     self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:72:11: Error: Can't assign to a type literal.
     use(--Func);
           ^^^^");
-    (#C1).{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
+    (#C1) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
     C ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t1 = #C1 in #t1.{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t1 = #C1 in #t1 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
     use(C ??= 42);
         ^" : #t1);
-    (#C2).{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
+    (#C2) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
     dynamic ??= 42;
     ^^^^^^^" : null;
-    self::use(let final core::Type* #t2 = #C2 in #t2.{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t2 = #C2 in #t2 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
     use(dynamic ??= 42);
         ^^^^^^^" : #t2);
-    self::C::T*.{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
+    self::C::T* == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
     T ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t3 = self::C::T* in #t3.{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t3 = self::C::T* in #t3 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
     use(T ??= 42);
         ^" : #t3);
-    (#C3).{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
+    (#C3) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
     Func ??= 42;
     ^^^^" : null;
-    self::use(let final core::Type* #t4 = #C3 in #t4.{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t4 = #C3 in #t4 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
     use(Func ??= 42);
         ^^^^" : #t4);
     invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:83:5: Error: Can't assign to a type literal.
@@ -524,11 +524,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic x) → dynamic {
-  if(x.{core::Object::==}(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
+  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
-  new self::C::•<dynamic>().{self::C::test}();
+  new self::C::•<dynamic>().{self::C::test}(){() →* dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/type_literals.dart.weak.transformed.expect
index dfb5a65..18048bd 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.weak.transformed.expect
@@ -439,28 +439,28 @@
     self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:72:11: Error: Can't assign to a type literal.
     use(--Func);
           ^^^^");
-    (#C1).{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
+    (#C1) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
     C ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t1 = #C1 in #t1.{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t1 = #C1 in #t1 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
     use(C ??= 42);
         ^" : #t1);
-    (#C2).{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
+    (#C2) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
     dynamic ??= 42;
     ^^^^^^^" : null;
-    self::use(let final core::Type* #t2 = #C2 in #t2.{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t2 = #C2 in #t2 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
     use(dynamic ??= 42);
         ^^^^^^^" : #t2);
-    self::C::T*.{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
+    self::C::T* == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
     T ??= 42;
     ^" : null;
-    self::use(let final core::Type* #t3 = self::C::T* in #t3.{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t3 = self::C::T* in #t3 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
     use(T ??= 42);
         ^" : #t3);
-    (#C3).{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
+    (#C3) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
     Func ??= 42;
     ^^^^" : null;
-    self::use(let final core::Type* #t4 = #C3 in #t4.{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
+    self::use(let final core::Type* #t4 = #C3 in #t4 == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
     use(Func ??= 42);
         ^^^^" : #t4);
     invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:83:5: Error: Can't assign to a type literal.
@@ -524,11 +524,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method use(dynamic x) → dynamic {
-  if(x.{core::Object::==}(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
+  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
     throw "Shouldn't happen";
 }
 static method main() → dynamic {
-  new self::C::•<dynamic>().{self::C::test}();
+  new self::C::•<dynamic>().{self::C::test}(){() →* dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/rasta/typedef.dart.weak.expect b/pkg/front_end/testcases/rasta/typedef.dart.weak.expect
index e46b1bf..6892897 100644
--- a/pkg/front_end/testcases/rasta/typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/typedef.dart.weak.expect
@@ -23,7 +23,7 @@
   invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:9:3: Error: Can't assign to a type literal.
   Foo = null;
   ^^^";
-  (#C1).{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:10:3: Error: Can't assign to a type literal.
+  (#C1) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:10:3: Error: Can't assign to a type literal.
   Foo ??= null;
   ^^^" : null;
   invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:11:3: Error: Method not found: 'Foo'.
diff --git a/pkg/front_end/testcases/rasta/typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/typedef.dart.weak.transformed.expect
index 611a358..85363aa 100644
--- a/pkg/front_end/testcases/rasta/typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/typedef.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
   invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:9:3: Error: Can't assign to a type literal.
   Foo = null;
   ^^^";
-  (#C1).{core::Type::==}(null) ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:10:3: Error: Can't assign to a type literal.
+  (#C1) == null ?{dynamic} invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:10:3: Error: Can't assign to a type literal.
   Foo ??= null;
   ^^^" : null;
   invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:11:3: Error: Method not found: 'Foo'.
diff --git a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.expect b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.expect
index 457d764..d9c6c13 100644
--- a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.expect
@@ -60,13 +60,13 @@
 static field core::bool* z = true;
 static method x() → dynamic {}
 static method foo() → void {
-  if(!invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:8:7: Error: Can't use 'x' because it is declared more than once.
+  if(!(invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:8:7: Error: Can't use 'x' because it is declared more than once.
   if (x != null) {}
-      ^".{core::Object::==}(null)) {
+      ^" == null)) {
   }
-  if(!null.{core::Object::==}(invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:9:15: Error: Can't use 'x' because it is declared more than once.
+  if(!(invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:9:15: Error: Can't use 'x' because it is declared more than once.
   if (null != x) {}
-              ^")) {
+              ^" == null)) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.transformed.expect
index 457d764..d9c6c13 100644
--- a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.transformed.expect
@@ -60,13 +60,13 @@
 static field core::bool* z = true;
 static method x() → dynamic {}
 static method foo() → void {
-  if(!invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:8:7: Error: Can't use 'x' because it is declared more than once.
+  if(!(invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:8:7: Error: Can't use 'x' because it is declared more than once.
   if (x != null) {}
-      ^".{core::Object::==}(null)) {
+      ^" == null)) {
   }
-  if(!null.{core::Object::==}(invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:9:15: Error: Can't use 'x' because it is declared more than once.
+  if(!(invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:9:15: Error: Can't use 'x' because it is declared more than once.
   if (null != x) {}
-              ^")) {
+              ^" == null)) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29979.dart.weak.expect
index aee80bb..66cb15d 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.weak.expect
@@ -9,5 +9,5 @@
 import self as self;
 
 static method main() → dynamic {
-  (let final () →* Null f = () → Null {} in f).call();
+  (let final () →* Null f = () → Null {} in f)(){() →* Null};
 }
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29979.dart.weak.transformed.expect
index aee80bb..66cb15d 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.weak.transformed.expect
@@ -9,5 +9,5 @@
 import self as self;
 
 static method main() → dynamic {
-  (let final () →* Null f = () → Null {} in f).call();
+  (let final () →* Null f = () → Null {} in f)(){() →* Null};
 }
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29982.dart.weak.expect
index 89f62f2..32136e8 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.weak.expect
@@ -44,5 +44,5 @@
   core::Map<core::String*, core::String*>* eh = <core::String*, core::String*>{"\u0233h": "\u0233h"};
   core::print("${eh.{core::Map::[]}(invalid-expression "pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Getter not found: '\u0233h'.
   print('\${eh[\u0233h']}');
-              ^^")}");
+              ^^"){(core::Object*) →* core::String*}}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29982.dart.weak.transformed.expect
index 89f62f2..32136e8 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.weak.transformed.expect
@@ -44,5 +44,5 @@
   core::Map<core::String*, core::String*>* eh = <core::String*, core::String*>{"\u0233h": "\u0233h"};
   core::print("${eh.{core::Map::[]}(invalid-expression "pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Getter not found: '\u0233h'.
   print('\${eh[\u0233h']}');
-              ^^")}");
+              ^^"){(core::Object*) →* core::String*}}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29983.dart.weak.expect
index 0c6a13d..37906e0 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.weak.expect
@@ -31,6 +31,6 @@
 g() sync* => dummy;
              ^";
 static method h() → dynamic sync* {
-  (() → core::String* => "return").call();
+  (() → core::String* => "return")(){() →* core::String*};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29983.dart.weak.transformed.expect
index aeb1e86..fedb52d 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.weak.transformed.expect
@@ -57,7 +57,7 @@
     dynamic :await_ctx_var;
     function :sync_op(core::_SyncIterator<dynamic>* :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
       {
-        (() → core::String* => "return").call();
+        (() → core::String* => "return")(){() →* core::String*};
       }
       return false;
     }
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.weak.expect b/pkg/front_end/testcases/regress/issue_30838.dart.weak.expect
index e570118..a71fae5 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.weak.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
   method test() → void {
-    let final core::String* #t1 = "hello" in this.{self::A::f}.call<core::String*>(#t1);
+    let final core::String* #t1 = "hello" in this.{self::A::f}{<T extends core::Object* = dynamic>(T*) →* core::int*}<core::String*>(#t1){(core::String*) →* core::int*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -27,7 +27,7 @@
 static method bar() → <T extends core::Object* = dynamic>(T*) →* core::int*
   return #C1;
 static method test1() → void {
-  self::bar().call<core::String*>("hello");
+  self::bar()<core::String*>("hello"){(core::String*) →* core::int*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_30838.dart.weak.transformed.expect
index 83eb83e..acb1618 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
   method test() → void {
-    let final core::String* #t1 = "hello" in this.{self::A::f}.call<core::String*>(#t1);
+    let final core::String* #t1 = "hello" in this.{self::A::f}{<T extends core::Object* = dynamic>(T*) →* core::int*}<core::String*>(#t1){(core::String*) →* core::int*};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -27,7 +27,7 @@
 static method bar() → <T extends core::Object* = dynamic>(T*) →* core::int*
   return #C1;
 static method test1() → void {
-  self::bar().call<core::String*>("hello");
+  self::bar()<core::String*>("hello"){(core::String*) →* core::int*};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31180.dart.weak.expect
index 9fe9d75..3412492 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.weak.expect
@@ -11,9 +11,8 @@
 // ^^^^^^^^^^^^
 //
 import self as self;
-import "dart:core" as core;
 
 static method bad() → dynamic {
-  return let final dynamic #t1 = null in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.[](1);
+  return let final dynamic #t1 = null in #t1 == null ?{dynamic} null : #t1{dynamic}.[](1);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31184.dart.weak.expect
index 059fa66..962f180 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.weak.expect
@@ -26,7 +26,7 @@
   for (int i = 0, i > 10; i++) {}
                   ^" as{TypeError,ForDynamic} core::int*; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
   for (int i = 0, i > 10; i++) {}
-                    ^".>(10) as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+                    ^"{dynamic}.>(10) as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31184.dart.weak.transformed.expect
index 5737a9e..05cce7d 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
   for (int i = 0, i > 10; i++) {}
                   ^"; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
   for (int i = 0, i > 10; i++) {}
-                    ^".>(10) as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+                    ^"{dynamic}.>(10) as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31185.dart.weak.expect
index b100603..7170828 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.weak.expect
@@ -19,7 +19,7 @@
 
 static field core::int* i = 5;
 static method test1() → core::int* {
-  return let final core::int* #t1 = self::i in let final core::int* #t2 = self::i = #t1.{core::num::+}(1) in #t1;
+  return let final core::int* #t1 = self::i in let final core::int* #t2 = self::i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1;
   self::i;
 }
 static method test2() → core::int* {
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31185.dart.weak.transformed.expect
index a236821..ec82b98 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
 
 static field core::int* i = 5;
 static method test1() → core::int* {
-  return let final core::int* #t1 = self::i in let final core::int* #t2 = self::i = #t1.{core::num::+}(1) in #t1;
+  return let final core::int* #t1 = self::i in let final core::int* #t2 = self::i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1;
   self::i;
 }
 static method test2() → core::int* {
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31299.dart.weak.expect
index b463377..2d8b859 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.weak.expect
@@ -26,7 +26,7 @@
     : self::A::m = 2, super core::Object::•()
     ;
   method foo(core::int* a, core::int* b) → core::int*
-    return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}));
+    return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}{core::int*}){(core::num*) →* core::int*}){(core::num*) →* core::int*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -41,8 +41,8 @@
 static method test() → dynamic {
   let final Never* #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
   new A().foo();
-             ^" in new self::A::•().{self::A::foo}();
-  new self::A::•().{self::A::foo}(1, 2);
+             ^" in new self::A::•().{self::A::foo}{<inapplicable>}.(){() →* invalid-type};
+  new self::A::•().{self::A::foo}(1, 2){(core::int*, core::int*) →* core::int*};
   new self::A::foo();
   invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
 Try removing the extra positional arguments.
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31766.dart.weak.expect
index 9fcb7e6..ec4557f 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.weak.expect
@@ -21,10 +21,10 @@
 }
 static method main() → dynamic {
   function bar<T extends self::A*>(T* t) → void {
-    core::print("t.foo()=${t.{self::A::foo}()}");
+    core::print("t.foo()=${t.{self::A::foo}(){() →* dynamic}}");
   }
-  bar.call<self::A*>(new self::A::•());
+  bar<self::A*>(new self::A::•()){(self::A*) →* void};
   (<S extends self::A*>(S* s) → Null {
-    core::print("s.foo()=${s.{self::A::foo}()}");
-  }).call<self::A*>(new self::A::•());
+    core::print("s.foo()=${s.{self::A::foo}(){() →* dynamic}}");
+  })<self::A*>(new self::A::•()){(self::A*) →* Null};
 }
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31766.dart.weak.transformed.expect
index 9fcb7e6..ec4557f 100644
--- a/pkg/front_end/testcases/regress/issue_31766.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.weak.transformed.expect
@@ -21,10 +21,10 @@
 }
 static method main() → dynamic {
   function bar<T extends self::A*>(T* t) → void {
-    core::print("t.foo()=${t.{self::A::foo}()}");
+    core::print("t.foo()=${t.{self::A::foo}(){() →* dynamic}}");
   }
-  bar.call<self::A*>(new self::A::•());
+  bar<self::A*>(new self::A::•()){(self::A*) →* void};
   (<S extends self::A*>(S* s) → Null {
-    core::print("s.foo()=${s.{self::A::foo}()}");
-  }).call<self::A*>(new self::A::•());
+    core::print("s.foo()=${s.{self::A::foo}(){() →* dynamic}}");
+  })<self::A*>(new self::A::•()){(self::A*) →* Null};
 }
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31846.dart.weak.expect
index 98bf326..0966591 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.weak.expect
@@ -4,12 +4,12 @@
 
 static method main() → dynamic {
   core::print((#C1) is () →* dynamic);
-  core::print((<T extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType});
-  core::print((<T extends core::num*>(T* x) → T* => x).{core::Object::runtimeType});
-  core::print((<T extends core::Comparable<T*>* = core::Comparable<dynamic>*>(T* x) → T* => x).{core::Object::runtimeType});
-  core::print((<T extends core::Comparable<S*>* = core::Comparable<dynamic>*, S extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType});
-  core::print((<T extends (T*) →* dynamic = (Null) →* dynamic>(T* x) → T* => x).{core::Object::runtimeType});
-  core::print((<T extends core::List<core::List<T*>*>* = core::List<core::List<dynamic>*>*>(T* x) → T* => x).{core::Object::runtimeType});
+  core::print((<T extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends core::num*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends core::Comparable<T*>* = core::Comparable<dynamic>*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends core::Comparable<S*>* = core::Comparable<dynamic>*, S extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends (T*) →* dynamic = (Null) →* dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends core::List<core::List<T*>*>* = core::List<core::List<dynamic>*>*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31846.dart.weak.transformed.expect
index 4202e10..1a1cf76 100644
--- a/pkg/front_end/testcases/regress/issue_31846.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.weak.transformed.expect
@@ -4,12 +4,12 @@
 
 static method main() → dynamic {
   core::print((#C1) is () →* dynamic);
-  core::print((<T extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType});
-  core::print((<T extends core::num*>(T* x) → T* => x).{core::Object::runtimeType});
-  core::print((<T extends core::Comparable<T*>* = core::Comparable<dynamic>*>(T* x) → T* => x).{core::Object::runtimeType});
-  core::print((<T extends core::Comparable<S*>* = core::Comparable<dynamic>*, S extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType});
-  core::print((<T extends (T*) →* dynamic = (Null) →* dynamic>(T* x) → T* => x).{core::Object::runtimeType});
-  core::print((<T extends core::List<core::List<T*>*>* = core::List<core::List<dynamic>*>*>(T* x) → T* => x).{core::Object::runtimeType});
+  core::print((<T extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends core::num*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends core::Comparable<T*>* = core::Comparable<dynamic>*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends core::Comparable<S*>* = core::Comparable<dynamic>*, S extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends (T*) →* dynamic = (Null) →* dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends core::List<core::List<T*>*>* = core::List<core::List<dynamic>*>*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.weak.expect b/pkg/front_end/testcases/regress/issue_32182.dart.weak.expect
index 4714ed4..3b90e8d 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.weak.expect
@@ -49,5 +49,5 @@
     ;
 }
 static method main() → dynamic {
-  new self::C::•().{self::_C&A&M::m}().+(1);
+  new self::C::•().{self::_C&A&M::m}(){() →* dynamic}{dynamic}.+(1);
 }
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_32182.dart.weak.transformed.expect
index 560ee52..afa52c8 100644
--- a/pkg/front_end/testcases/regress/issue_32182.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.weak.transformed.expect
@@ -49,5 +49,5 @@
     ;
 }
 static method main() → dynamic {
-  new self::C::•().{self::_C&A&M::m}().+(1);
+  new self::C::•().{self::_C&A&M::m}(){() →* dynamic}{dynamic}.+(1);
 }
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.weak.expect b/pkg/front_end/testcases/regress/issue_32660.dart.weak.expect
index 3493cad..ec03c53 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.weak.expect
@@ -92,7 +92,7 @@
     ;
   abstract method foo(core::int* x, {core::int* y = #C1}) → dynamic;
   method noSuchMethod(core::Invocation* i) → dynamic {
-    core::print(i.{core::Invocation::namedArguments});
+    core::print(i.{core::Invocation::namedArguments}{core::Map<core::Symbol*, dynamic>*});
     return 42;
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_32660.dart.weak.transformed.expect
index 3493cad..ec03c53 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.weak.transformed.expect
@@ -92,7 +92,7 @@
     ;
   abstract method foo(core::int* x, {core::int* y = #C1}) → dynamic;
   method noSuchMethod(core::Invocation* i) → dynamic {
-    core::print(i.{core::Invocation::namedArguments});
+    core::print(i.{core::Invocation::namedArguments}{core::Map<core::Symbol*, dynamic>*});
     return 42;
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.weak.expect b/pkg/front_end/testcases/regress/issue_32972.dart.weak.expect
index 4d6f98a..36cb030 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.weak.expect
@@ -81,8 +81,8 @@
   self::Foo* f = new self::Foo::•();
   let final Never* #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
   f.bar<double, double>(42.42);
-    ^" in f.{self::Foo::bar}<core::double*, core::double*>(42.42);
-  f.{self::Foo::bar}<core::double*>(42.42);
+    ^" in f.{self::Foo::bar}{<inapplicable>}.<core::double*, core::double*>(42.42){(invalid-type) →* invalid-type};
+  f.{self::Foo::bar}<core::double*>(42.42){(core::double*) →* dynamic};
   invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:29:7: Error: Expected 2 type arguments.
   new Bar<String>();
       ^";
diff --git a/pkg/front_end/testcases/regress/issue_33672.dart.weak.expect b/pkg/front_end/testcases/regress/issue_33672.dart.weak.expect
index e759d28..7caa5cb 100644
--- a/pkg/front_end/testcases/regress/issue_33672.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_33672.dart.weak.expect
@@ -5,14 +5,14 @@
 static method main() → dynamic {
   core::int* count = 0;
   #L1:
-  for (core::int* a = 0; a.{core::num::<}(10); a = a.{core::num::+}(1)) {
-    for (core::int* b = 0; b.{core::num::<}(10); b = b.{core::num::+}(1)) {
-      count = count.{core::num::+}(1);
-      if(count.{core::num::==}(27))
+  for (core::int* a = 0; a.{core::num::<}(10){(core::num*) →* core::bool*}; a = a.{core::num::+}(1){(core::num*) →* core::int*}) {
+    for (core::int* b = 0; b.{core::num::<}(10){(core::num*) →* core::bool*}; b = b.{core::num::+}(1){(core::num*) →* core::int*}) {
+      count = count.{core::num::+}(1){(core::num*) →* core::int*};
+      if(count =={core::num::==}{(core::Object*) →* core::bool*} 27)
         break #L1;
     }
-    count = count.{core::num::+}(1);
+    count = count.{core::num::+}(1){(core::num*) →* core::int*};
   }
-  if(!count.{core::num::==}(27))
+  if(!(count =={core::num::==}{(core::Object*) →* core::bool*} 27))
     throw "failed: ${count}";
 }
diff --git a/pkg/front_end/testcases/regress/issue_33672.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_33672.dart.weak.transformed.expect
index e759d28..7caa5cb 100644
--- a/pkg/front_end/testcases/regress/issue_33672.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_33672.dart.weak.transformed.expect
@@ -5,14 +5,14 @@
 static method main() → dynamic {
   core::int* count = 0;
   #L1:
-  for (core::int* a = 0; a.{core::num::<}(10); a = a.{core::num::+}(1)) {
-    for (core::int* b = 0; b.{core::num::<}(10); b = b.{core::num::+}(1)) {
-      count = count.{core::num::+}(1);
-      if(count.{core::num::==}(27))
+  for (core::int* a = 0; a.{core::num::<}(10){(core::num*) →* core::bool*}; a = a.{core::num::+}(1){(core::num*) →* core::int*}) {
+    for (core::int* b = 0; b.{core::num::<}(10){(core::num*) →* core::bool*}; b = b.{core::num::+}(1){(core::num*) →* core::int*}) {
+      count = count.{core::num::+}(1){(core::num*) →* core::int*};
+      if(count =={core::num::==}{(core::Object*) →* core::bool*} 27)
         break #L1;
     }
-    count = count.{core::num::+}(1);
+    count = count.{core::num::+}(1){(core::num*) →* core::int*};
   }
-  if(!count.{core::num::==}(27))
+  if(!(count =={core::num::==}{(core::Object*) →* core::bool*} 27))
     throw "failed: ${count}";
 }
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect
index d4c306b..681977f 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect
@@ -120,29 +120,29 @@
 }
 static method main() → dynamic {
   self::C<core::int*>* c1 = new self::C::bar<core::int*>();
-  c1.{self::C::toString}();
+  c1.{self::C::toString}(){() →* core::String*};
   self::C<core::int*>* c2 = new self::C::bar<core::int*>();
-  c2.{self::C::toString}();
+  c2.{self::C::toString}(){() →* core::String*};
   self::C<core::String*>* c3 = new self::C::bar<core::String*>();
-  c3.{self::C::toString}();
+  c3.{self::C::toString}(){() →* core::String*};
   self::C<core::String*>* c4 = new self::C::bar<core::String*>();
-  c4.{self::C::toString}();
-  (#C1).{self::D::toString}();
-  (#C1).{self::D::toString}();
-  (#C2).{self::D::toString}();
-  (#C2).{self::D::toString}();
+  c4.{self::C::toString}(){() →* core::String*};
+  (#C1).{self::D::toString}(){() →* core::String*};
+  (#C1).{self::D::toString}(){() →* core::String*};
+  (#C2).{self::D::toString}(){() →* core::String*};
+  (#C2).{self::D::toString}(){() →* core::String*};
   iss::E<core::int*>* e1 = new iss::E::bar<core::int*>();
-  e1.{iss::E::toString}();
+  e1.{iss::E::toString}(){() →* core::String*};
   iss::E<dynamic>* e2 = new iss::E::bar<dynamic>();
-  e2.{iss::E::toString}();
+  e2.{iss::E::toString}(){() →* core::String*};
   iss::E<core::String*>* e3 = new iss::E::bar<core::String*>();
-  e3.{iss::E::toString}();
+  e3.{iss::E::toString}(){() →* core::String*};
   iss::E<core::String*>* e4 = new iss::E::bar<core::String*>();
-  e4.{iss::E::toString}();
-  (#C3).{iss::F::toString}();
-  (#C4).{iss::F::toString}();
-  (#C5).{iss::F::toString}();
-  (#C5).{iss::F::toString}();
+  e4.{iss::E::toString}(){() →* core::String*};
+  (#C3).{iss::F::toString}(){() →* core::String*};
+  (#C4).{iss::F::toString}(){() →* core::String*};
+  (#C5).{iss::F::toString}(){() →* core::String*};
+  (#C5).{iss::F::toString}(){() →* core::String*};
 }
 
 library;
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect
index d4c306b..681977f 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect
@@ -120,29 +120,29 @@
 }
 static method main() → dynamic {
   self::C<core::int*>* c1 = new self::C::bar<core::int*>();
-  c1.{self::C::toString}();
+  c1.{self::C::toString}(){() →* core::String*};
   self::C<core::int*>* c2 = new self::C::bar<core::int*>();
-  c2.{self::C::toString}();
+  c2.{self::C::toString}(){() →* core::String*};
   self::C<core::String*>* c3 = new self::C::bar<core::String*>();
-  c3.{self::C::toString}();
+  c3.{self::C::toString}(){() →* core::String*};
   self::C<core::String*>* c4 = new self::C::bar<core::String*>();
-  c4.{self::C::toString}();
-  (#C1).{self::D::toString}();
-  (#C1).{self::D::toString}();
-  (#C2).{self::D::toString}();
-  (#C2).{self::D::toString}();
+  c4.{self::C::toString}(){() →* core::String*};
+  (#C1).{self::D::toString}(){() →* core::String*};
+  (#C1).{self::D::toString}(){() →* core::String*};
+  (#C2).{self::D::toString}(){() →* core::String*};
+  (#C2).{self::D::toString}(){() →* core::String*};
   iss::E<core::int*>* e1 = new iss::E::bar<core::int*>();
-  e1.{iss::E::toString}();
+  e1.{iss::E::toString}(){() →* core::String*};
   iss::E<dynamic>* e2 = new iss::E::bar<dynamic>();
-  e2.{iss::E::toString}();
+  e2.{iss::E::toString}(){() →* core::String*};
   iss::E<core::String*>* e3 = new iss::E::bar<core::String*>();
-  e3.{iss::E::toString}();
+  e3.{iss::E::toString}(){() →* core::String*};
   iss::E<core::String*>* e4 = new iss::E::bar<core::String*>();
-  e4.{iss::E::toString}();
-  (#C3).{iss::F::toString}();
-  (#C4).{iss::F::toString}();
-  (#C5).{iss::F::toString}();
-  (#C5).{iss::F::toString}();
+  e4.{iss::E::toString}(){() →* core::String*};
+  (#C3).{iss::F::toString}(){() →* core::String*};
+  (#C4).{iss::F::toString}(){() →* core::String*};
+  (#C5).{iss::F::toString}(){() →* core::String*};
+  (#C5).{iss::F::toString}(){() →* core::String*};
 }
 
 library;
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34563.dart.weak.expect
index ab53dc8..5f2bf3e 100644
--- a/pkg/front_end/testcases/regress/issue_34563.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34563.dart.weak.expect
@@ -136,7 +136,7 @@
  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
   c2.m + c2.c;
-     ^".+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class 'C2'.
+     ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class 'C2'.
  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c2.m + c2.c;
@@ -146,7 +146,7 @@
  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
   c3.m + c3.c;
-     ^".+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class 'C3'.
+     ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class 'C3'.
  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c3.m + c3.c;
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34563.dart.weak.transformed.expect
index ab53dc8..5f2bf3e 100644
--- a/pkg/front_end/testcases/regress/issue_34563.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34563.dart.weak.transformed.expect
@@ -136,7 +136,7 @@
  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
   c2.m + c2.c;
-     ^".+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class 'C2'.
+     ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class 'C2'.
  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c2.m + c2.c;
@@ -146,7 +146,7 @@
  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
   c3.m + c3.c;
-     ^".+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class 'C3'.
+     ^"{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class 'C3'.
  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c3.m + c3.c;
diff --git a/pkg/front_end/testcases/regress/issue_34610.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34610.dart.weak.expect
index ebbd094..db6cda1 100644
--- a/pkg/front_end/testcases/regress/issue_34610.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34610.dart.weak.expect
@@ -94,14 +94,14 @@
 }
 static method main() → dynamic {
   try {
-    core::print(new self::A::named().{self::A::bar});
+    core::print(new self::A::named().{self::A::bar}{dynamic});
     throw "expected exception";
   }
   on dynamic catch(final dynamic e) {
   }
-  core::print(new self::B::named().{self::B::bar});
+  core::print(new self::B::named().{self::B::bar}{dynamic});
   try {
-    core::print(new self::C::named().{self::C::bar});
+    core::print(new self::C::named().{self::C::bar}{dynamic});
     throw "expected exception";
   }
   on dynamic catch(final dynamic e) {
diff --git a/pkg/front_end/testcases/regress/issue_34610.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34610.dart.weak.transformed.expect
index ebbd094..db6cda1 100644
--- a/pkg/front_end/testcases/regress/issue_34610.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34610.dart.weak.transformed.expect
@@ -94,14 +94,14 @@
 }
 static method main() → dynamic {
   try {
-    core::print(new self::A::named().{self::A::bar});
+    core::print(new self::A::named().{self::A::bar}{dynamic});
     throw "expected exception";
   }
   on dynamic catch(final dynamic e) {
   }
-  core::print(new self::B::named().{self::B::bar});
+  core::print(new self::B::named().{self::B::bar}{dynamic});
   try {
-    core::print(new self::C::named().{self::C::bar});
+    core::print(new self::C::named().{self::C::bar}{dynamic});
     throw "expected exception";
   }
   on dynamic catch(final dynamic e) {
diff --git a/pkg/front_end/testcases/regress/issue_34614.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34614.dart.weak.expect
index c556791..9092aae 100644
--- a/pkg/front_end/testcases/regress/issue_34614.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34614.dart.weak.expect
@@ -36,5 +36,5 @@
 }
 static method main() → dynamic {
   self::C* c = new self::C::•();
-  c.{self::C::toString}();
+  c.{self::C::toString}(){() →* core::String*};
 }
diff --git a/pkg/front_end/testcases/regress/issue_34614.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34614.dart.weak.transformed.expect
index c556791..9092aae 100644
--- a/pkg/front_end/testcases/regress/issue_34614.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34614.dart.weak.transformed.expect
@@ -36,5 +36,5 @@
 }
 static method main() → dynamic {
   self::C* c = new self::C::•();
-  c.{self::C::toString}();
+  c.{self::C::toString}(){() →* core::String*};
 }
diff --git a/pkg/front_end/testcases/regress/issue_35177.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35177.dart.weak.expect
index 74f9a1f..d0eb552 100644
--- a/pkg/front_end/testcases/regress/issue_35177.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35177.dart.weak.expect
@@ -4,5 +4,5 @@
 
 static method main() → dynamic {
   () →* dynamic f;
-  f.call().call<core::int*>();
+  f(){() →* dynamic}{dynamic}.call<core::int*>();
 }
diff --git a/pkg/front_end/testcases/regress/issue_35177.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35177.dart.weak.transformed.expect
index 74f9a1f..d0eb552 100644
--- a/pkg/front_end/testcases/regress/issue_35177.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35177.dart.weak.transformed.expect
@@ -4,5 +4,5 @@
 
 static method main() → dynamic {
   () →* dynamic f;
-  f.call().call<core::int*>();
+  f(){() →* dynamic}{dynamic}.call<core::int*>();
 }
diff --git a/pkg/front_end/testcases/regress/issue_35220.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35220.dart.weak.expect
index 2c6a495..3a8e95f 100644
--- a/pkg/front_end/testcases/regress/issue_35220.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35220.dart.weak.expect
@@ -18,7 +18,7 @@
     return let final Never* #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/regress/issue_35220.dart'.
   A bad() { return true != 2; }
-                        ^" in !true.{core::Object::==}(2) as{TypeError} self::A*;
+                        ^" in !(true =={core::Object::==}{(core::Object*) →* core::bool*} 2) as{TypeError} self::A*;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/regress/issue_35220.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35220.dart.weak.transformed.expect
index 73c291c..fdaaf0b 100644
--- a/pkg/front_end/testcases/regress/issue_35220.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35220.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
     return let final Never* #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/regress/issue_35220.dart'.
   A bad() { return true != 2; }
-                        ^" in !true.{core::Object::==}(2) as{TypeError} self::A*;
+                        ^" in !(true =={core::Object::==}{(core::Object*) →* core::bool*} 2) as{TypeError} self::A*;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.weak.expect b/pkg/front_end/testcases/regress/issue_37681.dart.weak.expect
index 0ea7212..c92257e 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.weak.expect
@@ -22,17 +22,17 @@
   function f_async() → core::int* async {
     return 42;
   }
-  core::print(await f_async.call());
+  core::print(await f_async(){() →* core::int*});
   function f_async_star() → core::int* async* {
     yield 42;
   }
-  await for (dynamic x in (f_async_star.call() as dynamic) as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+  await for (dynamic x in (f_async_star(){() →* core::int*} as dynamic) as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
     core::print(x);
   }
   function f_sync_star() → core::int* sync* {
     yield 42;
   }
-  for (dynamic x in (f_sync_star.call() as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  for (dynamic x in (f_sync_star(){() →* core::int*} as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
     core::print(x);
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
index 8458a57..6ae56e4 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
@@ -62,7 +62,7 @@
           :is_sync = true;
           return :async_future;
         }
-        [yield] let dynamic #t1 = asy::_awaitHelper(f_async.call(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t1 = asy::_awaitHelper(f_async(){() →* core::int*}, :async_op_then, :async_op_error, :async_op) in null;
         core::print(_in::unsafeCast<core::int*>(:result));
         function f_async_star() → core::int* /* originally async* */ {
           asy::_AsyncStarStreamController<dynamic>* :controller;
@@ -98,7 +98,7 @@
           return :controller_stream;
         }
         {
-          asy::Stream<dynamic>* :stream = (f_async_star.call() as dynamic) as{TypeError,ForDynamic} asy::Stream<dynamic>*;
+          asy::Stream<dynamic>* :stream = (f_async_star(){() →* core::int*} as dynamic) as{TypeError,ForDynamic} asy::Stream<dynamic>*;
           asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
           try
             #L4:
@@ -138,7 +138,7 @@
           return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
         }
         {
-          core::Iterator<dynamic>* :sync-for-iterator = ((f_sync_star.call() as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
+          core::Iterator<dynamic>* :sync-for-iterator = ((f_sync_star(){() →* core::int*} as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
           for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
             dynamic x = :sync-for-iterator.{core::Iterator::current};
             {
diff --git a/pkg/front_end/testcases/regress/issue_39040.dart.weak.expect b/pkg/front_end/testcases/regress/issue_39040.dart.weak.expect
index ccb6dec..ade6db2 100644
--- a/pkg/front_end/testcases/regress/issue_39040.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_39040.dart.weak.expect
@@ -11,7 +11,7 @@
     #L2:
     case #C1:
       {
-        whereWasI.{core::List::add}("outer 0");
+        whereWasI.{core::List::add}("outer 0"){(core::String*) →* void};
         break #L1;
       }
     #L3:
@@ -22,19 +22,19 @@
             #L4:
             case #C1:
               {
-                whereWasI.{core::List::add}("inner 0");
+                whereWasI.{core::List::add}("inner 0"){(core::String*) →* void};
                 continue #L5;
               }
             #L5:
             case #C2:
               {
-                whereWasI.{core::List::add}("inner 1");
+                whereWasI.{core::List::add}("inner 1"){(core::String*) →* void};
               }
           }
-        }).call();
+        })(){() →* Null};
       }
   }
-  if(!whereWasI.{core::List::length}.{core::num::==}(2) || !whereWasI.{core::List::[]}(0).{core::String::==}("inner 0") || !whereWasI.{core::List::[]}(1).{core::String::==}("inner 1")) {
+  if(!(whereWasI.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2) || !(whereWasI.{core::List::[]}(0){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "inner 0") || !(whereWasI.{core::List::[]}(1){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "inner 1")) {
     throw "Unexpected path.";
   }
   core::print(whereWasI);
diff --git a/pkg/front_end/testcases/regress/issue_39040.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_39040.dart.weak.transformed.expect
index 581c2ce..86da00b 100644
--- a/pkg/front_end/testcases/regress/issue_39040.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_39040.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
     #L2:
     case #C1:
       {
-        whereWasI.{core::List::add}("outer 0");
+        whereWasI.{core::List::add}("outer 0"){(core::String*) →* void};
         break #L1;
       }
     #L3:
@@ -22,19 +22,19 @@
             #L4:
             case #C1:
               {
-                whereWasI.{core::List::add}("inner 0");
+                whereWasI.{core::List::add}("inner 0"){(core::String*) →* void};
                 continue #L5;
               }
             #L5:
             case #C2:
               {
-                whereWasI.{core::List::add}("inner 1");
+                whereWasI.{core::List::add}("inner 1"){(core::String*) →* void};
               }
           }
-        }).call();
+        })(){() →* Null};
       }
   }
-  if(!whereWasI.{core::List::length}.{core::num::==}(2) || !whereWasI.{core::List::[]}(0).{core::String::==}("inner 0") || !whereWasI.{core::List::[]}(1).{core::String::==}("inner 1")) {
+  if(!(whereWasI.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2) || !(whereWasI.{core::List::[]}(0){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "inner 0") || !(whereWasI.{core::List::[]}(1){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "inner 1")) {
     throw "Unexpected path.";
   }
   core::print(whereWasI);
diff --git a/pkg/front_end/testcases/regress/issue_39682.dart.weak.expect b/pkg/front_end/testcases/regress/issue_39682.dart.weak.expect
index 690e86a..9ab919a 100644
--- a/pkg/front_end/testcases/regress/issue_39682.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_39682.dart.weak.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {
   () →* asy::Future<dynamic>* f = #C1;
-  f.call();
+  f(){() →* asy::Future<dynamic>*};
   core::print(self::__loadLibrary_foo());
 }
 static method __loadLibrary_foo() → core::String* {
diff --git a/pkg/front_end/testcases/regress/issue_39682.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_39682.dart.weak.transformed.expect
index 690e86a..9ab919a 100644
--- a/pkg/front_end/testcases/regress/issue_39682.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_39682.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {
   () →* asy::Future<dynamic>* f = #C1;
-  f.call();
+  f(){() →* asy::Future<dynamic>*};
   core::print(self::__loadLibrary_foo());
 }
 static method __loadLibrary_foo() → core::String* {
diff --git a/pkg/front_end/testcases/regress/issue_42423.dart.weak.expect b/pkg/front_end/testcases/regress/issue_42423.dart.weak.expect
index f462ef4..55da096 100644
--- a/pkg/front_end/testcases/regress/issue_42423.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_42423.dart.weak.expect
@@ -10,10 +10,10 @@
   core::Set<core::int*>* intSet = block {
     final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
     final core::Iterable<dynamic>* #t2 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t2.{core::Object::==}(null))
+    if(!(#t2 == null))
       for (final dynamic #t3 in #t2) {
         final core::int* #t4 = #t3 as{TypeError} core::int*;
-        #t1.{core::Set::add}{Invariant}(#t4);
+        #t1.{core::Set::add}(#t4){(core::int*) →* core::bool*};
       }
   } =>#t1;
 }
@@ -21,10 +21,10 @@
   core::List<core::int*>* intList = block {
     final core::List<core::int*>* #t5 = <core::int*>[];
     final core::Iterable<dynamic>* #t6 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t6.{core::Object::==}(null))
+    if(!(#t6 == null))
       for (final dynamic #t7 in #t6) {
         final core::int* #t8 = #t7 as{TypeError} core::int*;
-        #t5.{core::List::add}{Invariant}(#t8);
+        #t5.{core::List::add}(#t8){(core::int*) →* void};
       }
   } =>#t5;
 }
@@ -32,11 +32,11 @@
   core::Map<core::int*, core::int*>* intMap = block {
     final core::Map<core::int*, core::int*>* #t9 = <core::int*, core::int*>{};
     final core::Map<dynamic, dynamic>* #t10 = stringMap as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*;
-    if(!#t10.{core::Object::==}(null))
-      for (final core::MapEntry<dynamic, dynamic>* #t11 in #t10.{core::Map::entries}) {
-        final core::int* #t12 = #t11.{core::MapEntry::key} as{TypeError} core::int*;
-        final core::int* #t13 = #t11.{core::MapEntry::value} as{TypeError} core::int*;
-        #t9.{core::Map::[]=}{Invariant}(#t12, #t13);
+    if(!(#t10 == null))
+      for (final core::MapEntry<dynamic, dynamic>* #t11 in #t10.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}) {
+        final core::int* #t12 = #t11.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
+        final core::int* #t13 = #t11.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+        #t9.{core::Map::[]=}(#t12, #t13){(core::int*, core::int*) →* void};
       }
   } =>#t9;
 }
diff --git a/pkg/front_end/testcases/regress/issue_42423.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_42423.dart.weak.transformed.expect
index 1ee9e4cd..d754933 100644
--- a/pkg/front_end/testcases/regress/issue_42423.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_42423.dart.weak.transformed.expect
@@ -10,13 +10,13 @@
   core::Set<core::int*>* intSet = block {
     final core::Set<core::int*>* #t1 = new col::_CompactLinkedHashSet::•<core::int*>();
     final core::Iterable<dynamic>* #t2 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t2.{core::Object::==}(null)) {
+    if(!(#t2 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t2.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t3 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t4 = #t3 as{TypeError} core::int*;
-          #t1.{core::Set::add}{Invariant}(#t4);
+          #t1.{core::Set::add}(#t4){(core::int*) →* core::bool*};
         }
       }
     }
@@ -26,13 +26,13 @@
   core::List<core::int*>* intList = block {
     final core::List<core::int*>* #t5 = core::_GrowableList::•<core::int*>(0);
     final core::Iterable<dynamic>* #t6 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t6.{core::Object::==}(null)) {
+    if(!(#t6 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t6.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t7 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t8 = #t7 as{TypeError} core::int*;
-          #t5.{core::List::add}{Invariant}(#t8);
+          #t5.{core::List::add}(#t8){(core::int*) →* void};
         }
       }
     }
@@ -42,14 +42,14 @@
   core::Map<core::int*, core::int*>* intMap = block {
     final core::Map<core::int*, core::int*>* #t9 = <core::int*, core::int*>{};
     final core::Map<dynamic, dynamic>* #t10 = stringMap as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*;
-    if(!#t10.{core::Object::==}(null)) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = #t10.{core::Map::entries}.{core::Iterable::iterator};
+    if(!(#t10 == null)) {
+      core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = #t10.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t11 = :sync-for-iterator.{core::Iterator::current};
         {
-          final core::int* #t12 = #t11.{core::MapEntry::key} as{TypeError} core::int*;
-          final core::int* #t13 = #t11.{core::MapEntry::value} as{TypeError} core::int*;
-          #t9.{core::Map::[]=}{Invariant}(#t12, #t13);
+          final core::int* #t12 = #t11.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
+          final core::int* #t13 = #t11.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+          #t9.{core::Map::[]=}(#t12, #t13){(core::int*, core::int*) →* void};
         }
       }
     }
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.expect
index be79a68..d6a32ed 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.expect
@@ -13,12 +13,12 @@
   get h() → dynamic
     return null;
   method test() → void {
-    this.{self::C::f}();
-    this.{self::C::f}();
-    this.{self::C::g}.call();
-    this.{self::C::g}.call();
-    this.{self::C::h}.call();
-    this.{self::C::h}.call();
+    this.{self::C::f}(){() →* void};
+    this.{self::C::f}(){() →* void};
+    this.{self::C::g}{() →* void}(){() →* void};
+    this.{self::C::g}{() →* void}(){() →* void};
+    this.{self::C::h}{dynamic}{dynamic}.call();
+    this.{self::C::h}{dynamic}{dynamic}.call();
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -32,11 +32,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C* c, () →* void f, dynamic d) → void {
-  c.{self::C::f}();
-  f.call();
-  d.call();
-  d.f();
-  c.{self::C::g}.call();
-  c.{self::C::h}.call();
+  c.{self::C::f}(){() →* void};
+  f(){() →* void};
+  d{dynamic}.call();
+  d{dynamic}.f();
+  c.{self::C::g}{() →* void}(){() →* void};
+  c.{self::C::h}{dynamic}{dynamic}.call();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.transformed.expect
index be79a68..d6a32ed 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.transformed.expect
@@ -13,12 +13,12 @@
   get h() → dynamic
     return null;
   method test() → void {
-    this.{self::C::f}();
-    this.{self::C::f}();
-    this.{self::C::g}.call();
-    this.{self::C::g}.call();
-    this.{self::C::h}.call();
-    this.{self::C::h}.call();
+    this.{self::C::f}(){() →* void};
+    this.{self::C::f}(){() →* void};
+    this.{self::C::g}{() →* void}(){() →* void};
+    this.{self::C::g}{() →* void}(){() →* void};
+    this.{self::C::h}{dynamic}{dynamic}.call();
+    this.{self::C::h}{dynamic}{dynamic}.call();
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -32,11 +32,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C* c, () →* void f, dynamic d) → void {
-  c.{self::C::f}();
-  f.call();
-  d.call();
-  d.f();
-  c.{self::C::g}.call();
-  c.{self::C::h}.call();
+  c.{self::C::f}(){() →* void};
+  f(){() →* void};
+  d{dynamic}.call();
+  d{dynamic}.f();
+  c.{self::C::g}{() →* void}(){() →* void};
+  c.{self::C::h}{dynamic}{dynamic}.call();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.expect
index ed18470..96f9b35 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.expect
@@ -10,10 +10,10 @@
   get x() → dynamic
     return null;
   method test() → void {
-    dynamic v1 = this.{self::C::x};
-    dynamic v2 = this.{self::C::x};
-    dynamic v3 = this.{self::C::y};
-    dynamic v4 = this.{self::C::y};
+    dynamic v1 = this.{self::C::x}{dynamic};
+    dynamic v2 = this.{self::C::x}{dynamic};
+    dynamic v3 = this.{self::C::y}{dynamic};
+    dynamic v4 = this.{self::C::y}{dynamic};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -27,8 +27,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C* c, dynamic d) → void {
-  dynamic v1 = c.{self::C::x};
-  dynamic v2 = c.{self::C::y};
-  dynamic v3 = d.x;
+  dynamic v1 = c.{self::C::x}{dynamic};
+  dynamic v2 = c.{self::C::y}{dynamic};
+  dynamic v3 = d{dynamic}.x;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.transformed.expect
index ed18470..96f9b35 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.transformed.expect
@@ -10,10 +10,10 @@
   get x() → dynamic
     return null;
   method test() → void {
-    dynamic v1 = this.{self::C::x};
-    dynamic v2 = this.{self::C::x};
-    dynamic v3 = this.{self::C::y};
-    dynamic v4 = this.{self::C::y};
+    dynamic v1 = this.{self::C::x}{dynamic};
+    dynamic v2 = this.{self::C::x}{dynamic};
+    dynamic v3 = this.{self::C::y}{dynamic};
+    dynamic v4 = this.{self::C::y}{dynamic};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -27,8 +27,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C* c, dynamic d) → void {
-  dynamic v1 = c.{self::C::x};
-  dynamic v2 = c.{self::C::y};
-  dynamic v3 = d.x;
+  dynamic v1 = c.{self::C::x}{dynamic};
+  dynamic v2 = c.{self::C::y}{dynamic};
+  dynamic v3 = d{dynamic}.x;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.expect
index 150c15b..a78157b 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.expect
@@ -28,6 +28,6 @@
 static method test(self::C* c, dynamic d) → void {
   c.{self::C::x} = null;
   c.{self::C::y} = null;
-  d.x = null;
+  d{dynamic}.x = null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.transformed.expect
index 150c15b..a78157b 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.transformed.expect
@@ -28,6 +28,6 @@
 static method test(self::C* c, dynamic d) → void {
   c.{self::C::x} = null;
   c.{self::C::y} = null;
-  d.x = null;
+  d{dynamic}.x = null;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.expect
index 472539f..eb56668 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.expect
@@ -19,5 +19,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  () →* void x = let final self::C* #t1 = new self::C::•() in #t1.==(null) ?{() →* void} null : #t1.{self::C::call};
+  () →* void x = let final self::C* #t1 = new self::C::•() in #t1 == null ?{() →* void} null : #t1.{self::C::call};
 }
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.transformed.expect
index 472539f..eb56668 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.transformed.expect
@@ -19,5 +19,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  () →* void x = let final self::C* #t1 = new self::C::•() in #t1.==(null) ?{() →* void} null : #t1.{self::C::call};
+  () →* void x = let final self::C* #t1 = new self::C::•() in #t1 == null ?{() →* void} null : #t1.{self::C::call};
 }
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.expect
index e427cd9..2d573c9 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.expect
@@ -21,5 +21,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  FutureOr<() →* void>* x = let final self::C* #t1 = new self::C::•() in #t1.==(null) ?{() →* void} null : #t1.{self::C::call};
+  FutureOr<() →* void>* x = let final self::C* #t1 = new self::C::•() in #t1 == null ?{() →* void} null : #t1.{self::C::call};
 }
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.transformed.expect
index e427cd9..2d573c9 100644
--- a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.transformed.expect
@@ -21,5 +21,5 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  FutureOr<() →* void>* x = let final self::C* #t1 = new self::C::•() in #t1.==(null) ?{() →* void} null : #t1.{self::C::call};
+  FutureOr<() →* void>* x = let final self::C* #t1 = new self::C::•() in #t1 == null ?{() →* void} null : #t1.{self::C::call};
 }
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.expect
index eb9c0e5..2142878 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
   method f() → void {
-    (self::C::T*) →* void x = this.{self::C::y};
+    (self::C::T*) →* void x = this.{self::C::y}{(self::C::T*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -23,6 +23,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::y} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::y}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.transformed.expect
index eb9c0e5..2142878 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
   method f() → void {
-    (self::C::T*) →* void x = this.{self::C::y};
+    (self::C::T*) →* void x = this.{self::C::y}{(self::C::T*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -23,6 +23,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::y} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::y}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.expect
index d05b36d..3e9cb61 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g(self::C<core::num*>* c) → void {
-  c.{self::C::f}<(core::Object*) →* void>((core::Object* o) → Null {});
+  c.{self::C::f}<(core::Object*) →* void>((core::Object* o) → Null {}){((core::Object*) →* void) →* void};
 }
 static method test() → void {
   self::g(new self::C::•<core::int*>());
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.transformed.expect
index d05b36d..3e9cb61 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g(self::C<core::num*>* c) → void {
-  c.{self::C::f}<(core::Object*) →* void>((core::Object* o) → Null {});
+  c.{self::C::f}<(core::Object*) →* void>((core::Object* o) → Null {}){((core::Object*) →* void) →* void};
 }
 static method test() → void {
   self::g(new self::C::•<core::int*>());
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.expect
index c696e93..a1cb113 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.expect
@@ -9,7 +9,7 @@
     ;
   method f1() → (self::C::T*) →* void {}
   method f2() → core::List<(self::C::T*) →* void>* {
-    return <(self::C::T*) →* void>[this.{self::C::f1}()];
+    return <(self::C::T*) →* void>[this.{self::C::f1}(){() →* (self::C::T*) →* void}];
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -23,15 +23,15 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
-  x.call(1.5);
+  x(1.5){(core::num*) →* void};
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x.call(1);
+  (core::int*) →* void x = c.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  x(1){(core::int*) →* void};
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2}() as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = c.{self::C::f2}(){() →* core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.transformed.expect
index 6d29b6e..5c0c338 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
     ;
   method f1() → (self::C::T*) →* void {}
   method f2() → core::List<(self::C::T*) →* void>* {
-    return core::_GrowableList::_literal1<(self::C::T*) →* void>(this.{self::C::f1}());
+    return core::_GrowableList::_literal1<(self::C::T*) →* void>(this.{self::C::f1}(){() →* (self::C::T*) →* void});
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -23,15 +23,15 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
-  x.call(1.5);
+  x(1.5){(core::num*) →* void};
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x.call(1);
+  (core::int*) →* void x = c.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  x(1){(core::int*) →* void};
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2}() as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = c.{self::C::f2}(){() →* core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.weak.expect
index ff20fa1..a8aa298 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.weak.expect
@@ -9,7 +9,7 @@
     ;
   method f1() → (self::C::T*) →* void {}
   method f2() → core::List<(self::C::T*) →* void>* {
-    return <(self::C::T*) →* void>[this.{self::C::f1}()];
+    return <(self::C::T*) →* void>[this.{self::C::f1}(){() →* (self::C::T*) →* void}];
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -23,15 +23,15 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{self::C::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1 == null ?{(core::num*) →* void} null : #t1.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
-  x.call(1.5);
+  x(1.5){(core::num*) →* void};
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{self::C::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x.call(1);
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2 == null ?{(core::num*) →* void} null : #t2.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  x(1){(core::int*) →* void};
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{self::C::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}() as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3 == null ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}(){() →* core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.weak.transformed.expect
index ca43160..443ac4f 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
     ;
   method f1() → (self::C::T*) →* void {}
   method f2() → core::List<(self::C::T*) →* void>* {
-    return core::_GrowableList::_literal1<(self::C::T*) →* void>(this.{self::C::f1}());
+    return core::_GrowableList::_literal1<(self::C::T*) →* void>(this.{self::C::f1}(){() →* (self::C::T*) →* void});
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -23,15 +23,15 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{self::C::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1 == null ?{(core::num*) →* void} null : #t1.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
-  x.call(1.5);
+  x(1.5){(core::num*) →* void};
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{self::C::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x.call(1);
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2 == null ?{(core::num*) →* void} null : #t2.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  x(1){(core::int*) →* void};
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{self::C::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}() as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3 == null ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}(){() →* core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.expect
index ce30de5..28fb659 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.expect
@@ -10,7 +10,7 @@
     : self::C::_x = _x, super core::Object::•()
     ;
   method f() → (self::C::T*) →* void
-    return this.{self::C::_x};
+    return this.{self::C::_x}{(self::C::T*) →* void};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -23,7 +23,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g(self::C<core::num*>* c) → () →* (core::num*) →* void {
-  return c.{self::C::f} as{TypeError,CovarianceCheck} () →* (core::num*) →* void;
+  return c.{self::C::f}{() →* (core::num*) →* void} as{TypeError,CovarianceCheck} () →* (core::num*) →* void;
 }
 static method h(core::int* i) → void {
   core::print("${i}");
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.transformed.expect
index ce30de5..28fb659 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     : self::C::_x = _x, super core::Object::•()
     ;
   method f() → (self::C::T*) →* void
-    return this.{self::C::_x};
+    return this.{self::C::_x}{(self::C::T*) →* void};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -23,7 +23,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g(self::C<core::num*>* c) → () →* (core::num*) →* void {
-  return c.{self::C::f} as{TypeError,CovarianceCheck} () →* (core::num*) →* void;
+  return c.{self::C::f}{() →* (core::num*) →* void} as{TypeError,CovarianceCheck} () →* (core::num*) →* void;
 }
 static method h(core::int* i) → void {
   core::print("${i}");
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.expect
index a081cbc..888b0a2 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
   method f(generic-covariant-impl self::C::T* value) → void {
-    let final self::C::T* #t1 = value in this.{self::C::y}.call(#t1);
+    let final self::C::T* #t1 = value in this.{self::C::y}{(self::C::T*) →* void}(#t1){(self::C::T*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -23,6 +23,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t2 = c in let final core::double* #t3 = 1.5 in (#t2.{self::C::y} as{TypeError,CovarianceCheck} (core::num*) →* void).call(#t3);
+  let final self::C<core::num*>* #t2 = c in let final core::double* #t3 = 1.5 in (#t2.{self::C::y}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void)(#t3){(core::num*) →* void};
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.transformed.expect
index 84c4721..b58547d 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
     : super core::Object::•()
     ;
   method f(generic-covariant-impl self::C::T* value) → void {
-    let final self::C::T* #t1 = value in this.{self::C::y}.call(#t1);
+    let final self::C::T* #t1 = value in this.{self::C::y}{(self::C::T*) →* void}(#t1){(self::C::T*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -23,7 +23,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t2 = c in let final core::double* #t3 = 1.5 in (#t2.{self::C::y} as{TypeError,CovarianceCheck} (core::num*) →* void).call(#t3);
+  let final self::C<core::num*>* #t2 = c in let final core::double* #t3 = 1.5 in (#t2.{self::C::y}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void)(#t3){(core::num*) →* void};
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.expect
index cfbae18..60445df 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.expect
@@ -10,7 +10,7 @@
   get f1() → (self::C::T*) →* void
     return null;
   get f2() → core::List<(self::C::T*) →* void>* {
-    return <(self::C::T*) →* void>[this.{self::C::f1}];
+    return <(self::C::T*) →* void>[this.{self::C::f1}{(self::C::T*) →* void}];
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -24,15 +24,15 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
-  x.call(1.5);
+  x(1.5){(core::num*) →* void};
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x.call(1);
+  (core::int*) →* void x = c.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  x(1){(core::int*) →* void};
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = c.{self::C::f2}{core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.transformed.expect
index bf505b2..54d2c49 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
   get f1() → (self::C::T*) →* void
     return null;
   get f2() → core::List<(self::C::T*) →* void>* {
-    return core::_GrowableList::_literal1<(self::C::T*) →* void>(this.{self::C::f1});
+    return core::_GrowableList::_literal1<(self::C::T*) →* void>(this.{self::C::f1}{(self::C::T*) →* void});
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -24,15 +24,15 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
-  x.call(1.5);
+  x(1.5){(core::num*) →* void};
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x.call(1);
+  (core::int*) →* void x = c.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  x(1){(core::int*) →* void};
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = c.{self::C::f2}{core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.weak.expect
index b1c9392..98e1172 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.weak.expect
@@ -10,7 +10,7 @@
   get f1() → (self::C::T*) →* void
     return null;
   get f2() → core::List<(self::C::T*) →* void>* {
-    return <(self::C::T*) →* void>[this.{self::C::f1}];
+    return <(self::C::T*) →* void>[this.{self::C::f1}{(self::C::T*) →* void}];
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -24,15 +24,15 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{self::C::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1 == null ?{(core::num*) →* void} null : #t1.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
-  x.call(1.5);
+  x(1.5){(core::num*) →* void};
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{self::C::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x.call(1);
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2 == null ?{(core::num*) →* void} null : #t2.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  x(1){(core::int*) →* void};
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{self::C::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3 == null ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}{core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.weak.transformed.expect
index 441c6fa..73da0a3 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
   get f1() → (self::C::T*) →* void
     return null;
   get f2() → core::List<(self::C::T*) →* void>* {
-    return core::_GrowableList::_literal1<(self::C::T*) →* void>(this.{self::C::f1});
+    return core::_GrowableList::_literal1<(self::C::T*) →* void>(this.{self::C::f1}{(self::C::T*) →* void});
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -24,15 +24,15 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{self::C::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1 == null ?{(core::num*) →* void} null : #t1.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
-  x.call(1.5);
+  x(1.5){(core::num*) →* void};
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{self::C::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
-  x.call(1);
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2 == null ?{(core::num*) →* void} null : #t2.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  x(1){(core::int*) →* void};
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{self::C::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3 == null ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}{core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect
index a1b22b2..f2e772a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect
@@ -23,7 +23,7 @@
   method g1<generic-covariant-impl U extends self::C::T*>() → void {
     this.{self::C::f}<self::C::g1::U*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
     this.f<U>(1.5);
-              ^" in 1.5 as{TypeError} Never);
+              ^" in 1.5 as{TypeError} Never){(self::C::g1::U*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -37,10 +37,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g2(self::C<core::Object*>* c) → void {
-  c.{self::C::f}<core::num*>(1.5);
+  c.{self::C::f}<core::num*>(1.5){(core::num*) →* void};
 }
 static method test() → void {
-  new self::C::•<core::int*>().{self::C::g1}<core::num*>();
+  new self::C::•<core::int*>().{self::C::g1}<core::num*>(){() →* void};
   self::g2(new self::C::•<core::int*>());
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect
index a1b22b2..f2e772a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
   method g1<generic-covariant-impl U extends self::C::T*>() → void {
     this.{self::C::f}<self::C::g1::U*>(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
     this.f<U>(1.5);
-              ^" in 1.5 as{TypeError} Never);
+              ^" in 1.5 as{TypeError} Never){(self::C::g1::U*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -37,10 +37,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g2(self::C<core::Object*>* c) → void {
-  c.{self::C::f}<core::num*>(1.5);
+  c.{self::C::f}<core::num*>(1.5){(core::num*) →* void};
 }
 static method test() → void {
-  new self::C::•<core::int*>().{self::C::g1}<core::num*>();
+  new self::C::•<core::int*>().{self::C::g1}<core::num*>(){() →* void};
   self::g2(new self::C::•<core::int*>());
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.expect
index bab4420..416b83b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.expect
@@ -19,12 +19,12 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c) → void {
-  c.{self::C::f}(1.5);
+  c.{self::C::f}(1.5){(core::num*) →* void};
 }
 static method g2(self::C<core::int*>* c) → void {
-  c.{self::C::f}(1);
+  c.{self::C::f}(1){(core::int*) →* void};
 }
 static method g3(self::C<core::num*>* c) → void {
-  c.{self::C::f}(null);
+  c.{self::C::f}(null){(core::num*) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.transformed.expect
index bab4420..416b83b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.transformed.expect
@@ -19,12 +19,12 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c) → void {
-  c.{self::C::f}(1.5);
+  c.{self::C::f}(1.5){(core::num*) →* void};
 }
 static method g2(self::C<core::int*>* c) → void {
-  c.{self::C::f}(1);
+  c.{self::C::f}(1){(core::int*) →* void};
 }
 static method g3(self::C<core::num*>* c) → void {
-  c.{self::C::f}(null);
+  c.{self::C::f}(null){(core::num*) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.expect
index 7bc3def..4cc02bb 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.expect
@@ -22,15 +22,15 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c, core::List<core::num*>* l) → void {
-  c.{self::C::f1}(l);
+  c.{self::C::f1}(l){(core::List<core::num*>*) →* void};
 }
 static method g2(self::C<core::num*>* c, () →* core::num* callback) → void {
-  c.{self::C::f2}(callback);
+  c.{self::C::f2}(callback){(() →* core::num*) →* void};
 }
 static method g3(self::C<core::num*>* c, (core::num*) →* core::num* callback) → void {
-  c.{self::C::f3}(callback);
+  c.{self::C::f3}(callback){((core::num*) →* core::num*) →* void};
 }
 static method g4(self::C<core::num*>* c, (core::num*) →* void callback) → void {
-  c.{self::C::f4}(callback);
+  c.{self::C::f4}(callback){((core::num*) →* void) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.transformed.expect
index 7bc3def..4cc02bb 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.transformed.expect
@@ -22,15 +22,15 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c, core::List<core::num*>* l) → void {
-  c.{self::C::f1}(l);
+  c.{self::C::f1}(l){(core::List<core::num*>*) →* void};
 }
 static method g2(self::C<core::num*>* c, () →* core::num* callback) → void {
-  c.{self::C::f2}(callback);
+  c.{self::C::f2}(callback){(() →* core::num*) →* void};
 }
 static method g3(self::C<core::num*>* c, (core::num*) →* core::num* callback) → void {
-  c.{self::C::f3}(callback);
+  c.{self::C::f3}(callback){((core::num*) →* core::num*) →* void};
 }
 static method g4(self::C<core::num*>* c, (core::num*) →* void callback) → void {
-  c.{self::C::f4}(callback);
+  c.{self::C::f4}(callback){((core::num*) →* void) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.expect
index fe4164c..b2163ff 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.expect
@@ -44,19 +44,19 @@
   method f2(generic-covariant-impl core::int* x, [generic-covariant-impl self::D::U* y = #C1]) → void {}
 }
 static method g1(self::C<core::num*>* c) → void {
-  c.{self::C::f1}(1);
+  c.{self::C::f1}(1){(core::int*) →* void};
 }
 static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f1}(1.5);
+  i.{self::I::f1}(1.5){(core::num*) →* void};
 }
 static method g3(self::C<core::num*>* c) → void {
-  c.{self::C::f2}(1, 1.5);
+  c.{self::C::f2}(1, 1.5){(core::int*, [core::num*]) →* void};
 }
 static method g4(self::D<core::num*>* d) → void {
-  d.{self::D::f1}(1);
+  d.{self::D::f1}(1){(core::int*) →* void};
 }
 static method g5(self::D<core::num*>* d) → void {
-  d.{self::D::f2}(1, 1.5);
+  d.{self::D::f2}(1, 1.5){(core::int*, [core::num*]) →* void};
 }
 static method test() → void {
   self::g2(new self::C::•<core::num*>());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.transformed.expect
index fe4164c..b2163ff 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.transformed.expect
@@ -44,19 +44,19 @@
   method f2(generic-covariant-impl core::int* x, [generic-covariant-impl self::D::U* y = #C1]) → void {}
 }
 static method g1(self::C<core::num*>* c) → void {
-  c.{self::C::f1}(1);
+  c.{self::C::f1}(1){(core::int*) →* void};
 }
 static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f1}(1.5);
+  i.{self::I::f1}(1.5){(core::num*) →* void};
 }
 static method g3(self::C<core::num*>* c) → void {
-  c.{self::C::f2}(1, 1.5);
+  c.{self::C::f2}(1, 1.5){(core::int*, [core::num*]) →* void};
 }
 static method g4(self::D<core::num*>* d) → void {
-  d.{self::D::f1}(1);
+  d.{self::D::f1}(1){(core::int*) →* void};
 }
 static method g5(self::D<core::num*>* d) → void {
-  d.{self::D::f2}(1, 1.5);
+  d.{self::D::f2}(1, 1.5){(core::int*, [core::num*]) →* void};
 }
 static method test() → void {
   self::g2(new self::C::•<core::num*>());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.expect
index 9d84b87..ae3c830 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.expect
@@ -58,10 +58,10 @@
     return super.{self::M::f}(x);
 }
 static method g1(self::C* c) → void {
-  c.{self::C::f}(1);
+  c.{self::C::f}(1){(core::int*) →* void};
 }
 static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5);
+  i.{self::I::f}(1.5){(core::num*) →* void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.transformed.expect
index 8ddd7e7..a88ae80 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.transformed.expect
@@ -57,10 +57,10 @@
   method f(generic-covariant-impl core::int* x) → void {}
 }
 static method g1(self::C* c) → void {
-  c.{self::C::f}(1);
+  c.{self::C::f}(1){(core::int*) →* void};
 }
 static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5);
+  i.{self::I::f}(1.5){(core::num*) →* void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.expect
index c3440ec..5cda4e0 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.expect
@@ -42,10 +42,10 @@
     return super.{self::B::f}(x);
 }
 static method g1(self::C* c) → void {
-  c.{self::C::f}(1);
+  c.{self::C::f}(1){(core::int*) →* void};
 }
 static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5);
+  i.{self::I::f}(1.5){(core::num*) →* void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.transformed.expect
index c3440ec..5cda4e0 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.transformed.expect
@@ -42,10 +42,10 @@
     return super.{self::B::f}(x);
 }
 static method g1(self::C* c) → void {
-  c.{self::C::f}(1);
+  c.{self::C::f}(1){(core::int*) →* void};
 }
 static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5);
+  i.{self::I::f}(1.5){(core::num*) →* void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.expect
index 3d71880..b2395d9 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.expect
@@ -57,10 +57,10 @@
     return super.{self::B::f}(x);
 }
 static method g1(self::C* c) → void {
-  c.{self::C::f}(1);
+  c.{self::C::f}(1){(core::int*) →* void};
 }
 static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5);
+  i.{self::I::f}(1.5){(core::num*) →* void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.transformed.expect
index d74360b..eb463e7 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.transformed.expect
@@ -57,10 +57,10 @@
     return super.{self::B::f}(x);
 }
 static method g1(self::C* c) → void {
-  c.{self::C::f}(1);
+  c.{self::C::f}(1){(core::int*) →* void};
 }
 static method g2(self::I<core::num*>* i) → void {
-  i.{self::I::f}(1.5);
+  i.{self::I::f}(1.5){(core::num*) →* void};
 }
 static method test() → void {
   self::g2(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.expect
index 3ee6fae..05ac14b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.expect
@@ -10,7 +10,7 @@
     ;
   method f1(generic-covariant-impl self::C::T* x) → void {}
   method f2(generic-covariant-impl core::List<self::C::T*>* x) → self::C::T*
-    return x.{core::Iterable::first};
+    return x.{core::Iterable::first}{self::C::T*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -23,18 +23,18 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::f1};
+  return c.{self::C::f1}{(core::num*) →* void};
 }
 static method g2(self::C<core::int*>* c, core::Object* x) → void {
   (core::Object*) →* void f = self::g1(c) as (core::Object*) →* void;
-  f.call(x);
+  f(x){(core::Object*) →* void};
 }
 static method g3(self::C<core::num*>* c) → (core::List<core::num*>*) →* core::num* {
-  return c.{self::C::f2};
+  return c.{self::C::f2}{(core::List<core::num*>*) →* core::num*};
 }
 static method test() → void {
   (core::num*) →* void x = self::g1(new self::C::•<core::int*>());
-  x.call(1.5);
+  x(1.5){(core::num*) →* void};
   self::g3(new self::C::•<core::int*>());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.transformed.expect
index 3ee6fae..05ac14b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     ;
   method f1(generic-covariant-impl self::C::T* x) → void {}
   method f2(generic-covariant-impl core::List<self::C::T*>* x) → self::C::T*
-    return x.{core::Iterable::first};
+    return x.{core::Iterable::first}{self::C::T*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -23,18 +23,18 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::f1};
+  return c.{self::C::f1}{(core::num*) →* void};
 }
 static method g2(self::C<core::int*>* c, core::Object* x) → void {
   (core::Object*) →* void f = self::g1(c) as (core::Object*) →* void;
-  f.call(x);
+  f(x){(core::Object*) →* void};
 }
 static method g3(self::C<core::num*>* c) → (core::List<core::num*>*) →* core::num* {
-  return c.{self::C::f2};
+  return c.{self::C::f2}{(core::List<core::num*>*) →* core::num*};
 }
 static method test() → void {
   (core::num*) →* void x = self::g1(new self::C::•<core::int*>());
-  x.call(1.5);
+  x(1.5){(core::num*) →* void};
   self::g3(new self::C::•<core::int*>());
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.expect
index 75c7857..e05a2b1 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.expect
@@ -32,10 +32,10 @@
   method f(covariant core::int* x) → void {}
 }
 static method g1(self::C* c) → void {
-  c.{self::C::f}(1.5);
+  c.{self::C::f}(1.5){(core::num*) →* void};
 }
 static method g2(self::C* c) → (core::num*) →* dynamic {
-  return c.{self::C::f};
+  return c.{self::C::f}{(core::num*) →* void};
 }
 static method test() → dynamic {
   self::g1(new self::D::•());
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.transformed.expect
index 75c7857..e05a2b1 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.transformed.expect
@@ -32,10 +32,10 @@
   method f(covariant core::int* x) → void {}
 }
 static method g1(self::C* c) → void {
-  c.{self::C::f}(1.5);
+  c.{self::C::f}(1.5){(core::num*) →* void};
 }
 static method g2(self::C* c) → (core::num*) →* dynamic {
-  return c.{self::C::f};
+  return c.{self::C::f}{(core::num*) →* void};
 }
 static method test() → dynamic {
   self::g1(new self::D::•());
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.expect
index 82e285a..bb26705 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.expect
@@ -26,10 +26,10 @@
   method f1(covariant generic-covariant-impl core::int* x) → void {}
 }
 static method g1(dynamic d) → void {
-  d.f1(1.5);
+  d{dynamic}.f1(1.5);
 }
 static method g2(dynamic d) → void {
-  d.f2(1.5);
+  d{dynamic}.f2(1.5);
 }
 static method test() → void {
   self::g1(new self::C::•<core::int*>());
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.transformed.expect
index 82e285a..bb26705 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.transformed.expect
@@ -26,10 +26,10 @@
   method f1(covariant generic-covariant-impl core::int* x) → void {}
 }
 static method g1(dynamic d) → void {
-  d.f1(1.5);
+  d{dynamic}.f1(1.5);
 }
 static method g2(dynamic d) → void {
-  d.f2(1.5);
+  d{dynamic}.f2(1.5);
 }
 static method test() → void {
   self::g1(new self::C::•<core::int*>());
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.expect
index 07dcc99..3093b2a 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.expect
@@ -19,10 +19,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(dynamic d) → void {
-  d.f<core::num*>(1.5);
+  d{dynamic}.f<core::num*>(1.5);
 }
 static method g2(dynamic d) → void {
-  d.f(1.5);
+  d{dynamic}.f(1.5);
 }
 static method test() → void {
   self::g1(new self::C::•<core::int*>());
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.transformed.expect
index 07dcc99..3093b2a 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.transformed.expect
@@ -19,10 +19,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g1(dynamic d) → void {
-  d.f<core::num*>(1.5);
+  d{dynamic}.f<core::num*>(1.5);
 }
 static method g2(dynamic d) → void {
-  d.f(1.5);
+  d{dynamic}.f(1.5);
 }
 static method test() → void {
   self::g1(new self::C::•<core::int*>());
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.expect
index 89e5e57..14294a1 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.expect
@@ -19,7 +19,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::double* #t2 = 1.5 in #t1.{self::C::f}.call(#t2);
+  let final self::C* #t1 = c in let final core::double* #t2 = 1.5 in #t1.{self::C::f}{dynamic}{dynamic}.call(#t2);
 }
 static method h(core::int* i) → void {}
 static method test() → void {
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.transformed.expect
index 12c20f9..bde2247 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method g(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::double* #t2 = 1.5 in #t1.{self::C::f}.call(#t2);
+  let final self::C* #t1 = c in let final core::double* #t2 = 1.5 in #t1.{self::C::f}{dynamic}{dynamic}.call(#t2);
 }
 static method h(core::int* i) → void {}
 static method test() → void {
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.expect
index 1839f07..6c001e5 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.expect
@@ -14,8 +14,8 @@
     this.{self::B::_x} = x;
   }
   method check(core::Object* expectedValue) → void {
-    if(!this.{self::B::_x}.{core::Object::==}(expectedValue)) {
-      throw "Expected _x == ${expectedValue}; got ${this.{self::B::_x}}";
+    if(!(this.{self::B::_x}{core::Object*} =={core::Object::==}{(core::Object*) →* core::bool*} expectedValue)) {
+      throw "Expected _x == ${expectedValue}; got ${this.{self::B::_x}{core::Object*}}";
     }
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -57,10 +57,10 @@
 }
 static method main() → dynamic {
   self::C* c = new self::C::•();
-  c.{self::C::f}();
-  c.{self::B::check}(10);
-  c.{self::C::g}();
-  c.{self::B::check}(20);
+  c.{self::C::f}(){([core::num*]) →* void};
+  c.{self::B::check}(10){(core::Object*) →* void};
+  c.{self::C::g}(){({x: core::num*}) →* void};
+  c.{self::B::check}(20){(core::Object*) →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.transformed.expect
index 1839f07..6c001e5 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.transformed.expect
@@ -14,8 +14,8 @@
     this.{self::B::_x} = x;
   }
   method check(core::Object* expectedValue) → void {
-    if(!this.{self::B::_x}.{core::Object::==}(expectedValue)) {
-      throw "Expected _x == ${expectedValue}; got ${this.{self::B::_x}}";
+    if(!(this.{self::B::_x}{core::Object*} =={core::Object::==}{(core::Object*) →* core::bool*} expectedValue)) {
+      throw "Expected _x == ${expectedValue}; got ${this.{self::B::_x}{core::Object*}}";
     }
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -57,10 +57,10 @@
 }
 static method main() → dynamic {
   self::C* c = new self::C::•();
-  c.{self::C::f}();
-  c.{self::B::check}(10);
-  c.{self::C::g}();
-  c.{self::B::check}(20);
+  c.{self::C::f}(){([core::num*]) →* void};
+  c.{self::B::check}(10){(core::Object*) →* void};
+  c.{self::C::g}(){({x: core::num*}) →* void};
+  c.{self::B::check}(20){(core::Object*) →* void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.weak.expect
index 0cd35c4..40fe0be 100644
--- a/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.weak.expect
@@ -5,7 +5,7 @@
 static method main() → void {
   core::Object* o = 1;
   try {
-    for (core::int* i = 0; o as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; o as{TypeError} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     }
     throw "no exception";
   }
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.weak.transformed.expect
index 0cd35c4..40fe0be 100644
--- a/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 static method main() → void {
   core::Object* o = 1;
   try {
-    for (core::int* i = 0; o as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+    for (core::int* i = 0; o as{TypeError} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
     }
     throw "no exception";
   }
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.expect
index dcb6067..76ccf53 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.expect
@@ -9,16 +9,16 @@
     ;
   method f(generic-covariant-impl self::C::T* x) → void {}
   method g1(generic-covariant-impl self::C::T* x) → void {
-    this.{self::C::f}(x);
+    this.{self::C::f}(x){(self::C::T*) →* void};
   }
   method g2(generic-covariant-impl self::C::T* x) → void {
-    this.{self::C::f}(x);
+    this.{self::C::f}(x){(self::C::T*) →* void};
   }
   method g3(generic-covariant-impl self::C<self::C::T*>* c, generic-covariant-impl self::C::T* x) → void {
-    c.{self::C::f}(x);
+    c.{self::C::f}(x){(self::C::T*) →* void};
   }
   method g4() → (self::C::T*) →* dynamic
-    return this.{self::C::f};
+    return this.{self::C::f}{(self::C::T*) →* void};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -42,8 +42,8 @@
   method f(covariant generic-covariant-impl core::int* x) → void {}
 }
 static method test() → dynamic {
-  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}() as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
-  x.call("hi");
-  new self::E::•().{self::C::g1}(1.5);
+  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}(){() →* (core::int*) →* dynamic} as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
+  x("hi"){(core::Object*) →* dynamic};
+  new self::E::•().{self::C::g1}(1.5){(core::num*) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.transformed.expect
index dcb6067..76ccf53 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.transformed.expect
@@ -9,16 +9,16 @@
     ;
   method f(generic-covariant-impl self::C::T* x) → void {}
   method g1(generic-covariant-impl self::C::T* x) → void {
-    this.{self::C::f}(x);
+    this.{self::C::f}(x){(self::C::T*) →* void};
   }
   method g2(generic-covariant-impl self::C::T* x) → void {
-    this.{self::C::f}(x);
+    this.{self::C::f}(x){(self::C::T*) →* void};
   }
   method g3(generic-covariant-impl self::C<self::C::T*>* c, generic-covariant-impl self::C::T* x) → void {
-    c.{self::C::f}(x);
+    c.{self::C::f}(x){(self::C::T*) →* void};
   }
   method g4() → (self::C::T*) →* dynamic
-    return this.{self::C::f};
+    return this.{self::C::f}{(self::C::T*) →* void};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -42,8 +42,8 @@
   method f(covariant generic-covariant-impl core::int* x) → void {}
 }
 static method test() → dynamic {
-  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}() as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
-  x.call("hi");
-  new self::E::•().{self::C::g1}(1.5);
+  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}(){() →* (core::int*) →* dynamic} as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
+  x("hi"){(core::Object*) →* dynamic};
+  new self::E::•().{self::C::g1}(1.5){(core::num*) →* void};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.expect
index 3bb4b53..d266b53 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.expect
@@ -41,19 +41,19 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1(self::B<core::num*, (core::num*) →* void>* b) → void {
-  b = b.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  b = b.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method test2(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2).{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*);
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4).{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
+  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2){(core::int*) →* self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*){(core::int*, self::B<core::num*, (core::num*) →* void>*) →* void};
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4){(core::int*) →* self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int*, self::B<core::num*, (core::num*) →* void>*) →* void} in #t5;
 }
 static method test3(self::C* c) → void {
-  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}{self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}{self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method test4(self::C* c) → void {
-  self::C::y = self::C::y.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::C::y = self::C::y.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.transformed.expect
index f94a84b..28b2e93 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.transformed.expect
@@ -41,20 +41,20 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test1(self::B<core::num*, (core::num*) →* void>* b) → void {
-  b = b.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  b = b.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method test2(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2).{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*);
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4).{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
+  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2){(core::int*) →* self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*){(core::int*, self::B<core::num*, (core::num*) →* void>*) →* void};
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4){(core::int*) →* self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int*, self::B<core::num*, (core::num*) →* void>*) →* void} in #t5;
 }
 static method test3(self::C* c) → void {
-  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}{self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}{self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method test4(self::C* c) → void {
-  self::C::y = self::C::y.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::C::y = self::C::y.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.expect
index 88e10fb..889de80 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.expect
@@ -27,7 +27,7 @@
     : self::C::plusResult = plusResult, super core::Object::•()
     ;
   operator +(core::int* i) → (self::C::T*) →* core::num*
-    return this.{self::C::plusResult};
+    return this.{self::C::plusResult}{(self::C::T*) →* core::num*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -46,7 +46,7 @@
     : self::D::getValue = getValue, super core::Object::•()
     ;
   get value() → self::C<core::num*>*
-    return this.{self::D::getValue};
+    return this.{self::D::getValue}{self::C<core::num*>*};
   set value((core::int*) →* core::int* value) → void {
     this.{self::D::setValue} = value;
   }
@@ -63,14 +63,14 @@
 }
 static method expectTypeError(() →* void callback) → void {
   try {
-    callback.call();
+    callback(){() →* void};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
   }
 }
 static method expect(core::Object* value, core::Object* expected) → void {
-  if(!value.{core::Object::==}(expected)) {
+  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
@@ -82,15 +82,15 @@
   self::D* d = new self::D::•(new self::C::•<core::num*>(#C1));
   let final self::D* #t1 = d in #t1.{self::D::value} = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
   d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                             ^" in (#t1.{self::D::value}.{self::C::+}(1) as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
-  self::expect(let final self::D* #t3 = d in let final core::int* #t4 = 0 in #t3.{self::D::setValue}.call(#t4), 1);
+                                             ^" in (#t1.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+  self::expect(let final self::D* #t3 = d in let final core::int* #t4 = 0 in #t3.{self::D::setValue}{(core::int*) →* core::int*}(#t4){(core::int*) →* core::int*}, 1);
   d = new self::D::•(new self::C::•<core::num*>(#C2));
   self::expectTypeError(() → Null {
     let final self::D* #t5 = d in #t5.{self::D::value} = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
     d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                               ^" in (#t5.{self::D::value}.{self::C::+}(1) as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+                                               ^" in (#t5.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   });
-  self::expect(d.{self::D::setValue}, null);
+  self::expect(d.{self::D::setValue}{(core::int*) →* core::int*}, null);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.transformed.expect
index 8d05145..4fec92e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.transformed.expect
@@ -27,7 +27,7 @@
     : self::C::plusResult = plusResult, super core::Object::•()
     ;
   operator +(core::int* i) → (self::C::T*) →* core::num*
-    return this.{self::C::plusResult};
+    return this.{self::C::plusResult}{(self::C::T*) →* core::num*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -46,7 +46,7 @@
     : self::D::getValue = getValue, super core::Object::•()
     ;
   get value() → self::C<core::num*>*
-    return this.{self::D::getValue};
+    return this.{self::D::getValue}{self::C<core::num*>*};
   set value((core::int*) →* core::int* value) → void {
     this.{self::D::setValue} = value;
   }
@@ -63,14 +63,14 @@
 }
 static method expectTypeError(() →* void callback) → void {
   try {
-    callback.call();
+    callback(){() →* void};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
   }
 }
 static method expect(core::Object* value, core::Object* expected) → void {
-  if(!value.{core::Object::==}(expected)) {
+  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
@@ -82,15 +82,15 @@
   self::D* d = new self::D::•(new self::C::•<core::num*>(#C1));
   let final self::D* #t1 = d in #t1.{self::D::value} = let final Never* #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
   d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                             ^" in (#t1.{self::D::value}.{self::C::+}(1) as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
-  self::expect(let final self::D* #t3 = d in let final core::int* #t4 = 0 in #t3.{self::D::setValue}.call(#t4), 1);
+                                             ^" in (#t1.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+  self::expect(let final self::D* #t3 = d in let final core::int* #t4 = 0 in #t3.{self::D::setValue}{(core::int*) →* core::int*}(#t4){(core::int*) →* core::int*}, 1);
   d = new self::D::•(new self::C::•<core::num*>(#C2));
   self::expectTypeError(() → Null {
     let final self::D* #t5 = d in #t5.{self::D::value} = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
     d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                               ^" in (#t5.{self::D::value}.{self::C::+}(1) as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+                                               ^" in (#t5.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   });
-  self::expect(d.{self::D::setValue}, null);
+  self::expect(d.{self::D::setValue}{(core::int*) →* core::int*}, null);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect
index 2115b29..5bf031a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect
@@ -62,19 +62,19 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-                                                     ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*);
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+                                                     ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-                                                             ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*);
-  let final self::C<core::num*>* #t5 = c in (#t5.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::==}(null) ?{self::B<core::Object*>*} #t5.{self::C::x} = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+                                                             ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
+  let final self::C<core::num*>* #t5 = c in #t5.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t5.{self::C::x} = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                       ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
-  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t8.{self::B::==}(null) ?{self::B<core::Object*>*} #t7.{self::C::x} = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t8 == null ?{self::B<core::Object*>*} #t7.{self::C::x} = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                               ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t8;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect
index 2115b29..5bf031a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect
@@ -62,19 +62,19 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-                                                     ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*);
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+                                                     ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
-                                                             ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*);
-  let final self::C<core::num*>* #t5 = c in (#t5.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::==}(null) ?{self::B<core::Object*>*} #t5.{self::C::x} = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+                                                             ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
+  let final self::C<core::num*>* #t5 = c in #t5.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t5.{self::C::x} = let final Never* #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                       ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
-  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t8.{self::B::==}(null) ?{self::B<core::Object*>*} #t7.{self::C::x} = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t8 == null ?{self::B<core::Object*>*} #t7.{self::C::x} = let final Never* #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                               ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t8;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.expect
index 890a09c..5360289 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.expect
@@ -39,10 +39,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::num*>* c) → void {
-  c.{self::C::[]=}(0, new self::B::•<(core::num*) →* void>());
-  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()));
-  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()) in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
-  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in (#t7.{self::C::[]}(#t8) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::==}(null) ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()) : null;
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t11.{self::B::==}(null) ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12) in #t12 : #t11;
+  c.{self::C::[]=}(0, new self::B::•<(core::num*) →* void>()){(core::int*, self::B<(core::num*) →* void>*) →* void};
+  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*}){(core::int*, self::B<(core::num*) →* void>*) →* void};
+  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*} in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int*, self::B<(core::num*) →* void>*) →* void} in #t5;
+  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in #t7.{self::C::[]}(#t8){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()){(core::int*, self::B<(core::num*) →* void>*) →* void} : null;
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t11 == null ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12){(core::int*, self::B<(core::num*) →* void>*) →* void} in #t12 : #t11;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.transformed.expect
index e094433..88a3640 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.transformed.expect
@@ -39,11 +39,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::num*>* c) → void {
-  c.{self::C::[]=}(0, new self::B::•<(core::num*) →* void>());
-  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()));
-  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()) in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
-  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in (#t7.{self::C::[]}(#t8) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::==}(null) ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()) : null;
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t11.{self::B::==}(null) ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12) in #t12 : #t11;
+  c.{self::C::[]=}(0, new self::B::•<(core::num*) →* void>()){(core::int*, self::B<(core::num*) →* void>*) →* void};
+  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*}){(core::int*, self::B<(core::num*) →* void>*) →* void};
+  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*} in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int*, self::B<(core::num*) →* void>*) →* void} in #t5;
+  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in #t7.{self::C::[]}(#t8){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()){(core::int*, self::B<(core::num*) →* void>*) →* void} : null;
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t11 == null ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12){(core::int*, self::B<(core::num*) →* void>*) →* void} in #t12 : #t11;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.expect
index 05d9122..906d2cb 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.expect
@@ -21,6 +21,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::[]}(0) as{TypeError,CovarianceCheck} (core::num*) →* void;
+  return c.{self::C::[]}(0){(core::int*) →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.transformed.expect
index 05d9122..906d2cb 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.transformed.expect
@@ -21,6 +21,6 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::[]}(0) as{TypeError,CovarianceCheck} (core::num*) →* void;
+  return c.{self::C::[]}(0){(core::int*) →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.expect
index eb1c927..bbbc3fe 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.expect
@@ -26,10 +26,10 @@
     ;
 }
 static method g1(self::B<core::num*>* b) → void {
-  b.{self::B::f}(1.5);
+  b.{self::B::f}(1.5){(core::num*) →* void};
 }
 static method g2(self::C* c) → void {
-  c.{self::B::f}(1);
+  c.{self::B::f}(1){(core::int*) →* void};
 }
 static method test() → void {
   self::g1(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.transformed.expect
index eb1c927..bbbc3fe 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.transformed.expect
@@ -26,10 +26,10 @@
     ;
 }
 static method g1(self::B<core::num*>* b) → void {
-  b.{self::B::f}(1.5);
+  b.{self::B::f}(1.5){(core::num*) →* void};
 }
 static method g2(self::C* c) → void {
-  c.{self::B::f}(1);
+  c.{self::B::f}(1){(core::int*) →* void};
 }
 static method test() → void {
   self::g1(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.expect
index 2f222f6..df39d8e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.expect
@@ -94,14 +94,14 @@
 }
 static method expectTypeError(() →* void callback) → void {
   try {
-    callback.call();
+    callback(){() →* void};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
   }
 }
 static method expect(core::Object* value, core::Object* expected) → void {
-  if(!value.{core::Object::==}(expected)) {
+  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
@@ -110,12 +110,12 @@
     i.{self::I::x} = "hello";
   });
   i.{self::I::x} = 1;
-  self::expect(i.{self::I::x}, 1);
+  self::expect(i.{self::I::x}{core::Object*}, 1);
   self::expectTypeError(() → Null {
     i.{self::I::y} = "hello";
   });
   i.{self::I::y} = 2;
-  self::expect(i.{self::I::y}, 2);
+  self::expect(i.{self::I::y}{core::Object*}, 2);
 }
 static method main() → void {
   self::test(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.transformed.expect
index 50defc9..a92205f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.transformed.expect
@@ -88,14 +88,14 @@
 }
 static method expectTypeError(() →* void callback) → void {
   try {
-    callback.call();
+    callback(){() →* void};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
   }
 }
 static method expect(core::Object* value, core::Object* expected) → void {
-  if(!value.{core::Object::==}(expected)) {
+  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
@@ -104,12 +104,12 @@
     i.{self::I::x} = "hello";
   });
   i.{self::I::x} = 1;
-  self::expect(i.{self::I::x}, 1);
+  self::expect(i.{self::I::x}{core::Object*}, 1);
   self::expectTypeError(() → Null {
     i.{self::I::y} = "hello";
   });
   i.{self::I::y} = 2;
-  self::expect(i.{self::I::y}, 2);
+  self::expect(i.{self::I::y}{core::Object*}, 2);
 }
 static method main() → void {
   self::test(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.expect
index 743d696..a4f4dfe 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.expect
@@ -103,14 +103,14 @@
 }
 static method expectTypeError(() →* void callback) → void {
   try {
-    callback.call();
+    callback(){() →* void};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
   }
 }
 static method expect(core::Object* value, core::Object* expected) → void {
-  if(!value.{core::Object::==}(expected)) {
+  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
@@ -119,12 +119,12 @@
     i.{self::I::x} = "hello";
   });
   i.{self::I::x} = 2;
-  self::expect(i.{self::I::x}, 1);
+  self::expect(i.{self::I::x}{core::Object*}, 1);
   self::expectTypeError(() → Null {
     i.{self::I::y} = "hello";
   });
   i.{self::I::y} = 4;
-  self::expect(i.{self::I::y}, 3);
+  self::expect(i.{self::I::y}{core::Object*}, 3);
 }
 static method main() → void {
   self::test(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.transformed.expect
index 7080348..e429a2c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.transformed.expect
@@ -105,14 +105,14 @@
 }
 static method expectTypeError(() →* void callback) → void {
   try {
-    callback.call();
+    callback(){() →* void};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
   }
 }
 static method expect(core::Object* value, core::Object* expected) → void {
-  if(!value.{core::Object::==}(expected)) {
+  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
@@ -121,12 +121,12 @@
     i.{self::I::x} = "hello";
   });
   i.{self::I::x} = 2;
-  self::expect(i.{self::I::x}, 1);
+  self::expect(i.{self::I::x}{core::Object*}, 1);
   self::expectTypeError(() → Null {
     i.{self::I::y} = "hello";
   });
   i.{self::I::y} = 4;
-  self::expect(i.{self::I::y}, 3);
+  self::expect(i.{self::I::y}{core::Object*}, 3);
 }
 static method main() → void {
   self::test(new self::C::•());
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.expect
index ac79e6e..2dac682 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.expect
@@ -46,29 +46,29 @@
 }
 static method expectTypeError(() →* void callback) → void {
   try {
-    callback.call();
+    callback(){() →* void};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
   }
 }
 static method expect(core::Object* value, core::Object* expected) → void {
-  if(!value.{core::Object::==}(expected)) {
+  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
 static method g(self::C* c) → void {
-  c.{self::C::f}("hello");
+  c.{self::C::f}("hello"){(core::Object*) →* core::int*};
 }
 static method test(self::C* c, self::I* i) → void {
   self::expectTypeError(() → Null {
-    i.{self::I::f}("hello");
+    i.{self::I::f}("hello"){(core::Object*) →* core::int*};
   });
-  self::expect(i.{self::I::f}(1), 2);
+  self::expect(i.{self::I::f}(1){(core::Object*) →* core::int*}, 2);
   self::expectTypeError(() → Null {
-    c.{self::C::f}("hello");
+    c.{self::C::f}("hello"){(core::Object*) →* core::int*};
   });
-  self::expect(c.{self::C::f}(1), 2);
+  self::expect(c.{self::C::f}(1){(core::Object*) →* core::int*}, 2);
 }
 static method main() → dynamic {
   self::C* c = new self::C::•();
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.transformed.expect
index ac79e6e..2dac682 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.transformed.expect
@@ -46,29 +46,29 @@
 }
 static method expectTypeError(() →* void callback) → void {
   try {
-    callback.call();
+    callback(){() →* void};
     throw "Expected TypeError, did not occur";
   }
   on core::TypeError* catch(no-exception-var) {
   }
 }
 static method expect(core::Object* value, core::Object* expected) → void {
-  if(!value.{core::Object::==}(expected)) {
+  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
     throw "Expected ${expected}, got ${value}";
   }
 }
 static method g(self::C* c) → void {
-  c.{self::C::f}("hello");
+  c.{self::C::f}("hello"){(core::Object*) →* core::int*};
 }
 static method test(self::C* c, self::I* i) → void {
   self::expectTypeError(() → Null {
-    i.{self::I::f}("hello");
+    i.{self::I::f}("hello"){(core::Object*) →* core::int*};
   });
-  self::expect(i.{self::I::f}(1), 2);
+  self::expect(i.{self::I::f}(1){(core::Object*) →* core::int*}, 2);
   self::expectTypeError(() → Null {
-    c.{self::C::f}("hello");
+    c.{self::C::f}("hello"){(core::Object*) →* core::int*};
   });
-  self::expect(c.{self::C::f}(1), 2);
+  self::expect(c.{self::C::f}(1){(core::Object*) →* core::int*}, 2);
 }
 static method main() → dynamic {
   self::C* c = new self::C::•();
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
index 45171d4..6115731 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
@@ -12,7 +12,7 @@
     : self::A::index = index, self::A::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::A::_name};
+    return this.{self::A::_name}{core::String};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
index 45171d4..6115731 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
     : self::A::index = index, self::A::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::A::_name};
+    return this.{self::A::_name}{core::String};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
index 0077a85..bece663 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
@@ -12,7 +12,7 @@
     : self::A::index = index, self::A::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::A::_name};
+    return this.{self::A::_name}{core::String};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.outline.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.outline.expect
index 9243372..a6cad98 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     : self::A::index = index, self::A::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::A::_name};
+    return this.{self::A::_name}{core::String};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
index 0077a85..bece663 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
     : self::A::index = index, self::A::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::A::_name};
+    return this.{self::A::_name}{core::String};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.strong.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.strong.expect
index 5a2a090..ea65452 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.strong.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.strong.expect
@@ -26,7 +26,7 @@
     : super core::Object::•()
     ;
   static get nonNullableStaticFieldWithInitializer1() → core::int
-    return let final core::int? #t1 = self::Class::_#nonNullableStaticFieldWithInitializer1 in #t1.==(null) ?{core::int} self::Class::_#nonNullableStaticFieldWithInitializer1 = self::init<core::int>(55) : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#nonNullableStaticFieldWithInitializer1 in #t1 == null ?{core::int} self::Class::_#nonNullableStaticFieldWithInitializer1 = self::init<core::int>(55) : #t1{core::int};
   static set nonNullableStaticFieldWithInitializer1(core::int #t2) → void
     self::Class::_#nonNullableStaticFieldWithInitializer1 = #t2;
   static get nullableStaticFieldWithInitializer1() → core::int? {
@@ -41,7 +41,7 @@
     self::Class::_#nullableStaticFieldWithInitializer1 = #t3;
   }
   static get nonNullableStaticFieldWithInitializer2() → core::int
-    return let final core::int? #t4 = self::Class::_#nonNullableStaticFieldWithInitializer2 in #t4.==(null) ?{core::int} self::Class::_#nonNullableStaticFieldWithInitializer2 = self::init<core::int>(55) : #t4{core::int};
+    return let final core::int? #t4 = self::Class::_#nonNullableStaticFieldWithInitializer2 in #t4 == null ?{core::int} self::Class::_#nonNullableStaticFieldWithInitializer2 = self::init<core::int>(55) : #t4{core::int};
   static set nonNullableStaticFieldWithInitializer2(core::int #t5) → void
     self::Class::_#nonNullableStaticFieldWithInitializer2 = #t5;
   static get nullableStaticFieldWithInitializer2() → core::int? {
@@ -56,7 +56,7 @@
     self::Class::_#nullableStaticFieldWithInitializer2 = #t6;
   }
   static get nonNullableStaticFinalFieldWithInitializer1() → core::int
-    return let final core::int? #t7 = self::Class::_#nonNullableStaticFinalFieldWithInitializer1 in #t7.==(null) ?{core::int} let final core::int #t8 = self::init<core::int>(73) in self::Class::_#nonNullableStaticFinalFieldWithInitializer1.==(null) ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer1 = #t8 : throw new _in::LateError::fieldADI("nonNullableStaticFinalFieldWithInitializer1") : #t7{core::int};
+    return let final core::int? #t7 = self::Class::_#nonNullableStaticFinalFieldWithInitializer1 in #t7 == null ?{core::int} let final core::int #t8 = self::init<core::int>(73) in self::Class::_#nonNullableStaticFinalFieldWithInitializer1 == null ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer1 = #t8 : throw new _in::LateError::fieldADI("nonNullableStaticFinalFieldWithInitializer1") : #t7{core::int};
   static get nullableStaticFinalFieldWithInitializer1() → core::int? {
     if(!self::Class::_#nullableStaticFinalFieldWithInitializer1#isSet) {
       final core::int? #t9 = self::init<core::int?>(19);
@@ -68,18 +68,18 @@
     return self::Class::_#nullableStaticFinalFieldWithInitializer1;
   }
   static get nonNullableStaticFinalFieldWithInitializer2Init() → core::int
-    return let final core::int? #t10 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init in #t10.==(null) ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init = 0 : #t10{core::int};
+    return let final core::int? #t10 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init in #t10 == null ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init = 0 : #t10{core::int};
   static set nonNullableStaticFinalFieldWithInitializer2Init(core::int #t11) → void
     self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init = #t11;
   static get nonNullableStaticFinalFieldWithInitializer2() → core::int
-    return let final core::int? #t12 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2 in #t12.==(null) ?{core::int} let final core::int #t13 = (let final core::int #t14 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init in let final core::int #t15 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init = #t14.{core::num::+}(1) in #t14).{core::num::==}(0) ?{core::int} self::Class::nonNullableStaticFinalFieldWithInitializer2.{core::num::+}(1) : 87 in self::Class::_#nonNullableStaticFinalFieldWithInitializer2.==(null) ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer2 = #t13 : throw new _in::LateError::fieldADI("nonNullableStaticFinalFieldWithInitializer2") : #t12{core::int};
+    return let final core::int? #t12 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2 in #t12 == null ?{core::int} let final core::int #t13 = (let final core::int #t14 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init in let final core::int #t15 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init = #t14.{core::num::+}(1){(core::num) → core::int} in #t14) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nonNullableStaticFinalFieldWithInitializer2.{core::num::+}(1){(core::num) → core::int} : 87 in self::Class::_#nonNullableStaticFinalFieldWithInitializer2 == null ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer2 = #t13 : throw new _in::LateError::fieldADI("nonNullableStaticFinalFieldWithInitializer2") : #t12{core::int};
   static get nullableStaticFinalFieldWithInitializer2Init() → core::int
-    return let final core::int? #t16 = self::Class::_#nullableStaticFinalFieldWithInitializer2Init in #t16.==(null) ?{core::int} self::Class::_#nullableStaticFinalFieldWithInitializer2Init = 0 : #t16{core::int};
+    return let final core::int? #t16 = self::Class::_#nullableStaticFinalFieldWithInitializer2Init in #t16 == null ?{core::int} self::Class::_#nullableStaticFinalFieldWithInitializer2Init = 0 : #t16{core::int};
   static set nullableStaticFinalFieldWithInitializer2Init(core::int #t17) → void
     self::Class::_#nullableStaticFinalFieldWithInitializer2Init = #t17;
   static get nullableStaticFinalFieldWithInitializer2() → core::int? {
     if(!self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet) {
-      final core::int? #t18 = (let final core::int #t19 = self::Class::nullableStaticFinalFieldWithInitializer2Init in let final core::int #t20 = self::Class::nullableStaticFinalFieldWithInitializer2Init = #t19.{core::num::+}(1) in #t19).{core::num::==}(0) ?{core::int} self::Class::nullableStaticFinalFieldWithInitializer2!.{core::num::+}(1) : 32;
+      final core::int? #t18 = (let final core::int #t19 = self::Class::nullableStaticFinalFieldWithInitializer2Init in let final core::int #t20 = self::Class::nullableStaticFinalFieldWithInitializer2Init = #t19.{core::num::+}(1){(core::num) → core::int} in #t19) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nullableStaticFinalFieldWithInitializer2!.{core::num::+}(1){(core::num) → core::int} : 32;
       if(self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet)
         throw new _in::LateError::fieldADI("nullableStaticFinalFieldWithInitializer2");
       self::Class::_#nullableStaticFinalFieldWithInitializer2 = #t18;
@@ -110,7 +110,7 @@
   return value;
 }
 static get nonNullableTopLevelFieldWithInitializer1() → core::int
-  return let final core::int? #t21 = self::_#nonNullableTopLevelFieldWithInitializer1 in #t21.==(null) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer1 = self::init<core::int>(42) : #t21{core::int};
+  return let final core::int? #t21 = self::_#nonNullableTopLevelFieldWithInitializer1 in #t21 == null ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer1 = self::init<core::int>(42) : #t21{core::int};
 static set nonNullableTopLevelFieldWithInitializer1(core::int #t22) → void
   self::_#nonNullableTopLevelFieldWithInitializer1 = #t22;
 static get nullableTopLevelFieldWithInitializer() → core::int? {
@@ -125,7 +125,7 @@
   self::_#nullableTopLevelFieldWithInitializer = #t23;
 }
 static get nonNullableTopLevelFieldWithInitializer2() → core::int
-  return let final core::int? #t24 = self::_#nonNullableTopLevelFieldWithInitializer2 in #t24.==(null) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer2 = self::init<core::int>(42) : #t24{core::int};
+  return let final core::int? #t24 = self::_#nonNullableTopLevelFieldWithInitializer2 in #t24 == null ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer2 = self::init<core::int>(42) : #t24{core::int};
 static set nonNullableTopLevelFieldWithInitializer2(core::int #t25) → void
   self::_#nonNullableTopLevelFieldWithInitializer2 = #t25;
 static get nullableTopLevelFieldWithInitializer2() → core::int? {
@@ -140,7 +140,7 @@
   self::_#nullableTopLevelFieldWithInitializer2 = #t26;
 }
 static get nonNullableFinalTopLevelFieldWithInitializer1() → core::int
-  return let final core::int? #t27 = self::_#nonNullableFinalTopLevelFieldWithInitializer1 in #t27.==(null) ?{core::int} let final core::int #t28 = self::init<core::int>(87) in self::_#nonNullableFinalTopLevelFieldWithInitializer1.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer1 = #t28 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer1") : #t27{core::int};
+  return let final core::int? #t27 = self::_#nonNullableFinalTopLevelFieldWithInitializer1 in #t27 == null ?{core::int} let final core::int #t28 = self::init<core::int>(87) in self::_#nonNullableFinalTopLevelFieldWithInitializer1 == null ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer1 = #t28 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer1") : #t27{core::int};
 static get nullableFinalTopLevelFieldWithInitializer1() → core::int? {
   if(!self::_#nullableFinalTopLevelFieldWithInitializer1#isSet) {
     final core::int? #t29 = self::init<core::int?>(32);
@@ -152,18 +152,18 @@
   return self::_#nullableFinalTopLevelFieldWithInitializer1;
 }
 static get nonNullableFinalTopLevelFieldWithInitializer2Init() → core::int
-  return let final core::int? #t30 = self::_#nonNullableFinalTopLevelFieldWithInitializer2Init in #t30.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer2Init = 0 : #t30{core::int};
+  return let final core::int? #t30 = self::_#nonNullableFinalTopLevelFieldWithInitializer2Init in #t30 == null ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer2Init = 0 : #t30{core::int};
 static set nonNullableFinalTopLevelFieldWithInitializer2Init(core::int #t31) → void
   self::_#nonNullableFinalTopLevelFieldWithInitializer2Init = #t31;
 static get nonNullableFinalTopLevelFieldWithInitializer2() → core::int
-  return let final core::int? #t32 = self::_#nonNullableFinalTopLevelFieldWithInitializer2 in #t32.==(null) ?{core::int} let final core::int #t33 = (let final core::int #t34 = self::nonNullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t35 = self::nonNullableFinalTopLevelFieldWithInitializer2Init = #t34.{core::num::+}(1) in #t34).{core::num::==}(0) ?{core::int} self::nonNullableFinalTopLevelFieldWithInitializer2.{core::num::+}(1) : 87 in self::_#nonNullableFinalTopLevelFieldWithInitializer2.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer2 = #t33 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer2") : #t32{core::int};
+  return let final core::int? #t32 = self::_#nonNullableFinalTopLevelFieldWithInitializer2 in #t32 == null ?{core::int} let final core::int #t33 = (let final core::int #t34 = self::nonNullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t35 = self::nonNullableFinalTopLevelFieldWithInitializer2Init = #t34.{core::num::+}(1){(core::num) → core::int} in #t34) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nonNullableFinalTopLevelFieldWithInitializer2.{core::num::+}(1){(core::num) → core::int} : 87 in self::_#nonNullableFinalTopLevelFieldWithInitializer2 == null ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer2 = #t33 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer2") : #t32{core::int};
 static get nullableFinalTopLevelFieldWithInitializer2Init() → core::int
-  return let final core::int? #t36 = self::_#nullableFinalTopLevelFieldWithInitializer2Init in #t36.==(null) ?{core::int} self::_#nullableFinalTopLevelFieldWithInitializer2Init = 0 : #t36{core::int};
+  return let final core::int? #t36 = self::_#nullableFinalTopLevelFieldWithInitializer2Init in #t36 == null ?{core::int} self::_#nullableFinalTopLevelFieldWithInitializer2Init = 0 : #t36{core::int};
 static set nullableFinalTopLevelFieldWithInitializer2Init(core::int #t37) → void
   self::_#nullableFinalTopLevelFieldWithInitializer2Init = #t37;
 static get nullableFinalTopLevelFieldWithInitializer2() → core::int? {
   if(!self::_#nullableFinalTopLevelFieldWithInitializer2#isSet) {
-    final core::int? #t38 = (let final core::int #t39 = self::nullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t40 = self::nullableFinalTopLevelFieldWithInitializer2Init = #t39.{core::num::+}(1) in #t39).{core::num::==}(0) ?{core::int} self::nullableFinalTopLevelFieldWithInitializer2!.{core::num::+}(1) : 32;
+    final core::int? #t38 = (let final core::int #t39 = self::nullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t40 = self::nullableFinalTopLevelFieldWithInitializer2Init = #t39.{core::num::+}(1){(core::num) → core::int} in #t39) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nullableFinalTopLevelFieldWithInitializer2!.{core::num::+}(1){(core::num) → core::int} : 32;
     if(self::_#nullableFinalTopLevelFieldWithInitializer2#isSet)
       throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer2");
     self::_#nullableFinalTopLevelFieldWithInitializer2 = #t38;
@@ -215,17 +215,17 @@
   self::throws(() → core::int? => self::Class::nullableStaticFinalFieldWithInitializer2, "Read nullableStaticFinalFieldWithInitializer2");
   self::Class c = new self::Class::•();
   self::expect(17, self::lastInit);
-  self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer});
-  self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer});
+  self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer}{core::int});
+  self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer}{core::int?});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.strong.transformed.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.strong.transformed.expect
index 5a2a090..ea65452 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.strong.transformed.expect
@@ -26,7 +26,7 @@
     : super core::Object::•()
     ;
   static get nonNullableStaticFieldWithInitializer1() → core::int
-    return let final core::int? #t1 = self::Class::_#nonNullableStaticFieldWithInitializer1 in #t1.==(null) ?{core::int} self::Class::_#nonNullableStaticFieldWithInitializer1 = self::init<core::int>(55) : #t1{core::int};
+    return let final core::int? #t1 = self::Class::_#nonNullableStaticFieldWithInitializer1 in #t1 == null ?{core::int} self::Class::_#nonNullableStaticFieldWithInitializer1 = self::init<core::int>(55) : #t1{core::int};
   static set nonNullableStaticFieldWithInitializer1(core::int #t2) → void
     self::Class::_#nonNullableStaticFieldWithInitializer1 = #t2;
   static get nullableStaticFieldWithInitializer1() → core::int? {
@@ -41,7 +41,7 @@
     self::Class::_#nullableStaticFieldWithInitializer1 = #t3;
   }
   static get nonNullableStaticFieldWithInitializer2() → core::int
-    return let final core::int? #t4 = self::Class::_#nonNullableStaticFieldWithInitializer2 in #t4.==(null) ?{core::int} self::Class::_#nonNullableStaticFieldWithInitializer2 = self::init<core::int>(55) : #t4{core::int};
+    return let final core::int? #t4 = self::Class::_#nonNullableStaticFieldWithInitializer2 in #t4 == null ?{core::int} self::Class::_#nonNullableStaticFieldWithInitializer2 = self::init<core::int>(55) : #t4{core::int};
   static set nonNullableStaticFieldWithInitializer2(core::int #t5) → void
     self::Class::_#nonNullableStaticFieldWithInitializer2 = #t5;
   static get nullableStaticFieldWithInitializer2() → core::int? {
@@ -56,7 +56,7 @@
     self::Class::_#nullableStaticFieldWithInitializer2 = #t6;
   }
   static get nonNullableStaticFinalFieldWithInitializer1() → core::int
-    return let final core::int? #t7 = self::Class::_#nonNullableStaticFinalFieldWithInitializer1 in #t7.==(null) ?{core::int} let final core::int #t8 = self::init<core::int>(73) in self::Class::_#nonNullableStaticFinalFieldWithInitializer1.==(null) ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer1 = #t8 : throw new _in::LateError::fieldADI("nonNullableStaticFinalFieldWithInitializer1") : #t7{core::int};
+    return let final core::int? #t7 = self::Class::_#nonNullableStaticFinalFieldWithInitializer1 in #t7 == null ?{core::int} let final core::int #t8 = self::init<core::int>(73) in self::Class::_#nonNullableStaticFinalFieldWithInitializer1 == null ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer1 = #t8 : throw new _in::LateError::fieldADI("nonNullableStaticFinalFieldWithInitializer1") : #t7{core::int};
   static get nullableStaticFinalFieldWithInitializer1() → core::int? {
     if(!self::Class::_#nullableStaticFinalFieldWithInitializer1#isSet) {
       final core::int? #t9 = self::init<core::int?>(19);
@@ -68,18 +68,18 @@
     return self::Class::_#nullableStaticFinalFieldWithInitializer1;
   }
   static get nonNullableStaticFinalFieldWithInitializer2Init() → core::int
-    return let final core::int? #t10 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init in #t10.==(null) ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init = 0 : #t10{core::int};
+    return let final core::int? #t10 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init in #t10 == null ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init = 0 : #t10{core::int};
   static set nonNullableStaticFinalFieldWithInitializer2Init(core::int #t11) → void
     self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init = #t11;
   static get nonNullableStaticFinalFieldWithInitializer2() → core::int
-    return let final core::int? #t12 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2 in #t12.==(null) ?{core::int} let final core::int #t13 = (let final core::int #t14 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init in let final core::int #t15 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init = #t14.{core::num::+}(1) in #t14).{core::num::==}(0) ?{core::int} self::Class::nonNullableStaticFinalFieldWithInitializer2.{core::num::+}(1) : 87 in self::Class::_#nonNullableStaticFinalFieldWithInitializer2.==(null) ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer2 = #t13 : throw new _in::LateError::fieldADI("nonNullableStaticFinalFieldWithInitializer2") : #t12{core::int};
+    return let final core::int? #t12 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2 in #t12 == null ?{core::int} let final core::int #t13 = (let final core::int #t14 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init in let final core::int #t15 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init = #t14.{core::num::+}(1){(core::num) → core::int} in #t14) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nonNullableStaticFinalFieldWithInitializer2.{core::num::+}(1){(core::num) → core::int} : 87 in self::Class::_#nonNullableStaticFinalFieldWithInitializer2 == null ?{core::int} self::Class::_#nonNullableStaticFinalFieldWithInitializer2 = #t13 : throw new _in::LateError::fieldADI("nonNullableStaticFinalFieldWithInitializer2") : #t12{core::int};
   static get nullableStaticFinalFieldWithInitializer2Init() → core::int
-    return let final core::int? #t16 = self::Class::_#nullableStaticFinalFieldWithInitializer2Init in #t16.==(null) ?{core::int} self::Class::_#nullableStaticFinalFieldWithInitializer2Init = 0 : #t16{core::int};
+    return let final core::int? #t16 = self::Class::_#nullableStaticFinalFieldWithInitializer2Init in #t16 == null ?{core::int} self::Class::_#nullableStaticFinalFieldWithInitializer2Init = 0 : #t16{core::int};
   static set nullableStaticFinalFieldWithInitializer2Init(core::int #t17) → void
     self::Class::_#nullableStaticFinalFieldWithInitializer2Init = #t17;
   static get nullableStaticFinalFieldWithInitializer2() → core::int? {
     if(!self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet) {
-      final core::int? #t18 = (let final core::int #t19 = self::Class::nullableStaticFinalFieldWithInitializer2Init in let final core::int #t20 = self::Class::nullableStaticFinalFieldWithInitializer2Init = #t19.{core::num::+}(1) in #t19).{core::num::==}(0) ?{core::int} self::Class::nullableStaticFinalFieldWithInitializer2!.{core::num::+}(1) : 32;
+      final core::int? #t18 = (let final core::int #t19 = self::Class::nullableStaticFinalFieldWithInitializer2Init in let final core::int #t20 = self::Class::nullableStaticFinalFieldWithInitializer2Init = #t19.{core::num::+}(1){(core::num) → core::int} in #t19) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nullableStaticFinalFieldWithInitializer2!.{core::num::+}(1){(core::num) → core::int} : 32;
       if(self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet)
         throw new _in::LateError::fieldADI("nullableStaticFinalFieldWithInitializer2");
       self::Class::_#nullableStaticFinalFieldWithInitializer2 = #t18;
@@ -110,7 +110,7 @@
   return value;
 }
 static get nonNullableTopLevelFieldWithInitializer1() → core::int
-  return let final core::int? #t21 = self::_#nonNullableTopLevelFieldWithInitializer1 in #t21.==(null) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer1 = self::init<core::int>(42) : #t21{core::int};
+  return let final core::int? #t21 = self::_#nonNullableTopLevelFieldWithInitializer1 in #t21 == null ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer1 = self::init<core::int>(42) : #t21{core::int};
 static set nonNullableTopLevelFieldWithInitializer1(core::int #t22) → void
   self::_#nonNullableTopLevelFieldWithInitializer1 = #t22;
 static get nullableTopLevelFieldWithInitializer() → core::int? {
@@ -125,7 +125,7 @@
   self::_#nullableTopLevelFieldWithInitializer = #t23;
 }
 static get nonNullableTopLevelFieldWithInitializer2() → core::int
-  return let final core::int? #t24 = self::_#nonNullableTopLevelFieldWithInitializer2 in #t24.==(null) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer2 = self::init<core::int>(42) : #t24{core::int};
+  return let final core::int? #t24 = self::_#nonNullableTopLevelFieldWithInitializer2 in #t24 == null ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer2 = self::init<core::int>(42) : #t24{core::int};
 static set nonNullableTopLevelFieldWithInitializer2(core::int #t25) → void
   self::_#nonNullableTopLevelFieldWithInitializer2 = #t25;
 static get nullableTopLevelFieldWithInitializer2() → core::int? {
@@ -140,7 +140,7 @@
   self::_#nullableTopLevelFieldWithInitializer2 = #t26;
 }
 static get nonNullableFinalTopLevelFieldWithInitializer1() → core::int
-  return let final core::int? #t27 = self::_#nonNullableFinalTopLevelFieldWithInitializer1 in #t27.==(null) ?{core::int} let final core::int #t28 = self::init<core::int>(87) in self::_#nonNullableFinalTopLevelFieldWithInitializer1.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer1 = #t28 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer1") : #t27{core::int};
+  return let final core::int? #t27 = self::_#nonNullableFinalTopLevelFieldWithInitializer1 in #t27 == null ?{core::int} let final core::int #t28 = self::init<core::int>(87) in self::_#nonNullableFinalTopLevelFieldWithInitializer1 == null ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer1 = #t28 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer1") : #t27{core::int};
 static get nullableFinalTopLevelFieldWithInitializer1() → core::int? {
   if(!self::_#nullableFinalTopLevelFieldWithInitializer1#isSet) {
     final core::int? #t29 = self::init<core::int?>(32);
@@ -152,18 +152,18 @@
   return self::_#nullableFinalTopLevelFieldWithInitializer1;
 }
 static get nonNullableFinalTopLevelFieldWithInitializer2Init() → core::int
-  return let final core::int? #t30 = self::_#nonNullableFinalTopLevelFieldWithInitializer2Init in #t30.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer2Init = 0 : #t30{core::int};
+  return let final core::int? #t30 = self::_#nonNullableFinalTopLevelFieldWithInitializer2Init in #t30 == null ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer2Init = 0 : #t30{core::int};
 static set nonNullableFinalTopLevelFieldWithInitializer2Init(core::int #t31) → void
   self::_#nonNullableFinalTopLevelFieldWithInitializer2Init = #t31;
 static get nonNullableFinalTopLevelFieldWithInitializer2() → core::int
-  return let final core::int? #t32 = self::_#nonNullableFinalTopLevelFieldWithInitializer2 in #t32.==(null) ?{core::int} let final core::int #t33 = (let final core::int #t34 = self::nonNullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t35 = self::nonNullableFinalTopLevelFieldWithInitializer2Init = #t34.{core::num::+}(1) in #t34).{core::num::==}(0) ?{core::int} self::nonNullableFinalTopLevelFieldWithInitializer2.{core::num::+}(1) : 87 in self::_#nonNullableFinalTopLevelFieldWithInitializer2.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer2 = #t33 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer2") : #t32{core::int};
+  return let final core::int? #t32 = self::_#nonNullableFinalTopLevelFieldWithInitializer2 in #t32 == null ?{core::int} let final core::int #t33 = (let final core::int #t34 = self::nonNullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t35 = self::nonNullableFinalTopLevelFieldWithInitializer2Init = #t34.{core::num::+}(1){(core::num) → core::int} in #t34) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nonNullableFinalTopLevelFieldWithInitializer2.{core::num::+}(1){(core::num) → core::int} : 87 in self::_#nonNullableFinalTopLevelFieldWithInitializer2 == null ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer2 = #t33 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer2") : #t32{core::int};
 static get nullableFinalTopLevelFieldWithInitializer2Init() → core::int
-  return let final core::int? #t36 = self::_#nullableFinalTopLevelFieldWithInitializer2Init in #t36.==(null) ?{core::int} self::_#nullableFinalTopLevelFieldWithInitializer2Init = 0 : #t36{core::int};
+  return let final core::int? #t36 = self::_#nullableFinalTopLevelFieldWithInitializer2Init in #t36 == null ?{core::int} self::_#nullableFinalTopLevelFieldWithInitializer2Init = 0 : #t36{core::int};
 static set nullableFinalTopLevelFieldWithInitializer2Init(core::int #t37) → void
   self::_#nullableFinalTopLevelFieldWithInitializer2Init = #t37;
 static get nullableFinalTopLevelFieldWithInitializer2() → core::int? {
   if(!self::_#nullableFinalTopLevelFieldWithInitializer2#isSet) {
-    final core::int? #t38 = (let final core::int #t39 = self::nullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t40 = self::nullableFinalTopLevelFieldWithInitializer2Init = #t39.{core::num::+}(1) in #t39).{core::num::==}(0) ?{core::int} self::nullableFinalTopLevelFieldWithInitializer2!.{core::num::+}(1) : 32;
+    final core::int? #t38 = (let final core::int #t39 = self::nullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t40 = self::nullableFinalTopLevelFieldWithInitializer2Init = #t39.{core::num::+}(1){(core::num) → core::int} in #t39) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nullableFinalTopLevelFieldWithInitializer2!.{core::num::+}(1){(core::num) → core::int} : 32;
     if(self::_#nullableFinalTopLevelFieldWithInitializer2#isSet)
       throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer2");
     self::_#nullableFinalTopLevelFieldWithInitializer2 = #t38;
@@ -215,17 +215,17 @@
   self::throws(() → core::int? => self::Class::nullableStaticFinalFieldWithInitializer2, "Read nullableStaticFinalFieldWithInitializer2");
   self::Class c = new self::Class::•();
   self::expect(17, self::lastInit);
-  self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer});
-  self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer});
+  self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer}{core::int});
+  self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer}{core::int?});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
index b02a477..bae037b 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
@@ -108,7 +108,7 @@
   }
   static get nonNullableStaticFinalFieldWithInitializer2() → core::int {
     if(!self::Class::_#nonNullableStaticFinalFieldWithInitializer2#isSet) {
-      final core::int #t12 = (let final core::int #t13 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init in let final core::int #t14 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init = #t13.{core::num::+}(1) in #t13).{core::num::==}(0) ?{core::int} self::Class::nonNullableStaticFinalFieldWithInitializer2.{core::num::+}(1) : 87;
+      final core::int #t12 = (let final core::int #t13 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init in let final core::int #t14 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nonNullableStaticFinalFieldWithInitializer2.{core::num::+}(1){(core::num) → core::int} : 87;
       if(self::Class::_#nonNullableStaticFinalFieldWithInitializer2#isSet)
         throw new _in::LateError::fieldADI("nonNullableStaticFinalFieldWithInitializer2");
       self::Class::_#nonNullableStaticFinalFieldWithInitializer2 = #t12;
@@ -129,7 +129,7 @@
   }
   static get nullableStaticFinalFieldWithInitializer2() → core::int? {
     if(!self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet) {
-      final core::int? #t18 = (let final core::int #t19 = self::Class::nullableStaticFinalFieldWithInitializer2Init in let final core::int #t20 = self::Class::nullableStaticFinalFieldWithInitializer2Init = #t19.{core::num::+}(1) in #t19).{core::num::==}(0) ?{core::int} self::Class::nullableStaticFinalFieldWithInitializer2!.{core::num::+}(1) : 32;
+      final core::int? #t18 = (let final core::int #t19 = self::Class::nullableStaticFinalFieldWithInitializer2Init in let final core::int #t20 = self::Class::nullableStaticFinalFieldWithInitializer2Init = #t19.{core::num::+}(1){(core::num) → core::int} in #t19) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nullableStaticFinalFieldWithInitializer2!.{core::num::+}(1){(core::num) → core::int} : 32;
       if(self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet)
         throw new _in::LateError::fieldADI("nullableStaticFinalFieldWithInitializer2");
       self::Class::_#nullableStaticFinalFieldWithInitializer2 = #t18;
@@ -242,7 +242,7 @@
 }
 static get nonNullableFinalTopLevelFieldWithInitializer2() → core::int {
   if(!self::_#nonNullableFinalTopLevelFieldWithInitializer2#isSet) {
-    final core::int #t32 = (let final core::int #t33 = self::nonNullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t34 = self::nonNullableFinalTopLevelFieldWithInitializer2Init = #t33.{core::num::+}(1) in #t33).{core::num::==}(0) ?{core::int} self::nonNullableFinalTopLevelFieldWithInitializer2.{core::num::+}(1) : 87;
+    final core::int #t32 = (let final core::int #t33 = self::nonNullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t34 = self::nonNullableFinalTopLevelFieldWithInitializer2Init = #t33.{core::num::+}(1){(core::num) → core::int} in #t33) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nonNullableFinalTopLevelFieldWithInitializer2.{core::num::+}(1){(core::num) → core::int} : 87;
     if(self::_#nonNullableFinalTopLevelFieldWithInitializer2#isSet)
       throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer2");
     self::_#nonNullableFinalTopLevelFieldWithInitializer2 = #t32;
@@ -263,7 +263,7 @@
 }
 static get nullableFinalTopLevelFieldWithInitializer2() → core::int? {
   if(!self::_#nullableFinalTopLevelFieldWithInitializer2#isSet) {
-    final core::int? #t38 = (let final core::int #t39 = self::nullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t40 = self::nullableFinalTopLevelFieldWithInitializer2Init = #t39.{core::num::+}(1) in #t39).{core::num::==}(0) ?{core::int} self::nullableFinalTopLevelFieldWithInitializer2!.{core::num::+}(1) : 32;
+    final core::int? #t38 = (let final core::int #t39 = self::nullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t40 = self::nullableFinalTopLevelFieldWithInitializer2Init = #t39.{core::num::+}(1){(core::num) → core::int} in #t39) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nullableFinalTopLevelFieldWithInitializer2!.{core::num::+}(1){(core::num) → core::int} : 32;
     if(self::_#nullableFinalTopLevelFieldWithInitializer2#isSet)
       throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer2");
     self::_#nullableFinalTopLevelFieldWithInitializer2 = #t38;
@@ -315,17 +315,17 @@
   self::throws(() → core::int? => self::Class::nullableStaticFinalFieldWithInitializer2, "Read nullableStaticFinalFieldWithInitializer2");
   self::Class c = new self::Class::•();
   self::expect(17, self::lastInit);
-  self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer});
-  self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer});
+  self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer}{core::int});
+  self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer}{core::int?});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
index b02a477..bae037b 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
@@ -108,7 +108,7 @@
   }
   static get nonNullableStaticFinalFieldWithInitializer2() → core::int {
     if(!self::Class::_#nonNullableStaticFinalFieldWithInitializer2#isSet) {
-      final core::int #t12 = (let final core::int #t13 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init in let final core::int #t14 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init = #t13.{core::num::+}(1) in #t13).{core::num::==}(0) ?{core::int} self::Class::nonNullableStaticFinalFieldWithInitializer2.{core::num::+}(1) : 87;
+      final core::int #t12 = (let final core::int #t13 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init in let final core::int #t14 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nonNullableStaticFinalFieldWithInitializer2.{core::num::+}(1){(core::num) → core::int} : 87;
       if(self::Class::_#nonNullableStaticFinalFieldWithInitializer2#isSet)
         throw new _in::LateError::fieldADI("nonNullableStaticFinalFieldWithInitializer2");
       self::Class::_#nonNullableStaticFinalFieldWithInitializer2 = #t12;
@@ -129,7 +129,7 @@
   }
   static get nullableStaticFinalFieldWithInitializer2() → core::int? {
     if(!self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet) {
-      final core::int? #t18 = (let final core::int #t19 = self::Class::nullableStaticFinalFieldWithInitializer2Init in let final core::int #t20 = self::Class::nullableStaticFinalFieldWithInitializer2Init = #t19.{core::num::+}(1) in #t19).{core::num::==}(0) ?{core::int} self::Class::nullableStaticFinalFieldWithInitializer2!.{core::num::+}(1) : 32;
+      final core::int? #t18 = (let final core::int #t19 = self::Class::nullableStaticFinalFieldWithInitializer2Init in let final core::int #t20 = self::Class::nullableStaticFinalFieldWithInitializer2Init = #t19.{core::num::+}(1){(core::num) → core::int} in #t19) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nullableStaticFinalFieldWithInitializer2!.{core::num::+}(1){(core::num) → core::int} : 32;
       if(self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet)
         throw new _in::LateError::fieldADI("nullableStaticFinalFieldWithInitializer2");
       self::Class::_#nullableStaticFinalFieldWithInitializer2 = #t18;
@@ -242,7 +242,7 @@
 }
 static get nonNullableFinalTopLevelFieldWithInitializer2() → core::int {
   if(!self::_#nonNullableFinalTopLevelFieldWithInitializer2#isSet) {
-    final core::int #t32 = (let final core::int #t33 = self::nonNullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t34 = self::nonNullableFinalTopLevelFieldWithInitializer2Init = #t33.{core::num::+}(1) in #t33).{core::num::==}(0) ?{core::int} self::nonNullableFinalTopLevelFieldWithInitializer2.{core::num::+}(1) : 87;
+    final core::int #t32 = (let final core::int #t33 = self::nonNullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t34 = self::nonNullableFinalTopLevelFieldWithInitializer2Init = #t33.{core::num::+}(1){(core::num) → core::int} in #t33) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nonNullableFinalTopLevelFieldWithInitializer2.{core::num::+}(1){(core::num) → core::int} : 87;
     if(self::_#nonNullableFinalTopLevelFieldWithInitializer2#isSet)
       throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer2");
     self::_#nonNullableFinalTopLevelFieldWithInitializer2 = #t32;
@@ -263,7 +263,7 @@
 }
 static get nullableFinalTopLevelFieldWithInitializer2() → core::int? {
   if(!self::_#nullableFinalTopLevelFieldWithInitializer2#isSet) {
-    final core::int? #t38 = (let final core::int #t39 = self::nullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t40 = self::nullableFinalTopLevelFieldWithInitializer2Init = #t39.{core::num::+}(1) in #t39).{core::num::==}(0) ?{core::int} self::nullableFinalTopLevelFieldWithInitializer2!.{core::num::+}(1) : 32;
+    final core::int? #t38 = (let final core::int #t39 = self::nullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t40 = self::nullableFinalTopLevelFieldWithInitializer2Init = #t39.{core::num::+}(1){(core::num) → core::int} in #t39) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nullableFinalTopLevelFieldWithInitializer2!.{core::num::+}(1){(core::num) → core::int} : 32;
     if(self::_#nullableFinalTopLevelFieldWithInitializer2#isSet)
       throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer2");
     self::_#nullableFinalTopLevelFieldWithInitializer2 = #t38;
@@ -315,17 +315,17 @@
   self::throws(() → core::int? => self::Class::nullableStaticFinalFieldWithInitializer2, "Read nullableStaticFinalFieldWithInitializer2");
   self::Class c = new self::Class::•();
   self::expect(17, self::lastInit);
-  self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer});
-  self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer});
+  self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer}{core::int});
+  self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer}{core::int?});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() → dynamic f, core::String message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() → dynamic};
   }
   on core::Error catch(final core::Error e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.strong.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.strong.expect
index 144aafa..9d1cfee 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.strong.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.strong.expect
@@ -17,7 +17,7 @@
   static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
   static final field core::int* staticFinalFieldWithInitializer1 = self::init<core::int*>(73);
   static field core::int* staticFinalFieldWithInitializer2Init = 0;
-  static final field core::int* staticFinalFieldWithInitializer2 = (let final core::int* #t1 = self::Class::staticFinalFieldWithInitializer2Init in let final core::int* #t2 = self::Class::staticFinalFieldWithInitializer2Init = #t1.{core::num::+}(1) in #t1).{core::num::==}(0) ?{core::int*} self::Class::staticFinalFieldWithInitializer2.{core::num::+}(1) : 87;
+  static final field core::int* staticFinalFieldWithInitializer2 = (let final core::int* #t1 = self::Class::staticFinalFieldWithInitializer2Init in let final core::int* #t2 = self::Class::staticFinalFieldWithInitializer2Init = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1) =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{core::int*} self::Class::staticFinalFieldWithInitializer2.{core::num::+}(1){(core::num*) →* core::int*} : 87;
   synthetic constructor •() → self::Class*
     : super core::Object::•()
     ;
@@ -39,7 +39,7 @@
 static field core::int* topLevelFieldWithInitializer2 = self::init<core::int*>(42);
 static final field core::int* finalTopLevelFieldWithInitializer1 = self::init<core::int*>(87);
 static field core::int* finalTopLevelFieldWithInitializer2Init = 0;
-static final field core::int* finalTopLevelFieldWithInitializer2 = (let final core::int* #t3 = self::finalTopLevelFieldWithInitializer2Init in let final core::int* #t4 = self::finalTopLevelFieldWithInitializer2Init = #t3.{core::num::+}(1) in #t3).{core::num::==}(0) ?{core::int*} self::finalTopLevelFieldWithInitializer2.{core::num::+}(1) : 87;
+static final field core::int* finalTopLevelFieldWithInitializer2 = (let final core::int* #t3 = self::finalTopLevelFieldWithInitializer2Init in let final core::int* #t4 = self::finalTopLevelFieldWithInitializer2Init = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3) =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{core::int*} self::finalTopLevelFieldWithInitializer2.{core::num::+}(1){(core::num*) →* core::int*} : 87;
 static method init<T extends core::Object* = dynamic>(self::init::T* value) → self::init::T* {
   self::lastInit = value;
   return value;
@@ -70,16 +70,16 @@
   self::throws(() → core::int* => self::Class::staticFinalFieldWithInitializer2, "Read staticFinalFieldWithInitializer2");
   self::Class* c = new self::Class::•();
   self::expect(55, self::lastInit);
-  self::expect(55, c.{self::Class::instanceFieldWithInitializer});
+  self::expect(55, c.{self::Class::instanceFieldWithInitializer}{core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() →* dynamic f, core::String* message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() →* dynamic};
   }
   on dynamic catch(final dynamic e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.strong.transformed.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.strong.transformed.expect
index 144aafa..9d1cfee 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.strong.transformed.expect
@@ -17,7 +17,7 @@
   static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
   static final field core::int* staticFinalFieldWithInitializer1 = self::init<core::int*>(73);
   static field core::int* staticFinalFieldWithInitializer2Init = 0;
-  static final field core::int* staticFinalFieldWithInitializer2 = (let final core::int* #t1 = self::Class::staticFinalFieldWithInitializer2Init in let final core::int* #t2 = self::Class::staticFinalFieldWithInitializer2Init = #t1.{core::num::+}(1) in #t1).{core::num::==}(0) ?{core::int*} self::Class::staticFinalFieldWithInitializer2.{core::num::+}(1) : 87;
+  static final field core::int* staticFinalFieldWithInitializer2 = (let final core::int* #t1 = self::Class::staticFinalFieldWithInitializer2Init in let final core::int* #t2 = self::Class::staticFinalFieldWithInitializer2Init = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1) =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{core::int*} self::Class::staticFinalFieldWithInitializer2.{core::num::+}(1){(core::num*) →* core::int*} : 87;
   synthetic constructor •() → self::Class*
     : super core::Object::•()
     ;
@@ -39,7 +39,7 @@
 static field core::int* topLevelFieldWithInitializer2 = self::init<core::int*>(42);
 static final field core::int* finalTopLevelFieldWithInitializer1 = self::init<core::int*>(87);
 static field core::int* finalTopLevelFieldWithInitializer2Init = 0;
-static final field core::int* finalTopLevelFieldWithInitializer2 = (let final core::int* #t3 = self::finalTopLevelFieldWithInitializer2Init in let final core::int* #t4 = self::finalTopLevelFieldWithInitializer2Init = #t3.{core::num::+}(1) in #t3).{core::num::==}(0) ?{core::int*} self::finalTopLevelFieldWithInitializer2.{core::num::+}(1) : 87;
+static final field core::int* finalTopLevelFieldWithInitializer2 = (let final core::int* #t3 = self::finalTopLevelFieldWithInitializer2Init in let final core::int* #t4 = self::finalTopLevelFieldWithInitializer2Init = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3) =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{core::int*} self::finalTopLevelFieldWithInitializer2.{core::num::+}(1){(core::num*) →* core::int*} : 87;
 static method init<T extends core::Object* = dynamic>(self::init::T* value) → self::init::T* {
   self::lastInit = value;
   return value;
@@ -70,16 +70,16 @@
   self::throws(() → core::int* => self::Class::staticFinalFieldWithInitializer2, "Read staticFinalFieldWithInitializer2");
   self::Class* c = new self::Class::•();
   self::expect(55, self::lastInit);
-  self::expect(55, c.{self::Class::instanceFieldWithInitializer});
+  self::expect(55, c.{self::Class::instanceFieldWithInitializer}{core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() →* dynamic f, core::String* message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() →* dynamic};
   }
   on dynamic catch(final dynamic e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
index fe00cf4..be71725 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
@@ -10,7 +10,7 @@
   static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
   static final field core::int* staticFinalFieldWithInitializer1 = self::init<core::int*>(73);
   static field core::int* staticFinalFieldWithInitializer2Init = 0;
-  static final field core::int* staticFinalFieldWithInitializer2 = (let final core::int* #t1 = self::Class::staticFinalFieldWithInitializer2Init in let final core::int* #t2 = self::Class::staticFinalFieldWithInitializer2Init = #t1.{core::num::+}(1) in #t1).{core::num::==}(0) ?{core::int*} self::Class::staticFinalFieldWithInitializer2.{core::num::+}(1) : 87;
+  static final field core::int* staticFinalFieldWithInitializer2 = (let final core::int* #t1 = self::Class::staticFinalFieldWithInitializer2Init in let final core::int* #t2 = self::Class::staticFinalFieldWithInitializer2Init = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1) =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{core::int*} self::Class::staticFinalFieldWithInitializer2.{core::num::+}(1){(core::num*) →* core::int*} : 87;
   synthetic constructor •() → self::Class*
     : super core::Object::•()
     ;
@@ -32,7 +32,7 @@
 static field core::int* topLevelFieldWithInitializer2 = self::init<core::int*>(42);
 static final field core::int* finalTopLevelFieldWithInitializer1 = self::init<core::int*>(87);
 static field core::int* finalTopLevelFieldWithInitializer2Init = 0;
-static final field core::int* finalTopLevelFieldWithInitializer2 = (let final core::int* #t3 = self::finalTopLevelFieldWithInitializer2Init in let final core::int* #t4 = self::finalTopLevelFieldWithInitializer2Init = #t3.{core::num::+}(1) in #t3).{core::num::==}(0) ?{core::int*} self::finalTopLevelFieldWithInitializer2.{core::num::+}(1) : 87;
+static final field core::int* finalTopLevelFieldWithInitializer2 = (let final core::int* #t3 = self::finalTopLevelFieldWithInitializer2Init in let final core::int* #t4 = self::finalTopLevelFieldWithInitializer2Init = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3) =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{core::int*} self::finalTopLevelFieldWithInitializer2.{core::num::+}(1){(core::num*) →* core::int*} : 87;
 static method init<T extends core::Object* = dynamic>(self::init::T* value) → self::init::T* {
   self::lastInit = value;
   return value;
@@ -63,16 +63,16 @@
   self::throws(() → core::int* => self::Class::staticFinalFieldWithInitializer2, "Read staticFinalFieldWithInitializer2");
   self::Class* c = new self::Class::•();
   self::expect(55, self::lastInit);
-  self::expect(55, c.{self::Class::instanceFieldWithInitializer});
+  self::expect(55, c.{self::Class::instanceFieldWithInitializer}{core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() →* dynamic f, core::String* message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() →* dynamic};
   }
   on dynamic catch(final dynamic e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
index fe00cf4..be71725 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
   static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
   static final field core::int* staticFinalFieldWithInitializer1 = self::init<core::int*>(73);
   static field core::int* staticFinalFieldWithInitializer2Init = 0;
-  static final field core::int* staticFinalFieldWithInitializer2 = (let final core::int* #t1 = self::Class::staticFinalFieldWithInitializer2Init in let final core::int* #t2 = self::Class::staticFinalFieldWithInitializer2Init = #t1.{core::num::+}(1) in #t1).{core::num::==}(0) ?{core::int*} self::Class::staticFinalFieldWithInitializer2.{core::num::+}(1) : 87;
+  static final field core::int* staticFinalFieldWithInitializer2 = (let final core::int* #t1 = self::Class::staticFinalFieldWithInitializer2Init in let final core::int* #t2 = self::Class::staticFinalFieldWithInitializer2Init = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1) =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{core::int*} self::Class::staticFinalFieldWithInitializer2.{core::num::+}(1){(core::num*) →* core::int*} : 87;
   synthetic constructor •() → self::Class*
     : super core::Object::•()
     ;
@@ -32,7 +32,7 @@
 static field core::int* topLevelFieldWithInitializer2 = self::init<core::int*>(42);
 static final field core::int* finalTopLevelFieldWithInitializer1 = self::init<core::int*>(87);
 static field core::int* finalTopLevelFieldWithInitializer2Init = 0;
-static final field core::int* finalTopLevelFieldWithInitializer2 = (let final core::int* #t3 = self::finalTopLevelFieldWithInitializer2Init in let final core::int* #t4 = self::finalTopLevelFieldWithInitializer2Init = #t3.{core::num::+}(1) in #t3).{core::num::==}(0) ?{core::int*} self::finalTopLevelFieldWithInitializer2.{core::num::+}(1) : 87;
+static final field core::int* finalTopLevelFieldWithInitializer2 = (let final core::int* #t3 = self::finalTopLevelFieldWithInitializer2Init in let final core::int* #t4 = self::finalTopLevelFieldWithInitializer2Init = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3) =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{core::int*} self::finalTopLevelFieldWithInitializer2.{core::num::+}(1){(core::num*) →* core::int*} : 87;
 static method init<T extends core::Object* = dynamic>(self::init::T* value) → self::init::T* {
   self::lastInit = value;
   return value;
@@ -63,16 +63,16 @@
   self::throws(() → core::int* => self::Class::staticFinalFieldWithInitializer2, "Read staticFinalFieldWithInitializer2");
   self::Class* c = new self::Class::•();
   self::expect(55, self::lastInit);
-  self::expect(55, c.{self::Class::instanceFieldWithInitializer});
+  self::expect(55, c.{self::Class::instanceFieldWithInitializer}{core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 static method throws(() →* dynamic f, core::String* message) → dynamic {
   dynamic value;
   try {
-    value = f.call();
+    value = f(){() →* dynamic};
   }
   on dynamic catch(final dynamic e) {
     core::print(e);
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index c8b4bc7..a31c85f 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -13,11 +13,9 @@
 extension_types/simple_method_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_operator_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_setter_resolution: ExpectationFileMismatchSerialized # Expected.
-extensions/call_methods: TypeCheckError
 extensions/extension_setter_error: TypeCheckError
 extensions/instance_access_of_static: RuntimeError
 extensions/invalid_explicit_access: RuntimeError
-extensions/issue40713: TypeCheckError
 extensions/static_access_of_instance: RuntimeError
 general/abstract_members: TypeCheckError
 general/accessors: RuntimeError
@@ -69,7 +67,6 @@
 general/error_recovery/yield_not_in_generator: RuntimeError
 general/expressions: RuntimeError
 general/external_import: RuntimeError
-general/function_invocation_bounds: TypeCheckError
 general/getter_vs_setter_type: TypeCheckError
 general/incomplete_field_formal_parameter: RuntimeError
 general/infer_field_from_multiple: TypeCheckError
diff --git a/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.expect b/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.expect
index 21d66e0..2e6cfa8 100644
--- a/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.expect
@@ -10,24 +10,24 @@
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t1 = <core::int*>[element0 as{TypeError,ForDynamic} core::int*, element1 as{TypeError} core::int*, element2];
     if(true)
-      #t1.{core::List::add}{Invariant}(3);
-    #t1.{core::List::add}{Invariant}(4);
-    #t1.{core::List::add}{Invariant}(5);
-    #t1.{core::List::add}{Invariant}(6);
+      #t1.{core::List::add}(3){(core::int*) →* void};
+    #t1.{core::List::add}(4){(core::int*) →* void};
+    #t1.{core::List::add}(5){(core::int*) →* void};
+    #t1.{core::List::add}(6){(core::int*) →* void};
   } =>#t1;
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
-    #t2.{core::Set::add}{Invariant}(element0 as{TypeError,ForDynamic} core::int*);
-    #t2.{core::Set::add}{Invariant}(element1 as{TypeError} core::int*);
-    #t2.{core::Set::add}{Invariant}(element2);
+    #t2.{core::Set::add}(element0 as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}(element1 as{TypeError} core::int*){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}(element2){(core::int*) →* core::bool*};
     if(true)
-      #t2.{core::Set::add}{Invariant}(3);
-    #t2.{core::Set::add}{Invariant}(4);
-    #t2.{core::Set::add}{Invariant}(5);
-    #t2.{core::Set::add}{Invariant}(6);
+      #t2.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t2;
-  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method foldInitialSpread1() → void {
   dynamic initial = <core::int*>[0, 1, 2];
@@ -35,28 +35,28 @@
     final core::List<core::int*>* #t3 = <core::int*>[];
     for (final dynamic #t4 in initial as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t5 = #t4 as{TypeError} core::int*;
-      #t3.{core::List::add}{Invariant}(#t5);
+      #t3.{core::List::add}(#t5){(core::int*) →* void};
     }
     if(true)
-      #t3.{core::List::add}{Invariant}(3);
-    #t3.{core::List::add}{Invariant}(4);
-    #t3.{core::List::add}{Invariant}(5);
-    #t3.{core::List::add}{Invariant}(6);
+      #t3.{core::List::add}(3){(core::int*) →* void};
+    #t3.{core::List::add}(4){(core::int*) →* void};
+    #t3.{core::List::add}(5){(core::int*) →* void};
+    #t3.{core::List::add}(6){(core::int*) →* void};
   } =>#t3;
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t6 = col::LinkedHashSet::•<core::int*>();
     for (final dynamic #t7 in initial as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t8 = #t7 as{TypeError} core::int*;
-      #t6.{core::Set::add}{Invariant}(#t8);
+      #t6.{core::Set::add}(#t8){(core::int*) →* core::bool*};
     }
     if(true)
-      #t6.{core::Set::add}{Invariant}(3);
-    #t6.{core::Set::add}{Invariant}(4);
-    #t6.{core::Set::add}{Invariant}(5);
-    #t6.{core::Set::add}{Invariant}(6);
+      #t6.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t6;
-  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method foldInitialSpread2() → void {
   core::Iterable<core::num*>* initial = <core::num*>[0, 1, 2];
@@ -64,28 +64,28 @@
     final core::List<core::int*>* #t9 = <core::int*>[];
     for (final dynamic #t10 in initial) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
-      #t9.{core::List::add}{Invariant}(#t11);
+      #t9.{core::List::add}(#t11){(core::int*) →* void};
     }
     if(true)
-      #t9.{core::List::add}{Invariant}(3);
-    #t9.{core::List::add}{Invariant}(4);
-    #t9.{core::List::add}{Invariant}(5);
-    #t9.{core::List::add}{Invariant}(6);
+      #t9.{core::List::add}(3){(core::int*) →* void};
+    #t9.{core::List::add}(4){(core::int*) →* void};
+    #t9.{core::List::add}(5){(core::int*) →* void};
+    #t9.{core::List::add}(6){(core::int*) →* void};
   } =>#t9;
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
     for (final dynamic #t13 in initial) {
       final core::int* #t14 = #t13 as{TypeError} core::int*;
-      #t12.{core::Set::add}{Invariant}(#t14);
+      #t12.{core::Set::add}(#t14){(core::int*) →* core::bool*};
     }
     if(true)
-      #t12.{core::Set::add}{Invariant}(3);
-    #t12.{core::Set::add}{Invariant}(4);
-    #t12.{core::Set::add}{Invariant}(5);
-    #t12.{core::Set::add}{Invariant}(6);
+      #t12.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t12.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t12.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t12.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t12;
-  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method foldInitialSpread3() → void {
   core::List<core::num*>* initial = <core::num*>[0, 1, 2];
@@ -93,97 +93,97 @@
     final core::List<core::int*>* #t15 = <core::int*>[];
     for (final dynamic #t16 in initial) {
       final core::int* #t17 = #t16 as{TypeError} core::int*;
-      #t15.{core::List::add}{Invariant}(#t17);
+      #t15.{core::List::add}(#t17){(core::int*) →* void};
     }
     if(true)
-      #t15.{core::List::add}{Invariant}(3);
-    #t15.{core::List::add}{Invariant}(4);
-    #t15.{core::List::add}{Invariant}(5);
-    #t15.{core::List::add}{Invariant}(6);
+      #t15.{core::List::add}(3){(core::int*) →* void};
+    #t15.{core::List::add}(4){(core::int*) →* void};
+    #t15.{core::List::add}(5){(core::int*) →* void};
+    #t15.{core::List::add}(6){(core::int*) →* void};
   } =>#t15;
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t18 = col::LinkedHashSet::•<core::int*>();
     for (final dynamic #t19 in initial) {
       final core::int* #t20 = #t19 as{TypeError} core::int*;
-      #t18.{core::Set::add}{Invariant}(#t20);
+      #t18.{core::Set::add}(#t20){(core::int*) →* core::bool*};
     }
     if(true)
-      #t18.{core::Set::add}{Invariant}(3);
-    #t18.{core::Set::add}{Invariant}(4);
-    #t18.{core::Set::add}{Invariant}(5);
-    #t18.{core::Set::add}{Invariant}(6);
+      #t18.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t18.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t18.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t18.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t18;
-  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method foldInitialSpread4() → void {
   core::Iterable<core::int*>* initial = <core::int*>[0, 1, 2];
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t21 = core::List::of<core::int*>(initial);
     if(true)
-      #t21.{core::List::add}{Invariant}(3);
-    #t21.{core::List::add}{Invariant}(4);
-    #t21.{core::List::add}{Invariant}(5);
-    #t21.{core::List::add}{Invariant}(6);
+      #t21.{core::List::add}(3){(core::int*) →* void};
+    #t21.{core::List::add}(4){(core::int*) →* void};
+    #t21.{core::List::add}(5){(core::int*) →* void};
+    #t21.{core::List::add}(6){(core::int*) →* void};
   } =>#t21;
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t22 = col::LinkedHashSet::of<core::int*>(initial);
     if(true)
-      #t22.{core::Set::add}{Invariant}(3);
-    #t22.{core::Set::add}{Invariant}(4);
-    #t22.{core::Set::add}{Invariant}(5);
-    #t22.{core::Set::add}{Invariant}(6);
+      #t22.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t22.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t22.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t22.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t22;
-  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method foldInitialSpread5() → void {
   core::List<core::int*>* initial = <core::int*>[0, 1, 2];
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t23 = core::List::of<core::int*>(initial);
     if(true)
-      #t23.{core::List::add}{Invariant}(3);
-    #t23.{core::List::add}{Invariant}(4);
-    #t23.{core::List::add}{Invariant}(5);
-    #t23.{core::List::add}{Invariant}(6);
+      #t23.{core::List::add}(3){(core::int*) →* void};
+    #t23.{core::List::add}(4){(core::int*) →* void};
+    #t23.{core::List::add}(5){(core::int*) →* void};
+    #t23.{core::List::add}(6){(core::int*) →* void};
   } =>#t23;
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t24 = col::LinkedHashSet::of<core::int*>(initial);
     if(true)
-      #t24.{core::Set::add}{Invariant}(3);
-    #t24.{core::Set::add}{Invariant}(4);
-    #t24.{core::Set::add}{Invariant}(5);
-    #t24.{core::Set::add}{Invariant}(6);
+      #t24.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t24.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t24.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t24.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t24;
-  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method foldInitialSpread6() → void {
   core::List<core::int*>* initial = <core::int*>[0, 1, 2];
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t25 = <core::int*>[];
     final core::Iterable<core::int*>* #t26 = initial;
-    if(!#t26.{core::Object::==}(null))
-      #t25.{core::List::addAll}{Invariant}(#t26);
+    if(!(#t26 == null))
+      #t25.{core::List::addAll}(#t26){(core::Iterable<core::int*>*) →* void};
     if(true)
-      #t25.{core::List::add}{Invariant}(3);
-    #t25.{core::List::add}{Invariant}(4);
-    #t25.{core::List::add}{Invariant}(5);
-    #t25.{core::List::add}{Invariant}(6);
+      #t25.{core::List::add}(3){(core::int*) →* void};
+    #t25.{core::List::add}(4){(core::int*) →* void};
+    #t25.{core::List::add}(5){(core::int*) →* void};
+    #t25.{core::List::add}(6){(core::int*) →* void};
   } =>#t25;
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t27 = col::LinkedHashSet::•<core::int*>();
     final core::Iterable<core::int*>* #t28 = initial;
-    if(!#t28.{core::Object::==}(null))
-      #t27.{core::Set::addAll}{Invariant}(#t28);
+    if(!(#t28 == null))
+      #t27.{core::Set::addAll}(#t28){(core::Iterable<core::int*>*) →* void};
     if(true)
-      #t27.{core::Set::add}{Invariant}(3);
-    #t27.{core::Set::add}{Invariant}(4);
-    #t27.{core::Set::add}{Invariant}(5);
-    #t27.{core::Set::add}{Invariant}(6);
+      #t27.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t27.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t27.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t27.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t27;
-  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method main() → dynamic {
   self::foldInitialElements();
@@ -195,12 +195,12 @@
   self::foldInitialSpread6();
 }
 static method expect(core::List<dynamic>* list1, core::List<dynamic>* list2) → void {
-  if(!list1.{core::List::length}.{core::num::==}(list2.{core::List::length})) {
-    throw "Unexpected length. Expected ${list1.{core::List::length}}, actual ${list2.{core::List::length}}.";
+  if(!(list1.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} list2.{core::List::length}{core::int*})) {
+    throw "Unexpected length. Expected ${list1.{core::List::length}{core::int*}}, actual ${list2.{core::List::length}{core::int*}}.";
   }
-  for (core::int* i = 0; i.{core::num::<}(list1.{core::List::length}); i = i.{core::num::+}(1)) {
-    if(!list1.{core::List::[]}(i).{core::Object::==}(list2.{core::List::[]}(i))) {
-      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i)}, actual ${list2.{core::List::[]}(i)}.";
+  for (core::int* i = 0; i.{core::num::<}(list1.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if(!(list1.{core::List::[]}(i){(core::int*) →* dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} list2.{core::List::[]}(i){(core::int*) →* dynamic})) {
+      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i){(core::int*) →* dynamic}}, actual ${list2.{core::List::[]}(i){(core::int*) →* dynamic}}.";
     }
   }
 }
diff --git a/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.transformed.expect
index 09431d2..27a662d 100644
--- a/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.transformed.expect
@@ -10,24 +10,24 @@
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t1 = core::_GrowableList::_literal3<core::int*>(element0 as{TypeError,ForDynamic} core::int*, element1 as{TypeError} core::int*, element2);
     if(true)
-      #t1.{core::List::add}{Invariant}(3);
-    #t1.{core::List::add}{Invariant}(4);
-    #t1.{core::List::add}{Invariant}(5);
-    #t1.{core::List::add}{Invariant}(6);
+      #t1.{core::List::add}(3){(core::int*) →* void};
+    #t1.{core::List::add}(4){(core::int*) →* void};
+    #t1.{core::List::add}(5){(core::int*) →* void};
+    #t1.{core::List::add}(6){(core::int*) →* void};
   } =>#t1;
   self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t2 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t2.{core::Set::add}{Invariant}(element0 as{TypeError,ForDynamic} core::int*);
-    #t2.{core::Set::add}{Invariant}(element1 as{TypeError} core::int*);
-    #t2.{core::Set::add}{Invariant}(element2);
+    #t2.{core::Set::add}(element0 as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}(element1 as{TypeError} core::int*){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}(element2){(core::int*) →* core::bool*};
     if(true)
-      #t2.{core::Set::add}{Invariant}(3);
-    #t2.{core::Set::add}{Invariant}(4);
-    #t2.{core::Set::add}{Invariant}(5);
-    #t2.{core::Set::add}{Invariant}(6);
+      #t2.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t2;
-  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method foldInitialSpread1() → void {
   dynamic initial = core::_GrowableList::_literal3<core::int*>(0, 1, 2);
@@ -39,15 +39,15 @@
         final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t5 = #t4 as{TypeError} core::int*;
-          #t3.{core::List::add}{Invariant}(#t5);
+          #t3.{core::List::add}(#t5){(core::int*) →* void};
         }
       }
     }
     if(true)
-      #t3.{core::List::add}{Invariant}(3);
-    #t3.{core::List::add}{Invariant}(4);
-    #t3.{core::List::add}{Invariant}(5);
-    #t3.{core::List::add}{Invariant}(6);
+      #t3.{core::List::add}(3){(core::int*) →* void};
+    #t3.{core::List::add}(4){(core::int*) →* void};
+    #t3.{core::List::add}(5){(core::int*) →* void};
+    #t3.{core::List::add}(6){(core::int*) →* void};
   } =>#t3;
   self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
@@ -58,17 +58,17 @@
         final dynamic #t7 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t8 = #t7 as{TypeError} core::int*;
-          #t6.{core::Set::add}{Invariant}(#t8);
+          #t6.{core::Set::add}(#t8){(core::int*) →* core::bool*};
         }
       }
     }
     if(true)
-      #t6.{core::Set::add}{Invariant}(3);
-    #t6.{core::Set::add}{Invariant}(4);
-    #t6.{core::Set::add}{Invariant}(5);
-    #t6.{core::Set::add}{Invariant}(6);
+      #t6.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t6;
-  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method foldInitialSpread2() → void {
   core::Iterable<core::num*>* initial = core::_GrowableList::_literal3<core::num*>(0, 1, 2);
@@ -80,15 +80,15 @@
         final dynamic #t10 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t11 = #t10 as{TypeError} core::int*;
-          #t9.{core::List::add}{Invariant}(#t11);
+          #t9.{core::List::add}(#t11){(core::int*) →* void};
         }
       }
     }
     if(true)
-      #t9.{core::List::add}{Invariant}(3);
-    #t9.{core::List::add}{Invariant}(4);
-    #t9.{core::List::add}{Invariant}(5);
-    #t9.{core::List::add}{Invariant}(6);
+      #t9.{core::List::add}(3){(core::int*) →* void};
+    #t9.{core::List::add}(4){(core::int*) →* void};
+    #t9.{core::List::add}(5){(core::int*) →* void};
+    #t9.{core::List::add}(6){(core::int*) →* void};
   } =>#t9;
   self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
@@ -99,17 +99,17 @@
         final dynamic #t13 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t14 = #t13 as{TypeError} core::int*;
-          #t12.{core::Set::add}{Invariant}(#t14);
+          #t12.{core::Set::add}(#t14){(core::int*) →* core::bool*};
         }
       }
     }
     if(true)
-      #t12.{core::Set::add}{Invariant}(3);
-    #t12.{core::Set::add}{Invariant}(4);
-    #t12.{core::Set::add}{Invariant}(5);
-    #t12.{core::Set::add}{Invariant}(6);
+      #t12.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t12.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t12.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t12.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t12;
-  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method foldInitialSpread3() → void {
   core::List<core::num*>* initial = core::_GrowableList::_literal3<core::num*>(0, 1, 2);
@@ -121,15 +121,15 @@
         final dynamic #t16 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t17 = #t16 as{TypeError} core::int*;
-          #t15.{core::List::add}{Invariant}(#t17);
+          #t15.{core::List::add}(#t17){(core::int*) →* void};
         }
       }
     }
     if(true)
-      #t15.{core::List::add}{Invariant}(3);
-    #t15.{core::List::add}{Invariant}(4);
-    #t15.{core::List::add}{Invariant}(5);
-    #t15.{core::List::add}{Invariant}(6);
+      #t15.{core::List::add}(3){(core::int*) →* void};
+    #t15.{core::List::add}(4){(core::int*) →* void};
+    #t15.{core::List::add}(5){(core::int*) →* void};
+    #t15.{core::List::add}(6){(core::int*) →* void};
   } =>#t15;
   self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
@@ -140,86 +140,86 @@
         final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t20 = #t19 as{TypeError} core::int*;
-          #t18.{core::Set::add}{Invariant}(#t20);
+          #t18.{core::Set::add}(#t20){(core::int*) →* core::bool*};
         }
       }
     }
     if(true)
-      #t18.{core::Set::add}{Invariant}(3);
-    #t18.{core::Set::add}{Invariant}(4);
-    #t18.{core::Set::add}{Invariant}(5);
-    #t18.{core::Set::add}{Invariant}(6);
+      #t18.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t18.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t18.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t18.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t18;
-  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method foldInitialSpread4() → void {
   core::Iterable<core::int*>* initial = core::_GrowableList::_literal3<core::int*>(0, 1, 2);
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t21 = core::List::of<core::int*>(initial);
     if(true)
-      #t21.{core::List::add}{Invariant}(3);
-    #t21.{core::List::add}{Invariant}(4);
-    #t21.{core::List::add}{Invariant}(5);
-    #t21.{core::List::add}{Invariant}(6);
+      #t21.{core::List::add}(3){(core::int*) →* void};
+    #t21.{core::List::add}(4){(core::int*) →* void};
+    #t21.{core::List::add}(5){(core::int*) →* void};
+    #t21.{core::List::add}(6){(core::int*) →* void};
   } =>#t21;
   self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t22 = col::LinkedHashSet::of<core::int*>(initial);
     if(true)
-      #t22.{core::Set::add}{Invariant}(3);
-    #t22.{core::Set::add}{Invariant}(4);
-    #t22.{core::Set::add}{Invariant}(5);
-    #t22.{core::Set::add}{Invariant}(6);
+      #t22.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t22.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t22.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t22.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t22;
-  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method foldInitialSpread5() → void {
   core::List<core::int*>* initial = core::_GrowableList::_literal3<core::int*>(0, 1, 2);
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t23 = core::List::of<core::int*>(initial);
     if(true)
-      #t23.{core::List::add}{Invariant}(3);
-    #t23.{core::List::add}{Invariant}(4);
-    #t23.{core::List::add}{Invariant}(5);
-    #t23.{core::List::add}{Invariant}(6);
+      #t23.{core::List::add}(3){(core::int*) →* void};
+    #t23.{core::List::add}(4){(core::int*) →* void};
+    #t23.{core::List::add}(5){(core::int*) →* void};
+    #t23.{core::List::add}(6){(core::int*) →* void};
   } =>#t23;
   self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t24 = col::LinkedHashSet::of<core::int*>(initial);
     if(true)
-      #t24.{core::Set::add}{Invariant}(3);
-    #t24.{core::Set::add}{Invariant}(4);
-    #t24.{core::Set::add}{Invariant}(5);
-    #t24.{core::Set::add}{Invariant}(6);
+      #t24.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t24.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t24.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t24.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t24;
-  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method foldInitialSpread6() → void {
   core::List<core::int*>* initial = core::_GrowableList::_literal3<core::int*>(0, 1, 2);
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t25 = core::_GrowableList::•<core::int*>(0);
     final core::Iterable<core::int*>* #t26 = initial;
-    if(!#t26.{core::Object::==}(null))
-      #t25.{core::List::addAll}{Invariant}(#t26);
+    if(!(#t26 == null))
+      #t25.{core::List::addAll}(#t26){(core::Iterable<core::int*>*) →* void};
     if(true)
-      #t25.{core::List::add}{Invariant}(3);
-    #t25.{core::List::add}{Invariant}(4);
-    #t25.{core::List::add}{Invariant}(5);
-    #t25.{core::List::add}{Invariant}(6);
+      #t25.{core::List::add}(3){(core::int*) →* void};
+    #t25.{core::List::add}(4){(core::int*) →* void};
+    #t25.{core::List::add}(5){(core::int*) →* void};
+    #t25.{core::List::add}(6){(core::int*) →* void};
   } =>#t25;
   self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t27 = new col::_CompactLinkedHashSet::•<core::int*>();
     final core::Iterable<core::int*>* #t28 = initial;
-    if(!#t28.{core::Object::==}(null))
-      #t27.{core::Set::addAll}{Invariant}(#t28);
+    if(!(#t28 == null))
+      #t27.{core::Set::addAll}(#t28){(core::Iterable<core::int*>*) →* void};
     if(true)
-      #t27.{core::Set::add}{Invariant}(3);
-    #t27.{core::Set::add}{Invariant}(4);
-    #t27.{core::Set::add}{Invariant}(5);
-    #t27.{core::Set::add}{Invariant}(6);
+      #t27.{core::Set::add}(3){(core::int*) →* core::bool*};
+    #t27.{core::Set::add}(4){(core::int*) →* core::bool*};
+    #t27.{core::Set::add}(5){(core::int*) →* core::bool*};
+    #t27.{core::Set::add}(6){(core::int*) →* core::bool*};
   } =>#t27;
-  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}());
+  self::expect(core::_GrowableList::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
 }
 static method main() → dynamic {
   self::foldInitialElements();
@@ -231,12 +231,12 @@
   self::foldInitialSpread6();
 }
 static method expect(core::List<dynamic>* list1, core::List<dynamic>* list2) → void {
-  if(!list1.{core::List::length}.{core::num::==}(list2.{core::List::length})) {
-    throw "Unexpected length. Expected ${list1.{core::List::length}}, actual ${list2.{core::List::length}}.";
+  if(!(list1.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} list2.{core::List::length}{core::int*})) {
+    throw "Unexpected length. Expected ${list1.{core::List::length}{core::int*}}, actual ${list2.{core::List::length}{core::int*}}.";
   }
-  for (core::int* i = 0; i.{core::num::<}(list1.{core::List::length}); i = i.{core::num::+}(1)) {
-    if(!list1.{core::List::[]}(i).{core::Object::==}(list2.{core::List::[]}(i))) {
-      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i)}, actual ${list2.{core::List::[]}(i)}.";
+  for (core::int* i = 0; i.{core::num::<}(list1.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if(!(list1.{core::List::[]}(i){(core::int*) →* dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} list2.{core::List::[]}(i){(core::int*) →* dynamic})) {
+      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i){(core::int*) →* dynamic}}, actual ${list2.{core::List::[]}(i){(core::int*) →* dynamic}}.";
     }
   }
 }
diff --git a/pkg/front_end/testcases/unified_collections/invariance.dart.weak.expect b/pkg/front_end/testcases/unified_collections/invariance.dart.weak.expect
index 63b5ee2..4292215 100644
--- a/pkg/front_end/testcases/unified_collections/invariance.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/invariance.dart.weak.expect
@@ -9,64 +9,64 @@
   dynamic list3 = <core::int*>[0];
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t1 = <core::int*>[0];
-    #t1.{core::List::addAll}{Invariant}(list1);
+    #t1.{core::List::addAll}(list1){(core::Iterable<core::int*>*) →* void};
     for (final dynamic #t2 in list2) {
       final core::int* #t3 = #t2 as{TypeError} core::int*;
-      #t1.{core::List::add}{Invariant}(#t3);
+      #t1.{core::List::add}(#t3){(core::int*) →* void};
     }
     for (final dynamic #t4 in list3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t5 = #t4 as{TypeError} core::int*;
-      #t1.{core::List::add}{Invariant}(#t5);
+      #t1.{core::List::add}(#t5){(core::int*) →* void};
     }
     if(true)
-      #t1.{core::List::add}{Invariant}(2);
+      #t1.{core::List::add}(2){(core::int*) →* void};
   } =>#t1;
   core::Set<core::int*>* set1 = block {
     final core::Set<core::int*>* #t6 = col::LinkedHashSet::•<core::int*>();
-    #t6.{core::Set::add}{Invariant}(0);
+    #t6.{core::Set::add}(0){(core::int*) →* core::bool*};
   } =>#t6;
   core::Set<core::num*>* set2 = block {
     final core::Set<core::num*>* #t7 = col::LinkedHashSet::•<core::num*>();
-    #t7.{core::Set::add}{Invariant}(0);
+    #t7.{core::Set::add}(0){(core::num*) →* core::bool*};
   } =>#t7;
   dynamic set3 = block {
     final core::Set<core::int*>* #t8 = col::LinkedHashSet::•<core::int*>();
-    #t8.{core::Set::add}{Invariant}(0);
+    #t8.{core::Set::add}(0){(core::int*) →* core::bool*};
   } =>#t8;
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
-    #t9.{core::Set::add}{Invariant}(0);
-    #t9.{core::Set::addAll}{Invariant}(set1);
+    #t9.{core::Set::add}(0){(core::int*) →* core::bool*};
+    #t9.{core::Set::addAll}(set1){(core::Iterable<core::int*>*) →* void};
     for (final dynamic #t10 in set2) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
-      #t9.{core::Set::add}{Invariant}(#t11);
+      #t9.{core::Set::add}(#t11){(core::int*) →* core::bool*};
     }
     for (final dynamic #t12 in set3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t13 = #t12 as{TypeError} core::int*;
-      #t9.{core::Set::add}{Invariant}(#t13);
+      #t9.{core::Set::add}(#t13){(core::int*) →* core::bool*};
     }
     if(true)
-      #t9.{core::Set::add}{Invariant}(2);
+      #t9.{core::Set::add}(2){(core::int*) →* core::bool*};
   } =>#t9;
   core::Map<core::int*, core::String*>* map1 = <core::int*, core::String*>{0: "foo"};
   core::Map<core::num*, core::Object*>* map2 = <core::num*, core::Object*>{0: "bar"};
   dynamic map3 = <core::int*, core::String*>{0: "baz"};
   core::Map<core::int*, core::String*>* map = block {
     final core::Map<core::int*, core::String*>* #t14 = <core::int*, core::String*>{};
-    #t14.{core::Map::[]=}{Invariant}(0, "foo");
-    for (final core::MapEntry<core::int*, core::String*>* #t15 in map1.{core::Map::entries})
-      #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
-    for (final core::MapEntry<dynamic, dynamic>* #t16 in map2.{core::Map::entries}) {
-      final core::int* #t17 = #t16.{core::MapEntry::key} as{TypeError} core::int*;
-      final core::String* #t18 = #t16.{core::MapEntry::value} as{TypeError} core::String*;
-      #t14.{core::Map::[]=}{Invariant}(#t17, #t18);
+    #t14.{core::Map::[]=}(0, "foo"){(core::int*, core::String*) →* void};
+    for (final core::MapEntry<core::int*, core::String*>* #t15 in map1.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
+      #t14.{core::Map::[]=}(#t15.{core::MapEntry::key}{core::int*}, #t15.{core::MapEntry::value}{core::String*}){(core::int*, core::String*) →* void};
+    for (final core::MapEntry<dynamic, dynamic>* #t16 in map2.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
+      final core::int* #t17 = #t16.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
+      final core::String* #t18 = #t16.{core::MapEntry::value}{dynamic} as{TypeError} core::String*;
+      #t14.{core::Map::[]=}(#t17, #t18){(core::int*, core::String*) →* void};
     }
-    for (final core::MapEntry<dynamic, dynamic>* #t19 in (map3 as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
-      final core::int* #t20 = #t19.{core::MapEntry::key} as{TypeError} core::int*;
-      final core::String* #t21 = #t19.{core::MapEntry::value} as{TypeError} core::String*;
-      #t14.{core::Map::[]=}{Invariant}(#t20, #t21);
+    for (final core::MapEntry<dynamic, dynamic>* #t19 in (map3 as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
+      final core::int* #t20 = #t19.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
+      final core::String* #t21 = #t19.{core::MapEntry::value}{dynamic} as{TypeError} core::String*;
+      #t14.{core::Map::[]=}(#t20, #t21){(core::int*, core::String*) →* void};
     }
     if(true)
-      #t14.{core::Map::[]=}{Invariant}(2, "baz");
+      #t14.{core::Map::[]=}(2, "baz"){(core::int*, core::String*) →* void};
   } =>#t14;
 }
diff --git a/pkg/front_end/testcases/unified_collections/invariance.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/invariance.dart.weak.transformed.expect
index 5655ae8..ed32e60 100644
--- a/pkg/front_end/testcases/unified_collections/invariance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/unified_collections/invariance.dart.weak.transformed.expect
@@ -9,14 +9,14 @@
   dynamic list3 = core::_GrowableList::_literal1<core::int*>(0);
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t1 = core::_GrowableList::_literal1<core::int*>(0);
-    #t1.{core::List::addAll}{Invariant}(list1);
+    #t1.{core::List::addAll}(list1){(core::Iterable<core::int*>*) →* void};
     {
       core::Iterator<core::num*>* :sync-for-iterator = list2.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t3 = #t2 as{TypeError} core::int*;
-          #t1.{core::List::add}{Invariant}(#t3);
+          #t1.{core::List::add}(#t3){(core::int*) →* void};
         }
       }
     }
@@ -26,36 +26,36 @@
         final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t5 = #t4 as{TypeError} core::int*;
-          #t1.{core::List::add}{Invariant}(#t5);
+          #t1.{core::List::add}(#t5){(core::int*) →* void};
         }
       }
     }
     if(true)
-      #t1.{core::List::add}{Invariant}(2);
+      #t1.{core::List::add}(2){(core::int*) →* void};
   } =>#t1;
   core::Set<core::int*>* set1 = block {
     final core::Set<core::int*>* #t6 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t6.{core::Set::add}{Invariant}(0);
+    #t6.{core::Set::add}(0){(core::int*) →* core::bool*};
   } =>#t6;
   core::Set<core::num*>* set2 = block {
     final core::Set<core::num*>* #t7 = new col::_CompactLinkedHashSet::•<core::num*>();
-    #t7.{core::Set::add}{Invariant}(0);
+    #t7.{core::Set::add}(0){(core::num*) →* core::bool*};
   } =>#t7;
   dynamic set3 = block {
     final core::Set<core::int*>* #t8 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t8.{core::Set::add}{Invariant}(0);
+    #t8.{core::Set::add}(0){(core::int*) →* core::bool*};
   } =>#t8;
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t9 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t9.{core::Set::add}{Invariant}(0);
-    #t9.{core::Set::addAll}{Invariant}(set1);
+    #t9.{core::Set::add}(0){(core::int*) →* core::bool*};
+    #t9.{core::Set::addAll}(set1){(core::Iterable<core::int*>*) →* void};
     {
       core::Iterator<core::num*>* :sync-for-iterator = set2.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t10 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t11 = #t10 as{TypeError} core::int*;
-          #t9.{core::Set::add}{Invariant}(#t11);
+          #t9.{core::Set::add}(#t11){(core::int*) →* core::bool*};
         }
       }
     }
@@ -65,49 +65,49 @@
         final dynamic #t12 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t13 = #t12 as{TypeError} core::int*;
-          #t9.{core::Set::add}{Invariant}(#t13);
+          #t9.{core::Set::add}(#t13){(core::int*) →* core::bool*};
         }
       }
     }
     if(true)
-      #t9.{core::Set::add}{Invariant}(2);
+      #t9.{core::Set::add}(2){(core::int*) →* core::bool*};
   } =>#t9;
   core::Map<core::int*, core::String*>* map1 = <core::int*, core::String*>{0: "foo"};
   core::Map<core::num*, core::Object*>* map2 = <core::num*, core::Object*>{0: "bar"};
   dynamic map3 = <core::int*, core::String*>{0: "baz"};
   core::Map<core::int*, core::String*>* map = block {
     final core::Map<core::int*, core::String*>* #t14 = <core::int*, core::String*>{};
-    #t14.{core::Map::[]=}{Invariant}(0, "foo");
+    #t14.{core::Map::[]=}(0, "foo"){(core::int*, core::String*) →* void};
     {
-      core::Iterator<core::MapEntry<core::int*, core::String*>>* :sync-for-iterator = map1.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::int*, core::String*>>* :sync-for-iterator = map1.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int*, core::String*>* #t15 = :sync-for-iterator.{core::Iterator::current};
-        #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
+        #t14.{core::Map::[]=}(#t15.{core::MapEntry::key}{core::int*}, #t15.{core::MapEntry::value}{core::String*}){(core::int*, core::String*) →* void};
       }
     }
     {
-      core::Iterator<core::MapEntry<core::num*, core::Object*>>* :sync-for-iterator = map2.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::int*, core::String*>>* :sync-for-iterator = map2.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t16 = :sync-for-iterator.{core::Iterator::current};
         {
-          final core::int* #t17 = #t16.{core::MapEntry::key} as{TypeError} core::int*;
-          final core::String* #t18 = #t16.{core::MapEntry::value} as{TypeError} core::String*;
-          #t14.{core::Map::[]=}{Invariant}(#t17, #t18);
+          final core::int* #t17 = #t16.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
+          final core::String* #t18 = #t16.{core::MapEntry::value}{dynamic} as{TypeError} core::String*;
+          #t14.{core::Map::[]=}(#t17, #t18){(core::int*, core::String*) →* void};
         }
       }
     }
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = (map3 as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::int*, core::String*>>* :sync-for-iterator = (map3 as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t19 = :sync-for-iterator.{core::Iterator::current};
         {
-          final core::int* #t20 = #t19.{core::MapEntry::key} as{TypeError} core::int*;
-          final core::String* #t21 = #t19.{core::MapEntry::value} as{TypeError} core::String*;
-          #t14.{core::Map::[]=}{Invariant}(#t20, #t21);
+          final core::int* #t20 = #t19.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
+          final core::String* #t21 = #t19.{core::MapEntry::value}{dynamic} as{TypeError} core::String*;
+          #t14.{core::Map::[]=}(#t20, #t21){(core::int*, core::String*) →* void};
         }
       }
     }
     if(true)
-      #t14.{core::Map::[]=}{Invariant}(2, "baz");
+      #t14.{core::Map::[]=}(2, "baz"){(core::int*, core::String*) →* void};
   } =>#t14;
 }
diff --git a/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.expect b/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.expect
index fe00087..3a1f942 100644
--- a/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.expect
@@ -15,29 +15,29 @@
     final core::List<core::int*>* #t1 = <core::int*>[];
     for (final dynamic #t2 in dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t3 = #t2 as{TypeError} core::int*;
-      #t1.{core::List::add}{Invariant}(#t3);
+      #t1.{core::List::add}(#t3){(core::int*) →* void};
     }
     for (final dynamic #t4 in dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t5 = #t4 as{TypeError} core::int*;
-      #t1.{core::List::add}{Invariant}(#t5);
+      #t1.{core::List::add}(#t5){(core::int*) →* void};
     }
-    #t1.{core::List::addAll}{Invariant}(iterableIntList);
+    #t1.{core::List::addAll}(iterableIntList){(core::Iterable<core::int*>*) →* void};
     for (final dynamic #t6 in iterableNumList1) {
       final core::int* #t7 = #t6 as{TypeError} core::int*;
-      #t1.{core::List::add}{Invariant}(#t7);
+      #t1.{core::List::add}(#t7){(core::int*) →* void};
     }
     for (final dynamic #t8 in iterableNumList2) {
       final core::int* #t9 = #t8 as{TypeError} core::int*;
-      #t1.{core::List::add}{Invariant}(#t9);
+      #t1.{core::List::add}(#t9){(core::int*) →* void};
     }
-    #t1.{core::List::addAll}{Invariant}(intList);
+    #t1.{core::List::addAll}(intList){(core::Iterable<core::int*>*) →* void};
     for (final dynamic #t10 in numList1) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
-      #t1.{core::List::add}{Invariant}(#t11);
+      #t1.{core::List::add}(#t11){(core::int*) →* void};
     }
     for (final dynamic #t12 in numList2) {
       final core::int* #t13 = #t12 as{TypeError} core::int*;
-      #t1.{core::List::add}{Invariant}(#t13);
+      #t1.{core::List::add}(#t13){(core::int*) →* void};
     }
   } =>#t1;
   self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i), list1);
@@ -45,98 +45,98 @@
     final core::List<core::num*>* #t14 = <core::num*>[];
     for (final dynamic #t15 in dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::num* #t16 = #t15 as{TypeError} core::num*;
-      #t14.{core::List::add}{Invariant}(#t16);
+      #t14.{core::List::add}(#t16){(core::num*) →* void};
     }
     for (final dynamic #t17 in dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::num* #t18 = #t17 as{TypeError} core::num*;
-      #t14.{core::List::add}{Invariant}(#t18);
+      #t14.{core::List::add}(#t18){(core::num*) →* void};
     }
-    #t14.{core::List::addAll}{Invariant}(iterableIntList);
-    #t14.{core::List::addAll}{Invariant}(iterableNumList1);
-    #t14.{core::List::addAll}{Invariant}(iterableNumList2);
-    #t14.{core::List::addAll}{Invariant}(intList);
-    #t14.{core::List::addAll}{Invariant}(numList1);
-    #t14.{core::List::addAll}{Invariant}(numList2);
+    #t14.{core::List::addAll}(iterableIntList){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}(iterableNumList1){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}(iterableNumList2){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}(intList){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}(numList1){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}(numList2){(core::Iterable<core::num*>*) →* void};
   } =>#t14;
   self::expect(core::List::generate<core::num*>(24, (core::int* i) → core::int* => i), list2);
   core::List<core::int*>* list3 = block {
     final core::List<core::int*>* #t19 = <core::int*>[];
     final core::Iterable<dynamic>* #t20 = dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t20.{core::Object::==}(null))
+    if(!(#t20 == null))
       for (final dynamic #t21 in #t20) {
         final core::int* #t22 = #t21 as{TypeError} core::int*;
-        #t19.{core::List::add}{Invariant}(#t22);
+        #t19.{core::List::add}(#t22){(core::int*) →* void};
       }
     final core::Iterable<dynamic>* #t23 = dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t23.{core::Object::==}(null))
+    if(!(#t23 == null))
       for (final dynamic #t24 in #t23) {
         final core::int* #t25 = #t24 as{TypeError} core::int*;
-        #t19.{core::List::add}{Invariant}(#t25);
+        #t19.{core::List::add}(#t25){(core::int*) →* void};
       }
     final core::Iterable<core::int*>* #t26 = iterableIntList;
-    if(!#t26.{core::Object::==}(null))
-      #t19.{core::List::addAll}{Invariant}(#t26);
+    if(!(#t26 == null))
+      #t19.{core::List::addAll}(#t26){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t27 = iterableNumList1;
-    if(!#t27.{core::Object::==}(null))
+    if(!(#t27 == null))
       for (final dynamic #t28 in #t27) {
         final core::int* #t29 = #t28 as{TypeError} core::int*;
-        #t19.{core::List::add}{Invariant}(#t29);
+        #t19.{core::List::add}(#t29){(core::int*) →* void};
       }
     final core::Iterable<dynamic>* #t30 = iterableNumList2;
-    if(!#t30.{core::Object::==}(null))
+    if(!(#t30 == null))
       for (final dynamic #t31 in #t30) {
         final core::int* #t32 = #t31 as{TypeError} core::int*;
-        #t19.{core::List::add}{Invariant}(#t32);
+        #t19.{core::List::add}(#t32){(core::int*) →* void};
       }
     final core::Iterable<core::int*>* #t33 = intList;
-    if(!#t33.{core::Object::==}(null))
-      #t19.{core::List::addAll}{Invariant}(#t33);
+    if(!(#t33 == null))
+      #t19.{core::List::addAll}(#t33){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t34 = numList1;
-    if(!#t34.{core::Object::==}(null))
+    if(!(#t34 == null))
       for (final dynamic #t35 in #t34) {
         final core::int* #t36 = #t35 as{TypeError} core::int*;
-        #t19.{core::List::add}{Invariant}(#t36);
+        #t19.{core::List::add}(#t36){(core::int*) →* void};
       }
     final core::Iterable<dynamic>* #t37 = numList2;
-    if(!#t37.{core::Object::==}(null))
+    if(!(#t37 == null))
       for (final dynamic #t38 in #t37) {
         final core::int* #t39 = #t38 as{TypeError} core::int*;
-        #t19.{core::List::add}{Invariant}(#t39);
+        #t19.{core::List::add}(#t39){(core::int*) →* void};
       }
   } =>#t19;
   self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i), list3);
   core::List<core::num*>* list4 = block {
     final core::List<core::num*>* #t40 = <core::num*>[];
     final core::Iterable<dynamic>* #t41 = dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t41.{core::Object::==}(null))
+    if(!(#t41 == null))
       for (final dynamic #t42 in #t41) {
         final core::num* #t43 = #t42 as{TypeError} core::num*;
-        #t40.{core::List::add}{Invariant}(#t43);
+        #t40.{core::List::add}(#t43){(core::num*) →* void};
       }
     final core::Iterable<dynamic>* #t44 = dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t44.{core::Object::==}(null))
+    if(!(#t44 == null))
       for (final dynamic #t45 in #t44) {
         final core::num* #t46 = #t45 as{TypeError} core::num*;
-        #t40.{core::List::add}{Invariant}(#t46);
+        #t40.{core::List::add}(#t46){(core::num*) →* void};
       }
     final core::Iterable<core::num*>* #t47 = iterableIntList;
-    if(!#t47.{core::Object::==}(null))
-      #t40.{core::List::addAll}{Invariant}(#t47);
+    if(!(#t47 == null))
+      #t40.{core::List::addAll}(#t47){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t48 = iterableNumList1;
-    if(!#t48.{core::Object::==}(null))
-      #t40.{core::List::addAll}{Invariant}(#t48);
+    if(!(#t48 == null))
+      #t40.{core::List::addAll}(#t48){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t49 = iterableNumList2;
-    if(!#t49.{core::Object::==}(null))
-      #t40.{core::List::addAll}{Invariant}(#t49);
+    if(!(#t49 == null))
+      #t40.{core::List::addAll}(#t49){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t50 = intList;
-    if(!#t50.{core::Object::==}(null))
-      #t40.{core::List::addAll}{Invariant}(#t50);
+    if(!(#t50 == null))
+      #t40.{core::List::addAll}(#t50){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t51 = numList1;
-    if(!#t51.{core::Object::==}(null))
-      #t40.{core::List::addAll}{Invariant}(#t51);
+    if(!(#t51 == null))
+      #t40.{core::List::addAll}(#t51){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t52 = numList2;
-    if(!#t52.{core::Object::==}(null))
-      #t40.{core::List::addAll}{Invariant}(#t52);
+    if(!(#t52 == null))
+      #t40.{core::List::addAll}(#t52){(core::Iterable<core::num*>*) →* void};
   } =>#t40;
   self::expect(core::List::generate<core::num*>(24, (core::int* i) → core::int* => i), list4);
 }
@@ -144,12 +144,12 @@
   self::useAddAll();
 }
 static method expect(core::List<dynamic>* list1, core::List<dynamic>* list2) → void {
-  if(!list1.{core::List::length}.{core::num::==}(list2.{core::List::length})) {
-    throw "Unexpected length. Expected ${list1.{core::List::length}}, actual ${list2.{core::List::length}}.";
+  if(!(list1.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} list2.{core::List::length}{core::int*})) {
+    throw "Unexpected length. Expected ${list1.{core::List::length}{core::int*}}, actual ${list2.{core::List::length}{core::int*}}.";
   }
-  for (core::int* i = 0; i.{core::num::<}(list1.{core::List::length}); i = i.{core::num::+}(1)) {
-    if(!list1.{core::List::[]}(i).{core::Object::==}(list2.{core::List::[]}(i))) {
-      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i)}, actual ${list2.{core::List::[]}(i)}.";
+  for (core::int* i = 0; i.{core::num::<}(list1.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if(!(list1.{core::List::[]}(i){(core::int*) →* dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} list2.{core::List::[]}(i){(core::int*) →* dynamic})) {
+      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i){(core::int*) →* dynamic}}, actual ${list2.{core::List::[]}(i){(core::int*) →* dynamic}}.";
     }
   }
 }
diff --git a/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.transformed.expect
index 1f0299e..6c633ac 100644
--- a/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t3 = #t2 as{TypeError} core::int*;
-          #t1.{core::List::add}{Invariant}(#t3);
+          #t1.{core::List::add}(#t3){(core::int*) →* void};
         }
       }
     }
@@ -29,18 +29,18 @@
         final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t5 = #t4 as{TypeError} core::int*;
-          #t1.{core::List::add}{Invariant}(#t5);
+          #t1.{core::List::add}(#t5){(core::int*) →* void};
         }
       }
     }
-    #t1.{core::List::addAll}{Invariant}(iterableIntList);
+    #t1.{core::List::addAll}(iterableIntList){(core::Iterable<core::int*>*) →* void};
     {
       core::Iterator<core::num*>* :sync-for-iterator = iterableNumList1.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t6 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t7 = #t6 as{TypeError} core::int*;
-          #t1.{core::List::add}{Invariant}(#t7);
+          #t1.{core::List::add}(#t7){(core::int*) →* void};
         }
       }
     }
@@ -50,18 +50,18 @@
         final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t9 = #t8 as{TypeError} core::int*;
-          #t1.{core::List::add}{Invariant}(#t9);
+          #t1.{core::List::add}(#t9){(core::int*) →* void};
         }
       }
     }
-    #t1.{core::List::addAll}{Invariant}(intList);
+    #t1.{core::List::addAll}(intList){(core::Iterable<core::int*>*) →* void};
     {
       core::Iterator<core::num*>* :sync-for-iterator = numList1.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t10 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t11 = #t10 as{TypeError} core::int*;
-          #t1.{core::List::add}{Invariant}(#t11);
+          #t1.{core::List::add}(#t11){(core::int*) →* void};
         }
       }
     }
@@ -71,7 +71,7 @@
         final dynamic #t12 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t13 = #t12 as{TypeError} core::int*;
-          #t1.{core::List::add}{Invariant}(#t13);
+          #t1.{core::List::add}(#t13){(core::int*) →* void};
         }
       }
     }
@@ -85,7 +85,7 @@
         final dynamic #t15 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num* #t16 = #t15 as{TypeError} core::num*;
-          #t14.{core::List::add}{Invariant}(#t16);
+          #t14.{core::List::add}(#t16){(core::num*) →* void};
         }
       }
     }
@@ -95,89 +95,89 @@
         final dynamic #t17 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num* #t18 = #t17 as{TypeError} core::num*;
-          #t14.{core::List::add}{Invariant}(#t18);
+          #t14.{core::List::add}(#t18){(core::num*) →* void};
         }
       }
     }
-    #t14.{core::List::addAll}{Invariant}(iterableIntList);
-    #t14.{core::List::addAll}{Invariant}(iterableNumList1);
-    #t14.{core::List::addAll}{Invariant}(iterableNumList2);
-    #t14.{core::List::addAll}{Invariant}(intList);
-    #t14.{core::List::addAll}{Invariant}(numList1);
-    #t14.{core::List::addAll}{Invariant}(numList2);
+    #t14.{core::List::addAll}(iterableIntList){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}(iterableNumList1){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}(iterableNumList2){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}(intList){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}(numList1){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}(numList2){(core::Iterable<core::num*>*) →* void};
   } =>#t14;
   self::expect(core::_GrowableList::generate<core::num*>(24, (core::int* i) → core::int* => i), list2);
   core::List<core::int*>* list3 = block {
     final core::List<core::int*>* #t19 = core::_GrowableList::•<core::int*>(0);
     final core::Iterable<dynamic>* #t20 = dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t20.{core::Object::==}(null)) {
+    if(!(#t20 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t20.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t22 = #t21 as{TypeError} core::int*;
-          #t19.{core::List::add}{Invariant}(#t22);
+          #t19.{core::List::add}(#t22){(core::int*) →* void};
         }
       }
     }
     final core::Iterable<dynamic>* #t23 = dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t23.{core::Object::==}(null)) {
+    if(!(#t23 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t23.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t24 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t25 = #t24 as{TypeError} core::int*;
-          #t19.{core::List::add}{Invariant}(#t25);
+          #t19.{core::List::add}(#t25){(core::int*) →* void};
         }
       }
     }
     final core::Iterable<core::int*>* #t26 = iterableIntList;
-    if(!#t26.{core::Object::==}(null))
-      #t19.{core::List::addAll}{Invariant}(#t26);
+    if(!(#t26 == null))
+      #t19.{core::List::addAll}(#t26){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t27 = iterableNumList1;
-    if(!#t27.{core::Object::==}(null)) {
+    if(!(#t27 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t27.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t28 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t29 = #t28 as{TypeError} core::int*;
-          #t19.{core::List::add}{Invariant}(#t29);
+          #t19.{core::List::add}(#t29){(core::int*) →* void};
         }
       }
     }
     final core::Iterable<dynamic>* #t30 = iterableNumList2;
-    if(!#t30.{core::Object::==}(null)) {
+    if(!(#t30 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t30.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t31 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t32 = #t31 as{TypeError} core::int*;
-          #t19.{core::List::add}{Invariant}(#t32);
+          #t19.{core::List::add}(#t32){(core::int*) →* void};
         }
       }
     }
     final core::Iterable<core::int*>* #t33 = intList;
-    if(!#t33.{core::Object::==}(null))
-      #t19.{core::List::addAll}{Invariant}(#t33);
+    if(!(#t33 == null))
+      #t19.{core::List::addAll}(#t33){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t34 = numList1;
-    if(!#t34.{core::Object::==}(null)) {
+    if(!(#t34 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t34.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t36 = #t35 as{TypeError} core::int*;
-          #t19.{core::List::add}{Invariant}(#t36);
+          #t19.{core::List::add}(#t36){(core::int*) →* void};
         }
       }
     }
     final core::Iterable<dynamic>* #t37 = numList2;
-    if(!#t37.{core::Object::==}(null)) {
+    if(!(#t37 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t37.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t38 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t39 = #t38 as{TypeError} core::int*;
-          #t19.{core::List::add}{Invariant}(#t39);
+          #t19.{core::List::add}(#t39){(core::int*) →* void};
         }
       }
     }
@@ -186,45 +186,45 @@
   core::List<core::num*>* list4 = block {
     final core::List<core::num*>* #t40 = core::_GrowableList::•<core::num*>(0);
     final core::Iterable<dynamic>* #t41 = dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t41.{core::Object::==}(null)) {
+    if(!(#t41 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t41.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t42 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num* #t43 = #t42 as{TypeError} core::num*;
-          #t40.{core::List::add}{Invariant}(#t43);
+          #t40.{core::List::add}(#t43){(core::num*) →* void};
         }
       }
     }
     final core::Iterable<dynamic>* #t44 = dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t44.{core::Object::==}(null)) {
+    if(!(#t44 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t44.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t45 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num* #t46 = #t45 as{TypeError} core::num*;
-          #t40.{core::List::add}{Invariant}(#t46);
+          #t40.{core::List::add}(#t46){(core::num*) →* void};
         }
       }
     }
     final core::Iterable<core::num*>* #t47 = iterableIntList;
-    if(!#t47.{core::Object::==}(null))
-      #t40.{core::List::addAll}{Invariant}(#t47);
+    if(!(#t47 == null))
+      #t40.{core::List::addAll}(#t47){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t48 = iterableNumList1;
-    if(!#t48.{core::Object::==}(null))
-      #t40.{core::List::addAll}{Invariant}(#t48);
+    if(!(#t48 == null))
+      #t40.{core::List::addAll}(#t48){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t49 = iterableNumList2;
-    if(!#t49.{core::Object::==}(null))
-      #t40.{core::List::addAll}{Invariant}(#t49);
+    if(!(#t49 == null))
+      #t40.{core::List::addAll}(#t49){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t50 = intList;
-    if(!#t50.{core::Object::==}(null))
-      #t40.{core::List::addAll}{Invariant}(#t50);
+    if(!(#t50 == null))
+      #t40.{core::List::addAll}(#t50){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t51 = numList1;
-    if(!#t51.{core::Object::==}(null))
-      #t40.{core::List::addAll}{Invariant}(#t51);
+    if(!(#t51 == null))
+      #t40.{core::List::addAll}(#t51){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t52 = numList2;
-    if(!#t52.{core::Object::==}(null))
-      #t40.{core::List::addAll}{Invariant}(#t52);
+    if(!(#t52 == null))
+      #t40.{core::List::addAll}(#t52){(core::Iterable<core::num*>*) →* void};
   } =>#t40;
   self::expect(core::_GrowableList::generate<core::num*>(24, (core::int* i) → core::int* => i), list4);
 }
@@ -232,12 +232,12 @@
   self::useAddAll();
 }
 static method expect(core::List<dynamic>* list1, core::List<dynamic>* list2) → void {
-  if(!list1.{core::List::length}.{core::num::==}(list2.{core::List::length})) {
-    throw "Unexpected length. Expected ${list1.{core::List::length}}, actual ${list2.{core::List::length}}.";
+  if(!(list1.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} list2.{core::List::length}{core::int*})) {
+    throw "Unexpected length. Expected ${list1.{core::List::length}{core::int*}}, actual ${list2.{core::List::length}{core::int*}}.";
   }
-  for (core::int* i = 0; i.{core::num::<}(list1.{core::List::length}); i = i.{core::num::+}(1)) {
-    if(!list1.{core::List::[]}(i).{core::Object::==}(list2.{core::List::[]}(i))) {
-      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i)}, actual ${list2.{core::List::[]}(i)}.";
+  for (core::int* i = 0; i.{core::num::<}(list1.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if(!(list1.{core::List::[]}(i){(core::int*) →* dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} list2.{core::List::[]}(i){(core::int*) →* dynamic})) {
+      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i){(core::int*) →* dynamic}}, actual ${list2.{core::List::[]}(i){(core::int*) →* dynamic}}.";
     }
   }
 }
diff --git a/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.expect b/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.expect
index 233316d..f5d6b5f 100644
--- a/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.expect
@@ -12,36 +12,36 @@
     final core::List<core::int> #t1 = <core::int>[];
     for (final dynamic #t2 in dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
-      #t1.{core::List::add}{Invariant}(#t3);
+      #t1.{core::List::add}(#t3){(core::int) → void};
     }
     for (final dynamic #t4 in dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t5 = #t4 as{TypeError,ForNonNullableByDefault} core::int;
-      #t1.{core::List::add}{Invariant}(#t5);
+      #t1.{core::List::add}(#t5){(core::int) → void};
     }
     for (final dynamic #t6 in dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t7 = #t6 as{TypeError,ForNonNullableByDefault} core::int;
-      #t1.{core::List::add}{Invariant}(#t7);
+      #t1.{core::List::add}(#t7){(core::int) → void};
     }
-    #t1.{core::List::addAll}{Invariant}(iterableIntList);
-    #t1.{core::List::addAll}{Invariant}(intList);
+    #t1.{core::List::addAll}(iterableIntList){(core::Iterable<core::int>) → void};
+    #t1.{core::List::addAll}(intList){(core::Iterable<core::int>) → void};
   } =>#t1;
   self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i), list1);
   core::List<core::num> list2 = block {
     final core::List<core::num> #t8 = <core::num>[];
     for (final dynamic #t9 in dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::num;
-      #t8.{core::List::add}{Invariant}(#t10);
+      #t8.{core::List::add}(#t10){(core::num) → void};
     }
     for (final dynamic #t11 in dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t12 = #t11 as{TypeError,ForNonNullableByDefault} core::num;
-      #t8.{core::List::add}{Invariant}(#t12);
+      #t8.{core::List::add}(#t12){(core::num) → void};
     }
     for (final dynamic #t13 in dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t14 = #t13 as{TypeError,ForNonNullableByDefault} core::num;
-      #t8.{core::List::add}{Invariant}(#t14);
+      #t8.{core::List::add}(#t14){(core::num) → void};
     }
-    #t8.{core::List::addAll}{Invariant}(iterableIntList);
-    #t8.{core::List::addAll}{Invariant}(intList);
+    #t8.{core::List::addAll}(iterableIntList){(core::Iterable<core::num>) → void};
+    #t8.{core::List::addAll}(intList){(core::Iterable<core::num>) → void};
   } =>#t8;
   self::expect(core::List::generate<core::num>(15, (core::int i) → core::int => i), list2);
 }
@@ -54,57 +54,57 @@
   core::List<core::int> list1 = block {
     final core::List<core::int> #t15 = <core::int>[];
     final core::Iterable<dynamic>? #t16 = dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t16.{core::Object::==}(null))
+    if(!(#t16 == null))
       for (final dynamic #t17 in #t16{core::Iterable<dynamic>}) {
         final core::int #t18 = #t17 as{TypeError,ForNonNullableByDefault} core::int;
-        #t15.{core::List::add}{Invariant}(#t18);
+        #t15.{core::List::add}(#t18){(core::int) → void};
       }
     final core::Iterable<dynamic>? #t19 = dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t19.{core::Object::==}(null))
+    if(!(#t19 == null))
       for (final dynamic #t20 in #t19{core::Iterable<dynamic>}) {
         final core::int #t21 = #t20 as{TypeError,ForNonNullableByDefault} core::int;
-        #t15.{core::List::add}{Invariant}(#t21);
+        #t15.{core::List::add}(#t21){(core::int) → void};
       }
     final core::Iterable<dynamic>? #t22 = dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t22.{core::Object::==}(null))
+    if(!(#t22 == null))
       for (final dynamic #t23 in #t22{core::Iterable<dynamic>}) {
         final core::int #t24 = #t23 as{TypeError,ForNonNullableByDefault} core::int;
-        #t15.{core::List::add}{Invariant}(#t24);
+        #t15.{core::List::add}(#t24){(core::int) → void};
       }
     final core::Iterable<core::int>? #t25 = iterableIntList;
-    if(!#t25.{core::Object::==}(null))
-      #t15.{core::List::addAll}{Invariant}(#t25{core::Iterable<core::int>});
+    if(!(#t25 == null))
+      #t15.{core::List::addAll}(#t25{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     final core::Iterable<core::int>? #t26 = intList;
-    if(!#t26.{core::Object::==}(null))
-      #t15.{core::List::addAll}{Invariant}(#t26{core::Iterable<core::int>});
+    if(!(#t26 == null))
+      #t15.{core::List::addAll}(#t26{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t15;
   self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i), list1);
   core::List<core::num> list2 = block {
     final core::List<core::num> #t27 = <core::num>[];
     final core::Iterable<dynamic>? #t28 = dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t28.{core::Object::==}(null))
+    if(!(#t28 == null))
       for (final dynamic #t29 in #t28{core::Iterable<dynamic>}) {
         final core::num #t30 = #t29 as{TypeError,ForNonNullableByDefault} core::num;
-        #t27.{core::List::add}{Invariant}(#t30);
+        #t27.{core::List::add}(#t30){(core::num) → void};
       }
     final core::Iterable<dynamic>? #t31 = dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t31.{core::Object::==}(null))
+    if(!(#t31 == null))
       for (final dynamic #t32 in #t31{core::Iterable<dynamic>}) {
         final core::num #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::num;
-        #t27.{core::List::add}{Invariant}(#t33);
+        #t27.{core::List::add}(#t33){(core::num) → void};
       }
     final core::Iterable<dynamic>? #t34 = dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t34.{core::Object::==}(null))
+    if(!(#t34 == null))
       for (final dynamic #t35 in #t34{core::Iterable<dynamic>}) {
         final core::num #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::num;
-        #t27.{core::List::add}{Invariant}(#t36);
+        #t27.{core::List::add}(#t36){(core::num) → void};
       }
     final core::Iterable<core::num>? #t37 = iterableIntList;
-    if(!#t37.{core::Object::==}(null))
-      #t27.{core::List::addAll}{Invariant}(#t37{core::Iterable<core::num>});
+    if(!(#t37 == null))
+      #t27.{core::List::addAll}(#t37{core::Iterable<core::num>}){(core::Iterable<core::num>) → void};
     final core::Iterable<core::num>? #t38 = intList;
-    if(!#t38.{core::Object::==}(null))
-      #t27.{core::List::addAll}{Invariant}(#t38{core::Iterable<core::num>});
+    if(!(#t38 == null))
+      #t27.{core::List::addAll}(#t38{core::Iterable<core::num>}){(core::Iterable<core::num>) → void};
   } =>#t27;
   self::expect(core::List::generate<core::num>(15, (core::int i) → core::int => i), list2);
 }
@@ -113,12 +113,12 @@
   self::useAddAllNullable();
 }
 static method expect(core::List<dynamic> list1, core::List<dynamic> list2) → void {
-  if(!list1.{core::List::length}.{core::num::==}(list2.{core::List::length})) {
-    throw "Unexpected length. Expected ${list1.{core::List::length}}, actual ${list2.{core::List::length}}.";
+  if(!(list1.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} list2.{core::List::length}{core::int})) {
+    throw "Unexpected length. Expected ${list1.{core::List::length}{core::int}}, actual ${list2.{core::List::length}{core::int}}.";
   }
-  for (core::int i = 0; i.{core::num::<}(list1.{core::List::length}); i = i.{core::num::+}(1)) {
-    if(!list1.{core::List::[]}(i).{core::Object::==}(list2.{core::List::[]}(i))) {
-      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i)}, actual ${list2.{core::List::[]}(i)}.";
+  for (core::int i = 0; i.{core::num::<}(list1.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(!(list1.{core::List::[]}(i){(core::int) → dynamic} =={core::Object::==}{(core::Object) → core::bool} list2.{core::List::[]}(i){(core::int) → dynamic})) {
+      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i){(core::int) → dynamic}}, actual ${list2.{core::List::[]}(i){(core::int) → dynamic}}.";
     }
   }
 }
diff --git a/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.transformed.expect
index e94bf35..a21b866 100644
--- a/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
-          #t1.{core::List::add}{Invariant}(#t3);
+          #t1.{core::List::add}(#t3){(core::int) → void};
         }
       }
     }
@@ -26,7 +26,7 @@
         final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t5 = #t4 as{TypeError,ForNonNullableByDefault} core::int;
-          #t1.{core::List::add}{Invariant}(#t5);
+          #t1.{core::List::add}(#t5){(core::int) → void};
         }
       }
     }
@@ -36,12 +36,12 @@
         final dynamic #t6 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t7 = #t6 as{TypeError,ForNonNullableByDefault} core::int;
-          #t1.{core::List::add}{Invariant}(#t7);
+          #t1.{core::List::add}(#t7){(core::int) → void};
         }
       }
     }
-    #t1.{core::List::addAll}{Invariant}(iterableIntList);
-    #t1.{core::List::addAll}{Invariant}(intList);
+    #t1.{core::List::addAll}(iterableIntList){(core::Iterable<core::int>) → void};
+    #t1.{core::List::addAll}(intList){(core::Iterable<core::int>) → void};
   } =>#t1;
   self::expect(core::_GrowableList::generate<core::int>(15, (core::int i) → core::int => i), list1);
   core::List<core::num> list2 = block {
@@ -52,7 +52,7 @@
         final dynamic #t9 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::num;
-          #t8.{core::List::add}{Invariant}(#t10);
+          #t8.{core::List::add}(#t10){(core::num) → void};
         }
       }
     }
@@ -62,7 +62,7 @@
         final dynamic #t11 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num #t12 = #t11 as{TypeError,ForNonNullableByDefault} core::num;
-          #t8.{core::List::add}{Invariant}(#t12);
+          #t8.{core::List::add}(#t12){(core::num) → void};
         }
       }
     }
@@ -72,12 +72,12 @@
         final dynamic #t13 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num #t14 = #t13 as{TypeError,ForNonNullableByDefault} core::num;
-          #t8.{core::List::add}{Invariant}(#t14);
+          #t8.{core::List::add}(#t14){(core::num) → void};
         }
       }
     }
-    #t8.{core::List::addAll}{Invariant}(iterableIntList);
-    #t8.{core::List::addAll}{Invariant}(intList);
+    #t8.{core::List::addAll}(iterableIntList){(core::Iterable<core::num>) → void};
+    #t8.{core::List::addAll}(intList){(core::Iterable<core::num>) → void};
   } =>#t8;
   self::expect(core::_GrowableList::generate<core::num>(15, (core::int i) → core::int => i), list2);
 }
@@ -90,87 +90,87 @@
   core::List<core::int> list1 = block {
     final core::List<core::int> #t15 = core::_GrowableList::•<core::int>(0);
     final core::Iterable<dynamic>? #t16 = dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t16.{core::Object::==}(null)) {
+    if(!(#t16 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t16{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t17 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t18 = #t17 as{TypeError,ForNonNullableByDefault} core::int;
-          #t15.{core::List::add}{Invariant}(#t18);
+          #t15.{core::List::add}(#t18){(core::int) → void};
         }
       }
     }
     final core::Iterable<dynamic>? #t19 = dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t19.{core::Object::==}(null)) {
+    if(!(#t19 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t19{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t20 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t21 = #t20 as{TypeError,ForNonNullableByDefault} core::int;
-          #t15.{core::List::add}{Invariant}(#t21);
+          #t15.{core::List::add}(#t21){(core::int) → void};
         }
       }
     }
     final core::Iterable<dynamic>? #t22 = dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t22.{core::Object::==}(null)) {
+    if(!(#t22 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t22{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t23 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t24 = #t23 as{TypeError,ForNonNullableByDefault} core::int;
-          #t15.{core::List::add}{Invariant}(#t24);
+          #t15.{core::List::add}(#t24){(core::int) → void};
         }
       }
     }
     final core::Iterable<core::int>? #t25 = iterableIntList;
-    if(!#t25.{core::Object::==}(null))
-      #t15.{core::List::addAll}{Invariant}(#t25{core::Iterable<core::int>});
+    if(!(#t25 == null))
+      #t15.{core::List::addAll}(#t25{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     final core::Iterable<core::int>? #t26 = intList;
-    if(!#t26.{core::Object::==}(null))
-      #t15.{core::List::addAll}{Invariant}(#t26{core::Iterable<core::int>});
+    if(!(#t26 == null))
+      #t15.{core::List::addAll}(#t26{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t15;
   self::expect(core::_GrowableList::generate<core::int>(15, (core::int i) → core::int => i), list1);
   core::List<core::num> list2 = block {
     final core::List<core::num> #t27 = core::_GrowableList::•<core::num>(0);
     final core::Iterable<dynamic>? #t28 = dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t28.{core::Object::==}(null)) {
+    if(!(#t28 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t28{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t29 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num #t30 = #t29 as{TypeError,ForNonNullableByDefault} core::num;
-          #t27.{core::List::add}{Invariant}(#t30);
+          #t27.{core::List::add}(#t30){(core::num) → void};
         }
       }
     }
     final core::Iterable<dynamic>? #t31 = dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t31.{core::Object::==}(null)) {
+    if(!(#t31 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t31{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t32 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::num;
-          #t27.{core::List::add}{Invariant}(#t33);
+          #t27.{core::List::add}(#t33){(core::num) → void};
         }
       }
     }
     final core::Iterable<dynamic>? #t34 = dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t34.{core::Object::==}(null)) {
+    if(!(#t34 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t34{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::num;
-          #t27.{core::List::add}{Invariant}(#t36);
+          #t27.{core::List::add}(#t36){(core::num) → void};
         }
       }
     }
     final core::Iterable<core::num>? #t37 = iterableIntList;
-    if(!#t37.{core::Object::==}(null))
-      #t27.{core::List::addAll}{Invariant}(#t37{core::Iterable<core::num>});
+    if(!(#t37 == null))
+      #t27.{core::List::addAll}(#t37{core::Iterable<core::num>}){(core::Iterable<core::num>) → void};
     final core::Iterable<core::num>? #t38 = intList;
-    if(!#t38.{core::Object::==}(null))
-      #t27.{core::List::addAll}{Invariant}(#t38{core::Iterable<core::num>});
+    if(!(#t38 == null))
+      #t27.{core::List::addAll}(#t38{core::Iterable<core::num>}){(core::Iterable<core::num>) → void};
   } =>#t27;
   self::expect(core::_GrowableList::generate<core::num>(15, (core::int i) → core::int => i), list2);
 }
@@ -179,12 +179,12 @@
   self::useAddAllNullable();
 }
 static method expect(core::List<dynamic> list1, core::List<dynamic> list2) → void {
-  if(!list1.{core::List::length}.{core::num::==}(list2.{core::List::length})) {
-    throw "Unexpected length. Expected ${list1.{core::List::length}}, actual ${list2.{core::List::length}}.";
+  if(!(list1.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} list2.{core::List::length}{core::int})) {
+    throw "Unexpected length. Expected ${list1.{core::List::length}{core::int}}, actual ${list2.{core::List::length}{core::int}}.";
   }
-  for (core::int i = 0; i.{core::num::<}(list1.{core::List::length}); i = i.{core::num::+}(1)) {
-    if(!list1.{core::List::[]}(i).{core::Object::==}(list2.{core::List::[]}(i))) {
-      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i)}, actual ${list2.{core::List::[]}(i)}.";
+  for (core::int i = 0; i.{core::num::<}(list1.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(!(list1.{core::List::[]}(i){(core::int) → dynamic} =={core::Object::==}{(core::Object) → core::bool} list2.{core::List::[]}(i){(core::int) → dynamic})) {
+      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i){(core::int) → dynamic}}, actual ${list2.{core::List::[]}(i){(core::int) → dynamic}}.";
     }
   }
 }
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect
index be5a180..b90b3064 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect
@@ -47,104 +47,104 @@
 static field core::Map<dynamic, dynamic>* map1 = block {
   final core::Map<dynamic, dynamic>* #t1 = <dynamic, dynamic>{};
   if(self::b)
-    #t1.{core::Map::[]=}{Invariant}(0, 1);
+    #t1.{core::Map::[]=}(0, 1){(dynamic, dynamic) →* void};
   else
-    for (final core::MapEntry<dynamic, dynamic>* #t2 in self::map0.{core::Map::entries})
-      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}, #t2.{core::MapEntry::value});
+    for (final core::MapEntry<dynamic, dynamic>* #t2 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t1.{core::Map::[]=}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
 } =>#t1;
 static field core::Map<dynamic, dynamic>* map2 = block {
   final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
   if(self::b)
-    for (final core::MapEntry<dynamic, dynamic>* #t4 in self::map0.{core::Map::entries})
-      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}, #t4.{core::MapEntry::value});
+    for (final core::MapEntry<dynamic, dynamic>* #t4 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t3.{core::Map::[]=}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
   else
-    #t3.{core::Map::[]=}{Invariant}(0, 1);
+    #t3.{core::Map::[]=}(0, 1){(dynamic, dynamic) →* void};
 } =>#t3;
 static field core::Map<dynamic, dynamic>* map3 = block {
   final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
   if(self::b)
-    for (final core::MapEntry<dynamic, dynamic>* #t6 in self::map0.{core::Map::entries})
-      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
+    for (final core::MapEntry<dynamic, dynamic>* #t6 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t5.{core::Map::[]=}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
   else
-    for (final core::MapEntry<dynamic, dynamic>* #t7 in self::map0.{core::Map::entries})
-      #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
+    for (final core::MapEntry<dynamic, dynamic>* #t7 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t5.{core::Map::[]=}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
 } =>#t5;
 static field core::Map<dynamic, core::int*>* map4 = block {
   final core::Map<dynamic, core::int*>* #t8 = <dynamic, core::int*>{};
   if(self::b)
-    #t8.{core::Map::[]=}{Invariant}(0, 1);
+    #t8.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
   else
     for (dynamic a in self::list)
-      #t8.{core::Map::[]=}{Invariant}(a, 1);
+      #t8.{core::Map::[]=}(a, 1){(dynamic, core::int*) →* void};
 } =>#t8;
 static field core::Map<dynamic, core::int*>* map5 = block {
   final core::Map<dynamic, core::int*>* #t9 = <dynamic, core::int*>{};
   if(self::b)
     for (dynamic a in self::list)
-      #t9.{core::Map::[]=}{Invariant}(a, 1);
+      #t9.{core::Map::[]=}(a, 1){(dynamic, core::int*) →* void};
   else
-    #t9.{core::Map::[]=}{Invariant}(0, 1);
+    #t9.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
 } =>#t9;
 static field core::Map<dynamic, core::int*>* map6 = block {
   final core::Map<dynamic, core::int*>* #t10 = <dynamic, core::int*>{};
   if(self::b)
-    #t10.{core::Map::[]=}{Invariant}(0, 1);
+    #t10.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
   else
     for (dynamic a in self::list)
-      for (final core::MapEntry<dynamic, core::int*>* #t11 in <dynamic, core::int*>{a: 1}.{core::Map::entries})
-        #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}, #t11.{core::MapEntry::value});
+      for (final core::MapEntry<dynamic, core::int*>* #t11 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+        #t10.{core::Map::[]=}(#t11.{core::MapEntry::key}{dynamic}, #t11.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
 } =>#t10;
 static field core::Map<dynamic, core::int*>* map7 = block {
   final core::Map<dynamic, core::int*>* #t12 = <dynamic, core::int*>{};
   if(self::b)
     for (dynamic a in self::list)
-      for (final core::MapEntry<dynamic, core::int*>* #t13 in <dynamic, core::int*>{a: 1}.{core::Map::entries})
-        #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}, #t13.{core::MapEntry::value});
+      for (final core::MapEntry<dynamic, core::int*>* #t13 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+        #t12.{core::Map::[]=}(#t13.{core::MapEntry::key}{dynamic}, #t13.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
   else
-    #t12.{core::Map::[]=}{Invariant}(0, 1);
+    #t12.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
 } =>#t12;
 static field core::Map<dynamic, core::int*>* map8 = block {
   final core::Map<dynamic, core::int*>* #t14 = <dynamic, core::int*>{};
   if(self::b)
-    #t14.{core::Map::[]=}{Invariant}(0, 1);
+    #t14.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
   else
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}); i = i.{core::num::+}(1))
-      #t14.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i), 1);
+    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t14.{core::Map::[]=}(self::list.{core::List::[]}(i){(core::int*) →* dynamic}, 1){(dynamic, core::int*) →* void};
 } =>#t14;
 static field core::Map<dynamic, core::int*>* map9 = block {
   final core::Map<dynamic, core::int*>* #t15 = <dynamic, core::int*>{};
   if(self::b)
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}); i = i.{core::num::+}(1))
-      #t15.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i), 1);
+    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t15.{core::Map::[]=}(self::list.{core::List::[]}(i){(core::int*) →* dynamic}, 1){(dynamic, core::int*) →* void};
   else
-    #t15.{core::Map::[]=}{Invariant}(0, 1);
+    #t15.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
 } =>#t15;
 static field core::Map<dynamic, core::int*>* map10 = block {
   final core::Map<dynamic, core::int*>* #t16 = <dynamic, core::int*>{};
   if(self::b)
-    #t16.{core::Map::[]=}{Invariant}(0, 1);
+    #t16.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
   else
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}); i = i.{core::num::+}(1))
-      for (final core::MapEntry<dynamic, core::int*>* #t17 in <dynamic, core::int*>{self::list.{core::List::[]}(i): 1}.{core::Map::entries})
-        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}, #t17.{core::MapEntry::value});
+    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<dynamic, core::int*>* #t17 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+        #t16.{core::Map::[]=}(#t17.{core::MapEntry::key}{dynamic}, #t17.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
 } =>#t16;
 static field core::Map<dynamic, core::int*>* map11 = block {
   final core::Map<dynamic, core::int*>* #t18 = <dynamic, core::int*>{};
   if(self::b)
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}); i = i.{core::num::+}(1))
-      for (final core::MapEntry<dynamic, core::int*>* #t19 in <dynamic, core::int*>{self::list.{core::List::[]}(i): 1}.{core::Map::entries})
-        #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}, #t19.{core::MapEntry::value});
+    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<dynamic, core::int*>* #t19 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+        #t18.{core::Map::[]=}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
   else
-    #t18.{core::Map::[]=}{Invariant}(0, 1);
+    #t18.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
 } =>#t18;
 static field core::Map<core::int*, core::int*>* map12 = block {
   final core::Map<core::int*, core::int*>* #t20 = <core::int*, core::int*>{};
   if(self::b)
-    #t20.{core::Map::[]=}{Invariant}(0, 1);
+    #t20.{core::Map::[]=}(0, 1){(core::int*, core::int*) →* void};
   else
     if(self::b)
-      for (final core::MapEntry<core::int*, core::int*>* #t21 in <core::int*, core::int*>{0: 1}.{core::Map::entries})
-        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
+      for (final core::MapEntry<core::int*, core::int*>* #t21 in <core::int*, core::int*>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
+        #t20.{core::Map::[]=}(#t21.{core::MapEntry::key}{core::int*}, #t21.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
 } =>#t20;
 static field core::Map<dynamic, Null>* error4 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 var error4 = {if (b) 0: 1 else for (var a in list) a};
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.transformed.expect
index 83028c4..dbfe4f8 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.transformed.expect
@@ -47,53 +47,53 @@
 static field core::Map<dynamic, dynamic>* map1 = block {
   final core::Map<dynamic, dynamic>* #t1 = <dynamic, dynamic>{};
   if(self::b)
-    #t1.{core::Map::[]=}{Invariant}(0, 1);
+    #t1.{core::Map::[]=}(0, 1){(dynamic, dynamic) →* void};
   else {
-    core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = self::map0.{core::Map::entries}.{core::Iterable::iterator};
+    core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final core::MapEntry<dynamic, dynamic>* #t2 = :sync-for-iterator.{core::Iterator::current};
-      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}, #t2.{core::MapEntry::value});
+      #t1.{core::Map::[]=}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
     }
   }
 } =>#t1;
 static field core::Map<dynamic, dynamic>* map2 = block {
   final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
   if(self::b) {
-    core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = self::map0.{core::Map::entries}.{core::Iterable::iterator};
+    core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final core::MapEntry<dynamic, dynamic>* #t4 = :sync-for-iterator.{core::Iterator::current};
-      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}, #t4.{core::MapEntry::value});
+      #t3.{core::Map::[]=}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
     }
   }
   else
-    #t3.{core::Map::[]=}{Invariant}(0, 1);
+    #t3.{core::Map::[]=}(0, 1){(dynamic, dynamic) →* void};
 } =>#t3;
 static field core::Map<dynamic, dynamic>* map3 = block {
   final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
   if(self::b) {
-    core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = self::map0.{core::Map::entries}.{core::Iterable::iterator};
+    core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final core::MapEntry<dynamic, dynamic>* #t6 = :sync-for-iterator.{core::Iterator::current};
-      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
+      #t5.{core::Map::[]=}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
     }
   }
   else {
-    core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = self::map0.{core::Map::entries}.{core::Iterable::iterator};
+    core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final core::MapEntry<dynamic, dynamic>* #t7 = :sync-for-iterator.{core::Iterator::current};
-      #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
+      #t5.{core::Map::[]=}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
     }
   }
 } =>#t5;
 static field core::Map<dynamic, core::int*>* map4 = block {
   final core::Map<dynamic, core::int*>* #t8 = <dynamic, core::int*>{};
   if(self::b)
-    #t8.{core::Map::[]=}{Invariant}(0, 1);
+    #t8.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
   else {
     core::Iterator<dynamic>* :sync-for-iterator = self::list.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       dynamic a = :sync-for-iterator.{core::Iterator::current};
-      #t8.{core::Map::[]=}{Invariant}(a, 1);
+      #t8.{core::Map::[]=}(a, 1){(dynamic, core::int*) →* void};
     }
   }
 } =>#t8;
@@ -103,25 +103,25 @@
     core::Iterator<dynamic>* :sync-for-iterator = self::list.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       dynamic a = :sync-for-iterator.{core::Iterator::current};
-      #t9.{core::Map::[]=}{Invariant}(a, 1);
+      #t9.{core::Map::[]=}(a, 1){(dynamic, core::int*) →* void};
     }
   }
   else
-    #t9.{core::Map::[]=}{Invariant}(0, 1);
+    #t9.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
 } =>#t9;
 static field core::Map<dynamic, core::int*>* map6 = block {
   final core::Map<dynamic, core::int*>* #t10 = <dynamic, core::int*>{};
   if(self::b)
-    #t10.{core::Map::[]=}{Invariant}(0, 1);
+    #t10.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
   else {
     core::Iterator<dynamic>* :sync-for-iterator = self::list.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       dynamic a = :sync-for-iterator.{core::Iterator::current};
       {
-        core::Iterator<core::MapEntry<dynamic, core::int*>>* :sync-for-iterator = <dynamic, core::int*>{a: 1}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<dynamic, core::int*>>* :sync-for-iterator = <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, core::int*>* #t11 = :sync-for-iterator.{core::Iterator::current};
-          #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}, #t11.{core::MapEntry::value});
+          #t10.{core::Map::[]=}(#t11.{core::MapEntry::key}{dynamic}, #t11.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
         }
       }
     }
@@ -134,69 +134,69 @@
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       dynamic a = :sync-for-iterator.{core::Iterator::current};
       {
-        core::Iterator<core::MapEntry<dynamic, core::int*>>* :sync-for-iterator = <dynamic, core::int*>{a: 1}.{core::Map::entries}.{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<dynamic, core::int*>>* :sync-for-iterator = <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>}.{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, core::int*>* #t13 = :sync-for-iterator.{core::Iterator::current};
-          #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}, #t13.{core::MapEntry::value});
+          #t12.{core::Map::[]=}(#t13.{core::MapEntry::key}{dynamic}, #t13.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
         }
       }
     }
   }
   else
-    #t12.{core::Map::[]=}{Invariant}(0, 1);
+    #t12.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
 } =>#t12;
 static field core::Map<dynamic, core::int*>* map8 = block {
   final core::Map<dynamic, core::int*>* #t14 = <dynamic, core::int*>{};
   if(self::b)
-    #t14.{core::Map::[]=}{Invariant}(0, 1);
+    #t14.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
   else
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}); i = i.{core::num::+}(1))
-      #t14.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i), 1);
+    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t14.{core::Map::[]=}(self::list.{core::List::[]}(i){(core::int*) →* dynamic}, 1){(dynamic, core::int*) →* void};
 } =>#t14;
 static field core::Map<dynamic, core::int*>* map9 = block {
   final core::Map<dynamic, core::int*>* #t15 = <dynamic, core::int*>{};
   if(self::b)
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}); i = i.{core::num::+}(1))
-      #t15.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i), 1);
+    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t15.{core::Map::[]=}(self::list.{core::List::[]}(i){(core::int*) →* dynamic}, 1){(dynamic, core::int*) →* void};
   else
-    #t15.{core::Map::[]=}{Invariant}(0, 1);
+    #t15.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
 } =>#t15;
 static field core::Map<dynamic, core::int*>* map10 = block {
   final core::Map<dynamic, core::int*>* #t16 = <dynamic, core::int*>{};
   if(self::b)
-    #t16.{core::Map::[]=}{Invariant}(0, 1);
+    #t16.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
   else
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}); i = i.{core::num::+}(1)) {
-      core::Iterator<core::MapEntry<dynamic, core::int*>>* :sync-for-iterator = <dynamic, core::int*>{self::list.{core::List::[]}(i): 1}.{core::Map::entries}.{core::Iterable::iterator};
+    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      core::Iterator<core::MapEntry<dynamic, core::int*>>* :sync-for-iterator = <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, core::int*>* #t17 = :sync-for-iterator.{core::Iterator::current};
-        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}, #t17.{core::MapEntry::value});
+        #t16.{core::Map::[]=}(#t17.{core::MapEntry::key}{dynamic}, #t17.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
       }
     }
 } =>#t16;
 static field core::Map<dynamic, core::int*>* map11 = block {
   final core::Map<dynamic, core::int*>* #t18 = <dynamic, core::int*>{};
   if(self::b)
-    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}); i = i.{core::num::+}(1)) {
-      core::Iterator<core::MapEntry<dynamic, core::int*>>* :sync-for-iterator = <dynamic, core::int*>{self::list.{core::List::[]}(i): 1}.{core::Map::entries}.{core::Iterable::iterator};
+    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      core::Iterator<core::MapEntry<dynamic, core::int*>>* :sync-for-iterator = <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, core::int*>* #t19 = :sync-for-iterator.{core::Iterator::current};
-        #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}, #t19.{core::MapEntry::value});
+        #t18.{core::Map::[]=}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
       }
     }
   else
-    #t18.{core::Map::[]=}{Invariant}(0, 1);
+    #t18.{core::Map::[]=}(0, 1){(dynamic, core::int*) →* void};
 } =>#t18;
 static field core::Map<core::int*, core::int*>* map12 = block {
   final core::Map<core::int*, core::int*>* #t20 = <core::int*, core::int*>{};
   if(self::b)
-    #t20.{core::Map::[]=}{Invariant}(0, 1);
+    #t20.{core::Map::[]=}(0, 1){(core::int*, core::int*) →* void};
   else
     if(self::b) {
-      core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{0: 1}.{core::Map::entries}.{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::int*, core::int*>* #t21 = :sync-for-iterator.{core::Iterator::current};
-        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
+        #t20.{core::Map::[]=}(#t21.{core::MapEntry::key}{core::int*}, #t21.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
       }
     }
 } =>#t20;
diff --git a/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.expect b/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.expect
index f31828e..d99b951 100644
--- a/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.expect
@@ -7,190 +7,190 @@
 static method useAddAll() → void {
   dynamic dynamicSet1 = block {
     final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
-    #t1.{core::Set::add}{Invariant}(0);
-    #t1.{core::Set::add}{Invariant}(1);
-    #t1.{core::Set::add}{Invariant}(2);
+    #t1.{core::Set::add}(0){(core::int*) →* core::bool*};
+    #t1.{core::Set::add}(1){(core::int*) →* core::bool*};
+    #t1.{core::Set::add}(2){(core::int*) →* core::bool*};
   } =>#t1;
   dynamic dynamicSet2 = block {
     final core::Set<core::num*>* #t2 = col::LinkedHashSet::•<core::num*>();
-    #t2.{core::Set::add}{Invariant}(3);
-    #t2.{core::Set::add}{Invariant}(4);
-    #t2.{core::Set::add}{Invariant}(5);
+    #t2.{core::Set::add}(3){(core::num*) →* core::bool*};
+    #t2.{core::Set::add}(4){(core::num*) →* core::bool*};
+    #t2.{core::Set::add}(5){(core::num*) →* core::bool*};
   } =>#t2;
   core::Iterable<core::int*>* iterableIntSet = block {
     final core::Set<core::int*>* #t3 = col::LinkedHashSet::•<core::int*>();
-    #t3.{core::Set::add}{Invariant}(6);
-    #t3.{core::Set::add}{Invariant}(7);
-    #t3.{core::Set::add}{Invariant}(8);
+    #t3.{core::Set::add}(6){(core::int*) →* core::bool*};
+    #t3.{core::Set::add}(7){(core::int*) →* core::bool*};
+    #t3.{core::Set::add}(8){(core::int*) →* core::bool*};
   } =>#t3;
   core::Iterable<core::num*>* iterableNumSet1 = block {
     final core::Set<core::int*>* #t4 = col::LinkedHashSet::•<core::int*>();
-    #t4.{core::Set::add}{Invariant}(9);
-    #t4.{core::Set::add}{Invariant}(10);
-    #t4.{core::Set::add}{Invariant}(11);
+    #t4.{core::Set::add}(9){(core::int*) →* core::bool*};
+    #t4.{core::Set::add}(10){(core::int*) →* core::bool*};
+    #t4.{core::Set::add}(11){(core::int*) →* core::bool*};
   } =>#t4;
   core::Iterable<core::num*>* iterableNumSet2 = block {
     final core::Set<core::num*>* #t5 = col::LinkedHashSet::•<core::num*>();
-    #t5.{core::Set::add}{Invariant}(12);
-    #t5.{core::Set::add}{Invariant}(13);
-    #t5.{core::Set::add}{Invariant}(14);
+    #t5.{core::Set::add}(12){(core::num*) →* core::bool*};
+    #t5.{core::Set::add}(13){(core::num*) →* core::bool*};
+    #t5.{core::Set::add}(14){(core::num*) →* core::bool*};
   } =>#t5;
   core::Set<core::int*>* intSet = block {
     final core::Set<core::int*>* #t6 = col::LinkedHashSet::•<core::int*>();
-    #t6.{core::Set::add}{Invariant}(15);
-    #t6.{core::Set::add}{Invariant}(16);
-    #t6.{core::Set::add}{Invariant}(17);
+    #t6.{core::Set::add}(15){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}(16){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}(17){(core::int*) →* core::bool*};
   } =>#t6;
   core::Set<core::num*>* numSet1 = block {
     final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
-    #t7.{core::Set::add}{Invariant}(18);
-    #t7.{core::Set::add}{Invariant}(19);
-    #t7.{core::Set::add}{Invariant}(20);
+    #t7.{core::Set::add}(18){(core::int*) →* core::bool*};
+    #t7.{core::Set::add}(19){(core::int*) →* core::bool*};
+    #t7.{core::Set::add}(20){(core::int*) →* core::bool*};
   } =>#t7;
   core::Set<core::num*>* numSet2 = block {
     final core::Set<core::num*>* #t8 = col::LinkedHashSet::•<core::num*>();
-    #t8.{core::Set::add}{Invariant}(21);
-    #t8.{core::Set::add}{Invariant}(22);
-    #t8.{core::Set::add}{Invariant}(23);
+    #t8.{core::Set::add}(21){(core::num*) →* core::bool*};
+    #t8.{core::Set::add}(22){(core::num*) →* core::bool*};
+    #t8.{core::Set::add}(23){(core::num*) →* core::bool*};
   } =>#t8;
   core::Set<core::int*>* set1 = block {
     final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
     for (final dynamic #t10 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
-      #t9.{core::Set::add}{Invariant}(#t11);
+      #t9.{core::Set::add}(#t11){(core::int*) →* core::bool*};
     }
     for (final dynamic #t12 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t13 = #t12 as{TypeError} core::int*;
-      #t9.{core::Set::add}{Invariant}(#t13);
+      #t9.{core::Set::add}(#t13){(core::int*) →* core::bool*};
     }
-    #t9.{core::Set::addAll}{Invariant}(iterableIntSet);
+    #t9.{core::Set::addAll}(iterableIntSet){(core::Iterable<core::int*>*) →* void};
     for (final dynamic #t14 in iterableNumSet1) {
       final core::int* #t15 = #t14 as{TypeError} core::int*;
-      #t9.{core::Set::add}{Invariant}(#t15);
+      #t9.{core::Set::add}(#t15){(core::int*) →* core::bool*};
     }
     for (final dynamic #t16 in iterableNumSet2) {
       final core::int* #t17 = #t16 as{TypeError} core::int*;
-      #t9.{core::Set::add}{Invariant}(#t17);
+      #t9.{core::Set::add}(#t17){(core::int*) →* core::bool*};
     }
-    #t9.{core::Set::addAll}{Invariant}(intSet);
+    #t9.{core::Set::addAll}(intSet){(core::Iterable<core::int*>*) →* void};
     for (final dynamic #t18 in numSet1) {
       final core::int* #t19 = #t18 as{TypeError} core::int*;
-      #t9.{core::Set::add}{Invariant}(#t19);
+      #t9.{core::Set::add}(#t19){(core::int*) →* core::bool*};
     }
     for (final dynamic #t20 in numSet2) {
       final core::int* #t21 = #t20 as{TypeError} core::int*;
-      #t9.{core::Set::add}{Invariant}(#t21);
+      #t9.{core::Set::add}(#t21){(core::int*) →* core::bool*};
     }
   } =>#t9;
-  self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(), set1);
+  self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::int*>*}, set1);
   core::Set<core::num*>* set2 = block {
     final core::Set<core::num*>* #t22 = col::LinkedHashSet::•<core::num*>();
     for (final dynamic #t23 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::num* #t24 = #t23 as{TypeError} core::num*;
-      #t22.{core::Set::add}{Invariant}(#t24);
+      #t22.{core::Set::add}(#t24){(core::num*) →* core::bool*};
     }
     for (final dynamic #t25 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::num* #t26 = #t25 as{TypeError} core::num*;
-      #t22.{core::Set::add}{Invariant}(#t26);
+      #t22.{core::Set::add}(#t26){(core::num*) →* core::bool*};
     }
-    #t22.{core::Set::addAll}{Invariant}(iterableIntSet);
-    #t22.{core::Set::addAll}{Invariant}(iterableNumSet1);
-    #t22.{core::Set::addAll}{Invariant}(iterableNumSet2);
-    #t22.{core::Set::addAll}{Invariant}(intSet);
-    #t22.{core::Set::addAll}{Invariant}(numSet1);
-    #t22.{core::Set::addAll}{Invariant}(numSet2);
+    #t22.{core::Set::addAll}(iterableIntSet){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}(iterableNumSet1){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}(iterableNumSet2){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}(intSet){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}(numSet1){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}(numSet2){(core::Iterable<core::num*>*) →* void};
   } =>#t22;
-  self::expect(core::List::generate<core::num*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(), set2);
+  self::expect(core::List::generate<core::num*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::num*>*}, set2);
   core::Set<core::int*>* set3 = block {
     final core::Set<core::int*>* #t27 = col::LinkedHashSet::•<core::int*>();
     final core::Iterable<dynamic>* #t28 = dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t28.{core::Object::==}(null))
+    if(!(#t28 == null))
       for (final dynamic #t29 in #t28) {
         final core::int* #t30 = #t29 as{TypeError} core::int*;
-        #t27.{core::Set::add}{Invariant}(#t30);
+        #t27.{core::Set::add}(#t30){(core::int*) →* core::bool*};
       }
     final core::Iterable<dynamic>* #t31 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t31.{core::Object::==}(null))
+    if(!(#t31 == null))
       for (final dynamic #t32 in #t31) {
         final core::int* #t33 = #t32 as{TypeError} core::int*;
-        #t27.{core::Set::add}{Invariant}(#t33);
+        #t27.{core::Set::add}(#t33){(core::int*) →* core::bool*};
       }
     final core::Iterable<core::int*>* #t34 = iterableIntSet;
-    if(!#t34.{core::Object::==}(null))
-      #t27.{core::Set::addAll}{Invariant}(#t34);
+    if(!(#t34 == null))
+      #t27.{core::Set::addAll}(#t34){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t35 = iterableNumSet1;
-    if(!#t35.{core::Object::==}(null))
+    if(!(#t35 == null))
       for (final dynamic #t36 in #t35) {
         final core::int* #t37 = #t36 as{TypeError} core::int*;
-        #t27.{core::Set::add}{Invariant}(#t37);
+        #t27.{core::Set::add}(#t37){(core::int*) →* core::bool*};
       }
     final core::Iterable<dynamic>* #t38 = iterableNumSet2;
-    if(!#t38.{core::Object::==}(null))
+    if(!(#t38 == null))
       for (final dynamic #t39 in #t38) {
         final core::int* #t40 = #t39 as{TypeError} core::int*;
-        #t27.{core::Set::add}{Invariant}(#t40);
+        #t27.{core::Set::add}(#t40){(core::int*) →* core::bool*};
       }
     final core::Iterable<core::int*>* #t41 = intSet;
-    if(!#t41.{core::Object::==}(null))
-      #t27.{core::Set::addAll}{Invariant}(#t41);
+    if(!(#t41 == null))
+      #t27.{core::Set::addAll}(#t41){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t42 = numSet1;
-    if(!#t42.{core::Object::==}(null))
+    if(!(#t42 == null))
       for (final dynamic #t43 in #t42) {
         final core::int* #t44 = #t43 as{TypeError} core::int*;
-        #t27.{core::Set::add}{Invariant}(#t44);
+        #t27.{core::Set::add}(#t44){(core::int*) →* core::bool*};
       }
     final core::Iterable<dynamic>* #t45 = numSet2;
-    if(!#t45.{core::Object::==}(null))
+    if(!(#t45 == null))
       for (final dynamic #t46 in #t45) {
         final core::int* #t47 = #t46 as{TypeError} core::int*;
-        #t27.{core::Set::add}{Invariant}(#t47);
+        #t27.{core::Set::add}(#t47){(core::int*) →* core::bool*};
       }
   } =>#t27;
-  self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(), set3);
+  self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::int*>*}, set3);
   core::Set<core::num*>* set4 = block {
     final core::Set<core::num*>* #t48 = col::LinkedHashSet::•<core::num*>();
     final core::Iterable<dynamic>* #t49 = dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t49.{core::Object::==}(null))
+    if(!(#t49 == null))
       for (final dynamic #t50 in #t49) {
         final core::num* #t51 = #t50 as{TypeError} core::num*;
-        #t48.{core::Set::add}{Invariant}(#t51);
+        #t48.{core::Set::add}(#t51){(core::num*) →* core::bool*};
       }
     final core::Iterable<dynamic>* #t52 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t52.{core::Object::==}(null))
+    if(!(#t52 == null))
       for (final dynamic #t53 in #t52) {
         final core::num* #t54 = #t53 as{TypeError} core::num*;
-        #t48.{core::Set::add}{Invariant}(#t54);
+        #t48.{core::Set::add}(#t54){(core::num*) →* core::bool*};
       }
     final core::Iterable<core::num*>* #t55 = iterableIntSet;
-    if(!#t55.{core::Object::==}(null))
-      #t48.{core::Set::addAll}{Invariant}(#t55);
+    if(!(#t55 == null))
+      #t48.{core::Set::addAll}(#t55){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t56 = iterableNumSet1;
-    if(!#t56.{core::Object::==}(null))
-      #t48.{core::Set::addAll}{Invariant}(#t56);
+    if(!(#t56 == null))
+      #t48.{core::Set::addAll}(#t56){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t57 = iterableNumSet2;
-    if(!#t57.{core::Object::==}(null))
-      #t48.{core::Set::addAll}{Invariant}(#t57);
+    if(!(#t57 == null))
+      #t48.{core::Set::addAll}(#t57){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t58 = intSet;
-    if(!#t58.{core::Object::==}(null))
-      #t48.{core::Set::addAll}{Invariant}(#t58);
+    if(!(#t58 == null))
+      #t48.{core::Set::addAll}(#t58){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t59 = numSet1;
-    if(!#t59.{core::Object::==}(null))
-      #t48.{core::Set::addAll}{Invariant}(#t59);
+    if(!(#t59 == null))
+      #t48.{core::Set::addAll}(#t59){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t60 = numSet2;
-    if(!#t60.{core::Object::==}(null))
-      #t48.{core::Set::addAll}{Invariant}(#t60);
+    if(!(#t60 == null))
+      #t48.{core::Set::addAll}(#t60){(core::Iterable<core::num*>*) →* void};
   } =>#t48;
-  self::expect(core::List::generate<core::num*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(), set4);
+  self::expect(core::List::generate<core::num*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::num*>*}, set4);
 }
 static method main() → dynamic {
   self::useAddAll();
 }
 static method expect(core::Set<dynamic>* set1, core::Set<dynamic>* set2) → void {
-  if(!set1.{_in::EfficientLengthIterable::length}.{core::num::==}(set2.{_in::EfficientLengthIterable::length})) {
-    throw "Unexpected length. Expected ${set1.{_in::EfficientLengthIterable::length}}, actual ${set2.{_in::EfficientLengthIterable::length}}.";
+  if(!(set1.{_in::EfficientLengthIterable::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} set2.{_in::EfficientLengthIterable::length}{core::int*})) {
+    throw "Unexpected length. Expected ${set1.{_in::EfficientLengthIterable::length}{core::int*}}, actual ${set2.{_in::EfficientLengthIterable::length}{core::int*}}.";
   }
   for (dynamic element in set1) {
-    if(!set2.{core::Set::contains}(element)) {
+    if(!set2.{core::Set::contains}(element){(core::Object*) →* core::bool*}) {
       throw "Element ${element} not found. Expected ${set1}, actual ${set2}.";
     }
   }
diff --git a/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.transformed.expect
index b8b398a..9049e14 100644
--- a/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.transformed.expect
@@ -7,51 +7,51 @@
 static method useAddAll() → void {
   dynamic dynamicSet1 = block {
     final core::Set<core::int*>* #t1 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t1.{core::Set::add}{Invariant}(0);
-    #t1.{core::Set::add}{Invariant}(1);
-    #t1.{core::Set::add}{Invariant}(2);
+    #t1.{core::Set::add}(0){(core::int*) →* core::bool*};
+    #t1.{core::Set::add}(1){(core::int*) →* core::bool*};
+    #t1.{core::Set::add}(2){(core::int*) →* core::bool*};
   } =>#t1;
   dynamic dynamicSet2 = block {
     final core::Set<core::num*>* #t2 = new col::_CompactLinkedHashSet::•<core::num*>();
-    #t2.{core::Set::add}{Invariant}(3);
-    #t2.{core::Set::add}{Invariant}(4);
-    #t2.{core::Set::add}{Invariant}(5);
+    #t2.{core::Set::add}(3){(core::num*) →* core::bool*};
+    #t2.{core::Set::add}(4){(core::num*) →* core::bool*};
+    #t2.{core::Set::add}(5){(core::num*) →* core::bool*};
   } =>#t2;
   core::Iterable<core::int*>* iterableIntSet = block {
     final core::Set<core::int*>* #t3 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t3.{core::Set::add}{Invariant}(6);
-    #t3.{core::Set::add}{Invariant}(7);
-    #t3.{core::Set::add}{Invariant}(8);
+    #t3.{core::Set::add}(6){(core::int*) →* core::bool*};
+    #t3.{core::Set::add}(7){(core::int*) →* core::bool*};
+    #t3.{core::Set::add}(8){(core::int*) →* core::bool*};
   } =>#t3;
   core::Iterable<core::num*>* iterableNumSet1 = block {
     final core::Set<core::int*>* #t4 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t4.{core::Set::add}{Invariant}(9);
-    #t4.{core::Set::add}{Invariant}(10);
-    #t4.{core::Set::add}{Invariant}(11);
+    #t4.{core::Set::add}(9){(core::int*) →* core::bool*};
+    #t4.{core::Set::add}(10){(core::int*) →* core::bool*};
+    #t4.{core::Set::add}(11){(core::int*) →* core::bool*};
   } =>#t4;
   core::Iterable<core::num*>* iterableNumSet2 = block {
     final core::Set<core::num*>* #t5 = new col::_CompactLinkedHashSet::•<core::num*>();
-    #t5.{core::Set::add}{Invariant}(12);
-    #t5.{core::Set::add}{Invariant}(13);
-    #t5.{core::Set::add}{Invariant}(14);
+    #t5.{core::Set::add}(12){(core::num*) →* core::bool*};
+    #t5.{core::Set::add}(13){(core::num*) →* core::bool*};
+    #t5.{core::Set::add}(14){(core::num*) →* core::bool*};
   } =>#t5;
   core::Set<core::int*>* intSet = block {
     final core::Set<core::int*>* #t6 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t6.{core::Set::add}{Invariant}(15);
-    #t6.{core::Set::add}{Invariant}(16);
-    #t6.{core::Set::add}{Invariant}(17);
+    #t6.{core::Set::add}(15){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}(16){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}(17){(core::int*) →* core::bool*};
   } =>#t6;
   core::Set<core::num*>* numSet1 = block {
     final core::Set<core::int*>* #t7 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t7.{core::Set::add}{Invariant}(18);
-    #t7.{core::Set::add}{Invariant}(19);
-    #t7.{core::Set::add}{Invariant}(20);
+    #t7.{core::Set::add}(18){(core::int*) →* core::bool*};
+    #t7.{core::Set::add}(19){(core::int*) →* core::bool*};
+    #t7.{core::Set::add}(20){(core::int*) →* core::bool*};
   } =>#t7;
   core::Set<core::num*>* numSet2 = block {
     final core::Set<core::num*>* #t8 = new col::_CompactLinkedHashSet::•<core::num*>();
-    #t8.{core::Set::add}{Invariant}(21);
-    #t8.{core::Set::add}{Invariant}(22);
-    #t8.{core::Set::add}{Invariant}(23);
+    #t8.{core::Set::add}(21){(core::num*) →* core::bool*};
+    #t8.{core::Set::add}(22){(core::num*) →* core::bool*};
+    #t8.{core::Set::add}(23){(core::num*) →* core::bool*};
   } =>#t8;
   core::Set<core::int*>* set1 = block {
     final core::Set<core::int*>* #t9 = new col::_CompactLinkedHashSet::•<core::int*>();
@@ -61,7 +61,7 @@
         final dynamic #t10 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t11 = #t10 as{TypeError} core::int*;
-          #t9.{core::Set::add}{Invariant}(#t11);
+          #t9.{core::Set::add}(#t11){(core::int*) →* core::bool*};
         }
       }
     }
@@ -71,18 +71,18 @@
         final dynamic #t12 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t13 = #t12 as{TypeError} core::int*;
-          #t9.{core::Set::add}{Invariant}(#t13);
+          #t9.{core::Set::add}(#t13){(core::int*) →* core::bool*};
         }
       }
     }
-    #t9.{core::Set::addAll}{Invariant}(iterableIntSet);
+    #t9.{core::Set::addAll}(iterableIntSet){(core::Iterable<core::int*>*) →* void};
     {
       core::Iterator<core::num*>* :sync-for-iterator = iterableNumSet1.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t14 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t15 = #t14 as{TypeError} core::int*;
-          #t9.{core::Set::add}{Invariant}(#t15);
+          #t9.{core::Set::add}(#t15){(core::int*) →* core::bool*};
         }
       }
     }
@@ -92,18 +92,18 @@
         final dynamic #t16 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t17 = #t16 as{TypeError} core::int*;
-          #t9.{core::Set::add}{Invariant}(#t17);
+          #t9.{core::Set::add}(#t17){(core::int*) →* core::bool*};
         }
       }
     }
-    #t9.{core::Set::addAll}{Invariant}(intSet);
+    #t9.{core::Set::addAll}(intSet){(core::Iterable<core::int*>*) →* void};
     {
       core::Iterator<core::num*>* :sync-for-iterator = numSet1.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t18 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t19 = #t18 as{TypeError} core::int*;
-          #t9.{core::Set::add}{Invariant}(#t19);
+          #t9.{core::Set::add}(#t19){(core::int*) →* core::bool*};
         }
       }
     }
@@ -113,12 +113,12 @@
         final dynamic #t20 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t21 = #t20 as{TypeError} core::int*;
-          #t9.{core::Set::add}{Invariant}(#t21);
+          #t9.{core::Set::add}(#t21){(core::int*) →* core::bool*};
         }
       }
     }
   } =>#t9;
-  self::expect(core::_GrowableList::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(), set1);
+  self::expect(core::_GrowableList::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::int*>*}, set1);
   core::Set<core::num*>* set2 = block {
     final core::Set<core::num*>* #t22 = new col::_CompactLinkedHashSet::•<core::num*>();
     {
@@ -127,7 +127,7 @@
         final dynamic #t23 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num* #t24 = #t23 as{TypeError} core::num*;
-          #t22.{core::Set::add}{Invariant}(#t24);
+          #t22.{core::Set::add}(#t24){(core::num*) →* core::bool*};
         }
       }
     }
@@ -137,152 +137,152 @@
         final dynamic #t25 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num* #t26 = #t25 as{TypeError} core::num*;
-          #t22.{core::Set::add}{Invariant}(#t26);
+          #t22.{core::Set::add}(#t26){(core::num*) →* core::bool*};
         }
       }
     }
-    #t22.{core::Set::addAll}{Invariant}(iterableIntSet);
-    #t22.{core::Set::addAll}{Invariant}(iterableNumSet1);
-    #t22.{core::Set::addAll}{Invariant}(iterableNumSet2);
-    #t22.{core::Set::addAll}{Invariant}(intSet);
-    #t22.{core::Set::addAll}{Invariant}(numSet1);
-    #t22.{core::Set::addAll}{Invariant}(numSet2);
+    #t22.{core::Set::addAll}(iterableIntSet){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}(iterableNumSet1){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}(iterableNumSet2){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}(intSet){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}(numSet1){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}(numSet2){(core::Iterable<core::num*>*) →* void};
   } =>#t22;
-  self::expect(core::_GrowableList::generate<core::num*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(), set2);
+  self::expect(core::_GrowableList::generate<core::num*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::num*>*}, set2);
   core::Set<core::int*>* set3 = block {
     final core::Set<core::int*>* #t27 = new col::_CompactLinkedHashSet::•<core::int*>();
     final core::Iterable<dynamic>* #t28 = dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t28.{core::Object::==}(null)) {
+    if(!(#t28 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t28.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t29 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t30 = #t29 as{TypeError} core::int*;
-          #t27.{core::Set::add}{Invariant}(#t30);
+          #t27.{core::Set::add}(#t30){(core::int*) →* core::bool*};
         }
       }
     }
     final core::Iterable<dynamic>* #t31 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t31.{core::Object::==}(null)) {
+    if(!(#t31 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t31.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t32 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t33 = #t32 as{TypeError} core::int*;
-          #t27.{core::Set::add}{Invariant}(#t33);
+          #t27.{core::Set::add}(#t33){(core::int*) →* core::bool*};
         }
       }
     }
     final core::Iterable<core::int*>* #t34 = iterableIntSet;
-    if(!#t34.{core::Object::==}(null))
-      #t27.{core::Set::addAll}{Invariant}(#t34);
+    if(!(#t34 == null))
+      #t27.{core::Set::addAll}(#t34){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t35 = iterableNumSet1;
-    if(!#t35.{core::Object::==}(null)) {
+    if(!(#t35 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t35.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t36 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t37 = #t36 as{TypeError} core::int*;
-          #t27.{core::Set::add}{Invariant}(#t37);
+          #t27.{core::Set::add}(#t37){(core::int*) →* core::bool*};
         }
       }
     }
     final core::Iterable<dynamic>* #t38 = iterableNumSet2;
-    if(!#t38.{core::Object::==}(null)) {
+    if(!(#t38 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t38.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t39 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t40 = #t39 as{TypeError} core::int*;
-          #t27.{core::Set::add}{Invariant}(#t40);
+          #t27.{core::Set::add}(#t40){(core::int*) →* core::bool*};
         }
       }
     }
     final core::Iterable<core::int*>* #t41 = intSet;
-    if(!#t41.{core::Object::==}(null))
-      #t27.{core::Set::addAll}{Invariant}(#t41);
+    if(!(#t41 == null))
+      #t27.{core::Set::addAll}(#t41){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t42 = numSet1;
-    if(!#t42.{core::Object::==}(null)) {
+    if(!(#t42 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t42.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t43 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t44 = #t43 as{TypeError} core::int*;
-          #t27.{core::Set::add}{Invariant}(#t44);
+          #t27.{core::Set::add}(#t44){(core::int*) →* core::bool*};
         }
       }
     }
     final core::Iterable<dynamic>* #t45 = numSet2;
-    if(!#t45.{core::Object::==}(null)) {
+    if(!(#t45 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t45.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t46 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int* #t47 = #t46 as{TypeError} core::int*;
-          #t27.{core::Set::add}{Invariant}(#t47);
+          #t27.{core::Set::add}(#t47){(core::int*) →* core::bool*};
         }
       }
     }
   } =>#t27;
-  self::expect(core::_GrowableList::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(), set3);
+  self::expect(core::_GrowableList::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::int*>*}, set3);
   core::Set<core::num*>* set4 = block {
     final core::Set<core::num*>* #t48 = new col::_CompactLinkedHashSet::•<core::num*>();
     final core::Iterable<dynamic>* #t49 = dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t49.{core::Object::==}(null)) {
+    if(!(#t49 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t49.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t50 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num* #t51 = #t50 as{TypeError} core::num*;
-          #t48.{core::Set::add}{Invariant}(#t51);
+          #t48.{core::Set::add}(#t51){(core::num*) →* core::bool*};
         }
       }
     }
     final core::Iterable<dynamic>* #t52 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-    if(!#t52.{core::Object::==}(null)) {
+    if(!(#t52 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t52.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t53 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num* #t54 = #t53 as{TypeError} core::num*;
-          #t48.{core::Set::add}{Invariant}(#t54);
+          #t48.{core::Set::add}(#t54){(core::num*) →* core::bool*};
         }
       }
     }
     final core::Iterable<core::num*>* #t55 = iterableIntSet;
-    if(!#t55.{core::Object::==}(null))
-      #t48.{core::Set::addAll}{Invariant}(#t55);
+    if(!(#t55 == null))
+      #t48.{core::Set::addAll}(#t55){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t56 = iterableNumSet1;
-    if(!#t56.{core::Object::==}(null))
-      #t48.{core::Set::addAll}{Invariant}(#t56);
+    if(!(#t56 == null))
+      #t48.{core::Set::addAll}(#t56){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t57 = iterableNumSet2;
-    if(!#t57.{core::Object::==}(null))
-      #t48.{core::Set::addAll}{Invariant}(#t57);
+    if(!(#t57 == null))
+      #t48.{core::Set::addAll}(#t57){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t58 = intSet;
-    if(!#t58.{core::Object::==}(null))
-      #t48.{core::Set::addAll}{Invariant}(#t58);
+    if(!(#t58 == null))
+      #t48.{core::Set::addAll}(#t58){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t59 = numSet1;
-    if(!#t59.{core::Object::==}(null))
-      #t48.{core::Set::addAll}{Invariant}(#t59);
+    if(!(#t59 == null))
+      #t48.{core::Set::addAll}(#t59){(core::Iterable<core::num*>*) →* void};
     final core::Iterable<core::num*>* #t60 = numSet2;
-    if(!#t60.{core::Object::==}(null))
-      #t48.{core::Set::addAll}{Invariant}(#t60);
+    if(!(#t60 == null))
+      #t48.{core::Set::addAll}(#t60){(core::Iterable<core::num*>*) →* void};
   } =>#t48;
-  self::expect(core::_GrowableList::generate<core::num*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(), set4);
+  self::expect(core::_GrowableList::generate<core::num*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::num*>*}, set4);
 }
 static method main() → dynamic {
   self::useAddAll();
 }
 static method expect(core::Set<dynamic>* set1, core::Set<dynamic>* set2) → void {
-  if(!set1.{_in::EfficientLengthIterable::length}.{core::num::==}(set2.{_in::EfficientLengthIterable::length})) {
-    throw "Unexpected length. Expected ${set1.{_in::EfficientLengthIterable::length}}, actual ${set2.{_in::EfficientLengthIterable::length}}.";
+  if(!(set1.{_in::EfficientLengthIterable::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} set2.{_in::EfficientLengthIterable::length}{core::int*})) {
+    throw "Unexpected length. Expected ${set1.{_in::EfficientLengthIterable::length}{core::int*}}, actual ${set2.{_in::EfficientLengthIterable::length}{core::int*}}.";
   }
   {
     core::Iterator<dynamic>* :sync-for-iterator = set1.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       dynamic element = :sync-for-iterator.{core::Iterator::current};
       {
-        if(!set2.{core::Set::contains}(element)) {
+        if(!set2.{core::Set::contains}(element){(core::Object*) →* core::bool*}) {
           throw "Element ${element} not found. Expected ${set1}, actual ${set2}.";
         }
       }
diff --git a/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.expect b/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.expect
index 2ade2ee..867c99e 100644
--- a/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.expect
@@ -7,169 +7,169 @@
 static method useAddAll() → void {
   dynamic dynamicSet1 = block {
     final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
-    #t1.{core::Set::add}{Invariant}(0);
-    #t1.{core::Set::add}{Invariant}(1);
-    #t1.{core::Set::add}{Invariant}(2);
+    #t1.{core::Set::add}(0){(core::int) → core::bool};
+    #t1.{core::Set::add}(1){(core::int) → core::bool};
+    #t1.{core::Set::add}(2){(core::int) → core::bool};
   } =>#t1;
   dynamic dynamicSet2 = block {
     final core::Set<core::num> #t2 = col::LinkedHashSet::•<core::num>();
-    #t2.{core::Set::add}{Invariant}(3);
-    #t2.{core::Set::add}{Invariant}(4);
-    #t2.{core::Set::add}{Invariant}(5);
+    #t2.{core::Set::add}(3){(core::num) → core::bool};
+    #t2.{core::Set::add}(4){(core::num) → core::bool};
+    #t2.{core::Set::add}(5){(core::num) → core::bool};
   } =>#t2;
   dynamic dynamicSet3 = block {
     final core::Set<core::int?> #t3 = col::LinkedHashSet::•<core::int?>();
-    #t3.{core::Set::add}{Invariant}(6);
-    #t3.{core::Set::add}{Invariant}(7);
-    #t3.{core::Set::add}{Invariant}(8);
+    #t3.{core::Set::add}(6){(core::int?) → core::bool};
+    #t3.{core::Set::add}(7){(core::int?) → core::bool};
+    #t3.{core::Set::add}(8){(core::int?) → core::bool};
   } =>#t3;
   core::Iterable<core::int> iterableIntSet = block {
     final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
-    #t4.{core::Set::add}{Invariant}(9);
-    #t4.{core::Set::add}{Invariant}(10);
-    #t4.{core::Set::add}{Invariant}(11);
+    #t4.{core::Set::add}(9){(core::int) → core::bool};
+    #t4.{core::Set::add}(10){(core::int) → core::bool};
+    #t4.{core::Set::add}(11){(core::int) → core::bool};
   } =>#t4;
   core::Set<core::int> intSet = block {
     final core::Set<core::int> #t5 = col::LinkedHashSet::•<core::int>();
-    #t5.{core::Set::add}{Invariant}(12);
-    #t5.{core::Set::add}{Invariant}(13);
-    #t5.{core::Set::add}{Invariant}(14);
+    #t5.{core::Set::add}(12){(core::int) → core::bool};
+    #t5.{core::Set::add}(13){(core::int) → core::bool};
+    #t5.{core::Set::add}(14){(core::int) → core::bool};
   } =>#t5;
   core::Set<core::int> set1 = block {
     final core::Set<core::int> #t6 = col::LinkedHashSet::•<core::int>();
     for (final dynamic #t7 in dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t8 = #t7 as{TypeError,ForNonNullableByDefault} core::int;
-      #t6.{core::Set::add}{Invariant}(#t8);
+      #t6.{core::Set::add}(#t8){(core::int) → core::bool};
     }
     for (final dynamic #t9 in dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::int;
-      #t6.{core::Set::add}{Invariant}(#t10);
+      #t6.{core::Set::add}(#t10){(core::int) → core::bool};
     }
     for (final dynamic #t11 in dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t12 = #t11 as{TypeError,ForNonNullableByDefault} core::int;
-      #t6.{core::Set::add}{Invariant}(#t12);
+      #t6.{core::Set::add}(#t12){(core::int) → core::bool};
     }
-    #t6.{core::Set::addAll}{Invariant}(iterableIntSet);
-    #t6.{core::Set::addAll}{Invariant}(intSet);
+    #t6.{core::Set::addAll}(iterableIntSet){(core::Iterable<core::int>) → void};
+    #t6.{core::Set::addAll}(intSet){(core::Iterable<core::int>) → void};
   } =>#t6;
-  self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(), set1);
+  self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::int>}, set1);
   core::Set<core::num> set2 = block {
     final core::Set<core::num> #t13 = col::LinkedHashSet::•<core::num>();
     for (final dynamic #t14 in dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t15 = #t14 as{TypeError,ForNonNullableByDefault} core::num;
-      #t13.{core::Set::add}{Invariant}(#t15);
+      #t13.{core::Set::add}(#t15){(core::num) → core::bool};
     }
     for (final dynamic #t16 in dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t17 = #t16 as{TypeError,ForNonNullableByDefault} core::num;
-      #t13.{core::Set::add}{Invariant}(#t17);
+      #t13.{core::Set::add}(#t17){(core::num) → core::bool};
     }
     for (final dynamic #t18 in dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::num;
-      #t13.{core::Set::add}{Invariant}(#t19);
+      #t13.{core::Set::add}(#t19){(core::num) → core::bool};
     }
-    #t13.{core::Set::addAll}{Invariant}(iterableIntSet);
-    #t13.{core::Set::addAll}{Invariant}(intSet);
+    #t13.{core::Set::addAll}(iterableIntSet){(core::Iterable<core::num>) → void};
+    #t13.{core::Set::addAll}(intSet){(core::Iterable<core::num>) → void};
   } =>#t13;
-  self::expect(core::List::generate<core::num>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(), set2);
+  self::expect(core::List::generate<core::num>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::num>}, set2);
 }
 static method useAddAllNullable() → void {
   dynamic dynamicSet1 = block {
     final core::Set<core::int> #t20 = col::LinkedHashSet::•<core::int>();
-    #t20.{core::Set::add}{Invariant}(0);
-    #t20.{core::Set::add}{Invariant}(1);
-    #t20.{core::Set::add}{Invariant}(2);
+    #t20.{core::Set::add}(0){(core::int) → core::bool};
+    #t20.{core::Set::add}(1){(core::int) → core::bool};
+    #t20.{core::Set::add}(2){(core::int) → core::bool};
   } =>#t20;
   dynamic dynamicSet2 = block {
     final core::Set<core::num> #t21 = col::LinkedHashSet::•<core::num>();
-    #t21.{core::Set::add}{Invariant}(3);
-    #t21.{core::Set::add}{Invariant}(4);
-    #t21.{core::Set::add}{Invariant}(5);
+    #t21.{core::Set::add}(3){(core::num) → core::bool};
+    #t21.{core::Set::add}(4){(core::num) → core::bool};
+    #t21.{core::Set::add}(5){(core::num) → core::bool};
   } =>#t21;
   dynamic dynamicSet3 = block {
     final core::Set<core::int?> #t22 = col::LinkedHashSet::•<core::int?>();
-    #t22.{core::Set::add}{Invariant}(6);
-    #t22.{core::Set::add}{Invariant}(7);
-    #t22.{core::Set::add}{Invariant}(8);
+    #t22.{core::Set::add}(6){(core::int?) → core::bool};
+    #t22.{core::Set::add}(7){(core::int?) → core::bool};
+    #t22.{core::Set::add}(8){(core::int?) → core::bool};
   } =>#t22;
   core::Iterable<core::int>? iterableIntSet = true ?{core::Set<core::int>?} block {
     final core::Set<core::int> #t23 = col::LinkedHashSet::•<core::int>();
-    #t23.{core::Set::add}{Invariant}(9);
-    #t23.{core::Set::add}{Invariant}(10);
-    #t23.{core::Set::add}{Invariant}(11);
+    #t23.{core::Set::add}(9){(core::int) → core::bool};
+    #t23.{core::Set::add}(10){(core::int) → core::bool};
+    #t23.{core::Set::add}(11){(core::int) → core::bool};
   } =>#t23 : null;
   core::Set<core::int>? intSet = true ?{core::Set<core::int>?} block {
     final core::Set<core::int> #t24 = col::LinkedHashSet::•<core::int>();
-    #t24.{core::Set::add}{Invariant}(12);
-    #t24.{core::Set::add}{Invariant}(13);
-    #t24.{core::Set::add}{Invariant}(14);
+    #t24.{core::Set::add}(12){(core::int) → core::bool};
+    #t24.{core::Set::add}(13){(core::int) → core::bool};
+    #t24.{core::Set::add}(14){(core::int) → core::bool};
   } =>#t24 : null;
   core::Set<core::int> set1 = block {
     final core::Set<core::int> #t25 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t26 = dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t26.{core::Object::==}(null))
+    if(!(#t26 == null))
       for (final dynamic #t27 in #t26{core::Iterable<dynamic>}) {
         final core::int #t28 = #t27 as{TypeError,ForNonNullableByDefault} core::int;
-        #t25.{core::Set::add}{Invariant}(#t28);
+        #t25.{core::Set::add}(#t28){(core::int) → core::bool};
       }
     final core::Iterable<dynamic>? #t29 = dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t29.{core::Object::==}(null))
+    if(!(#t29 == null))
       for (final dynamic #t30 in #t29{core::Iterable<dynamic>}) {
         final core::int #t31 = #t30 as{TypeError,ForNonNullableByDefault} core::int;
-        #t25.{core::Set::add}{Invariant}(#t31);
+        #t25.{core::Set::add}(#t31){(core::int) → core::bool};
       }
     final core::Iterable<dynamic>? #t32 = dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t32.{core::Object::==}(null))
+    if(!(#t32 == null))
       for (final dynamic #t33 in #t32{core::Iterable<dynamic>}) {
         final core::int #t34 = #t33 as{TypeError,ForNonNullableByDefault} core::int;
-        #t25.{core::Set::add}{Invariant}(#t34);
+        #t25.{core::Set::add}(#t34){(core::int) → core::bool};
       }
     final core::Iterable<core::int>? #t35 = iterableIntSet;
-    if(!#t35.{core::Object::==}(null))
-      #t25.{core::Set::addAll}{Invariant}(#t35{core::Iterable<core::int>});
+    if(!(#t35 == null))
+      #t25.{core::Set::addAll}(#t35{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     final core::Iterable<core::int>? #t36 = intSet;
-    if(!#t36.{core::Object::==}(null))
-      #t25.{core::Set::addAll}{Invariant}(#t36{core::Iterable<core::int>});
+    if(!(#t36 == null))
+      #t25.{core::Set::addAll}(#t36{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t25;
-  self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(), set1);
+  self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::int>}, set1);
   core::Set<core::num> set2 = block {
     final core::Set<core::num> #t37 = col::LinkedHashSet::•<core::num>();
     final core::Iterable<dynamic>? #t38 = dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t38.{core::Object::==}(null))
+    if(!(#t38 == null))
       for (final dynamic #t39 in #t38{core::Iterable<dynamic>}) {
         final core::num #t40 = #t39 as{TypeError,ForNonNullableByDefault} core::num;
-        #t37.{core::Set::add}{Invariant}(#t40);
+        #t37.{core::Set::add}(#t40){(core::num) → core::bool};
       }
     final core::Iterable<dynamic>? #t41 = dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t41.{core::Object::==}(null))
+    if(!(#t41 == null))
       for (final dynamic #t42 in #t41{core::Iterable<dynamic>}) {
         final core::num #t43 = #t42 as{TypeError,ForNonNullableByDefault} core::num;
-        #t37.{core::Set::add}{Invariant}(#t43);
+        #t37.{core::Set::add}(#t43){(core::num) → core::bool};
       }
     final core::Iterable<dynamic>? #t44 = dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t44.{core::Object::==}(null))
+    if(!(#t44 == null))
       for (final dynamic #t45 in #t44{core::Iterable<dynamic>}) {
         final core::num #t46 = #t45 as{TypeError,ForNonNullableByDefault} core::num;
-        #t37.{core::Set::add}{Invariant}(#t46);
+        #t37.{core::Set::add}(#t46){(core::num) → core::bool};
       }
     final core::Iterable<core::num>? #t47 = iterableIntSet;
-    if(!#t47.{core::Object::==}(null))
-      #t37.{core::Set::addAll}{Invariant}(#t47{core::Iterable<core::num>});
+    if(!(#t47 == null))
+      #t37.{core::Set::addAll}(#t47{core::Iterable<core::num>}){(core::Iterable<core::num>) → void};
     final core::Iterable<core::num>? #t48 = intSet;
-    if(!#t48.{core::Object::==}(null))
-      #t37.{core::Set::addAll}{Invariant}(#t48{core::Iterable<core::num>});
+    if(!(#t48 == null))
+      #t37.{core::Set::addAll}(#t48{core::Iterable<core::num>}){(core::Iterable<core::num>) → void};
   } =>#t37;
-  self::expect(core::List::generate<core::num>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(), set2);
+  self::expect(core::List::generate<core::num>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::num>}, set2);
 }
 static method main() → dynamic {
   self::useAddAll();
   self::useAddAllNullable();
 }
 static method expect(core::Set<dynamic> set1, core::Set<dynamic> set2) → void {
-  if(!set1.{_in::EfficientLengthIterable::length}.{core::num::==}(set2.{_in::EfficientLengthIterable::length})) {
-    throw "Unexpected length. Expected ${set1.{_in::EfficientLengthIterable::length}}, actual ${set2.{_in::EfficientLengthIterable::length}}.";
+  if(!(set1.{_in::EfficientLengthIterable::length}{core::int} =={core::num::==}{(core::Object) → core::bool} set2.{_in::EfficientLengthIterable::length}{core::int})) {
+    throw "Unexpected length. Expected ${set1.{_in::EfficientLengthIterable::length}{core::int}}, actual ${set2.{_in::EfficientLengthIterable::length}{core::int}}.";
   }
   for (dynamic element in set1) {
-    if(!set2.{core::Set::contains}(element)) {
+    if(!set2.{core::Set::contains}(element){(core::Object?) → core::bool}) {
       throw "Element ${element} not found. Expected ${set1}, actual ${set2}.";
     }
   }
diff --git a/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.transformed.expect
index c97ce48..0a6d1df 100644
--- a/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.transformed.expect
@@ -7,33 +7,33 @@
 static method useAddAll() → void {
   dynamic dynamicSet1 = block {
     final core::Set<core::int> #t1 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t1.{core::Set::add}{Invariant}(0);
-    #t1.{core::Set::add}{Invariant}(1);
-    #t1.{core::Set::add}{Invariant}(2);
+    #t1.{core::Set::add}(0){(core::int) → core::bool};
+    #t1.{core::Set::add}(1){(core::int) → core::bool};
+    #t1.{core::Set::add}(2){(core::int) → core::bool};
   } =>#t1;
   dynamic dynamicSet2 = block {
     final core::Set<core::num> #t2 = new col::_CompactLinkedHashSet::•<core::num>();
-    #t2.{core::Set::add}{Invariant}(3);
-    #t2.{core::Set::add}{Invariant}(4);
-    #t2.{core::Set::add}{Invariant}(5);
+    #t2.{core::Set::add}(3){(core::num) → core::bool};
+    #t2.{core::Set::add}(4){(core::num) → core::bool};
+    #t2.{core::Set::add}(5){(core::num) → core::bool};
   } =>#t2;
   dynamic dynamicSet3 = block {
     final core::Set<core::int?> #t3 = new col::_CompactLinkedHashSet::•<core::int?>();
-    #t3.{core::Set::add}{Invariant}(6);
-    #t3.{core::Set::add}{Invariant}(7);
-    #t3.{core::Set::add}{Invariant}(8);
+    #t3.{core::Set::add}(6){(core::int?) → core::bool};
+    #t3.{core::Set::add}(7){(core::int?) → core::bool};
+    #t3.{core::Set::add}(8){(core::int?) → core::bool};
   } =>#t3;
   core::Iterable<core::int> iterableIntSet = block {
     final core::Set<core::int> #t4 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t4.{core::Set::add}{Invariant}(9);
-    #t4.{core::Set::add}{Invariant}(10);
-    #t4.{core::Set::add}{Invariant}(11);
+    #t4.{core::Set::add}(9){(core::int) → core::bool};
+    #t4.{core::Set::add}(10){(core::int) → core::bool};
+    #t4.{core::Set::add}(11){(core::int) → core::bool};
   } =>#t4;
   core::Set<core::int> intSet = block {
     final core::Set<core::int> #t5 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t5.{core::Set::add}{Invariant}(12);
-    #t5.{core::Set::add}{Invariant}(13);
-    #t5.{core::Set::add}{Invariant}(14);
+    #t5.{core::Set::add}(12){(core::int) → core::bool};
+    #t5.{core::Set::add}(13){(core::int) → core::bool};
+    #t5.{core::Set::add}(14){(core::int) → core::bool};
   } =>#t5;
   core::Set<core::int> set1 = block {
     final core::Set<core::int> #t6 = new col::_CompactLinkedHashSet::•<core::int>();
@@ -43,7 +43,7 @@
         final dynamic #t7 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t8 = #t7 as{TypeError,ForNonNullableByDefault} core::int;
-          #t6.{core::Set::add}{Invariant}(#t8);
+          #t6.{core::Set::add}(#t8){(core::int) → core::bool};
         }
       }
     }
@@ -53,7 +53,7 @@
         final dynamic #t9 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::int;
-          #t6.{core::Set::add}{Invariant}(#t10);
+          #t6.{core::Set::add}(#t10){(core::int) → core::bool};
         }
       }
     }
@@ -63,14 +63,14 @@
         final dynamic #t11 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t12 = #t11 as{TypeError,ForNonNullableByDefault} core::int;
-          #t6.{core::Set::add}{Invariant}(#t12);
+          #t6.{core::Set::add}(#t12){(core::int) → core::bool};
         }
       }
     }
-    #t6.{core::Set::addAll}{Invariant}(iterableIntSet);
-    #t6.{core::Set::addAll}{Invariant}(intSet);
+    #t6.{core::Set::addAll}(iterableIntSet){(core::Iterable<core::int>) → void};
+    #t6.{core::Set::addAll}(intSet){(core::Iterable<core::int>) → void};
   } =>#t6;
-  self::expect(core::_GrowableList::generate<core::int>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(), set1);
+  self::expect(core::_GrowableList::generate<core::int>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::int>}, set1);
   core::Set<core::num> set2 = block {
     final core::Set<core::num> #t13 = new col::_CompactLinkedHashSet::•<core::num>();
     {
@@ -79,7 +79,7 @@
         final dynamic #t14 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num #t15 = #t14 as{TypeError,ForNonNullableByDefault} core::num;
-          #t13.{core::Set::add}{Invariant}(#t15);
+          #t13.{core::Set::add}(#t15){(core::num) → core::bool};
         }
       }
     }
@@ -89,7 +89,7 @@
         final dynamic #t16 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num #t17 = #t16 as{TypeError,ForNonNullableByDefault} core::num;
-          #t13.{core::Set::add}{Invariant}(#t17);
+          #t13.{core::Set::add}(#t17){(core::num) → core::bool};
         }
       }
     }
@@ -99,147 +99,147 @@
         final dynamic #t18 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::num;
-          #t13.{core::Set::add}{Invariant}(#t19);
+          #t13.{core::Set::add}(#t19){(core::num) → core::bool};
         }
       }
     }
-    #t13.{core::Set::addAll}{Invariant}(iterableIntSet);
-    #t13.{core::Set::addAll}{Invariant}(intSet);
+    #t13.{core::Set::addAll}(iterableIntSet){(core::Iterable<core::num>) → void};
+    #t13.{core::Set::addAll}(intSet){(core::Iterable<core::num>) → void};
   } =>#t13;
-  self::expect(core::_GrowableList::generate<core::num>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(), set2);
+  self::expect(core::_GrowableList::generate<core::num>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::num>}, set2);
 }
 static method useAddAllNullable() → void {
   dynamic dynamicSet1 = block {
     final core::Set<core::int> #t20 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t20.{core::Set::add}{Invariant}(0);
-    #t20.{core::Set::add}{Invariant}(1);
-    #t20.{core::Set::add}{Invariant}(2);
+    #t20.{core::Set::add}(0){(core::int) → core::bool};
+    #t20.{core::Set::add}(1){(core::int) → core::bool};
+    #t20.{core::Set::add}(2){(core::int) → core::bool};
   } =>#t20;
   dynamic dynamicSet2 = block {
     final core::Set<core::num> #t21 = new col::_CompactLinkedHashSet::•<core::num>();
-    #t21.{core::Set::add}{Invariant}(3);
-    #t21.{core::Set::add}{Invariant}(4);
-    #t21.{core::Set::add}{Invariant}(5);
+    #t21.{core::Set::add}(3){(core::num) → core::bool};
+    #t21.{core::Set::add}(4){(core::num) → core::bool};
+    #t21.{core::Set::add}(5){(core::num) → core::bool};
   } =>#t21;
   dynamic dynamicSet3 = block {
     final core::Set<core::int?> #t22 = new col::_CompactLinkedHashSet::•<core::int?>();
-    #t22.{core::Set::add}{Invariant}(6);
-    #t22.{core::Set::add}{Invariant}(7);
-    #t22.{core::Set::add}{Invariant}(8);
+    #t22.{core::Set::add}(6){(core::int?) → core::bool};
+    #t22.{core::Set::add}(7){(core::int?) → core::bool};
+    #t22.{core::Set::add}(8){(core::int?) → core::bool};
   } =>#t22;
   core::Iterable<core::int>? iterableIntSet = true ?{core::Set<core::int>?} block {
     final core::Set<core::int> #t23 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t23.{core::Set::add}{Invariant}(9);
-    #t23.{core::Set::add}{Invariant}(10);
-    #t23.{core::Set::add}{Invariant}(11);
+    #t23.{core::Set::add}(9){(core::int) → core::bool};
+    #t23.{core::Set::add}(10){(core::int) → core::bool};
+    #t23.{core::Set::add}(11){(core::int) → core::bool};
   } =>#t23 : null;
   core::Set<core::int>? intSet = true ?{core::Set<core::int>?} block {
     final core::Set<core::int> #t24 = new col::_CompactLinkedHashSet::•<core::int>();
-    #t24.{core::Set::add}{Invariant}(12);
-    #t24.{core::Set::add}{Invariant}(13);
-    #t24.{core::Set::add}{Invariant}(14);
+    #t24.{core::Set::add}(12){(core::int) → core::bool};
+    #t24.{core::Set::add}(13){(core::int) → core::bool};
+    #t24.{core::Set::add}(14){(core::int) → core::bool};
   } =>#t24 : null;
   core::Set<core::int> set1 = block {
     final core::Set<core::int> #t25 = new col::_CompactLinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t26 = dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t26.{core::Object::==}(null)) {
+    if(!(#t26 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t26{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t27 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t28 = #t27 as{TypeError,ForNonNullableByDefault} core::int;
-          #t25.{core::Set::add}{Invariant}(#t28);
+          #t25.{core::Set::add}(#t28){(core::int) → core::bool};
         }
       }
     }
     final core::Iterable<dynamic>? #t29 = dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t29.{core::Object::==}(null)) {
+    if(!(#t29 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t29{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t30 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t31 = #t30 as{TypeError,ForNonNullableByDefault} core::int;
-          #t25.{core::Set::add}{Invariant}(#t31);
+          #t25.{core::Set::add}(#t31){(core::int) → core::bool};
         }
       }
     }
     final core::Iterable<dynamic>? #t32 = dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t32.{core::Object::==}(null)) {
+    if(!(#t32 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t32{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t33 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::int #t34 = #t33 as{TypeError,ForNonNullableByDefault} core::int;
-          #t25.{core::Set::add}{Invariant}(#t34);
+          #t25.{core::Set::add}(#t34){(core::int) → core::bool};
         }
       }
     }
     final core::Iterable<core::int>? #t35 = iterableIntSet;
-    if(!#t35.{core::Object::==}(null))
-      #t25.{core::Set::addAll}{Invariant}(#t35{core::Iterable<core::int>});
+    if(!(#t35 == null))
+      #t25.{core::Set::addAll}(#t35{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     final core::Iterable<core::int>? #t36 = intSet;
-    if(!#t36.{core::Object::==}(null))
-      #t25.{core::Set::addAll}{Invariant}(#t36{core::Iterable<core::int>});
+    if(!(#t36 == null))
+      #t25.{core::Set::addAll}(#t36{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t25;
-  self::expect(core::_GrowableList::generate<core::int>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(), set1);
+  self::expect(core::_GrowableList::generate<core::int>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::int>}, set1);
   core::Set<core::num> set2 = block {
     final core::Set<core::num> #t37 = new col::_CompactLinkedHashSet::•<core::num>();
     final core::Iterable<dynamic>? #t38 = dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t38.{core::Object::==}(null)) {
+    if(!(#t38 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t38{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t39 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num #t40 = #t39 as{TypeError,ForNonNullableByDefault} core::num;
-          #t37.{core::Set::add}{Invariant}(#t40);
+          #t37.{core::Set::add}(#t40){(core::num) → core::bool};
         }
       }
     }
     final core::Iterable<dynamic>? #t41 = dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t41.{core::Object::==}(null)) {
+    if(!(#t41 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t41{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t42 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num #t43 = #t42 as{TypeError,ForNonNullableByDefault} core::num;
-          #t37.{core::Set::add}{Invariant}(#t43);
+          #t37.{core::Set::add}(#t43){(core::num) → core::bool};
         }
       }
     }
     final core::Iterable<dynamic>? #t44 = dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
-    if(!#t44.{core::Object::==}(null)) {
+    if(!(#t44 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t44{core::Iterable<dynamic>}.{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t45 = :sync-for-iterator.{core::Iterator::current};
         {
           final core::num #t46 = #t45 as{TypeError,ForNonNullableByDefault} core::num;
-          #t37.{core::Set::add}{Invariant}(#t46);
+          #t37.{core::Set::add}(#t46){(core::num) → core::bool};
         }
       }
     }
     final core::Iterable<core::num>? #t47 = iterableIntSet;
-    if(!#t47.{core::Object::==}(null))
-      #t37.{core::Set::addAll}{Invariant}(#t47{core::Iterable<core::num>});
+    if(!(#t47 == null))
+      #t37.{core::Set::addAll}(#t47{core::Iterable<core::num>}){(core::Iterable<core::num>) → void};
     final core::Iterable<core::num>? #t48 = intSet;
-    if(!#t48.{core::Object::==}(null))
-      #t37.{core::Set::addAll}{Invariant}(#t48{core::Iterable<core::num>});
+    if(!(#t48 == null))
+      #t37.{core::Set::addAll}(#t48{core::Iterable<core::num>}){(core::Iterable<core::num>) → void};
   } =>#t37;
-  self::expect(core::_GrowableList::generate<core::num>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(), set2);
+  self::expect(core::_GrowableList::generate<core::num>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::num>}, set2);
 }
 static method main() → dynamic {
   self::useAddAll();
   self::useAddAllNullable();
 }
 static method expect(core::Set<dynamic> set1, core::Set<dynamic> set2) → void {
-  if(!set1.{_in::EfficientLengthIterable::length}.{core::num::==}(set2.{_in::EfficientLengthIterable::length})) {
-    throw "Unexpected length. Expected ${set1.{_in::EfficientLengthIterable::length}}, actual ${set2.{_in::EfficientLengthIterable::length}}.";
+  if(!(set1.{_in::EfficientLengthIterable::length}{core::int} =={core::num::==}{(core::Object) → core::bool} set2.{_in::EfficientLengthIterable::length}{core::int})) {
+    throw "Unexpected length. Expected ${set1.{_in::EfficientLengthIterable::length}{core::int}}, actual ${set2.{_in::EfficientLengthIterable::length}{core::int}}.";
   }
   {
     core::Iterator<dynamic> :sync-for-iterator = set1.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       dynamic element = :sync-for-iterator.{core::Iterator::current};
       {
-        if(!set2.{core::Set::contains}(element)) {
+        if(!set2.{core::Set::contains}(element){(core::Object?) → core::bool}) {
           throw "Element ${element} not found. Expected ${set1}, actual ${set2}.";
         }
       }
diff --git a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.expect b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.expect
index 0229f5c..93346f1 100644
--- a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.expect
@@ -7,6 +7,6 @@
   block {
     final core::List<core::String*>* #t1 = <core::String*>["ab"];
     if(b)
-      #t1.{core::List::add}{Invariant}("cd");
+      #t1.{core::List::add}("cd"){(core::String*) →* void};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.transformed.expect b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.transformed.expect
index 33e84e4..0a6d17a 100644
--- a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
   block {
     final core::List<core::String*>* #t1 = core::_GrowableList::_literal1<core::String*>("ab");
     if(b)
-      #t1.{core::List::add}{Invariant}("cd");
+      #t1.{core::List::add}("cd"){(core::String*) →* void};
   } =>#t1;
 }
 
diff --git a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.expect b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.expect
index 33b9aaa..ab48d3f 100644
--- a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.expect
@@ -98,21 +98,21 @@
   self::Cat cat = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:29:20: Error: No named parameter with the name 'numberOfWhiskers'.
  Cat cat = new Cat(numberOfWhiskers: 20, numberOfLegs: 4);
                    ^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
-  self::Cat cat2 = (let final dynamic #t1 = cat as{ForNonNullableByDefault} dynamic in #t1.copyWith(numberOfWhiskers: 4, numberOfLegs: #t1.numberOfLegs)) as{ForNonNullableByDefault} self::Cat;
-  self::Cat cat3 = (let final dynamic #t2 = ((cat as{ForNonNullableByDefault} dynamic).copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat) as{ForNonNullableByDefault} dynamic in #t2.copyWith(numberOfWhiskers: #t2.numberOfWhiskers, numberOfLegs: 3)) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat2 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat3 = (((cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfLegs: 3) as{ForNonNullableByDefault} self::Cat;
   self::Cat cat4 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:35:29: Error: The method 'copyWith' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'copyWith'.
  Cat cat4 = (cat as Object).copyWith(numberOfWhiskers: 4);
                             ^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
-  self::Cat cat5 = (let final dynamic #t3 = cat as{ForNonNullableByDefault} dynamic in #t3.copyWith(numberOfWhiskers: #t3.numberOfWhiskers, numberOfLegs: #t3.numberOfLegs)) as{ForNonNullableByDefault} self::Cat;
-  self::Cat cat6 = (let final dynamic #t4 = cat as{ForNonNullableByDefault} dynamic in #t4.copyWith(numberOfWhiskers: 4, numberOfLegs: #t4.numberOfLegs)) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat5 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith() as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat6 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4, numberOfHorns: 5) as{ForNonNullableByDefault} self::Cat;
   self::A a;
-  self::A a2 = (let final dynamic #t5 = (let final Never #t6 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
+  self::A a2 = ((let final Never #t1 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
  A a2 = (a as dynamic).copyWith(x: 42, y: 42) as A;
-         ^" in a) as{ForNonNullableByDefault} dynamic in #t5.copyWith()) as{ForNonNullableByDefault} self::A;
+         ^" in a) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
   self::Foo foo = new self::Foo::•(bar: 4, bar2: 5);
-  self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic).copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
+  self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
 }
 
 library /*isNonNullableByDefault*/;
@@ -124,14 +124,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C2;
diff --git a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.transformed.expect
index 243684e..7e11dd4 100644
--- a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.strong.transformed.expect
@@ -98,21 +98,21 @@
   self::Cat cat = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:29:20: Error: No named parameter with the name 'numberOfWhiskers'.
  Cat cat = new Cat(numberOfWhiskers: 20, numberOfLegs: 4);
                    ^^^^^^^^^^^^^^^^";
-  self::Cat cat2 = (let final dynamic #t1 = cat as{ForNonNullableByDefault} dynamic in #t1.copyWith(numberOfWhiskers: 4, numberOfLegs: #t1.numberOfLegs)) as{ForNonNullableByDefault} self::Cat;
-  self::Cat cat3 = (let final dynamic #t2 = ((cat as{ForNonNullableByDefault} dynamic).copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat) as{ForNonNullableByDefault} dynamic in #t2.copyWith(numberOfWhiskers: #t2.numberOfWhiskers, numberOfLegs: 3)) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat2 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat3 = (((cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfLegs: 3) as{ForNonNullableByDefault} self::Cat;
   self::Cat cat4 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:35:29: Error: The method 'copyWith' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'copyWith'.
  Cat cat4 = (cat as Object).copyWith(numberOfWhiskers: 4);
                             ^^^^^^^^";
-  self::Cat cat5 = (let final dynamic #t3 = cat as{ForNonNullableByDefault} dynamic in #t3.copyWith(numberOfWhiskers: #t3.numberOfWhiskers, numberOfLegs: #t3.numberOfLegs)) as{ForNonNullableByDefault} self::Cat;
-  self::Cat cat6 = (let final dynamic #t4 = cat as{ForNonNullableByDefault} dynamic in #t4.copyWith(numberOfWhiskers: 4, numberOfLegs: #t4.numberOfLegs)) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat5 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith() as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat6 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4, numberOfHorns: 5) as{ForNonNullableByDefault} self::Cat;
   self::A a;
-  self::A a2 = (let final dynamic #t5 = (let final Never #t6 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
+  self::A a2 = ((let final Never #t1 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
  A a2 = (a as dynamic).copyWith(x: 42, y: 42) as A;
-         ^" in a) as{ForNonNullableByDefault} dynamic in #t5.copyWith()) as{ForNonNullableByDefault} self::A;
+         ^" in a) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
   self::Foo foo = new self::Foo::•(bar: 4, bar2: 5);
-  self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic).copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
+  self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
 }
 
 library /*isNonNullableByDefault*/;
@@ -124,14 +124,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C2;
@@ -143,4 +143,4 @@
 
 Extra constant evaluation status:
 Evaluated: StringConcatenation @ org-dartlang-testcase:///copy_with_call_sites.dart:26:7 -> StringConstant("A()")
-Extra constant evaluation: evaluated: 128, effectively constant: 1
+Extra constant evaluation: evaluated: 108, effectively constant: 1
diff --git a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.expect b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.expect
index 33b9aaa..ab48d3f 100644
--- a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.expect
@@ -98,21 +98,21 @@
   self::Cat cat = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:29:20: Error: No named parameter with the name 'numberOfWhiskers'.
  Cat cat = new Cat(numberOfWhiskers: 20, numberOfLegs: 4);
                    ^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
-  self::Cat cat2 = (let final dynamic #t1 = cat as{ForNonNullableByDefault} dynamic in #t1.copyWith(numberOfWhiskers: 4, numberOfLegs: #t1.numberOfLegs)) as{ForNonNullableByDefault} self::Cat;
-  self::Cat cat3 = (let final dynamic #t2 = ((cat as{ForNonNullableByDefault} dynamic).copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat) as{ForNonNullableByDefault} dynamic in #t2.copyWith(numberOfWhiskers: #t2.numberOfWhiskers, numberOfLegs: 3)) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat2 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat3 = (((cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfLegs: 3) as{ForNonNullableByDefault} self::Cat;
   self::Cat cat4 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:35:29: Error: The method 'copyWith' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'copyWith'.
  Cat cat4 = (cat as Object).copyWith(numberOfWhiskers: 4);
                             ^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
-  self::Cat cat5 = (let final dynamic #t3 = cat as{ForNonNullableByDefault} dynamic in #t3.copyWith(numberOfWhiskers: #t3.numberOfWhiskers, numberOfLegs: #t3.numberOfLegs)) as{ForNonNullableByDefault} self::Cat;
-  self::Cat cat6 = (let final dynamic #t4 = cat as{ForNonNullableByDefault} dynamic in #t4.copyWith(numberOfWhiskers: 4, numberOfLegs: #t4.numberOfLegs)) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat5 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith() as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat6 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4, numberOfHorns: 5) as{ForNonNullableByDefault} self::Cat;
   self::A a;
-  self::A a2 = (let final dynamic #t5 = (let final Never #t6 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
+  self::A a2 = ((let final Never #t1 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
  A a2 = (a as dynamic).copyWith(x: 42, y: 42) as A;
-         ^" in a) as{ForNonNullableByDefault} dynamic in #t5.copyWith()) as{ForNonNullableByDefault} self::A;
+         ^" in a) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
   self::Foo foo = new self::Foo::•(bar: 4, bar2: 5);
-  self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic).copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
+  self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
 }
 
 library /*isNonNullableByDefault*/;
@@ -124,14 +124,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C2;
diff --git a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.transformed.expect
index 243684e..7e11dd4 100644
--- a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.transformed.expect
@@ -98,21 +98,21 @@
   self::Cat cat = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:29:20: Error: No named parameter with the name 'numberOfWhiskers'.
  Cat cat = new Cat(numberOfWhiskers: 20, numberOfLegs: 4);
                    ^^^^^^^^^^^^^^^^";
-  self::Cat cat2 = (let final dynamic #t1 = cat as{ForNonNullableByDefault} dynamic in #t1.copyWith(numberOfWhiskers: 4, numberOfLegs: #t1.numberOfLegs)) as{ForNonNullableByDefault} self::Cat;
-  self::Cat cat3 = (let final dynamic #t2 = ((cat as{ForNonNullableByDefault} dynamic).copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat) as{ForNonNullableByDefault} dynamic in #t2.copyWith(numberOfWhiskers: #t2.numberOfWhiskers, numberOfLegs: 3)) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat2 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat3 = (((cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfLegs: 3) as{ForNonNullableByDefault} self::Cat;
   self::Cat cat4 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:35:29: Error: The method 'copyWith' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'copyWith'.
  Cat cat4 = (cat as Object).copyWith(numberOfWhiskers: 4);
                             ^^^^^^^^";
-  self::Cat cat5 = (let final dynamic #t3 = cat as{ForNonNullableByDefault} dynamic in #t3.copyWith(numberOfWhiskers: #t3.numberOfWhiskers, numberOfLegs: #t3.numberOfLegs)) as{ForNonNullableByDefault} self::Cat;
-  self::Cat cat6 = (let final dynamic #t4 = cat as{ForNonNullableByDefault} dynamic in #t4.copyWith(numberOfWhiskers: 4, numberOfLegs: #t4.numberOfLegs)) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat5 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith() as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat6 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4, numberOfHorns: 5) as{ForNonNullableByDefault} self::Cat;
   self::A a;
-  self::A a2 = (let final dynamic #t5 = (let final Never #t6 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
+  self::A a2 = ((let final Never #t1 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
  A a2 = (a as dynamic).copyWith(x: 42, y: 42) as A;
-         ^" in a) as{ForNonNullableByDefault} dynamic in #t5.copyWith()) as{ForNonNullableByDefault} self::A;
+         ^" in a) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
   self::Foo foo = new self::Foo::•(bar: 4, bar2: 5);
-  self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic).copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
+  self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
 }
 
 library /*isNonNullableByDefault*/;
@@ -124,14 +124,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C2;
@@ -143,4 +143,4 @@
 
 Extra constant evaluation status:
 Evaluated: StringConcatenation @ org-dartlang-testcase:///copy_with_call_sites.dart:26:7 -> StringConstant("A()")
-Extra constant evaluation: evaluated: 128, effectively constant: 1
+Extra constant evaluation: evaluated: 108, effectively constant: 1
diff --git a/pkg/front_end/testcases/value_class/empty.dart.strong.expect b/pkg/front_end/testcases/value_class/empty.dart.strong.expect
index ad09297..ee36638 100644
--- a/pkg/front_end/testcases/value_class/empty.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/empty.dart.strong.expect
@@ -29,14 +29,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/empty.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/empty.dart.strong.transformed.expect
index ccb643b..dfd863f 100644
--- a/pkg/front_end/testcases/value_class/empty.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/empty.dart.strong.transformed.expect
@@ -29,14 +29,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/empty.dart.weak.expect b/pkg/front_end/testcases/value_class/empty.dart.weak.expect
index ad09297..ee36638 100644
--- a/pkg/front_end/testcases/value_class/empty.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/empty.dart.weak.expect
@@ -29,14 +29,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/empty.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/empty.dart.weak.transformed.expect
index ccb643b..dfd863f 100644
--- a/pkg/front_end/testcases/value_class/empty.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/empty.dart.weak.transformed.expect
@@ -29,14 +29,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.expect b/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.expect
index 1dddd63..874cf34 100644
--- a/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.expect
@@ -62,14 +62,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.transformed.expect
index 3265e24..9c48f3b 100644
--- a/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.transformed.expect
@@ -70,14 +70,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.expect b/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.expect
index 1dddd63..874cf34 100644
--- a/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.expect
@@ -62,14 +62,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.transformed.expect
index 3265e24..9c48f3b 100644
--- a/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.transformed.expect
@@ -70,14 +70,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.expect b/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.expect
index a306bf0..ef4afe1 100644
--- a/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.expect
@@ -37,14 +37,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.transformed.expect
index a306bf0..ef4afe1 100644
--- a/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.transformed.expect
@@ -37,14 +37,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.expect b/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.expect
index a306bf0..ef4afe1 100644
--- a/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.expect
@@ -37,14 +37,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.transformed.expect
index a306bf0..ef4afe1 100644
--- a/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.transformed.expect
@@ -37,14 +37,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.expect b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.expect
index d077f3e..59a319e 100644
--- a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.expect
@@ -43,14 +43,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.transformed.expect
index d077f3e..59a319e 100644
--- a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.transformed.expect
@@ -43,14 +43,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.expect b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.expect
index d077f3e..59a319e 100644
--- a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.expect
@@ -43,14 +43,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.transformed.expect
index d077f3e..59a319e 100644
--- a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.transformed.expect
@@ -43,14 +43,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.expect b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.expect
index 21c901e..b2a184a 100644
--- a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.expect
@@ -49,14 +49,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.transformed.expect
index 21c901e..b2a184a 100644
--- a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.transformed.expect
@@ -49,14 +49,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.expect b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.expect
index 21c901e..b2a184a 100644
--- a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.expect
@@ -49,14 +49,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.transformed.expect
index 21c901e..b2a184a 100644
--- a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.transformed.expect
@@ -49,14 +49,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/simple.dart.strong.expect b/pkg/front_end/testcases/value_class/simple.dart.strong.expect
index 9c011f1..f0a1c74 100644
--- a/pkg/front_end/testcases/value_class/simple.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/simple.dart.strong.expect
@@ -58,13 +58,13 @@
   self::Animal thirdAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:15:31: Error: No named parameter with the name 'numberOfLegs'.
   Animal thirdAnimal = Animal(numberOfLegs: 3);
                               ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Animal;
-  self::expect(true, firstAnimal.{core::Object::==}(secondAnimal));
-  self::expect(false, firstAnimal.{core::Object::==}(thirdAnimal));
-  self::expect(true, firstAnimal.{core::Object::hashCode}.{core::num::==}(secondAnimal.{core::Object::hashCode}));
-  self::expect(false, firstAnimal.{core::Object::hashCode}.{core::num::==}(thirdAnimal.{core::Object::hashCode}));
+  self::expect(true, firstAnimal =={core::Object::==}{(core::Object) → core::bool} secondAnimal);
+  self::expect(false, firstAnimal =={core::Object::==}{(core::Object) → core::bool} thirdAnimal);
+  self::expect(true, firstAnimal.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondAnimal.{core::Object::hashCode}{core::int});
+  self::expect(false, firstAnimal.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdAnimal.{core::Object::hashCode}{core::int});
 }
 static method expect(core::Object? expected, core::Object? actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected=${expected}, actual=${actual}";
 }
 
@@ -77,14 +77,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/simple.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/simple.dart.strong.transformed.expect
index f8dee0a..6c1ece6 100644
--- a/pkg/front_end/testcases/value_class/simple.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/simple.dart.strong.transformed.expect
@@ -58,13 +58,13 @@
   self::Animal thirdAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:15:31: Error: No named parameter with the name 'numberOfLegs'.
   Animal thirdAnimal = Animal(numberOfLegs: 3);
                               ^^^^^^^^^^^^";
-  self::expect(true, firstAnimal.{core::Object::==}(secondAnimal));
-  self::expect(false, firstAnimal.{core::Object::==}(thirdAnimal));
-  self::expect(true, firstAnimal.{core::Object::hashCode}.{core::num::==}(secondAnimal.{core::Object::hashCode}));
-  self::expect(false, firstAnimal.{core::Object::hashCode}.{core::num::==}(thirdAnimal.{core::Object::hashCode}));
+  self::expect(true, firstAnimal =={core::Object::==}{(core::Object) → core::bool} secondAnimal);
+  self::expect(false, firstAnimal =={core::Object::==}{(core::Object) → core::bool} thirdAnimal);
+  self::expect(true, firstAnimal.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondAnimal.{core::Object::hashCode}{core::int});
+  self::expect(false, firstAnimal.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdAnimal.{core::Object::hashCode}{core::int});
 }
 static method expect(core::Object? expected, core::Object? actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected=${expected}, actual=${actual}";
 }
 
@@ -77,14 +77,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/simple.dart.weak.expect b/pkg/front_end/testcases/value_class/simple.dart.weak.expect
index 9c011f1..f0a1c74 100644
--- a/pkg/front_end/testcases/value_class/simple.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/simple.dart.weak.expect
@@ -58,13 +58,13 @@
   self::Animal thirdAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:15:31: Error: No named parameter with the name 'numberOfLegs'.
   Animal thirdAnimal = Animal(numberOfLegs: 3);
                               ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Animal;
-  self::expect(true, firstAnimal.{core::Object::==}(secondAnimal));
-  self::expect(false, firstAnimal.{core::Object::==}(thirdAnimal));
-  self::expect(true, firstAnimal.{core::Object::hashCode}.{core::num::==}(secondAnimal.{core::Object::hashCode}));
-  self::expect(false, firstAnimal.{core::Object::hashCode}.{core::num::==}(thirdAnimal.{core::Object::hashCode}));
+  self::expect(true, firstAnimal =={core::Object::==}{(core::Object) → core::bool} secondAnimal);
+  self::expect(false, firstAnimal =={core::Object::==}{(core::Object) → core::bool} thirdAnimal);
+  self::expect(true, firstAnimal.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondAnimal.{core::Object::hashCode}{core::int});
+  self::expect(false, firstAnimal.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdAnimal.{core::Object::hashCode}{core::int});
 }
 static method expect(core::Object? expected, core::Object? actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected=${expected}, actual=${actual}";
 }
 
@@ -77,14 +77,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/simple.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/simple.dart.weak.transformed.expect
index f8dee0a..6c1ece6 100644
--- a/pkg/front_end/testcases/value_class/simple.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/simple.dart.weak.transformed.expect
@@ -58,13 +58,13 @@
   self::Animal thirdAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:15:31: Error: No named parameter with the name 'numberOfLegs'.
   Animal thirdAnimal = Animal(numberOfLegs: 3);
                               ^^^^^^^^^^^^";
-  self::expect(true, firstAnimal.{core::Object::==}(secondAnimal));
-  self::expect(false, firstAnimal.{core::Object::==}(thirdAnimal));
-  self::expect(true, firstAnimal.{core::Object::hashCode}.{core::num::==}(secondAnimal.{core::Object::hashCode}));
-  self::expect(false, firstAnimal.{core::Object::hashCode}.{core::num::==}(thirdAnimal.{core::Object::hashCode}));
+  self::expect(true, firstAnimal =={core::Object::==}{(core::Object) → core::bool} secondAnimal);
+  self::expect(false, firstAnimal =={core::Object::==}{(core::Object) → core::bool} thirdAnimal);
+  self::expect(true, firstAnimal.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondAnimal.{core::Object::hashCode}{core::int});
+  self::expect(false, firstAnimal.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdAnimal.{core::Object::hashCode}{core::int});
 }
 static method expect(core::Object? expected, core::Object? actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected=${expected}, actual=${actual}";
 }
 
@@ -77,14 +77,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.expect
index 9ba8a2f..08b2269 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.expect
@@ -64,13 +64,13 @@
   self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:20:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
                      ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
-  self::expect(true, firstCat.{core::Object::==}(secondCat));
-  self::expect(false, firstCat.{core::Object::==}(thirdCat));
-  self::expect(true, firstCat.{core::Object::hashCode}.{core::num::==}(secondCat.{core::Object::hashCode}));
-  self::expect(false, firstCat.{core::Object::hashCode}.{core::num::==}(thirdCat.{core::Object::hashCode}));
+  self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
+  self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
+  self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat.{core::Object::hashCode}{core::int});
 }
 static method expect(core::Object? expected, core::Object? actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected=${expected}, actual=${actual}";
 }
 
@@ -83,14 +83,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C2;
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.transformed.expect
index cac374d..3954e85 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.transformed.expect
@@ -64,13 +64,13 @@
   self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:20:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
                      ^^^^^^^^^^^^";
-  self::expect(true, firstCat.{core::Object::==}(secondCat));
-  self::expect(false, firstCat.{core::Object::==}(thirdCat));
-  self::expect(true, firstCat.{core::Object::hashCode}.{core::num::==}(secondCat.{core::Object::hashCode}));
-  self::expect(false, firstCat.{core::Object::hashCode}.{core::num::==}(thirdCat.{core::Object::hashCode}));
+  self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
+  self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
+  self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat.{core::Object::hashCode}{core::int});
 }
 static method expect(core::Object? expected, core::Object? actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected=${expected}, actual=${actual}";
 }
 
@@ -83,14 +83,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C2;
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.expect
index 9ba8a2f..08b2269 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.expect
@@ -64,13 +64,13 @@
   self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:20:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
                      ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
-  self::expect(true, firstCat.{core::Object::==}(secondCat));
-  self::expect(false, firstCat.{core::Object::==}(thirdCat));
-  self::expect(true, firstCat.{core::Object::hashCode}.{core::num::==}(secondCat.{core::Object::hashCode}));
-  self::expect(false, firstCat.{core::Object::hashCode}.{core::num::==}(thirdCat.{core::Object::hashCode}));
+  self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
+  self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
+  self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat.{core::Object::hashCode}{core::int});
 }
 static method expect(core::Object? expected, core::Object? actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected=${expected}, actual=${actual}";
 }
 
@@ -83,14 +83,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C2;
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.transformed.expect
index cac374d..3954e85 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.transformed.expect
@@ -64,13 +64,13 @@
   self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:20:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
                      ^^^^^^^^^^^^";
-  self::expect(true, firstCat.{core::Object::==}(secondCat));
-  self::expect(false, firstCat.{core::Object::==}(thirdCat));
-  self::expect(true, firstCat.{core::Object::hashCode}.{core::num::==}(secondCat.{core::Object::hashCode}));
-  self::expect(false, firstCat.{core::Object::hashCode}.{core::num::==}(thirdCat.{core::Object::hashCode}));
+  self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
+  self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
+  self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat.{core::Object::hashCode}{core::int});
 }
 static method expect(core::Object? expected, core::Object? actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected=${expected}, actual=${actual}";
 }
 
@@ -83,14 +83,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C2;
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.expect b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.expect
index e039566..263682d 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.expect
@@ -66,14 +66,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.transformed.expect
index d80dd8f..523dee1f 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.transformed.expect
@@ -66,14 +66,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.expect b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.expect
index e039566..263682d 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.expect
@@ -66,14 +66,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.transformed.expect
index d80dd8f..523dee1f 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.transformed.expect
@@ -66,14 +66,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.expect b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.expect
index e8f803a..0f84494 100644
--- a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.expect
@@ -127,10 +127,10 @@
   self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:31:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
                      ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
-  self::expect(true, firstCat.{core::Object::==}(secondCat));
-  self::expect(false, firstCat.{core::Object::==}(thirdCat));
-  self::expect(true, firstCat.{core::Object::hashCode}.{core::num::==}(secondCat.{core::Object::hashCode}));
-  self::expect(false, firstCat.{core::Object::hashCode}.{core::num::==}(thirdCat.{core::Object::hashCode}));
+  self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
+  self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
+  self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat.{core::Object::hashCode}{core::int});
   self::Cat2 firstCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:39:25: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 firstCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 10);
                         ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat2;
@@ -140,13 +140,13 @@
   self::Cat2 thirdCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:41:25: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 thirdCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 0);
                         ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat2;
-  self::expect(true, firstCat2.{core::Object::==}(secondCat2));
-  self::expect(false, firstCat2.{core::Object::==}(thirdCat2));
-  self::expect(true, firstCat2.{core::Object::hashCode}.{core::num::==}(secondCat2.{core::Object::hashCode}));
-  self::expect(false, firstCat2.{core::Object::hashCode}.{core::num::==}(thirdCat2.{core::Object::hashCode}));
+  self::expect(true, firstCat2 =={core::Object::==}{(core::Object) → core::bool} secondCat2);
+  self::expect(false, firstCat2 =={core::Object::==}{(core::Object) → core::bool} thirdCat2);
+  self::expect(true, firstCat2.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat2.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat2.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat2.{core::Object::hashCode}{core::int});
 }
 static method expect(core::Object? expected, core::Object? actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected=${expected}, actual=${actual}";
 }
 
@@ -159,14 +159,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.transformed.expect
index bb58694..b0fba59 100644
--- a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.transformed.expect
@@ -127,10 +127,10 @@
   self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:31:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
                      ^^^^^^^^^^^^";
-  self::expect(true, firstCat.{core::Object::==}(secondCat));
-  self::expect(false, firstCat.{core::Object::==}(thirdCat));
-  self::expect(true, firstCat.{core::Object::hashCode}.{core::num::==}(secondCat.{core::Object::hashCode}));
-  self::expect(false, firstCat.{core::Object::hashCode}.{core::num::==}(thirdCat.{core::Object::hashCode}));
+  self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
+  self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
+  self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat.{core::Object::hashCode}{core::int});
   self::Cat2 firstCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:39:25: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 firstCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 10);
                         ^^^^^^^^^^^^";
@@ -140,13 +140,13 @@
   self::Cat2 thirdCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:41:25: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 thirdCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 0);
                         ^^^^^^^^^^^^";
-  self::expect(true, firstCat2.{core::Object::==}(secondCat2));
-  self::expect(false, firstCat2.{core::Object::==}(thirdCat2));
-  self::expect(true, firstCat2.{core::Object::hashCode}.{core::num::==}(secondCat2.{core::Object::hashCode}));
-  self::expect(false, firstCat2.{core::Object::hashCode}.{core::num::==}(thirdCat2.{core::Object::hashCode}));
+  self::expect(true, firstCat2 =={core::Object::==}{(core::Object) → core::bool} secondCat2);
+  self::expect(false, firstCat2 =={core::Object::==}{(core::Object) → core::bool} thirdCat2);
+  self::expect(true, firstCat2.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat2.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat2.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat2.{core::Object::hashCode}{core::int});
 }
 static method expect(core::Object? expected, core::Object? actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected=${expected}, actual=${actual}";
 }
 
@@ -159,14 +159,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.expect b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.expect
index e8f803a..0f84494 100644
--- a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.expect
@@ -127,10 +127,10 @@
   self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:31:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
                      ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
-  self::expect(true, firstCat.{core::Object::==}(secondCat));
-  self::expect(false, firstCat.{core::Object::==}(thirdCat));
-  self::expect(true, firstCat.{core::Object::hashCode}.{core::num::==}(secondCat.{core::Object::hashCode}));
-  self::expect(false, firstCat.{core::Object::hashCode}.{core::num::==}(thirdCat.{core::Object::hashCode}));
+  self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
+  self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
+  self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat.{core::Object::hashCode}{core::int});
   self::Cat2 firstCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:39:25: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 firstCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 10);
                         ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat2;
@@ -140,13 +140,13 @@
   self::Cat2 thirdCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:41:25: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 thirdCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 0);
                         ^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat2;
-  self::expect(true, firstCat2.{core::Object::==}(secondCat2));
-  self::expect(false, firstCat2.{core::Object::==}(thirdCat2));
-  self::expect(true, firstCat2.{core::Object::hashCode}.{core::num::==}(secondCat2.{core::Object::hashCode}));
-  self::expect(false, firstCat2.{core::Object::hashCode}.{core::num::==}(thirdCat2.{core::Object::hashCode}));
+  self::expect(true, firstCat2 =={core::Object::==}{(core::Object) → core::bool} secondCat2);
+  self::expect(false, firstCat2 =={core::Object::==}{(core::Object) → core::bool} thirdCat2);
+  self::expect(true, firstCat2.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat2.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat2.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat2.{core::Object::hashCode}{core::int});
 }
 static method expect(core::Object? expected, core::Object? actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected=${expected}, actual=${actual}";
 }
 
@@ -159,14 +159,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.transformed.expect
index bb58694..b0fba59 100644
--- a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.transformed.expect
@@ -127,10 +127,10 @@
   self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:31:22: Error: No named parameter with the name 'numberOfLegs'.
   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
                      ^^^^^^^^^^^^";
-  self::expect(true, firstCat.{core::Object::==}(secondCat));
-  self::expect(false, firstCat.{core::Object::==}(thirdCat));
-  self::expect(true, firstCat.{core::Object::hashCode}.{core::num::==}(secondCat.{core::Object::hashCode}));
-  self::expect(false, firstCat.{core::Object::hashCode}.{core::num::==}(thirdCat.{core::Object::hashCode}));
+  self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
+  self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
+  self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat.{core::Object::hashCode}{core::int});
   self::Cat2 firstCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:39:25: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 firstCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 10);
                         ^^^^^^^^^^^^";
@@ -140,13 +140,13 @@
   self::Cat2 thirdCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:41:25: Error: No named parameter with the name 'numberOfLegs'.
   Cat2 thirdCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 0);
                         ^^^^^^^^^^^^";
-  self::expect(true, firstCat2.{core::Object::==}(secondCat2));
-  self::expect(false, firstCat2.{core::Object::==}(thirdCat2));
-  self::expect(true, firstCat2.{core::Object::hashCode}.{core::num::==}(secondCat2.{core::Object::hashCode}));
-  self::expect(false, firstCat2.{core::Object::hashCode}.{core::num::==}(thirdCat2.{core::Object::hashCode}));
+  self::expect(true, firstCat2 =={core::Object::==}{(core::Object) → core::bool} secondCat2);
+  self::expect(false, firstCat2 =={core::Object::==}{(core::Object) → core::bool} thirdCat2);
+  self::expect(true, firstCat2.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat2.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat2.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat2.{core::Object::hashCode}{core::int});
 }
 static method expect(core::Object? expected, core::Object? actual) → dynamic {
-  if(!expected.{core::Object::==}(actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected=${expected}, actual=${actual}";
 }
 
@@ -159,14 +159,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.expect b/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.expect
index 5391b61..fa9583c 100644
--- a/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.expect
@@ -54,14 +54,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.transformed.expect
index 4bf6fa3..9904420 100644
--- a/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.transformed.expect
@@ -62,14 +62,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.expect b/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.expect
index 5391b61..fa9583c 100644
--- a/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.expect
@@ -54,14 +54,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.transformed.expect
index 4bf6fa3..9904420 100644
--- a/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.transformed.expect
@@ -62,14 +62,14 @@
     : super core::Object::•()
     ;
   static method combine(core::int hash, core::int value) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(value));
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash).{core::int::<<}(10)));
-    return hash.{core::int::^}(hash.{core::int::>>}(6));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
   }
   static method finish(core::int hash) → core::int {
-    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash).{core::int::<<}(3)));
-    hash = hash.{core::int::^}(hash.{core::int::>>}(11));
-    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash).{core::int::<<}(15)));
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
   }
 }
 static const field core::String valueClass = #C1;
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.expect
index fbf4052..e7ce2ad 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.expect
@@ -60,7 +60,7 @@
     : self::E::f = f, super core::Object::•()
     ;
   method method(self::E::T% x) → core::int {
-    let final self::E::T% #t1 = x in this.{self::E::f}.call(#t1);
+    let final self::E::T% #t1 = x in this.{self::E::f}{(self::E::T%) → void}(#t1){(self::E::T%) → void};
     return 0;
   }
 }
@@ -78,40 +78,40 @@
   method noSuchMethod(core::Invocation _) → dynamic
     return 3;
   no-such-method-forwarder get x() → self::NoSuchMethod::T?
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T?;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T?;
   no-such-method-forwarder method method(self::NoSuchMethod::T% x) → self::NoSuchMethod::T%
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T%;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T%;
   no-such-method-forwarder set y(self::NoSuchMethod::T% x) → void
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder set x(self::NoSuchMethod::T? value) → void
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {
   self::A<core::int, core::num, core::String> a = new self::A::•<core::int, core::num, core::String>();
-  self::expect(null, a.{self::A::field});
-  a.{self::A::method}(3, (core::num num) → void {}, "test");
-  a.{self::A::method2}(3);
+  self::expect(null, a.{self::A::field}{(core::int) →? void});
+  a.{self::A::method}(3, (core::num num) → void {}, "test"){(core::int, (core::num) → void, core::String) → void};
+  a.{self::A::method2}(3){(core::int, [core::int?]) → void};
   a.{self::A::x} = 3;
-  core::Map<core::num, self::Contravariant<core::String>> mapContra = a.{self::A::mapContra} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, self::Contravariant<core::String>>;
-  core::Map<core::num, (core::String) → void> mapContraFn = a.{self::A::mapContraFn} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, (core::String) → void>;
-  core::Map<core::num, self::Invariant<core::String>> mapInv = a.{self::A::mapInv} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, self::Invariant<core::String>>;
-  core::Map<core::num, (core::String) → core::String> mapInvFn = a.{self::A::mapInvFn} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, (core::String) → core::String>;
+  core::Map<core::num, self::Contravariant<core::String>> mapContra = a.{self::A::mapContra}{core::Map<core::num, self::Contravariant<core::String>>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, self::Contravariant<core::String>>;
+  core::Map<core::num, (core::String) → void> mapContraFn = a.{self::A::mapContraFn}{core::Map<core::num, (core::String) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, (core::String) → void>;
+  core::Map<core::num, self::Invariant<core::String>> mapInv = a.{self::A::mapInv}{core::Map<core::num, self::Invariant<core::String>>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, self::Invariant<core::String>>;
+  core::Map<core::num, (core::String) → core::String> mapInvFn = a.{self::A::mapInvFn}{core::Map<core::num, (core::String) → core::String>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, (core::String) → core::String>;
   self::B<core::int> b = new self::B::•<core::int>();
   b.{self::B::x} = 3;
-  self::expect(3, b.{self::B::x});
-  self::expect(3, b.{self::B::method}(3));
+  self::expect(3, b.{self::B::x}{core::int?});
+  self::expect(3, b.{self::B::method}(3){(core::int) → core::int});
   b.{self::B::y} = 3;
   self::C<core::int> c = new self::C::•<core::int>();
-  self::expect(null, c.{self::C::field});
-  c.{self::C::method}(3, 2);
+  self::expect(null, c.{self::C::field}{(core::int) →? void});
+  c.{self::C::method}(3, 2){(core::int, [core::int?]) → void};
   c.{self::C::x} = 3;
   self::D<core::Object> d = new self::F::•<core::String>((core::String s) → void {});
-  d.{self::D::method}("test");
+  d.{self::D::method}("test"){(core::Object) → core::int};
   self::NoSuchMethod<core::num> nsm = new self::NoSuchMethod::•<core::num>();
-  self::expect(3, nsm.{self::B::method}(3));
+  self::expect(3, nsm.{self::B::method}(3){(core::num) → core::num});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
index 1ce38f4..ae0d389 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
@@ -73,13 +73,13 @@
   method noSuchMethod(core::Invocation _) → dynamic
     ;
   no-such-method-forwarder get x() → self::NoSuchMethod::T?
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T?;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T?;
   no-such-method-forwarder method method(self::NoSuchMethod::T% x) → self::NoSuchMethod::T%
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T%;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T%;
   no-such-method-forwarder set y(self::NoSuchMethod::T% x) → void
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#y=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#y=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder set x(self::NoSuchMethod::T? value) → void
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.transformed.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.transformed.expect
index 3719b77..5346fee6 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.transformed.expect
@@ -60,7 +60,7 @@
     : self::E::f = f, super core::Object::•()
     ;
   method method(self::E::T% x) → core::int {
-    let final self::E::T% #t1 = x in this.{self::E::f}.call(#t1);
+    let final self::E::T% #t1 = x in this.{self::E::f}{(self::E::T%) → void}(#t1){(self::E::T%) → void};
     return 0;
   }
 }
@@ -78,40 +78,40 @@
   method noSuchMethod(core::Invocation _) → dynamic
     return 3;
   no-such-method-forwarder get x() → self::NoSuchMethod::T?
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T?;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T?;
   no-such-method-forwarder method method(self::NoSuchMethod::T% x) → self::NoSuchMethod::T%
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T%;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T%;
   no-such-method-forwarder set y(self::NoSuchMethod::T% x) → void
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
   no-such-method-forwarder set x(self::NoSuchMethod::T? value) → void
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {
   self::A<core::int, core::num, core::String> a = new self::A::•<core::int, core::num, core::String>();
-  self::expect(null, a.{self::A::field});
-  a.{self::A::method}(3, (core::num num) → void {}, "test");
-  a.{self::A::method2}(3);
+  self::expect(null, a.{self::A::field}{(core::int) →? void});
+  a.{self::A::method}(3, (core::num num) → void {}, "test"){(core::int, (core::num) → void, core::String) → void};
+  a.{self::A::method2}(3){(core::int, [core::int?]) → void};
   a.{self::A::x} = 3;
-  core::Map<core::num, self::Contravariant<core::String>> mapContra = a.{self::A::mapContra} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, self::Contravariant<core::String>>;
-  core::Map<core::num, (core::String) → void> mapContraFn = a.{self::A::mapContraFn} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, (core::String) → void>;
-  core::Map<core::num, self::Invariant<core::String>> mapInv = a.{self::A::mapInv} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, self::Invariant<core::String>>;
-  core::Map<core::num, (core::String) → core::String> mapInvFn = a.{self::A::mapInvFn} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, (core::String) → core::String>;
+  core::Map<core::num, self::Contravariant<core::String>> mapContra = a.{self::A::mapContra}{core::Map<core::num, self::Contravariant<core::String>>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, self::Contravariant<core::String>>;
+  core::Map<core::num, (core::String) → void> mapContraFn = a.{self::A::mapContraFn}{core::Map<core::num, (core::String) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, (core::String) → void>;
+  core::Map<core::num, self::Invariant<core::String>> mapInv = a.{self::A::mapInv}{core::Map<core::num, self::Invariant<core::String>>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, self::Invariant<core::String>>;
+  core::Map<core::num, (core::String) → core::String> mapInvFn = a.{self::A::mapInvFn}{core::Map<core::num, (core::String) → core::String>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, (core::String) → core::String>;
   self::B<core::int> b = new self::B::•<core::int>();
   b.{self::B::x} = 3;
-  self::expect(3, b.{self::B::x});
-  self::expect(3, b.{self::B::method}(3));
+  self::expect(3, b.{self::B::x}{core::int?});
+  self::expect(3, b.{self::B::method}(3){(core::int) → core::int});
   b.{self::B::y} = 3;
   self::C<core::int> c = new self::C::•<core::int>();
-  self::expect(null, c.{self::C::field});
-  c.{self::C::method}(3, 2);
+  self::expect(null, c.{self::C::field}{(core::int) →? void});
+  c.{self::C::method}(3, 2){(core::int, [core::int?]) → void};
   c.{self::C::x} = 3;
   self::D<core::Object> d = new self::F::•<core::String>((core::String s) → void {});
-  d.{self::D::method}("test");
+  d.{self::D::method}("test"){(core::Object) → core::int};
   self::NoSuchMethod<core::num> nsm = new self::NoSuchMethod::•<core::num>();
-  self::expect(3, nsm.{self::B::method}(3));
+  self::expect(3, nsm.{self::B::method}(3){(core::num) → core::num});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!expected.{core::Object::==}(actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 5d39cc6..cf57e3c 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -18,11 +18,9 @@
 extension_types/simple_method_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_operator_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_setter_resolution: ExpectationFileMismatchSerialized # Expected.
-extensions/call_methods: TypeCheckError
 extensions/extension_setter_error: TypeCheckError
 extensions/instance_access_of_static: RuntimeError
 extensions/invalid_explicit_access: RuntimeError
-extensions/issue40713: TypeCheckError
 extensions/static_access_of_instance: RuntimeError
 general/abstract_members: TypeCheckError
 general/accessors: RuntimeError
@@ -74,7 +72,6 @@
 general/error_recovery/yield_not_in_generator: RuntimeError
 general/expressions: RuntimeError
 general/external_import: RuntimeError # The native extension to import doesn't exist. This is ok.
-general/function_invocation_bounds: TypeCheckError
 general/getter_vs_setter_type: TypeCheckError
 general/incomplete_field_formal_parameter: RuntimeError
 general/infer_field_from_multiple: TypeCheckError
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 1b8f1de..5d93861 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -63,7 +63,7 @@
       !flags.forceNoExplicitGetterCallsForTesting;
 
   @override
-  bool get supportsNewMethodInvocationEncoding => false;
+  bool get supportsNewMethodInvocationEncoding => true;
 
   @override
   String get name => 'vm';
diff --git a/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect b/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect
index 291ca37..38a3e92 100644
--- a/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect
+++ b/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect
@@ -30,7 +30,7 @@
     : self::FooEnum::index = index, self::FooEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::FooEnum::_name};
+    return this.{self::FooEnum::_name}{core::String};
 }
 class Keep extends core::Object {
   synthetic constructor •() → self::Keep
@@ -46,9 +46,9 @@
   return "I am static";
 static method main() → void {
   final self::IFoo foo = new self::Foo::•();
-  core::print(foo.{self::IFoo::toString}());
-  core::print(new self::Keep::•().{self::Keep::toString}());
-  core::print((#C7).{self::FooEnum::toString}());
+  core::print(foo.{self::IFoo::toString}(){() → core::String});
+  core::print(new self::Keep::•().{self::Keep::toString}(){() → core::String});
+  core::print((#C7).{self::FooEnum::toString}(){() → core::String});
 }
 constants  {
   #C1 = core::_Override {}
diff --git a/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect b/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect
index 7ae1922..a858cd6 100644
--- a/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect
+++ b/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect
@@ -30,7 +30,7 @@
     : self::FooEnum::index = index, self::FooEnum::_name = _name, super core::Object::•()
     ;
   method toString() → core::String
-    return this.{self::FooEnum::_name};
+    return this.{self::FooEnum::_name}{core::String};
 }
 class Keep extends core::Object {
   synthetic constructor •() → self::Keep
@@ -46,9 +46,9 @@
   return "I am static";
 static method main() → void {
   final self::IFoo foo = new self::Foo::•();
-  core::print(foo.{self::IFoo::toString}());
-  core::print(new self::Keep::•().{self::Keep::toString}());
-  core::print((#C7).{self::FooEnum::toString}());
+  core::print(foo.{self::IFoo::toString}(){() → core::String});
+  core::print(new self::Keep::•().{self::Keep::toString}(){() → core::String});
+  core::print((#C7).{self::FooEnum::toString}(){() → core::String});
 }
 constants  {
   #C1 = core::_Override {}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/annotation.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/annotation.dart.expect
index a1350da..70239f8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/annotation.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/annotation.dart.expect
@@ -14,10 +14,10 @@
 }
 [@vm.unboxing-info.metadata=()->i]static method foo() → core::int* {
   core::int* x = 2;
-  return [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] x.{core::num::+}(2);
+  return [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] x.{core::num::+}(2){(core::num*) →* core::int*};
 }
 static method main(core::List<core::String*>* args) → dynamic {
   self::A::staticMethod();
-  [@vm.direct-call.metadata=#lib::B.instanceMethod] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•().{self::B::instanceMethod}();
+  [@vm.direct-call.metadata=#lib::B.instanceMethod] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•().{self::B::instanceMethod}(){() →* void};
   self::foo();
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
index ee9f237..51ff150 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
@@ -86,7 +86,7 @@
       {
         :async_temporary_0 = [@vm.inferred-type.metadata=#lib::A] self::foo();
         [yield] let dynamic #t1 = asy::_awaitHelper([@vm.inferred-type.metadata=dart.async::_Future<dynamic>] self::baz(), :async_op_then, :async_op_error, :async_op) in null;
-        [yield] let dynamic #t2 = asy::_awaitHelper([@vm.direct-call.metadata=#lib::A.bar??] [@vm.inferred-type.metadata=dart.async::_Future<dynamic> (receiver not int)] _in::unsafeCast<dynamic>(:async_temporary_0).bar(:result), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t2 = asy::_awaitHelper([@vm.direct-call.metadata=#lib::A.bar??] [@vm.inferred-type.metadata=dart.async::_Future<dynamic> (receiver not int)] _in::unsafeCast<dynamic>(:async_temporary_0){dynamic}.bar(:result), :async_op_then, :async_op_error, :async_op) in null;
         :result;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
index 66f1a20..dc738d5 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
@@ -4,20 +4,20 @@
 import "dart:_internal" as _in;
 
 [@vm.unboxing-info.metadata=(i)->b]static method isPrime([@vm.inferred-type.metadata=int] dynamic n) → core::bool* {
-  if(_in::unsafeCast<core::bool*>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool] n.<(2)))
+  if(_in::unsafeCast<core::bool*>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool] n{dynamic}.<(2)))
     return false;
-  for (core::int* i = 2; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<=] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation.*] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::*}(i).{core::num::<=}(_in::unsafeCast<core::num*>(n)); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
-    if([@vm.direct-call.metadata=dart.core::_IntegerImplementation.==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation.%] [@vm.inferred-type.metadata=int] n.%(i).{core::Object::==}(0))
+  for (core::int* i = 2; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<=] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation.*] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::*}(i){(core::num*) →* core::int*}.{core::num::<=}(_in::unsafeCast<core::num*>(n)){(core::num*) →* core::bool*}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if([@vm.direct-call.metadata=dart.core::_IntegerImplementation.==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation.%] [@vm.inferred-type.metadata=int] n{dynamic}.%(i) =={core::Object::==}{(core::Object*) →* core::bool*} 0)
       return false;
   }
   return true;
 }
 static method nThPrimeNumber() → core::int* {
   core::int* counter = 0;
-  for (core::int* i = 1; ; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
+  for (core::int* i = 1; ; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num*) →* core::int*}) {
     if([@vm.inferred-type.metadata=dart.core::bool] self::isPrime(i))
-      counter = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.inferred-type.metadata=int (skip check)] counter.{core::num::+}(1);
-    if([@vm.inferred-type.metadata=dart.core::bool] counter.{core::num::==}(#C1)) {
+      counter = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.inferred-type.metadata=int (skip check)] counter.{core::num::+}(1){(core::num*) →* core::int*};
+    if([@vm.inferred-type.metadata=dart.core::bool] counter =={core::num::==}{(core::Object*) →* core::bool*} (#C1)) {
       return i;
     }
   }
@@ -25,19 +25,19 @@
 static method run() → void {
   core::int* e = 611953;
   core::int* p = [@vm.inferred-type.metadata=int?] self::nThPrimeNumber();
-  if(![@vm.inferred-type.metadata=dart.core::bool] p.{core::num::==}(e)) {
+  if(!([@vm.inferred-type.metadata=dart.core::bool] p =={core::num::==}{(core::Object*) →* core::bool*} e)) {
     throw core::Exception::•("Unexpected result: ${p} != ${e}");
   }
 }
 static method main(core::List<core::String*>* args) → dynamic {
   core::Stopwatch* timer = let final core::Stopwatch* #t1 = new core::Stopwatch::•() in block {
-    [@vm.direct-call.metadata=dart.core::Stopwatch.start] [@vm.inferred-type.metadata=!? (skip check)] #t1.{core::Stopwatch::start}();
+    [@vm.direct-call.metadata=dart.core::Stopwatch.start] [@vm.inferred-type.metadata=!? (skip check)] #t1.{core::Stopwatch::start}(){() →* void};
   } =>#t1;
-  for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
+  for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100){(core::num*) →* core::bool*}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num*) →* core::int*}) {
     self::run();
   }
-  [@vm.direct-call.metadata=dart.core::Stopwatch.stop] [@vm.inferred-type.metadata=!? (skip check)] timer.{core::Stopwatch::stop}();
-  core::print("Elapsed ${[@vm.direct-call.metadata=dart.core::Stopwatch.elapsedMilliseconds] timer.{core::Stopwatch::elapsedMilliseconds}}ms");
+  [@vm.direct-call.metadata=dart.core::Stopwatch.stop] [@vm.inferred-type.metadata=!? (skip check)] timer.{core::Stopwatch::stop}(){() →* void};
+  core::print("Elapsed ${[@vm.direct-call.metadata=dart.core::Stopwatch.elapsedMilliseconds] timer.{core::Stopwatch::elapsedMilliseconds}{core::int*}}ms");
 }
 constants  {
   #C1 = 50000
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
index b30442b..92746ce 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
@@ -13,14 +13,14 @@
     : self::_Vector::_offset = 0, self::_Vector::_length = #C1, self::_Vector::_elements = [@vm.inferred-type.metadata=dart.typed_data::_Float64List] typ::Float64List::•(#C1), super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:4] [@vm.unboxing-info.metadata=(b)->d]  operator []([@vm.inferred-type.metadata=!] core::int* i) → core::double*
-    return [@vm.direct-call.metadata=dart.typed_data::_Float64List.[]] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.direct-call.metadata=#lib::_Vector._elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}.{core::List::[]}([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}([@vm.direct-call.metadata=#lib::_Vector._offset] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0)] this.{self::_Vector::_offset}));
+    return [@vm.direct-call.metadata=dart.typed_data::_Float64List.[]] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.direct-call.metadata=#lib::_Vector._elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}{core::List<core::double*>*}.{core::List::[]}([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}([@vm.direct-call.metadata=#lib::_Vector._offset] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0)] this.{self::_Vector::_offset}{core::int*}){(core::num*) →* core::int*}){(core::int*) →* core::double*};
 [@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5]  operator []=([@vm.inferred-type.metadata=dart.core::_OneByteString] core::int* i, core::double* value) → void {
-    let dynamic #t1 = [@vm.direct-call.metadata=#lib::_Vector._elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements} in let dynamic #t2 = [@vm.direct-call.metadata=#lib::_Vector._offset] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0)] this.{self::_Vector::_offset} in throw "Attempt to execute code removed by Dart AOT compiler (TFA)";
+    let dynamic #t1 = [@vm.direct-call.metadata=#lib::_Vector._elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}{core::List<core::double*>*} in let dynamic #t2 = [@vm.direct-call.metadata=#lib::_Vector._offset] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0)] this.{self::_Vector::_offset}{core::int*} in throw "Attempt to execute code removed by Dart AOT compiler (TFA)";
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6] [@vm.unboxing-info.metadata=(b)->d]  operator *([@vm.inferred-type.metadata=#lib::_Vector?] self::_Vector* a) → core::double* {
     core::double* result = 0.0;
-    for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}([@vm.direct-call.metadata=#lib::_Vector._length] [@vm.inferred-type.metadata=dart.core::_Smi (value: 10)] this.{self::_Vector::_length}); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1))
-      result = [@vm.direct-call.metadata=dart.core::_Double.+??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] result.{core::double::+}([@vm.direct-call.metadata=dart.core::_Double.*] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.direct-call.metadata=#lib::_Vector.[]] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] this.{self::_Vector::[]}(i).{core::double::*}([@vm.direct-call.metadata=#lib::_Vector.[]??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] a.{self::_Vector::[]}(i)));
+    for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}([@vm.direct-call.metadata=#lib::_Vector._length] [@vm.inferred-type.metadata=dart.core::_Smi (value: 10)] this.{self::_Vector::_length}{core::int*}){(core::num*) →* core::bool*}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num*) →* core::int*})
+      result = [@vm.direct-call.metadata=dart.core::_Double.+??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] result.{core::double::+}([@vm.direct-call.metadata=dart.core::_Double.*] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.direct-call.metadata=#lib::_Vector.[]] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] this.{self::_Vector::[]}(i){(core::int*) →* core::double*}.{core::double::*}([@vm.direct-call.metadata=#lib::_Vector.[]??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] a.{self::_Vector::[]}(i){(core::int*) →* core::double*}){(core::num*) →* core::double*}){(core::num*) →* core::double*};
     return result;
   }
 }
@@ -28,13 +28,13 @@
 [@vm.inferred-type.metadata=dart.core::_Double?]static field core::double* x = 0.0;
 static method main(core::List<core::String*>* args) → dynamic {
   core::Stopwatch* timer = let final core::Stopwatch* #t3 = new core::Stopwatch::•() in block {
-    [@vm.direct-call.metadata=dart.core::Stopwatch.start] [@vm.inferred-type.metadata=!? (skip check)] #t3.{core::Stopwatch::start}();
+    [@vm.direct-call.metadata=dart.core::Stopwatch.start] [@vm.inferred-type.metadata=!? (skip check)] #t3.{core::Stopwatch::start}(){() →* void};
   } =>#t3;
-  for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100000000); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
-    self::x = [@vm.direct-call.metadata=dart.core::_Double.+??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.inferred-type.metadata=dart.core::_Double?] self::x.{core::double::+}([@vm.direct-call.metadata=#lib::_Vector.*??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.inferred-type.metadata=#lib::_Vector?] self::v.{self::_Vector::*}([@vm.inferred-type.metadata=#lib::_Vector?] self::v));
+  for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100000000){(core::num*) →* core::bool*}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    self::x = [@vm.direct-call.metadata=dart.core::_Double.+??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.inferred-type.metadata=dart.core::_Double?] self::x.{core::double::+}([@vm.direct-call.metadata=#lib::_Vector.*??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.inferred-type.metadata=#lib::_Vector?] self::v.{self::_Vector::*}([@vm.inferred-type.metadata=#lib::_Vector?] self::v){(self::_Vector*) →* core::double*}){(core::num*) →* core::double*};
   }
-  [@vm.direct-call.metadata=dart.core::Stopwatch.stop] [@vm.inferred-type.metadata=!? (skip check)] timer.{core::Stopwatch::stop}();
-  core::print("Elapsed ${[@vm.direct-call.metadata=dart.core::Stopwatch.elapsedMilliseconds] timer.{core::Stopwatch::elapsedMilliseconds}}ms, result ${self::x}");
+  [@vm.direct-call.metadata=dart.core::Stopwatch.stop] [@vm.inferred-type.metadata=!? (skip check)] timer.{core::Stopwatch::stop}(){() →* void};
+  core::print("Elapsed ${[@vm.direct-call.metadata=dart.core::Stopwatch.elapsedMilliseconds] timer.{core::Stopwatch::elapsedMilliseconds}{core::int*}}ms, result ${self::x}");
 }
 constants  {
   #C1 = 10
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect
index 25ef2d6..00cfa5c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect
@@ -63,14 +63,14 @@
     return x;
 }
 static method main() → dynamic {
-  core::print([@vm.direct-call.metadata=#lib::C.foo] [@vm.inferred-type.metadata=#lib::D<dart.core::int*> (skip check)] new self::C::•<core::int*>().{self::C::foo}());
-  core::print([@vm.direct-call.metadata=#lib::E.foo] [@vm.inferred-type.metadata=#lib::D<dart.core::String*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::foo}());
-  core::print([@vm.direct-call.metadata=#lib::E.bar] [@vm.inferred-type.metadata=#lib::D<dart.core::int*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::bar}());
-  core::print([@vm.direct-call.metadata=#lib::E.baz] [@vm.inferred-type.metadata=#lib::D<dart.core::String*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::baz}());
+  core::print([@vm.direct-call.metadata=#lib::C.foo] [@vm.inferred-type.metadata=#lib::D<dart.core::int*> (skip check)] new self::C::•<core::int*>().{self::C::foo}(){() →* dynamic});
+  core::print([@vm.direct-call.metadata=#lib::E.foo] [@vm.inferred-type.metadata=#lib::D<dart.core::String*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::foo}(){() →* dynamic});
+  core::print([@vm.direct-call.metadata=#lib::E.bar] [@vm.inferred-type.metadata=#lib::D<dart.core::int*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::bar}(){() →* dynamic});
+  core::print([@vm.direct-call.metadata=#lib::E.baz] [@vm.inferred-type.metadata=#lib::D<dart.core::String*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::baz}(){() →* dynamic});
   self::C<self::X*>* c = new self::C::•<self::Y*>();
-  [@vm.call-site-attributes.metadata=receiverType:#lib::C<#lib::X*>*] [@vm.direct-call.metadata=#lib::C.id1] [@vm.inferred-type.metadata=!? (skip check)] c.{self::C::id1}(new self::Y::•());
-  [@vm.call-site-attributes.metadata=receiverType:#lib::C<#lib::X*>*] [@vm.direct-call.metadata=#lib::C.id2] c.{self::C::id2}(new self::Z::•());
+  [@vm.call-site-attributes.metadata=receiverType:#lib::C<#lib::X*>*] [@vm.direct-call.metadata=#lib::C.id1] [@vm.inferred-type.metadata=!? (skip check)] c.{self::C::id1}(new self::Y::•()){(self::X*) →* dynamic};
+  [@vm.call-site-attributes.metadata=receiverType:#lib::C<#lib::X*>*] [@vm.direct-call.metadata=#lib::C.id2] c.{self::C::id2}(new self::Z::•()){(self::X*) →* dynamic};
   self::C2<core::num*>* c2 = new self::C2::•<core::num*>();
-  [@vm.call-site-attributes.metadata=receiverType:#lib::C2<dart.core::num*>*] [@vm.direct-call.metadata=#lib::C2.id3] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id3}(3.0);
-  [@vm.call-site-attributes.metadata=receiverType:#lib::C2<dart.core::num*>*] [@vm.direct-call.metadata=#lib::C2.id4] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id4}(new self::K::•<self::J*>());
+  [@vm.call-site-attributes.metadata=receiverType:#lib::C2<dart.core::num*>*] [@vm.direct-call.metadata=#lib::C2.id3] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id3}(3.0){(core::Comparable<core::num*>*) →* dynamic};
+  [@vm.call-site-attributes.metadata=receiverType:#lib::C2<dart.core::num*>*] [@vm.direct-call.metadata=#lib::C2.id4] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id4}(new self::K::•<self::J*>()){(self::K<self::I<core::num*>*>*) →* dynamic};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect
index ffb7ff5..e0e9ca7 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect
@@ -15,11 +15,11 @@
     : super self::Element::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]  method setDependencies([@vm.inferred-type.metadata=!] self::Element* dependent, [@vm.inferred-type.metadata=dart.core::_Smi?] core::Object* value) → void {
-    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<#lib::Element*, dart.core::Object*>*] [@vm.direct-call.metadata=dart.collection::__InternalLinkedHashMap&_HashVMBase&MapMixin&_LinkedHashMapMixin.[]=] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::InheritedElement._dependents] [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<#lib::Element*, dart.core::Object*>] this.{self::InheritedElement::_dependents}.{core::Map::[]=}(dependent, value);
+    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<#lib::Element*, dart.core::Object*>*] [@vm.direct-call.metadata=dart.collection::__InternalLinkedHashMap&_HashVMBase&MapMixin&_LinkedHashMapMixin.[]=] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::InheritedElement._dependents] [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<#lib::Element*, dart.core::Object*>] this.{self::InheritedElement::_dependents}{core::Map<self::Element*, core::Object*>*}.{core::Map::[]=}(dependent, value){(self::Element*, core::Object*) →* void};
   }
 }
 static method main() → dynamic {
   self::InheritedElement* ie = new self::InheritedElement::•();
-  [@vm.direct-call.metadata=#lib::InheritedElement.setDependencies] [@vm.inferred-type.metadata=!? (skip check)] ie.{self::InheritedElement::setDependencies}(ie, 0);
-  [@vm.direct-call.metadata=#lib::InheritedElement.setDependencies] [@vm.inferred-type.metadata=!? (skip check)] ie.{self::InheritedElement::setDependencies}(new self::Element::•(), null);
+  [@vm.direct-call.metadata=#lib::InheritedElement.setDependencies] [@vm.inferred-type.metadata=!? (skip check)] ie.{self::InheritedElement::setDependencies}(ie, 0){(self::Element*, core::Object*) →* void};
+  [@vm.direct-call.metadata=#lib::InheritedElement.setDependencies] [@vm.inferred-type.metadata=!? (skip check)] ie.{self::InheritedElement::setDependencies}(new self::Element::•(), null){(self::Element*, core::Object*) →* void};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect
index de33bef..4487ac5 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect
@@ -15,7 +15,7 @@
 [@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] [@vm.unboxing-info.metadata=()->i]  final field core::int* index;
 [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "B.b2")] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5]  final field core::String* _name;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7]  method toString() → core::String*
-    return [@vm.direct-call.metadata=#lib::B._name] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "B.b2")] this.{self::B::_name};
+    return [@vm.direct-call.metadata=#lib::B._name] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "B.b2")] this.{self::B::_name}{core::String*};
 }
 static method test0() → void {
   core::print(#C1);
@@ -33,8 +33,8 @@
   core::print([@vm.inferred-type.metadata=dart.core::_Double (value: 100.0)] self::getD);
 }
 static method testStrings([@vm.inferred-type.metadata=#lib::A] self::A* a0) → void {
-  core::print([@vm.direct-call.metadata=#lib::A.foo] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "foo")] a0.{self::A::foo});
-  core::print([@vm.direct-call.metadata=#lib::A.getBar] [@vm.inferred-type.metadata=dart.core::_OneByteString (skip check) (value: "bar")] a0.{self::A::getBar}());
+  core::print([@vm.direct-call.metadata=#lib::A.foo] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "foo")] a0.{self::A::foo}{core::String*});
+  core::print([@vm.direct-call.metadata=#lib::A.getBar] [@vm.inferred-type.metadata=dart.core::_OneByteString (skip check) (value: "bar")] a0.{self::A::getBar}(){() →* core::String*});
   core::print(#C5);
 }
 static method testPassEnum() → void {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
index 04dad11..ebf2078 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
@@ -37,22 +37,22 @@
 [@vm.inferred-type.metadata=#lib::D?]static field self::A* dd;
 [@vm.inferred-type.metadata=#lib::E?]static field self::E* ee = new self::E::•();
 static method callerA1([@vm.inferred-type.metadata=!] self::A* aa) → void {
-  [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}();
+  [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}(){() →* core::int*};
 }
 static method callerA2([@vm.inferred-type.metadata=#lib::B] self::A* aa) → void {
-  [@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}();
+  [@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}(){() →* core::int*};
 }
 static method callerA3([@vm.inferred-type.metadata=#lib::C] self::A* aa) → void {
-  [@vm.direct-call.metadata=#lib::C.foo] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}();
+  [@vm.direct-call.metadata=#lib::C.foo] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}(){() →* core::int*};
 }
 static method callerA4([@vm.inferred-type.metadata=#lib::D?] self::A* aa) → void {
-  [@vm.direct-call.metadata=#lib::C.foo??] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}();
+  [@vm.direct-call.metadata=#lib::C.foo??] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}(){() →* core::int*};
 }
 static method callerE1() → void {
-  [@vm.direct-call.metadata=dart.core::_StringBase.toString] [@vm.inferred-type.metadata=!? (skip check) (receiver not int)](#C1).{core::Object::toString}();
+  [@vm.direct-call.metadata=dart.core::_StringBase.toString] [@vm.inferred-type.metadata=!? (skip check) (receiver not int)](#C1).{core::Object::toString}(){() →* core::String*};
 }
 static method callerE2([@vm.inferred-type.metadata=#lib::E?] dynamic x) → void {
-  [@vm.inferred-type.metadata=!? (receiver not int)] x.{core::Object::toString}();
+  [@vm.inferred-type.metadata=!? (receiver not int)] x.{core::Object::toString}(){() →* core::String*};
 }
 static method main(core::List<core::String*>* args) → dynamic {
   self::callerA1(new self::B::•());
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect
index 350004d..17a558f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect
@@ -4,5 +4,5 @@
 
 static method main() → dynamic {
   dynamic x = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] core::_List::•<core::int*>(10);
-  [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.direct-call.metadata=dart.core::_List.[]] [@vm.inferred-type.metadata=int? (receiver not int)] x.[](0).+(10);
+  [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.direct-call.metadata=dart.core::_List.[]] [@vm.inferred-type.metadata=int? (receiver not int)] x{dynamic}.[](0){dynamic}.+(10);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_used_as_type.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/enum_used_as_type.dart.expect
index 8412f3c..92f5135 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/enum_used_as_type.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_used_as_type.dart.expect
@@ -11,12 +11,12 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]  method method() → core::int*
-    return [@vm.inferred-type.metadata=!](#C1).{self::Enum::index};
+    return [@vm.inferred-type.metadata=!](#C1).{self::Enum::index}{core::int*};
 }
 static method main() → dynamic {
   core::List<dynamic>* list = [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::•<dynamic>(0);
-  if([@vm.direct-call.metadata=dart.core::_GrowableList.isNotEmpty] [@vm.inferred-type.metadata=dart.core::bool] list.{core::Iterable::isNotEmpty}) {
-    let final self::Class* #t1 = new self::Class::•() in let final self::Enum* #t2 = _in::unsafeCast<self::Enum*>(_in::unsafeCast<dynamic>(null)) in [@vm.direct-call.metadata=#lib::Class.method] [@vm.inferred-type.metadata=!? (skip check)] #t1.{self::Class::method}();
+  if([@vm.direct-call.metadata=dart.core::_GrowableList.isNotEmpty] [@vm.inferred-type.metadata=dart.core::bool] list.{core::Iterable::isNotEmpty}{core::bool*}) {
+    let final self::Class* #t1 = new self::Class::•() in let final self::Enum* #t2 = _in::unsafeCast<self::Enum*>(_in::unsafeCast<dynamic>(null)) in [@vm.direct-call.metadata=#lib::Class.method] [@vm.inferred-type.metadata=!? (skip check)] #t1.{self::Class::method}(){(self::Enum*) →* core::int*};
   }
 }
 constants  {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart.expect
index 1b0b088..08c06bb 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart.expect
@@ -68,7 +68,7 @@
   final () →* self::Struct1* function1 = block {
     _in::_nativeEffect(new self::Struct1::#fromTypedDataBase([@vm.inferred-type.metadata=dart.typed_data::_Uint8List] typ::Uint8List::•(#C18)));
   } =>ffi::_asFunctionInternal<() →* self::Struct1*, () →* self::Struct1*>([@vm.direct-call.metadata=dart.ffi::DynamicLibrary.lookup??] [@vm.inferred-type.metadata=dart.ffi::Pointer? (skip check)] dylib.{ffi::DynamicLibrary::lookup}<ffi::NativeFunction<() →* self::Struct1*>*>("function1"));
-  final self::Struct1* struct1 = [@vm.call-site-attributes.metadata=receiverType:#lib::Struct1* Function()*] function1.call();
+  final self::Struct1* struct1 = [@vm.call-site-attributes.metadata=receiverType:#lib::Struct1* Function()*] function1(){() →* self::Struct1*};
   core::print(struct1);
 }
 static method testAsFunctionReturn() → void {
@@ -76,7 +76,7 @@
   final () →* self::Struct2* function2 = block {
     _in::_nativeEffect(new self::Struct2::#fromTypedDataBase([@vm.inferred-type.metadata=dart.typed_data::_Uint8List] typ::Uint8List::•(#C18)));
   } =>ffi::_asFunctionInternal<() →* self::Struct2*, () →* self::Struct2*>(pointer);
-  final self::Struct2* struct2 = [@vm.call-site-attributes.metadata=receiverType:#lib::Struct2* Function()*] function2.call();
+  final self::Struct2* struct2 = [@vm.call-site-attributes.metadata=receiverType:#lib::Struct2* Function()*] function2(){() →* self::Struct2*};
   core::print(struct2);
 }
 [@vm.unboxing-info.metadata=(b)->i]static method useStruct3(self::Struct3* struct3) → core::int* {
@@ -113,7 +113,7 @@
 static method testNestedLoad() → void {
   final ffi::Pointer<self::Struct11*>* pointer = [@vm.inferred-type.metadata=dart.ffi::Pointer?] ffi::Pointer::fromAddress<self::Struct11*>(3735928559);
   final self::Struct11* struct11 = new self::Struct11::#fromTypedDataBase(pointer!);
-  final self::Struct12* struct12 = [@vm.direct-call.metadata=#lib::Struct11.nested] [@vm.inferred-type.metadata=#lib::Struct12] struct11.{self::Struct11::nested};
+  final self::Struct12* struct12 = [@vm.direct-call.metadata=#lib::Struct11.nested] [@vm.inferred-type.metadata=#lib::Struct12] struct11.{self::Struct11::nested}{self::Struct12*};
   core::print(struct12);
 }
 constants  {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect
index 432f7fc..8a43ab1 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect
@@ -22,14 +22,14 @@
 }
 static method main() → dynamic {
   dynamic c = new self::C::•<core::int*>();
-  [@vm.direct-call.metadata=#lib::C.test2c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test2c(3);
-  [@vm.direct-call.metadata=#lib::C.test3c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test3c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*>] asy::Future::value<core::int*>(3));
-  [@vm.direct-call.metadata=#lib::C.test4c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test4c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*>] asy::Future::value<core::int*>(3));
-  [@vm.direct-call.metadata=#lib::C.test2r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test2r(new self::C::•<core::int*>());
-  [@vm.direct-call.metadata=#lib::C.test3r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test3r(new self::C::•<asy::Future<core::int*>*>());
-  [@vm.direct-call.metadata=#lib::C.test4r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test4r(new self::C::•<asy::Future<core::int*>*>());
-  [@vm.direct-call.metadata=#lib::C.test5r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test5r(new self::C::•<FutureOr<core::int*>*>());
-  [@vm.direct-call.metadata=#lib::C.test6r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test6r(new self::C::•<FutureOr<core::int*>*>());
-  [@vm.direct-call.metadata=#lib::C.test7r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test7r(new self::C::•<FutureOr<core::int*>*>());
-  [@vm.direct-call.metadata=#lib::C.test8r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test8r(new self::C::•<asy::Future<core::int*>*>());
+  [@vm.direct-call.metadata=#lib::C.test2c] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test2c(3);
+  [@vm.direct-call.metadata=#lib::C.test3c] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test3c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*>] asy::Future::value<core::int*>(3));
+  [@vm.direct-call.metadata=#lib::C.test4c] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test4c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*>] asy::Future::value<core::int*>(3));
+  [@vm.direct-call.metadata=#lib::C.test2r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test2r(new self::C::•<core::int*>());
+  [@vm.direct-call.metadata=#lib::C.test3r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test3r(new self::C::•<asy::Future<core::int*>*>());
+  [@vm.direct-call.metadata=#lib::C.test4r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test4r(new self::C::•<asy::Future<core::int*>*>());
+  [@vm.direct-call.metadata=#lib::C.test5r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test5r(new self::C::•<FutureOr<core::int*>*>());
+  [@vm.direct-call.metadata=#lib::C.test6r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test6r(new self::C::•<FutureOr<core::int*>*>());
+  [@vm.direct-call.metadata=#lib::C.test7r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test7r(new self::C::•<FutureOr<core::int*>*>());
+  [@vm.direct-call.metadata=#lib::C.test8r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test8r(new self::C::•<asy::Future<core::int*>*>());
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect
index 32c6fb4..4a850d3 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect
@@ -18,7 +18,7 @@
 static field dynamic usedObject;
 [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown;
 static method use(dynamic object) → void {
-  [@vm.inferred-type.metadata=!? (receiver not int)] self::usedObject.{core::Object::==}(null) ?{dynamic} self::usedObject = object : null;
+  self::usedObject == null ?{dynamic} self::usedObject = object : null;
 }
 static method foo1_a1([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] dynamic x) → void {
   self::use(x);
@@ -57,7 +57,7 @@
   self::foo2_a4(a4);
 }
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown();
 static method main(core::List<core::String*>* args) → dynamic {
   self::foo1([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•(), [@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•());
   self::foo2(self::getDynamic() as{TypeError,ForDynamic} asy::Future<self::A*>*, self::getDynamic() as{TypeError,ForDynamic} self::A*, self::getDynamic() as{TypeError,ForDynamic} FutureOr<self::A*>*, self::getDynamic() as{TypeError,ForDynamic} FutureOr<self::A*>*);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart.expect
index 6fce119..4b18c73 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart.expect
@@ -29,7 +29,7 @@
     : super self::Stream::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method foobar() → self::StreamSubscription* {
-    return [@vm.inferred-type.metadata=! (skip check)] this.{self::_StreamImpl::_createSubscription}();
+    return [@vm.inferred-type.metadata=! (skip check)] this.{self::_StreamImpl::_createSubscription}(){() →* self::StreamSubscription*};
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]  method _createSubscription() → self::StreamSubscription* {
     return new self::_BufferingStreamSubscription::•();
@@ -54,7 +54,7 @@
     : self::StreamView::_stream = stream, super self::Stream::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method foobar() → self::StreamSubscription* {
-    return [@vm.direct-call.metadata=#lib::StreamView._stream] [@vm.inferred-type.metadata=!] this.{self::StreamView::_stream}.{self::Stream::foobar}();
+    return [@vm.direct-call.metadata=#lib::StreamView._stream] [@vm.inferred-type.metadata=!] this.{self::StreamView::_stream}{self::Stream*}.{self::Stream::foobar}(){((dynamic) →* void, {onError: core::Function*}) →* self::StreamSubscription*};
   }
 }
 class ByteStream extends self::StreamView {
@@ -83,32 +83,32 @@
 }
 static method round1() → void {
   self::ByteStream* x = new self::ByteStream::•(new self::ByteStream::•(new self::_GeneratedStreamImpl::•()));
-  [@vm.direct-call.metadata=#lib::ByteStream.super_foobar1] [@vm.inferred-type.metadata=!? (skip check)] x.{self::ByteStream::super_foobar1}();
+  [@vm.direct-call.metadata=#lib::ByteStream.super_foobar1] [@vm.inferred-type.metadata=!? (skip check)] x.{self::ByteStream::super_foobar1}(){((dynamic) →* void) →* dynamic};
 }
 static method round2() → void {
   new self::_ControllerStream::•();
   self::Stream* x = new self::_GeneratedStreamImpl::•();
   x = new self::ByteStream::•(x);
-  [@vm.direct-call.metadata=#lib::StreamView.foobar] [@vm.inferred-type.metadata=!? (skip check)] x.{self::Stream::foobar}();
+  [@vm.direct-call.metadata=#lib::StreamView.foobar] [@vm.inferred-type.metadata=!? (skip check)] x.{self::Stream::foobar}(){((dynamic) →* void, {onError: core::Function*}) →* self::StreamSubscription*};
 }
 static method round3() → void {
   self::Stream* x = new self::_GeneratedStreamImpl::•();
   x = new self::ByteStream::•(x);
   x = new self::_ControllerStream::•();
-  [@vm.direct-call.metadata=#lib::_StreamImpl.foobar] [@vm.inferred-type.metadata=!? (skip check)] x.{self::Stream::foobar}();
+  [@vm.direct-call.metadata=#lib::_StreamImpl.foobar] [@vm.inferred-type.metadata=!? (skip check)] x.{self::Stream::foobar}(){((dynamic) →* void, {onError: core::Function*}) →* self::StreamSubscription*};
 }
 static method round4() → void {
   self::ByteStream* x = new self::ByteStream::•(new self::_ControllerStream::•());
-  self::Stream* y = [@vm.direct-call.metadata=#lib::ByteStream.super_stream] [@vm.inferred-type.metadata=!] x.{self::ByteStream::super_stream};
-  self::Stream* z = [@vm.direct-call.metadata=#lib::StreamView._stream] [@vm.inferred-type.metadata=!] x.{self::StreamView::_stream};
-  if([@vm.direct-call.metadata=dart.core::Object.==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] y.{self::Stream::==}(z)) {
-    [@vm.direct-call.metadata=#lib::ByteStream.super_foobar2] [@vm.inferred-type.metadata=!? (skip check)] x.{self::ByteStream::super_foobar2}();
+  self::Stream* y = [@vm.direct-call.metadata=#lib::ByteStream.super_stream] [@vm.inferred-type.metadata=!] x.{self::ByteStream::super_stream}{self::Stream*};
+  self::Stream* z = [@vm.direct-call.metadata=#lib::StreamView._stream] [@vm.inferred-type.metadata=!] x.{self::StreamView::_stream}{self::Stream*};
+  if([@vm.direct-call.metadata=dart.core::Object.==] [@vm.inferred-type.metadata=dart.core::bool (skip check) (receiver not int)] y =={self::Stream::==}{(dynamic) →* core::bool*} z) {
+    [@vm.direct-call.metadata=#lib::ByteStream.super_foobar2] [@vm.inferred-type.metadata=!? (skip check)] x.{self::ByteStream::super_foobar2}(){((dynamic) →* void) →* dynamic};
   }
 }
 static method round5() → void {
   self::ByteStream* x = new self::ByteStream::•(new self::_GeneratedStreamImpl::•());
   new self::_HandleErrorStream::•();
-  [@vm.direct-call.metadata=#lib::ByteStream.super_foobar3] [@vm.inferred-type.metadata=!? (skip check)] x.{self::ByteStream::super_foobar3}();
+  [@vm.direct-call.metadata=#lib::ByteStream.super_foobar3] [@vm.inferred-type.metadata=!? (skip check)] x.{self::ByteStream::super_foobar3}(){({onData: (dynamic) →* void, onError: core::Function*}) →* dynamic};
 }
 static method main(core::List<core::String*>* args) → dynamic {
   new self::_GeneratedStreamImpl::•();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
index 2739a4d..09df5d9 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
@@ -34,11 +34,11 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method barL1() → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller1.barL2] [@vm.inferred-type.metadata=!? (skip check)] this.{self::DeepCaller1::barL2}();
+    return [@vm.direct-call.metadata=#lib::DeepCaller1.barL2] [@vm.inferred-type.metadata=!? (skip check)] this.{self::DeepCaller1::barL2}(){() →* dynamic};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method barL2() → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller1.barL3] [@vm.inferred-type.metadata=!? (skip check)] this.{self::DeepCaller1::barL3}();
+    return [@vm.direct-call.metadata=#lib::DeepCaller1.barL3] [@vm.inferred-type.metadata=!? (skip check)] this.{self::DeepCaller1::barL3}(){() →* dynamic};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  method barL3() → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller1.barL4] [@vm.inferred-type.metadata=!? (skip check)] this.{self::DeepCaller1::barL4}();
+    return [@vm.direct-call.metadata=#lib::DeepCaller1.barL4] [@vm.inferred-type.metadata=!? (skip check)] this.{self::DeepCaller1::barL4}(){() →* dynamic};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10]  method barL4() → dynamic
     return self::field1;
 }
@@ -53,26 +53,26 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method barL1([@vm.inferred-type.metadata=#lib::D] self::D* dd) → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller2.barL2] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL2}(dd);
+    return [@vm.direct-call.metadata=#lib::DeepCaller2.barL2] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL2}(dd){(self::D*) →* dynamic};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16]  method barL2([@vm.inferred-type.metadata=#lib::D] self::D* dd) → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller2.barL3] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL3}(dd);
+    return [@vm.direct-call.metadata=#lib::DeepCaller2.barL3] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL3}(dd){(self::D*) →* dynamic};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18]  method barL3([@vm.inferred-type.metadata=#lib::D] self::D* dd) → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller2.barL4] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL4}(dd);
+    return [@vm.direct-call.metadata=#lib::DeepCaller2.barL4] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL4}(dd){(self::D*) →* dynamic};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20]  method barL4([@vm.inferred-type.metadata=#lib::D] self::D* dd) → dynamic
-    return [@vm.direct-call.metadata=#lib::D.field2] [@vm.inferred-type.metadata=!] dd.{self::D::field2};
+    return [@vm.direct-call.metadata=#lib::D.field2] [@vm.inferred-type.metadata=!] dd.{self::D::field2}{core::Object*};
 }
 [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown;
 static field core::Object* field1 = [@vm.inferred-type.metadata=!] self::getValue();
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown();
 static method getValue() → core::Object* {
   self::A* aa = self::getDynamic() as{TypeError,ForDynamic} self::A*;
-  return [@vm.inferred-type.metadata=!] aa.{self::A::foo}();
+  return [@vm.inferred-type.metadata=!] aa.{self::A::foo}(){() →* core::Object*};
 }
 static method use1([@vm.inferred-type.metadata=#lib::DeepCaller1] self::DeepCaller1* x) → dynamic
-  return [@vm.direct-call.metadata=#lib::DeepCaller1.barL1] [@vm.inferred-type.metadata=!? (skip check)] x.{self::DeepCaller1::barL1}();
+  return [@vm.direct-call.metadata=#lib::DeepCaller1.barL1] [@vm.inferred-type.metadata=!? (skip check)] x.{self::DeepCaller1::barL1}(){() →* dynamic};
 static method use2([@vm.inferred-type.metadata=#lib::DeepCaller2] self::DeepCaller2* x) → dynamic
-  return [@vm.direct-call.metadata=#lib::DeepCaller2.barL1] [@vm.inferred-type.metadata=! (skip check)] x.{self::DeepCaller2::barL1}(new self::D::•());
+  return [@vm.direct-call.metadata=#lib::DeepCaller2.barL1] [@vm.inferred-type.metadata=! (skip check)] x.{self::DeepCaller2::barL1}(new self::D::•()){(self::D*) →* dynamic};
 static method createC() → dynamic {
   new self::C::•();
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
index 8432b7e..6f62466 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
@@ -25,15 +25,15 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method bar([@vm.inferred-type.metadata=#lib::B?] self::A* aa) → dynamic
-    return [@vm.direct-call.metadata=#lib::B.foo??] [@vm.inferred-type.metadata=#lib::T1 (skip check)] aa.{self::A::foo}();
+    return [@vm.direct-call.metadata=#lib::B.foo??] [@vm.inferred-type.metadata=#lib::T1 (skip check)] aa.{self::A::foo}(){() →* dynamic};
 }
 [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown;
 static method use1([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate* i, [@vm.inferred-type.metadata=#lib::B?] self::A* aa) → dynamic
-  return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=#lib::T1 (skip check)] i.{self::Intermediate::bar}(aa);
+  return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=#lib::T1 (skip check)] i.{self::Intermediate::bar}(aa){(self::A*) →* dynamic};
 static method use2([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate* i, [@vm.inferred-type.metadata=#lib::B?] self::A* aa) → dynamic
-  return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=#lib::T1 (skip check)] i.{self::Intermediate::bar}(aa);
+  return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=#lib::T1 (skip check)] i.{self::Intermediate::bar}(aa){(self::A*) →* dynamic};
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown();
 static method allocateB() → dynamic {
   new self::B::•();
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
index 78761af..a9156b1 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
@@ -49,17 +49,17 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method bar(self::A* aa) → dynamic
-    return [@vm.inferred-type.metadata=!] aa.{self::A::foo}();
+    return [@vm.inferred-type.metadata=!] aa.{self::A::foo}(){() →* dynamic};
 }
 [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown;
 static method use1([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate* i, self::A* aa) → dynamic
-  return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=! (skip check)] i.{self::Intermediate::bar}(aa);
+  return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=! (skip check)] i.{self::Intermediate::bar}(aa){(self::A*) →* dynamic};
 static method use2([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate* i, self::A* aa) → dynamic
-  return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=! (skip check)] i.{self::Intermediate::bar}(aa);
+  return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=! (skip check)] i.{self::Intermediate::bar}(aa){(self::A*) →* dynamic};
 static method use3([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate* i, self::A* aa) → dynamic
-  return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=! (skip check)] i.{self::Intermediate::bar}(aa);
+  return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=! (skip check)] i.{self::Intermediate::bar}(aa){(self::A*) →* dynamic};
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown();
 static method allocateB() → dynamic {
   new self::B::•();
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect
index 9db28b3..bc21869 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect
@@ -41,15 +41,15 @@
 }
 [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown;
 static method use_foo1(dynamic x) → dynamic
-  return [@vm.inferred-type.metadata=#lib::T1] x.foo();
+  return [@vm.inferred-type.metadata=#lib::T1] x{dynamic}.foo();
 static method use_foo2(dynamic x) → dynamic
-  return [@vm.inferred-type.metadata=#lib::T1] x.foo();
+  return [@vm.inferred-type.metadata=#lib::T1] x{dynamic}.foo();
 static method use_bar(dynamic x) → dynamic
-  return [@vm.inferred-type.metadata=#lib::T2] x.bar();
+  return [@vm.inferred-type.metadata=#lib::T2] x{dynamic}.bar();
 static method use_bazz(dynamic x) → dynamic
-  return [@vm.inferred-type.metadata=#lib::T3] x.bazz();
+  return [@vm.inferred-type.metadata=#lib::T3] x{dynamic}.bazz();
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown();
 static method allocateA() → dynamic {
   new self::A::•();
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
index 64655ae..f07cc2b 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
@@ -24,34 +24,34 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method barL1([@vm.inferred-type.metadata=#lib::A?] self::A* aa) → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller1.barL2] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::DeepCaller1::barL2}(aa);
+    return [@vm.direct-call.metadata=#lib::DeepCaller1.barL2] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::DeepCaller1::barL2}(aa){(self::A*) →* dynamic};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  method barL2([@vm.inferred-type.metadata=#lib::A?] self::A* aa) → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller1.barL3] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::DeepCaller1::barL3}(aa);
+    return [@vm.direct-call.metadata=#lib::DeepCaller1.barL3] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::DeepCaller1::barL3}(aa){(self::A*) →* dynamic};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10]  method barL3([@vm.inferred-type.metadata=#lib::A?] self::A* aa) → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller1.barL4] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::DeepCaller1::barL4}(aa);
+    return [@vm.direct-call.metadata=#lib::DeepCaller1.barL4] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::DeepCaller1::barL4}(aa){(self::A*) →* dynamic};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]  method barL4([@vm.inferred-type.metadata=#lib::A?] self::A* aa) → dynamic
-    return [@vm.direct-call.metadata=#lib::A.field1??] [@vm.inferred-type.metadata=#lib::T1] aa.{self::A::field1};
+    return [@vm.direct-call.metadata=#lib::A.field1??] [@vm.inferred-type.metadata=#lib::T1] aa.{self::A::field1}{dynamic};
 }
 class DeepCaller2 extends core::Object {
   synthetic constructor •() → self::DeepCaller2*
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method barL1([@vm.inferred-type.metadata=#lib::A?] self::A* aa) → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller2.barL2] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL2}(aa);
+    return [@vm.direct-call.metadata=#lib::DeepCaller2.barL2] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL2}(aa){(self::A*) →* dynamic};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16]  method barL2([@vm.inferred-type.metadata=#lib::A?] self::A* aa) → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller2.barL3] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL3}(aa);
+    return [@vm.direct-call.metadata=#lib::DeepCaller2.barL3] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL3}(aa){(self::A*) →* dynamic};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18]  method barL3([@vm.inferred-type.metadata=#lib::A?] self::A* aa) → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller2.barL4] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL4}(aa);
+    return [@vm.direct-call.metadata=#lib::DeepCaller2.barL4] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL4}(aa){(self::A*) →* dynamic};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20]  method barL4([@vm.inferred-type.metadata=#lib::A?] self::A* aa) → dynamic
-    return [@vm.direct-call.metadata=#lib::A.field2??] [@vm.inferred-type.metadata=!] aa.{self::A::field2};
+    return [@vm.direct-call.metadata=#lib::A.field2??] [@vm.inferred-type.metadata=!] aa.{self::A::field2}{dynamic};
 }
 [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown;
 static method use1([@vm.inferred-type.metadata=#lib::DeepCaller1] self::DeepCaller1* x, [@vm.inferred-type.metadata=#lib::A?] self::A* aa) → dynamic
-  return [@vm.direct-call.metadata=#lib::DeepCaller1.barL1] [@vm.inferred-type.metadata=#lib::T1 (skip check)] x.{self::DeepCaller1::barL1}(aa);
+  return [@vm.direct-call.metadata=#lib::DeepCaller1.barL1] [@vm.inferred-type.metadata=#lib::T1 (skip check)] x.{self::DeepCaller1::barL1}(aa){(self::A*) →* dynamic};
 static method use2([@vm.inferred-type.metadata=#lib::DeepCaller2] self::DeepCaller2* x, [@vm.inferred-type.metadata=#lib::A?] self::A* aa) → dynamic
-  return [@vm.direct-call.metadata=#lib::DeepCaller2.barL1] [@vm.inferred-type.metadata=! (skip check)] x.{self::DeepCaller2::barL1}(aa);
+  return [@vm.direct-call.metadata=#lib::DeepCaller2.barL1] [@vm.inferred-type.metadata=! (skip check)] x.{self::DeepCaller2::barL1}(aa){(self::A*) →* dynamic};
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown();
 static method setField2([@vm.inferred-type.metadata=#lib::A] self::A* aa, [@vm.inferred-type.metadata=#lib::T2] dynamic value) → void {
   [@vm.direct-call.metadata=#lib::A.field2] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::field2} = value;
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect
index 63fc423..ffc08fe 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect
@@ -29,7 +29,7 @@
     ;
 }
 static method foo1([@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::T1*>] core::List<self::T1*>* list) → dynamic {
-  [@vm.direct-call.metadata=#lib::T3.run] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::T1.go??] [@vm.inferred-type.metadata=#lib::T3 (skip check)] [@vm.direct-call.metadata=#lib::Q.result??] [@vm.direct-call.metadata=dart._internal::ListIterable.first] [@vm.inferred-type.metadata=#lib::Q?] [@vm.direct-call.metadata=dart.collection::_ListBase&Object&ListMixin.map] [@vm.inferred-type.metadata=dart._internal::MappedListIterable<#lib::T1*, ?> (skip check)] list.{core::Iterable::map}<self::Q<self::T1*>*>((self::T1* t1) → self::Q<self::T1*>* => new self::Q::•<self::T1*>(t1)).{core::Iterable::first}.{self::Q::result}.{self::T1::go}().{self::T3::run}();
+  [@vm.direct-call.metadata=#lib::T3.run] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::T1.go??] [@vm.inferred-type.metadata=#lib::T3 (skip check)] [@vm.direct-call.metadata=#lib::Q.result??] [@vm.direct-call.metadata=dart._internal::ListIterable.first] [@vm.inferred-type.metadata=#lib::Q?] [@vm.direct-call.metadata=dart.collection::_ListBase&Object&ListMixin.map] [@vm.inferred-type.metadata=dart._internal::MappedListIterable<#lib::T1*, ?> (skip check)] list.{core::Iterable::map}<self::Q<self::T1*>*>((self::T1* t1) → self::Q<self::T1*>* => new self::Q::•<self::T1*>(t1)){((self::T1*) →* self::Q<self::T1*>*) →* core::Iterable<self::Q<self::T1*>*>*}.{core::Iterable::first}{self::Q<self::T1*>*}.{self::Q::result}{self::T1*}.{self::T1::go}(){() →* self::T3*}.{self::T3::run}(){() →* dynamic};
 }
 static method foo2NewValue() → self::Q<dynamic>*
   return new self::Q::•<self::T2*>(new self::T2::•());
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_while_processing.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_while_processing.dart.expect
index 674fdd4..74df479 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_while_processing.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_while_processing.dart.expect
@@ -23,18 +23,18 @@
     : self::Point::x = x, super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]  method newPoint1() → self::Point*
-    return new self::Point::•([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] this.{self::Point::x});
+    return new self::Point::•([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] this.{self::Point::x}{self::I*});
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7]  method newPoint2() → self::Point*
-    return new self::Point::•([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] this.{self::Point::x});
+    return new self::Point::•([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] this.{self::Point::x}{self::I*});
 }
 static method getX([@vm.inferred-type.metadata=#lib::Point] dynamic point) → dynamic {
-  [@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!? (receiver not int)] point.x;
+  [@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!? (receiver not int)] point{dynamic}.x;
 }
 static method main() → dynamic {
   self::Point* a = new self::Point::•(new self::T1::•());
-  core::print([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] a.{self::Point::x});
+  core::print([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] a.{self::Point::x}{self::I*});
   self::Point* c = new self::Point::•(new self::T2::•());
-  [@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] c.{self::Point::x}.{self::I::foo}();
-  self::getX([@vm.direct-call.metadata=#lib::Point.newPoint1] [@vm.inferred-type.metadata=#lib::Point (skip check)] a.{self::Point::newPoint1}());
-  self::getX([@vm.direct-call.metadata=#lib::Point.newPoint2] [@vm.inferred-type.metadata=#lib::Point (skip check)] a.{self::Point::newPoint2}());
+  [@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] c.{self::Point::x}{self::I*}.{self::I::foo}(){() →* void};
+  self::getX([@vm.direct-call.metadata=#lib::Point.newPoint1] [@vm.inferred-type.metadata=#lib::Point (skip check)] a.{self::Point::newPoint1}(){() →* self::Point*});
+  self::getX([@vm.direct-call.metadata=#lib::Point.newPoint2] [@vm.inferred-type.metadata=#lib::Point (skip check)] a.{self::Point::newPoint2}(){() →* self::Point*});
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/lists.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/lists.dart.expect
index 4375142..d772a44 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/lists.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/lists.dart.expect
@@ -28,28 +28,28 @@
     ;
 }
 static method nonConstant() → dynamic
-  return [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1").{core::num::==}(1);
+  return [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 1;
 static method main() → dynamic {
   self::A* x = new self::A::•();
-  core::print([@vm.direct-call.metadata=#lib::A.literal1] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::literal1});
-  core::print([@vm.direct-call.metadata=#lib::A.literal2] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::literal2});
-  core::print([@vm.direct-call.metadata=#lib::A.constLiteral1] [@vm.inferred-type.metadata=dart.core::_ImmutableList (value: const <dart.core::int*>[])] x.{self::A::constLiteral1});
-  core::print([@vm.direct-call.metadata=#lib::A.constLiteral2] [@vm.inferred-type.metadata=dart.core::_ImmutableList (value: const <dart.core::int*>[1, 2])] x.{self::A::constLiteral2});
-  core::print([@vm.direct-call.metadata=#lib::A.defaultConstructor1] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::defaultConstructor1});
-  core::print([@vm.direct-call.metadata=#lib::A.defaultConstructor2] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] x.{self::A::defaultConstructor2});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory1] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] x.{self::A::filledFactory1});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory2] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::filledFactory2});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory3] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] x.{self::A::filledFactory3});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory4] [@vm.inferred-type.metadata=!] x.{self::A::filledFactory4});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory5] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] x.{self::A::filledFactory5});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory6] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::filledFactory6});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory7] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] x.{self::A::filledFactory7});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory8] [@vm.inferred-type.metadata=!] x.{self::A::filledFactory8});
-  core::print([@vm.direct-call.metadata=#lib::A.generateFactory1] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::generateFactory1});
-  core::print([@vm.direct-call.metadata=#lib::A.generateFactory2] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::generateFactory2});
-  core::print([@vm.direct-call.metadata=#lib::A.generateFactory3] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] x.{self::A::generateFactory3});
-  core::print([@vm.direct-call.metadata=#lib::A.generateFactory4] [@vm.inferred-type.metadata=!] x.{self::A::generateFactory4});
-  core::print([@vm.direct-call.metadata=#lib::A.generateFactory5] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::List<dart.core::int*>*>] x.{self::A::generateFactory5});
+  core::print([@vm.direct-call.metadata=#lib::A.literal1] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::literal1}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.literal2] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::literal2}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.constLiteral1] [@vm.inferred-type.metadata=dart.core::_ImmutableList (value: const <dart.core::int*>[])] x.{self::A::constLiteral1}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.constLiteral2] [@vm.inferred-type.metadata=dart.core::_ImmutableList (value: const <dart.core::int*>[1, 2])] x.{self::A::constLiteral2}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.defaultConstructor1] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::defaultConstructor1}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.defaultConstructor2] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] x.{self::A::defaultConstructor2}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory1] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] x.{self::A::filledFactory1}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory2] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::filledFactory2}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory3] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] x.{self::A::filledFactory3}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory4] [@vm.inferred-type.metadata=!] x.{self::A::filledFactory4}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory5] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] x.{self::A::filledFactory5}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory6] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::filledFactory6}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory7] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] x.{self::A::filledFactory7}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory8] [@vm.inferred-type.metadata=!] x.{self::A::filledFactory8}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.generateFactory1] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::generateFactory1}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.generateFactory2] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] x.{self::A::generateFactory2}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.generateFactory3] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] x.{self::A::generateFactory3}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.generateFactory4] [@vm.inferred-type.metadata=!] x.{self::A::generateFactory4}{core::List<core::int*>*});
+  core::print([@vm.direct-call.metadata=#lib::A.generateFactory5] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::List<dart.core::int*>*>] x.{self::A::generateFactory5}{core::List<core::List<core::int*>*>*});
 }
 constants  {
   #C1 = <core::int*>[]
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/lists_nnbd.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/lists_nnbd.dart.expect
index 8911bdc..893475a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/lists_nnbd.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/lists_nnbd.dart.expect
@@ -26,26 +26,26 @@
     ;
 }
 static method nonConstant() → dynamic
-  return [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1").{core::num::==}(1);
+  return [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object) → core::bool} 1;
 static method main() → dynamic {
   self::A x = new self::A::•();
-  core::print([@vm.direct-call.metadata=#lib::A.literal1] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] x.{self::A::literal1});
-  core::print([@vm.direct-call.metadata=#lib::A.literal2] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] x.{self::A::literal2});
-  core::print([@vm.direct-call.metadata=#lib::A.constLiteral1] [@vm.inferred-type.metadata=dart.core::_ImmutableList (value: const <dart.core::int*>[])] x.{self::A::constLiteral1});
-  core::print([@vm.direct-call.metadata=#lib::A.constLiteral2] [@vm.inferred-type.metadata=dart.core::_ImmutableList (value: const <dart.core::int*>[1, 2])] x.{self::A::constLiteral2});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory1] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] x.{self::A::filledFactory1});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory2] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] x.{self::A::filledFactory2});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory3] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] x.{self::A::filledFactory3});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory4] [@vm.inferred-type.metadata=!] x.{self::A::filledFactory4});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory5] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] x.{self::A::filledFactory5});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory6] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int?>] x.{self::A::filledFactory6});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory7] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] x.{self::A::filledFactory7});
-  core::print([@vm.direct-call.metadata=#lib::A.filledFactory8] [@vm.inferred-type.metadata=!] x.{self::A::filledFactory8});
-  core::print([@vm.direct-call.metadata=#lib::A.generateFactory1] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] x.{self::A::generateFactory1});
-  core::print([@vm.direct-call.metadata=#lib::A.generateFactory2] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] x.{self::A::generateFactory2});
-  core::print([@vm.direct-call.metadata=#lib::A.generateFactory3] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] x.{self::A::generateFactory3});
-  core::print([@vm.direct-call.metadata=#lib::A.generateFactory4] [@vm.inferred-type.metadata=!] x.{self::A::generateFactory4});
-  core::print([@vm.direct-call.metadata=#lib::A.generateFactory5] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::List<dart.core::int>>] x.{self::A::generateFactory5});
+  core::print([@vm.direct-call.metadata=#lib::A.literal1] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] x.{self::A::literal1}{core::List<core::int>});
+  core::print([@vm.direct-call.metadata=#lib::A.literal2] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] x.{self::A::literal2}{core::List<core::int>});
+  core::print([@vm.direct-call.metadata=#lib::A.constLiteral1] [@vm.inferred-type.metadata=dart.core::_ImmutableList (value: const <dart.core::int*>[])] x.{self::A::constLiteral1}{core::List<core::int>});
+  core::print([@vm.direct-call.metadata=#lib::A.constLiteral2] [@vm.inferred-type.metadata=dart.core::_ImmutableList (value: const <dart.core::int*>[1, 2])] x.{self::A::constLiteral2}{core::List<core::int>});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory1] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] x.{self::A::filledFactory1}{core::List<core::int>});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory2] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] x.{self::A::filledFactory2}{core::List<core::int>});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory3] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] x.{self::A::filledFactory3}{core::List<core::int>});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory4] [@vm.inferred-type.metadata=!] x.{self::A::filledFactory4}{core::List<core::int>});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory5] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] x.{self::A::filledFactory5}{core::List<core::int?>});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory6] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int?>] x.{self::A::filledFactory6}{core::List<core::int?>});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory7] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] x.{self::A::filledFactory7}{core::List<core::int?>});
+  core::print([@vm.direct-call.metadata=#lib::A.filledFactory8] [@vm.inferred-type.metadata=!] x.{self::A::filledFactory8}{core::List<core::int?>});
+  core::print([@vm.direct-call.metadata=#lib::A.generateFactory1] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] x.{self::A::generateFactory1}{core::List<core::int>});
+  core::print([@vm.direct-call.metadata=#lib::A.generateFactory2] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] x.{self::A::generateFactory2}{core::List<core::int>});
+  core::print([@vm.direct-call.metadata=#lib::A.generateFactory3] [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] x.{self::A::generateFactory3}{core::List<core::int>});
+  core::print([@vm.direct-call.metadata=#lib::A.generateFactory4] [@vm.inferred-type.metadata=!] x.{self::A::generateFactory4}{core::List<core::int>});
+  core::print([@vm.direct-call.metadata=#lib::A.generateFactory5] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::List<dart.core::int>>] x.{self::A::generateFactory5}{core::List<core::List<core::int>>});
 }
 constants  {
   #C1 = <core::int*>[]
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/named_params_shaking_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/named_params_shaking_test.dart.expect
index 4aff357..fda4bf2 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/named_params_shaking_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/named_params_shaking_test.dart.expect
@@ -18,14 +18,14 @@
 [@vm.inferred-type.metadata=int] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i)->i]  field core::int* x;
   constructor •() → self::TestNamedOrderSub*
     : self::TestNamedOrderSub::x = [@vm.inferred-type.metadata=int] self::dec(), final core::int* #t1 = [@vm.inferred-type.metadata=int] self::inc(), final core::int* #t2 = [@vm.inferred-type.metadata=int] self::inc(), final core::int* #t3 = [@vm.inferred-type.metadata=int] self::inc(), final core::int* #t4 = [@vm.inferred-type.metadata=int] self::dec(), super self::TestNamedOrderBase::•(#t1, #t4, #t3, #t2) {
-    exp::Expect::equals([@vm.direct-call.metadata=#lib::TestNamedOrderSub.x] [@vm.inferred-type.metadata=int] this.{self::TestNamedOrderSub::x}, 0);
+    exp::Expect::equals([@vm.direct-call.metadata=#lib::TestNamedOrderSub.x] [@vm.inferred-type.metadata=int] this.{self::TestNamedOrderSub::x}{core::int*}, 0);
   }
 }
 [@vm.inferred-type.metadata=int?]static field core::int* global = 0;
 [@vm.unboxing-info.metadata=()->i]static method inc() → core::int*
-  return self::global = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.inferred-type.metadata=int (skip check)] [@vm.inferred-type.metadata=int?] self::global.{core::num::+}(1);
+  return self::global = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.inferred-type.metadata=int (skip check)] [@vm.inferred-type.metadata=int?] self::global.{core::num::+}(1){(core::num*) →* core::int*};
 [@vm.unboxing-info.metadata=()->i]static method dec() → core::int*
-  return self::global = [@vm.inferred-type.metadata=int] math::max<core::int*>(0, self::global = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.-??] [@vm.inferred-type.metadata=int (skip check)] [@vm.inferred-type.metadata=int?] self::global.{core::num::-}(1));
+  return self::global = [@vm.inferred-type.metadata=int] math::max<core::int*>(0, self::global = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.-??] [@vm.inferred-type.metadata=int (skip check)] [@vm.inferred-type.metadata=int?] self::global.{core::num::-}(1){(core::num*) →* core::int*});
 [@vm.unboxing-info.metadata=(i,i,i,i)->b]static method testNamedOrder([@vm.inferred-type.metadata=int] core::int* w, [@vm.inferred-type.metadata=int] core::int* x, [@vm.inferred-type.metadata=int] core::int* y, [@vm.inferred-type.metadata=int] core::int* z) → void {
   exp::Expect::equals(w, 1);
   exp::Expect::equals(z, 2);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
index 1b65fc4..42078a7 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
@@ -49,11 +49,11 @@
     return new self::T1::•();
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3]  no-such-method-forwarder get bar() → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic});
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  no-such-method-forwarder method foo() → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic});
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] [@vm.unboxing-info.metadata=(i,i,i,i)->b]  no-such-method-forwarder method bazz([@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic a1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic a2, [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] dynamic a3, [@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] dynamic a4) → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>()), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>()), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic});
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C*
@@ -68,11 +68,11 @@
     : super self::C::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3]  no-such-method-forwarder get bar() → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C.noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C.noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic});
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  no-such-method-forwarder method foo() → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C.noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C.noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic});
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] [@vm.unboxing-info.metadata=(i,i,i,i)->b]  no-such-method-forwarder method bazz([@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic a1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic a2, [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] dynamic a3, [@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] dynamic a4) → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C.noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>()), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C.noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>()), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic});
 }
 class E extends core::Object implements self::A {
   synthetic constructor •() → self::E*
@@ -82,7 +82,7 @@
     return new self::T4::•();
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3]  no-such-method-forwarder get bar() → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::E.noSuchMethod] [@vm.inferred-type.metadata=#lib::T4 (skip check)] this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::E.noSuchMethod] [@vm.inferred-type.metadata=#lib::T4 (skip check)] this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic});
 }
 class F extends core::Object {
   synthetic constructor •() → self::F*
@@ -114,25 +114,25 @@
 [@vm.inferred-type.metadata=#lib::D?]static field self::A* dd = new self::D::•();
 [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown;
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown();
 static method main(core::List<core::String*>* args) → dynamic {
-  core::print([@vm.direct-call.metadata=#lib::B.foo??] [@vm.inferred-type.metadata=#lib::T1 (skip check)] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::foo}());
-  core::print([@vm.direct-call.metadata=#lib::B.bar??] [@vm.inferred-type.metadata=#lib::T1] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::bar});
-  core::print([@vm.direct-call.metadata=#lib::B.bazz??] [@vm.inferred-type.metadata=#lib::T1 (skip check)] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::bazz}(1, 2, 3, 4));
-  core::print([@vm.direct-call.metadata=#lib::D.foo??] [@vm.inferred-type.metadata=#lib::T2 (skip check)] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::foo}());
-  core::print([@vm.direct-call.metadata=#lib::D.bar??] [@vm.inferred-type.metadata=#lib::T2] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::bar});
-  core::print([@vm.direct-call.metadata=#lib::D.bazz??] [@vm.inferred-type.metadata=#lib::T2 (skip check)] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::bazz}(1, 2, 3, 4));
+  core::print([@vm.direct-call.metadata=#lib::B.foo??] [@vm.inferred-type.metadata=#lib::T1 (skip check)] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::foo}(){() →* dynamic});
+  core::print([@vm.direct-call.metadata=#lib::B.bar??] [@vm.inferred-type.metadata=#lib::T1] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::bar}{dynamic});
+  core::print([@vm.direct-call.metadata=#lib::B.bazz??] [@vm.inferred-type.metadata=#lib::T1 (skip check)] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::bazz}(1, 2, 3, 4){(dynamic, dynamic, dynamic, [dynamic, dynamic]) →* dynamic});
+  core::print([@vm.direct-call.metadata=#lib::D.foo??] [@vm.inferred-type.metadata=#lib::T2 (skip check)] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::foo}(){() →* dynamic});
+  core::print([@vm.direct-call.metadata=#lib::D.bar??] [@vm.inferred-type.metadata=#lib::T2] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::bar}{dynamic});
+  core::print([@vm.direct-call.metadata=#lib::D.bazz??] [@vm.inferred-type.metadata=#lib::T2 (skip check)] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::bazz}(1, 2, 3, 4){(dynamic, dynamic, dynamic, [dynamic, dynamic]) →* dynamic});
   new self::E::•();
   self::A* xx = self::getDynamic() as{TypeError,ForDynamic} self::A*;
-  core::print([@vm.inferred-type.metadata=!] xx.{self::A::bar});
+  core::print([@vm.inferred-type.metadata=!] xx.{self::A::bar}{dynamic});
   dynamic yy = self::getDynamic();
-  core::print([@vm.inferred-type.metadata=!] yy.twoArg(1, 2, 3));
+  core::print([@vm.inferred-type.metadata=!] yy{dynamic}.twoArg(1, 2, 3));
   new self::F::•();
   dynamic gg = new self::G::•();
-  core::print([@vm.inferred-type.metadata=#lib::T5 (receiver not int)] gg.noSuchMethod(null, null));
+  core::print([@vm.inferred-type.metadata=#lib::T5 (receiver not int)] gg{dynamic}.noSuchMethod(null, null));
   dynamic hh = new self::H::•();
-  core::print([@vm.direct-call.metadata=#lib::H.foo] [@vm.inferred-type.metadata=#lib::T6 (receiver not int)] hh.foo(right: 2, left: 1));
-  core::print([@vm.inferred-type.metadata=#lib::T7 (receiver not int)] hh.foo(left: 1, top: 2));
+  core::print([@vm.direct-call.metadata=#lib::H.foo] [@vm.inferred-type.metadata=#lib::T6 (receiver not int)] hh{dynamic}.foo(right: 2, left: 1));
+  core::print([@vm.inferred-type.metadata=#lib::T7 (receiver not int)] hh{dynamic}.foo(left: 1, top: 2));
 }
 constants  {
   #C1 = #bar
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/null_check_elimination_nnbd.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/null_check_elimination_nnbd.dart.expect
index 72d4c6c..7c87b13 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/null_check_elimination_nnbd.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/null_check_elimination_nnbd.dart.expect
@@ -13,11 +13,11 @@
 }
 [@vm.inferred-type.metadata=#lib::A?]static field self::A staticField = new self::A::•("hi", "bye");
 static method testNonNullable([@vm.inferred-type.metadata=#lib::A?] self::A a) → dynamic
-  return _in::unsafeCast<core::String>([@vm.direct-call.metadata=#lib::A.nonNullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString] a.{self::A::nonNullable});
+  return _in::unsafeCast<core::String>([@vm.direct-call.metadata=#lib::A.nonNullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString] a.{self::A::nonNullable}{core::String?});
 static method testNullable([@vm.inferred-type.metadata=#lib::A?] self::A a) → dynamic
-  return [@vm.direct-call.metadata=#lib::A.nullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString?] a.{self::A::nullable}!;
+  return [@vm.direct-call.metadata=#lib::A.nullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString?] a.{self::A::nullable}{core::String?}!;
 static method testAlwaysNull([@vm.inferred-type.metadata=#lib::A?] self::A a) → dynamic
-  return [@vm.direct-call.metadata=#lib::A.alwaysNull??] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] a.{self::A::alwaysNull}!;
+  return [@vm.direct-call.metadata=#lib::A.alwaysNull??] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] a.{self::A::alwaysNull}{core::String?}!;
 static method main() → void {
   final core::List<self::A> list = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A>] core::_GrowableList::_literal2<self::A>(new self::A::•("foo", null), [@vm.inferred-type.metadata=#lib::A?] self::staticField);
   {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination.dart.expect
index 4667c05..4b302d6 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination.dart.expect
@@ -13,43 +13,43 @@
 }
 [@vm.inferred-type.metadata=#lib::A?]static field self::A* staticField = new self::A::•("hi", "bye");
 static method testNonNullableIf1([@vm.inferred-type.metadata=#lib::A?] self::A* a) → dynamic {
-  if(let dynamic #t1 = [@vm.direct-call.metadata=#lib::A.nonNullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString] a.{self::A::nonNullable} in false) {
+  if(let dynamic #t1 = [@vm.direct-call.metadata=#lib::A.nonNullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString] a.{self::A::nonNullable}{core::String*} in false) {
     core::print("null");
   }
 }
 static method testNullableIf1([@vm.inferred-type.metadata=#lib::A?] self::A* a) → dynamic {
-  if([@vm.direct-call.metadata=#lib::A.nullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString?] a.{self::A::nullable}.{core::String::==}(null)) {
+  if([@vm.direct-call.metadata=#lib::A.nullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString?] a.{self::A::nullable}{core::String*} == null) {
     core::print("null");
   }
 }
 static method testAlwaysNullIf1([@vm.inferred-type.metadata=#lib::A?] self::A* a) → dynamic {
-  if(let dynamic #t2 = [@vm.direct-call.metadata=#lib::A.alwaysNull??] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] a.{self::A::alwaysNull} in true) {
+  if(let dynamic #t2 = [@vm.direct-call.metadata=#lib::A.alwaysNull??] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] a.{self::A::alwaysNull}{core::String*} in true) {
     core::print("null");
   }
 }
 static method testNonNullableIf2([@vm.inferred-type.metadata=#lib::A?] self::A* a) → dynamic {
-  if(!(let dynamic #t3 = [@vm.direct-call.metadata=#lib::A.nonNullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString] a.{self::A::nonNullable} in false) && _in::unsafeCast<core::bool*>([@vm.inferred-type.metadata=dart.core::bool] self::someCondition())) {
+  if(!(let dynamic #t3 = [@vm.direct-call.metadata=#lib::A.nonNullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString] a.{self::A::nonNullable}{core::String*} in false) && _in::unsafeCast<core::bool*>([@vm.inferred-type.metadata=dart.core::bool] self::someCondition())) {
     core::print("not null");
   }
 }
 static method testNullableIf2([@vm.inferred-type.metadata=#lib::A?] self::A* a) → dynamic {
-  if(![@vm.direct-call.metadata=#lib::A.nullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString?] a.{self::A::nullable}.{core::String::==}(null) && _in::unsafeCast<core::bool*>([@vm.inferred-type.metadata=dart.core::bool] self::someCondition())) {
+  if(!([@vm.direct-call.metadata=#lib::A.nullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString?] a.{self::A::nullable}{core::String*} == null) && _in::unsafeCast<core::bool*>([@vm.inferred-type.metadata=dart.core::bool] self::someCondition())) {
     core::print("not null");
   }
 }
 static method testAlwaysNullIf2([@vm.inferred-type.metadata=#lib::A?] self::A* a) → dynamic {
-  if(!(let dynamic #t4 = [@vm.direct-call.metadata=#lib::A.alwaysNull??] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] a.{self::A::alwaysNull} in true) && _in::unsafeCast<core::bool*>([@vm.inferred-type.metadata=dart.core::bool] self::someCondition())) {
+  if(!(let dynamic #t4 = [@vm.direct-call.metadata=#lib::A.alwaysNull??] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] a.{self::A::alwaysNull}{core::String*} in true) && _in::unsafeCast<core::bool*>([@vm.inferred-type.metadata=dart.core::bool] self::someCondition())) {
     core::print("not null");
   }
 }
 static method testNonNullableCondExpr([@vm.inferred-type.metadata=#lib::A?] self::A* a) → dynamic
-  return !(let dynamic #t5 = [@vm.direct-call.metadata=#lib::A.nonNullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString] a.{self::A::nonNullable} in false) ?{core::String*} "not null" : "null";
+  return !(let dynamic #t5 = [@vm.direct-call.metadata=#lib::A.nonNullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString] a.{self::A::nonNullable}{core::String*} in false) ?{core::String*} "not null" : "null";
 static method testNullableCondExpr([@vm.inferred-type.metadata=#lib::A?] self::A* a) → dynamic
-  return ![@vm.direct-call.metadata=#lib::A.nullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString?] a.{self::A::nullable}.{core::String::==}(null) ?{core::String*} "not null" : "null";
+  return !([@vm.direct-call.metadata=#lib::A.nullable??] [@vm.inferred-type.metadata=dart.core::_OneByteString?] a.{self::A::nullable}{core::String*} == null) ?{core::String*} "not null" : "null";
 static method testAlwaysNullCondExpr([@vm.inferred-type.metadata=#lib::A?] self::A* a) → dynamic
-  return !(let dynamic #t6 = [@vm.direct-call.metadata=#lib::A.alwaysNull??] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] a.{self::A::alwaysNull} in true) ?{core::String*} "not null" : "null";
+  return !(let dynamic #t6 = [@vm.direct-call.metadata=#lib::A.alwaysNull??] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] a.{self::A::alwaysNull}{core::String*} in true) ?{core::String*} "not null" : "null";
 static method someCondition() → dynamic
-  return [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1").{core::num::==}(1);
+  return [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 1;
 static method main() → void {
   final core::List<self::A*>* list = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A*>] core::_GrowableList::_literal2<self::A*>(new self::A::•("foo", null), [@vm.inferred-type.metadata=#lib::A?] self::staticField);
   {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
index f2f92af..a21a679 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
@@ -19,7 +19,7 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method method1(self::T0* t0) → void {
-    [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}();
+    [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(){() →* void};
   }
 }
 abstract class B extends core::Object {
@@ -30,7 +30,7 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method method2(covariant self::T0* t0) → void {
-    [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}();
+    [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(){() →* void};
   }
 }
 class D extends core::Object {
@@ -38,27 +38,27 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  method method3(self::T0* t0) → void {
-    [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}();
+    [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(){() →* void};
   }
 }
 [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown;
 static method func1([@vm.inferred-type.metadata=#lib::T2?] self::T0* t0) → void {
-  [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}();
+  [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(){() →* void};
 }
 static method func2(self::T0* t0) → void {
-  [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}();
+  [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(){() →* void};
 }
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown();
 static method use(dynamic x) → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(x);
+  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown(x);
 static method main(core::List<core::String*>* args) → dynamic {
   self::func1(self::getDynamic() as{TypeError,ForDynamic} self::T0*);
   self::use(#C1);
-  self::use(new self::A::•().{self::A::method1});
+  self::use(new self::A::•().{self::A::method1}{(self::T0*) →* void});
   self::B* bb = self::getDynamic() as{TypeError,ForDynamic} self::B*;
-  [@vm.direct-call.metadata=#lib::C.method2??] [@vm.inferred-type.metadata=!? (skip check)] bb.{self::B::method2}(self::getDynamic());
-  self::getDynamic().method3(self::getDynamic());
+  [@vm.direct-call.metadata=#lib::C.method2??] [@vm.inferred-type.metadata=!? (skip check)] bb.{self::B::method2}(self::getDynamic()){(dynamic) →* void};
+  self::getDynamic(){dynamic}.method3(self::getDynamic());
   new self::T2::•();
   new self::A::•();
   new self::C::•();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/pragmas.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/pragmas.dart.expect
index 999bff1..84c335d 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/pragmas.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/pragmas.dart.expect
@@ -20,11 +20,11 @@
   method bar() → void {
     @#C17
     function bazz() → void {}
-    [@vm.call-site-attributes.metadata=receiverType:void Function()*] bazz.call();
+    [@vm.call-site-attributes.metadata=receiverType:void Function()*] bazz(){() →* void};
   }
 }
 static method main() → dynamic {
-  [@vm.direct-call.metadata=#lib::Foo.bar] [@vm.inferred-type.metadata=!? (skip check)] new self::Foo::•().{self::Foo::bar}();
+  [@vm.direct-call.metadata=#lib::Foo.bar] [@vm.inferred-type.metadata=!? (skip check)] new self::Foo::•().{self::Foo::bar}(){() →* void};
 }
 constants  {
   #C1 = "test1"
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
index 40e9ff9..82c3315 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
@@ -13,17 +13,17 @@
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::barKeep} = let final pb::BarKeep* #t2 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pb::BarKeep::aKeep} = 5;
     } =>#t2;
-    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String*, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep*>*] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}{core::Map<core::String*, pb::BarKeep*>*}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pb::BarKeep::aKeep} = 2;
-    } =>#t3);
+    } =>#t3){(core::String*, pb::BarKeep*) →* void};
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::aKeep} = 43;
   } =>#t1;
   sca::test(() → Null {
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] foo.{pb::FooKeep::barKeep}.{pb::BarKeep::aKeep}, 5);
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] foo.{pb::FooKeep::mapKeep}.{core::Map::[]}("foo").{pb::BarKeep::aKeep}, 2);
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(), false);
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}, 43);
-    [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}();
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] foo.{pb::FooKeep::barKeep}{pb::BarKeep*}.{pb::BarKeep::aKeep}{core::int*}, 5);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] foo.{pb::FooKeep::mapKeep}{core::Map<core::String*, pb::BarKeep*>*}.{core::Map::[]}("foo"){(core::Object*) →* pb::BarKeep*}.{pb::BarKeep::aKeep}{core::int*}, 2);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(){() →* core::bool*}, false);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}{core::int*}, 43);
+    [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}(){() →* void};
   });
 }
 library foo.pb.dart /*isNonNullableByDefault*/;
@@ -36,13 +36,13 @@
 
 class FooKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "FooKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, (#C1) ?{core::String} "" : "barKeep", "barKeep", #C2);
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, (#C1) ?{core::String} "" : "barKeep", "barKeep", #C2){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::BarKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>((#C1) ?{core::String} "" : "mapKeep", #C2);
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>((#C1) ?{core::String} "" : "mapKeep", #C2){(core::int, core::String, {entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, (#C1) ?{core::String} "" : "aKeep");
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, (#C1) ?{core::String} "" : "hasKeep", "hasKeep", #C3);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, (#C1) ?{core::String} "" : "clearKeep", "clearKeep", #C4);
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, (#C1) ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, (#C1) ?{core::String} "" : "hasKeep", "hasKeep", #C3){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::HasKeep}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, (#C1) ?{core::String} "" : "clearKeep", "clearKeep", #C4){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::ClearKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t1;
   constructor _() → self::FooKeep
@@ -57,31 +57,31 @@
     return new self::FooKeep::_();
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]  @#C9
   get barKeep() → self::BarKeep
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep? (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep>();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep? (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep>(){(core::int) → self::BarKeep};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]  @#C9
   set barKeep([@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(v){(core::int, core::Object) → void};
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4]  @#C11
   get mapKeep() → core::Map<core::String, self::BarKeep>
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::BarKeep>();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(){(core::int) → core::Map<core::String, self::BarKeep>};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=()->i]  @#C13
   get aKeep() → core::int
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(4);
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(4){(core::int) → core::int};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=(i)->b]  @#C13
   set aKeep([@vm.inferred-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(4, v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(4, v){(core::int, core::int) → void};
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  @#C15
   method hasHasKeep() → core::bool
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{pro::GeneratedMessage::$_has}();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{pro::GeneratedMessage::$_has}(){(core::int) → core::bool};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10]  @#C17
   method clearClearKeep() → void
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{pro::GeneratedMessage::clearField}();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{pro::GeneratedMessage::clearField}(){(core::int) → void};
 }
 class BarKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t2 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "BarKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aKeep");
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t2;
@@ -97,10 +97,10 @@
     return new self::BarKeep::_();
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=()->i]  @#C9
   get aKeep() → core::int
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(0);
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(0){(core::int) → core::int};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(i)->b]  @#C9
   set aKeep([@vm.inferred-type.metadata=dart.core::_Smi] core::int v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v){(core::int, core::int) → void};
   }
 }
 class HasKeep extends pro::GeneratedMessage {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
index a4040c7..ebe6ac2 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
@@ -12,11 +12,11 @@
 static method main() → dynamic {
   pb::FooKeep* foo = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep] pb::FooKeep::fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList?<dart.core::int*>] self::buffer);
   sca::test(() → Null {
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] foo.{pb::FooKeep::mapKeep}.{core::Map::[]}("foo").{pb::BarKeep::aKeep}, 42);
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] foo.{pb::FooKeep::barKeep}.{pb::BarKeep::aKeep}, 5);
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}, 43);
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(), true);
-    [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}();
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] foo.{pb::FooKeep::mapKeep}{core::Map<core::String*, pb::BarKeep*>*}.{core::Map::[]}("foo"){(core::Object*) →* pb::BarKeep*}.{pb::BarKeep::aKeep}{core::int*}, 42);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] foo.{pb::FooKeep::barKeep}{pb::BarKeep*}.{pb::BarKeep::aKeep}{core::int*}, 5);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}{core::int*}, 43);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(){() →* core::bool*}, true);
+    [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}(){() →* void};
   });
 }
 library foo.pb.dart /*isNonNullableByDefault*/;
@@ -29,13 +29,13 @@
 
 class FooKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "FooKeep", createEmptyInstance: #C2) in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, (#C1) ?{core::String} "" : "barKeep", "barKeep", #C3);
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, (#C1) ?{core::String} "" : "barKeep", "barKeep", #C3){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::BarKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>((#C1) ?{core::String} "" : "mapKeep", #C3);
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>((#C1) ?{core::String} "" : "mapKeep", #C3){(core::int, core::String, {entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, (#C1) ?{core::String} "" : "aKeep");
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, (#C1) ?{core::String} "" : "hasKeep", "hasKeep", #C4);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, (#C1) ?{core::String} "" : "clearKeep", "clearKeep", #C5);
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, (#C1) ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, (#C1) ?{core::String} "" : "hasKeep", "hasKeep", #C4){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::HasKeep}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, (#C1) ?{core::String} "" : "clearKeep", "clearKeep", #C5){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::ClearKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t1;
   constructor _() → self::FooKeep
@@ -43,7 +43,7 @@
     ;
   static factory fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList?<dart.core::int*>] core::List<core::int> i) → self::FooKeep
     return let final self::FooKeep #t2 = [@vm.inferred-type.metadata=foo.pb.dart::FooKeep] self::FooKeep::create() in block {
-      [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::GeneratedMessage::mergeFromBuffer}(i);
+      [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::GeneratedMessage::mergeFromBuffer}(i){(core::List<core::int>, [pro::ExtensionRegistry]) → void};
     } =>#t2;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1]  get info_() → pro::BuilderInfo
     return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::FooKeep::_i;
@@ -52,23 +52,23 @@
     return new self::FooKeep::_();
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2]  @#C10
   get barKeep() → self::BarKeep
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep? (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep>();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep? (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep>(){(core::int) → self::BarKeep};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3]  @#C12
   get mapKeep() → core::Map<core::String, self::BarKeep>
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::BarKeep>();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(){(core::int) → core::Map<core::String, self::BarKeep>};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] [@vm.unboxing-info.metadata=()->i]  @#C14
   get aKeep() → core::int
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(4);
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(4){(core::int) → core::int};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  @#C16
   method hasHasKeep() → core::bool
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{pro::GeneratedMessage::$_has}();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{pro::GeneratedMessage::$_has}(){(core::int) → core::bool};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  @#C18
   method clearClearKeep() → void
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{pro::GeneratedMessage::clearField}();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{pro::GeneratedMessage::clearField}(){(core::int) → void};
 }
 class BarKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "BarKeep", createEmptyInstance: #C3) in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aKeep");
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t3;
@@ -82,7 +82,7 @@
     return new self::BarKeep::_();
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:9] [@vm.unboxing-info.metadata=()->i]  @#C10
   get aKeep() → core::int
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(0);
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(0){(core::int) → core::int};
 }
 class HasKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "HasKeep", createEmptyInstance: #C4) in block {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
index e224c00..084a1d5 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
@@ -15,21 +15,21 @@
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pb::BarKeep::aKeep} = 5;
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.bDrop] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pb::BarKeep::bDrop} = 4;
     } =>#t2;
-    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String*, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep*>*] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}{core::Map<core::String*, pb::BarKeep*>*}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pb::BarKeep::aKeep} = 42;
-    } =>#t3);
-    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop>] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapDrop] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapDrop}.{core::Map::[]=}("zop", let final pb::ZopDrop* #t4 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop] pb::ZopDrop::•() in block {
+    } =>#t3){(core::String*, pb::BarKeep*) →* void};
+    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String*, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop*>*] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapDrop] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapDrop}{core::Map<core::String*, pb::ZopDrop*>*}.{core::Map::[]=}("zop", let final pb::ZopDrop* #t4 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop] pb::ZopDrop::•() in block {
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop.aDrop] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pb::ZopDrop::aDrop} = 3;
-    } =>#t4);
+    } =>#t4){(core::String*, pb::ZopDrop*) →* void};
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::aKeep} = 43;
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::hasKeep} = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::HasKeep] pb::HasKeep::•();
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::clearKeep} = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ClearKeep] pb::ClearKeep::•();
   } =>#t1;
-  final typ::Uint8List* buffer = [@vm.direct-call.metadata=protobuf::GeneratedMessage.writeToBuffer] [@vm.inferred-type.metadata=dart.typed_data::_Uint8List (skip check)] foo.{pro::GeneratedMessage::writeToBuffer}();
+  final typ::Uint8List* buffer = [@vm.direct-call.metadata=protobuf::GeneratedMessage.writeToBuffer] [@vm.inferred-type.metadata=dart.typed_data::_Uint8List (skip check)] foo.{pro::GeneratedMessage::writeToBuffer}(){() →* typ::Uint8List*};
   core::print("List<int> buffer = <int>[");
-  for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}([@vm.direct-call.metadata=dart.typed_data::_TypedList.length] [@vm.inferred-type.metadata=dart.core::_Smi] buffer.{core::List::length}); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(5)) {
-    final core::String* numbers = [@vm.direct-call.metadata=dart.typed_data::_TypedListBase.join] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=dart.typed_data::__Uint8List&_TypedList&_IntListMixin&_TypedIntListMixin.sublist] [@vm.inferred-type.metadata=dart.typed_data::_Uint8List (skip check)] buffer.{typ::Uint8List::sublist}(i, [@vm.inferred-type.metadata=int] math::min<core::int*>([@vm.direct-call.metadata=dart.typed_data::_TypedList.length] [@vm.inferred-type.metadata=dart.core::_Smi] buffer.{core::List::length}, [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(5))).{core::Iterable::join}(", ");
-    core::print("  ${numbers},${[@vm.direct-call.metadata=dart.core::_IntegerImplementation.==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::==}(0) ?{core::String*} " //" : ""}");
+  for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}([@vm.direct-call.metadata=dart.typed_data::_TypedList.length] [@vm.inferred-type.metadata=dart.core::_Smi] buffer.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(5){(core::num*) →* core::int*}) {
+    final core::String* numbers = [@vm.direct-call.metadata=dart.typed_data::_TypedListBase.join] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=dart.typed_data::__Uint8List&_TypedList&_IntListMixin&_TypedIntListMixin.sublist] [@vm.inferred-type.metadata=dart.typed_data::_Uint8List (skip check)] buffer.{typ::Uint8List::sublist}(i, [@vm.inferred-type.metadata=int] math::min<core::int*>([@vm.direct-call.metadata=dart.typed_data::_TypedList.length] [@vm.inferred-type.metadata=dart.core::_Smi] buffer.{core::List::length}{core::int*}, [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(5){(core::num*) →* core::int*})){(core::int*, [core::int*]) →* typ::Uint8List*}.{core::Iterable::join}(", "){([core::String*]) →* core::String*};
+    core::print("  ${numbers},${[@vm.direct-call.metadata=dart.core::_IntegerImplementation.==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{core::String*} " //" : ""}");
   }
   core::print("];");
 }
@@ -43,13 +43,13 @@
 
 class FooKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "FooKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, (#C1) ?{core::String} "" : "barKeep", "barKeep", #C2);
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, (#C1) ?{core::String} "" : "barKeep", "barKeep", #C2){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::BarKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(3, (#C1) ?{core::String} "" : "mapKeep", "FooKeep.MapKeepEntry", "mapKeep", #C2);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::ZopDrop>(4, (#C1) ?{core::String} "" : "mapDrop", "FooKeep.MapDropEntry", "mapDrop", #C3);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, (#C1) ?{core::String} "" : "aKeep", "aKeep");
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, (#C1) ?{core::String} "" : "hasKeep", "hasKeep", #C4);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, (#C1) ?{core::String} "" : "clearKeep", "clearKeep", #C5);
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(3, (#C1) ?{core::String} "" : "mapKeep", "FooKeep.MapKeepEntry", "mapKeep", #C2){(core::int, core::String, {entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::ZopDrop>(4, (#C1) ?{core::String} "" : "mapDrop", "FooKeep.MapDropEntry", "mapDrop", #C3){(core::int, core::String, {entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, (#C1) ?{core::String} "" : "aKeep", "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, (#C1) ?{core::String} "" : "hasKeep", "hasKeep", #C4){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::HasKeep}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, (#C1) ?{core::String} "" : "clearKeep", "clearKeep", #C5){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::ClearKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t1;
   constructor _() → self::FooKeep
@@ -64,31 +64,31 @@
     return new self::FooKeep::_();
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2]  @#C10
   set barKeep([@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(1, v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(1, v){(core::int, core::Object) → void};
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3]  @#C12
   get mapKeep() → core::Map<core::String, self::BarKeep>
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(2);
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(2){(core::int) → core::Map<core::String, self::BarKeep>};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4]  @#C14
   get mapDrop() → core::Map<core::String, self::ZopDrop>
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::ZopDrop>(3);
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::ZopDrop>(3){(core::int) → core::Map<core::String, self::ZopDrop>};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5] [@vm.unboxing-info.metadata=(i)->b]  @#C16
   set aKeep([@vm.inferred-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(4, v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(4, v){(core::int, core::int) → void};
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6]  @#C18
   set hasKeep([@vm.inferred-type.metadata=foo.pb.dart::HasKeep] self::HasKeep v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(6, v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(6, v){(core::int, core::Object) → void};
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7]  @#C20
   set clearKeep([@vm.inferred-type.metadata=foo.pb.dart::ClearKeep] self::ClearKeep v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(7, v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(7, v){(core::int, core::Object) → void};
   }
 }
 class BarKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t2 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "BarKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aKeep", "aKeep");
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(2, (#C1) ?{core::String} "" : "bDrop", "bDrop");
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aKeep", "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(2, (#C1) ?{core::String} "" : "bDrop", "bDrop"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t2;
   constructor _() → self::BarKeep
@@ -103,11 +103,11 @@
     return new self::BarKeep::_();
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:8] [@vm.unboxing-info.metadata=(i)->b]  @#C10
   set aKeep([@vm.inferred-type.metadata=dart.core::_Smi] core::int v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v){(core::int, core::int) → void};
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9] [@vm.unboxing-info.metadata=(i)->b]  @#C22
   set bDrop([@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] core::int v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(1, v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(1, v){(core::int, core::int) → void};
   }
 }
 class HasKeep extends pro::GeneratedMessage {
@@ -144,7 +144,7 @@
 }
 class ZopDrop extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t5 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "ZopDrop") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aDrop", "aDrop");
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aDrop", "aDrop"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t5;
   constructor _() → self::ZopDrop
@@ -159,7 +159,7 @@
     return new self::ZopDrop::_();
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:10] [@vm.unboxing-info.metadata=(i)->b]  @#C10
   set aDrop([@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] core::int v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v){(core::int, core::int) → void};
   }
 }
 constants  {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
index 977c03c..45194d5 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
@@ -15,18 +15,18 @@
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::barKeep} = let final pb::BarKeep* #t2 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pb::BarKeep::aKeep} = 5;
     } =>#t2;
-    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String*, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep*>*] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}{core::Map<core::String*, pb::BarKeep*>*}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pb::BarKeep::aKeep} = 2;
-    } =>#t3);
+    } =>#t3){(core::String*, pb::BarKeep*) →* void};
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::aKeep} = 43;
   } =>#t1;
   sca::test(() → Null {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.freeze] [@vm.inferred-type.metadata=!? (skip check)] foo.{pro::GeneratedMessage::freeze}();
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] foo.{pb::FooKeep::barKeep}.{pb::BarKeep::aKeep}, 5);
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] foo.{pb::FooKeep::mapKeep}.{core::Map::[]}("foo").{pb::BarKeep::aKeep}, 2);
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(), false);
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}, 43);
-    exp::expect(() → void => [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}(), [@vm.inferred-type.metadata=library package:test_api/src/expect/throws_matcher.dart::Throws] thr::throwsA());
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.freeze] [@vm.inferred-type.metadata=!? (skip check)] foo.{pro::GeneratedMessage::freeze}(){() →* pro::GeneratedMessage*};
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] foo.{pb::FooKeep::barKeep}{pb::BarKeep*}.{pb::BarKeep::aKeep}{core::int*}, 5);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] foo.{pb::FooKeep::mapKeep}{core::Map<core::String*, pb::BarKeep*>*}.{core::Map::[]}("foo"){(core::Object*) →* pb::BarKeep*}.{pb::BarKeep::aKeep}{core::int*}, 2);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(){() →* core::bool*}, false);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}{core::int*}, 43);
+    exp::expect(() → void => [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}(){() →* void}, [@vm.inferred-type.metadata=library package:test_api/src/expect/throws_matcher.dart::Throws] thr::throwsA());
   });
 }
 library foo.pb.dart /*isNonNullableByDefault*/;
@@ -39,13 +39,13 @@
 
 class FooKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "FooKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, (#C1) ?{core::String} "" : "barKeep", "barKeep", #C2);
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, (#C1) ?{core::String} "" : "barKeep", "barKeep", #C2){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::BarKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>((#C1) ?{core::String} "" : "mapKeep", #C2);
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>((#C1) ?{core::String} "" : "mapKeep", #C2){(core::int, core::String, {entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, (#C1) ?{core::String} "" : "aKeep");
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, (#C1) ?{core::String} "" : "hasKeep", "hasKeep", #C3);
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, (#C1) ?{core::String} "" : "clearKeep", "clearKeep", #C4);
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, (#C1) ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, (#C1) ?{core::String} "" : "hasKeep", "hasKeep", #C3){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::HasKeep}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, (#C1) ?{core::String} "" : "clearKeep", "clearKeep", #C4){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::ClearKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t1;
   constructor _() → self::FooKeep
@@ -60,31 +60,31 @@
     return new self::FooKeep::_();
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]  @#C9
   get barKeep() → self::BarKeep
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep? (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep>();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep? (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep>(){(core::int) → self::BarKeep};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]  @#C9
   set barKeep([@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(v){(core::int, core::Object) → void};
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4]  @#C11
   get mapKeep() → core::Map<core::String, self::BarKeep>
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::BarKeep>();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(){(core::int) → core::Map<core::String, self::BarKeep>};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=()->i]  @#C13
   get aKeep() → core::int
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(4);
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(4){(core::int) → core::int};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=(i)->b]  @#C13
   set aKeep([@vm.inferred-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(4, v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(4, v){(core::int, core::int) → void};
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  @#C15
   method hasHasKeep() → core::bool
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{pro::GeneratedMessage::$_has}();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{pro::GeneratedMessage::$_has}(){(core::int) → core::bool};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10]  @#C17
   method clearClearKeep() → void
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{pro::GeneratedMessage::clearField}();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{pro::GeneratedMessage::clearField}(){(core::int) → void};
 }
 class BarKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t2 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "BarKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aKeep");
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, (#C1) ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null);
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t2;
@@ -100,10 +100,10 @@
     return new self::BarKeep::_();
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=()->i]  @#C9
   get aKeep() → core::int
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(0);
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(0){(core::int) → core::int};
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(i)->b]  @#C9
   set aKeep([@vm.inferred-type.metadata=dart.core::_Smi] core::int v) → void {
-    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v);
+    [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v){(core::int, core::int) → void};
   }
 }
 class HasKeep extends pro::GeneratedMessage {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect
index ccf90c5..7489bcb 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect
@@ -8,7 +8,7 @@
 
 static method main() → dynamic {
   pb::NameManglingKeep* n = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart::NameManglingKeep] pb::NameManglingKeep::fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::_GrowableList::•<core::int*>(0));
-  if([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart::NameManglingKeep.hasClone_10] [@vm.inferred-type.metadata=dart.core::bool (skip check)] n.{pb::NameManglingKeep::hasClone_10}()) {
+  if([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart::NameManglingKeep.hasClone_10] [@vm.inferred-type.metadata=dart.core::bool (skip check)] n.{pb::NameManglingKeep::hasClone_10}(){() →* core::bool*}) {
     core::print("Has clone field");
   }
 }
@@ -35,7 +35,7 @@
 }
 class NameManglingKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t2 = new pro::BuilderInfo::•((#C1) ?{core::String} "" : "NameManglingKeep", #C6) in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::aOM}<self::AKeep>((#C1) ?{core::String} "" : "clone", #C2);
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::aOM}<self::AKeep>((#C1) ?{core::String} "" : "clone", #C2){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::AKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t2;
   constructor _() → self::NameManglingKeep
@@ -43,7 +43,7 @@
     ;
   static factory fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::List<core::int> i) → self::NameManglingKeep
     return let final self::NameManglingKeep #t3 = [@vm.inferred-type.metadata=name_mangling.pb.dart::NameManglingKeep] self::NameManglingKeep::create() in block {
-      [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::GeneratedMessage::mergeFromBuffer}(i);
+      [@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::GeneratedMessage::mergeFromBuffer}(i){(core::List<core::int>, [pro::ExtensionRegistry]) → void};
     } =>#t3;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1]  get info_() → pro::BuilderInfo
     return [@vm.inferred-type.metadata=protobuf::BuilderInfo?] self::NameManglingKeep::_i;
@@ -52,7 +52,7 @@
     return new self::NameManglingKeep::_();
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]  @#C8
   method hasClone_10() → core::bool
-    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{pro::GeneratedMessage::$_has}();
+    return [@vm.direct-call.metadata=protobuf::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{pro::GeneratedMessage::$_has}(){(core::int) → core::bool};
 }
 constants  {
   #C1 = false
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect
index b142142..2d0f29f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect
@@ -8,7 +8,7 @@
     : self::A::afield = afield, super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]  method toString() → core::String*
-    return [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.direct-call.metadata=#lib::A.afield] this.{self::A::afield}.{core::Object::toString}();
+    return [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.direct-call.metadata=#lib::A.afield] this.{self::A::afield}{core::List<dynamic>*}.{core::Object::toString}(){() →* core::String*};
 }
 class B extends core::Object {
   synthetic constructor •() → self::B*
@@ -16,16 +16,16 @@
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]  method _foo([@vm.inferred-type.metadata=dart._internal::ListIterator<dart.core::int*>] core::Iterator<core::int*>* iter) → core::List<dynamic>* {
     core::List<dynamic>* result = [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::•<dynamic>(0);
-    while ([@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] iter.{core::Iterator::moveNext}()) {
-      if([@vm.direct-call.metadata=dart.core::_IntegerImplementation.<??] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart._internal::ListIterator.current] [@vm.inferred-type.metadata=int?] iter.{core::Iterator::current}.{core::num::<}(0)) {
+    while ([@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] iter.{core::Iterator::moveNext}(){() →* core::bool*}) {
+      if([@vm.direct-call.metadata=dart.core::_IntegerImplementation.<??] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart._internal::ListIterator.current] [@vm.inferred-type.metadata=int?] iter.{core::Iterator::current}{core::int*}.{core::num::<}(0){(core::num*) →* core::bool*}) {
         return result;
       }
-      [@vm.call-site-attributes.metadata=receiverType:dart.core::List<dynamic>*] [@vm.direct-call.metadata=dart.core::_GrowableList.add] [@vm.inferred-type.metadata=!? (skip check)] result.{core::List::add}(new self::A::•([@vm.direct-call.metadata=#lib::B._foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::B::_foo}(iter)));
+      [@vm.call-site-attributes.metadata=receiverType:dart.core::List<dynamic>*] [@vm.direct-call.metadata=dart.core::_GrowableList.add] [@vm.inferred-type.metadata=!? (skip check)] result.{core::List::add}(new self::A::•([@vm.direct-call.metadata=#lib::B._foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::B::_foo}(iter){(core::Iterator<core::int*>*) →* core::List<dynamic>*})){(dynamic) →* void};
     }
     return result;
   }
 }
 static method main() → void {
-  core::List<dynamic>* list = [@vm.direct-call.metadata=#lib::B._foo] [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic> (skip check)] new self::B::•().{self::B::_foo}([@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<dart.core::int*>] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator});
+  core::List<dynamic>* list = [@vm.direct-call.metadata=#lib::B._foo] [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic> (skip check)] new self::B::•().{self::B::_foo}([@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<dart.core::int*>] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int*>*}){(core::Iterator<core::int*>*) →* core::List<dynamic>*};
   core::print(list);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect
index 3798fa8..577315f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 [@vm.unboxing-info.metadata=(b)->i]static method foo([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::List<core::int*>* x) → dynamic
-  return [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=int? (skip check)] x.{core::List::[]}(0));
+  return [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=int? (skip check)] x.{core::List::[]}(0){(core::int*) →* core::int*}){(core::num*) →* core::int*};
 static method main() → dynamic
   return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] core::print([@vm.inferred-type.metadata=int] self::foo([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::_GrowableList::_literal1<core::int*>(1)));
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect
index 61cf1bbd..5baaf9c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect
@@ -18,10 +18,10 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method add(generic-covariant-impl self::_SplayTree::Node n) → dynamic {
-    self::_SplayTree::Node? root = [@vm.direct-call.metadata=#lib::SplayTreeMap._root] [@vm.inferred-type.metadata=#lib::_SplayTreeMapNode] this.{self::_SplayTree::_root};
+    self::_SplayTree::Node? root = [@vm.direct-call.metadata=#lib::SplayTreeMap._root] [@vm.inferred-type.metadata=#lib::_SplayTreeMapNode] this.{self::_SplayTree::_root}{self::_SplayTree::Node?};
     if(false)
       return;
-    core::print([@vm.direct-call.metadata=#lib::_SplayTreeNode.left] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] root{self::_SplayTree::Node}.{self::_SplayTreeNode::left});
+    core::print([@vm.direct-call.metadata=#lib::_SplayTreeNode.left] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] root{self::_SplayTree::Node}.{self::_SplayTreeNode::left}{self::_SplayTree::Node?});
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5]  abstract get /*isLegacy*/ _root() → self::_SplayTree::Node?;
 }
@@ -32,5 +32,5 @@
     ;
 }
 static method main() → void {
-  [@vm.call-site-attributes.metadata=receiverType:#lib::SplayTreeMap<dynamic>] [@vm.direct-call.metadata=#lib::_SplayTree.add] new self::SplayTreeMap::•<dynamic>().{self::_SplayTree::add}(new self::_SplayTreeMapNode::•<dynamic>());
+  [@vm.call-site-attributes.metadata=receiverType:#lib::SplayTreeMap<dynamic>] [@vm.direct-call.metadata=#lib::_SplayTree.add] new self::SplayTreeMap::•<dynamic>().{self::_SplayTree::add}(new self::_SplayTreeMapNode::•<dynamic>()){(self::_SplayTreeMapNode<dynamic>) → dynamic};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_42413.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_42413.dart.expect
index 1dd3fe1..257f5c9 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_42413.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_42413.dart.expect
@@ -19,24 +19,24 @@
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]  @#C3
   method forIn() → void {
     {
-      core::Iterator<dynamic>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator??] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::B*>] _in::unsafeCast<core::Iterable<dynamic>*>([@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B*>] this.{self::A::list}).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator??] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::B*>] _in::unsafeCast<core::Iterable<dynamic>*>([@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B*>] this.{self::A::list}{dynamic}).{core::Iterable::iterator};
       for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic e = [@vm.direct-call.metadata=dart._internal::ListIterator.current] [@vm.inferred-type.metadata=#lib::B?] :sync-for-iterator.{core::Iterator::current};
-        core::print([@vm.direct-call.metadata=#lib::B.x??] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0) (receiver not int)] e.x);
+        core::print([@vm.direct-call.metadata=#lib::B.x??] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0) (receiver not int)] e{dynamic}.x);
       }
     }
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7]  @#C3
   method cLoop() → void {
-    for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=dart.core::_GrowableList.length??] [@vm.inferred-type.metadata=dart.core::_Smi (receiver not int)] [@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B*>] this.{self::A::list}.length)); i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
-      final dynamic e = [@vm.direct-call.metadata=dart.core::_GrowableList.[]??] [@vm.inferred-type.metadata=#lib::B? (receiver not int)] [@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B*>] this.{self::A::list}.[](i);
-      core::print([@vm.direct-call.metadata=#lib::B.x??] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0) (receiver not int)] e.x);
+    for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=dart.core::_GrowableList.length??] [@vm.inferred-type.metadata=dart.core::_Smi (receiver not int)] [@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B*>] this.{self::A::list}{dynamic}{dynamic}.length)){(core::num*) →* core::bool*}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      final dynamic e = [@vm.direct-call.metadata=dart.core::_GrowableList.[]??] [@vm.inferred-type.metadata=#lib::B? (receiver not int)] [@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B*>] this.{self::A::list}{dynamic}{dynamic}.[](i);
+      core::print([@vm.direct-call.metadata=#lib::B.x??] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0) (receiver not int)] e{dynamic}.x);
     }
   }
 }
 static method main() → void {
-  [@vm.direct-call.metadata=#lib::A.forIn] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::forIn}();
-  [@vm.direct-call.metadata=#lib::A.cLoop] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::cLoop}();
+  [@vm.direct-call.metadata=#lib::A.forIn] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::forIn}(){() →* void};
+  [@vm.direct-call.metadata=#lib::A.cLoop] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::cLoop}(){() →* void};
 }
 constants  {
   #C1 = "vm:never-inline"
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_1_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_1_test.dart.expect
index ea53538..8ddbcfa 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_1_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_1_test.dart.expect
@@ -13,7 +13,7 @@
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  @#C3
   method foo([@vm.inferred-type.metadata=int?] core::int* x) → void
-    return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] exp::Expect::isTrue([@vm.direct-call.metadata=dart.core::_IntegerImplementation.isOdd??] [@vm.inferred-type.metadata=dart.core::bool] x.{core::int::isOdd});
+    return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] exp::Expect::isTrue([@vm.direct-call.metadata=dart.core::_IntegerImplementation.isOdd??] [@vm.inferred-type.metadata=dart.core::bool] x.{core::int::isOdd}{core::bool*});
 }
 class B extends core::Object {
   synthetic constructor •() → self::B*
@@ -21,20 +21,20 @@
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  @#C3
   method foo([@vm.inferred-type.metadata=int] core::int* x) → void
-    return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] exp::Expect::isTrue([@vm.direct-call.metadata=dart.core::_IntegerImplementation.isOdd] [@vm.inferred-type.metadata=dart.core::bool] x.{core::int::isOdd});
+    return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] exp::Expect::isTrue([@vm.direct-call.metadata=dart.core::_IntegerImplementation.isOdd] [@vm.inferred-type.metadata=dart.core::bool] x.{core::int::isOdd}{core::bool*});
 }
 class C extends self::A implements self::B {
   synthetic constructor •() → self::C*
     : super self::A::•()
     ;
 }
-[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* alwaysFalse = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1").{core::num::==}(2);
+[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* alwaysFalse = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 2;
 static method main() → dynamic {
   final math::Random* r = [@vm.inferred-type.metadata=dart.math::_Random] math::Random::•();
   if([@vm.inferred-type.metadata=dart.core::bool?] self::alwaysFalse) {
-    [@vm.direct-call.metadata=#lib::A.foo] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::foo}([@vm.direct-call.metadata=dart.math::_Random.nextInt] [@vm.inferred-type.metadata=int (skip check)] r.{math::Random::nextInt}(10));
-    [@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•().{self::B::foo}([@vm.direct-call.metadata=dart.math::_Random.nextInt] [@vm.inferred-type.metadata=int (skip check)] r.{math::Random::nextInt}(10));
-    [@vm.direct-call.metadata=#lib::A.foo] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::foo}(null);
+    [@vm.direct-call.metadata=#lib::A.foo] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::foo}([@vm.direct-call.metadata=dart.math::_Random.nextInt] [@vm.inferred-type.metadata=int (skip check)] r.{math::Random::nextInt}(10){(core::int*) →* core::int*}){(core::int*) →* void};
+    [@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•().{self::B::foo}([@vm.direct-call.metadata=dart.math::_Random.nextInt] [@vm.inferred-type.metadata=int (skip check)] r.{math::Random::nextInt}(10){(core::int*) →* core::int*}){(core::int*) →* void};
+    [@vm.direct-call.metadata=#lib::A.foo] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::foo}(null){(core::int*) →* void};
   }
   final core::List<self::B*>* l = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::B*>] core::_GrowableList::_literal2<self::B*>(new self::B::•(), new self::C::•());
   {
@@ -42,7 +42,7 @@
     for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       self::B* b = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current};
       {
-        b.{self::B::foo}(13);
+        b.{self::B::foo}(13){(core::int*) →* void};
       }
     }
   }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_2_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_2_test.dart.expect
index 2a46324..d10d4b7 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_2_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_2_test.dart.expect
@@ -13,7 +13,7 @@
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  @#C3
   method bar([@vm.inferred-type.metadata=int] core::int* x) → void
-    return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] exp::Expect::isTrue([@vm.direct-call.metadata=dart.core::_IntegerImplementation.isOdd] [@vm.inferred-type.metadata=dart.core::bool] x.{core::int::isOdd});
+    return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] exp::Expect::isTrue([@vm.direct-call.metadata=dart.core::_IntegerImplementation.isOdd] [@vm.inferred-type.metadata=dart.core::bool] x.{core::int::isOdd}{core::bool*});
 }
 class B extends core::Object {
   synthetic constructor •() → self::B*
@@ -21,20 +21,20 @@
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  @#C3
   method bar([@vm.inferred-type.metadata=int?] core::int* x) → void
-    return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] exp::Expect::isTrue([@vm.direct-call.metadata=dart.core::_IntegerImplementation.isOdd??] [@vm.inferred-type.metadata=dart.core::bool] x.{core::int::isOdd});
+    return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] exp::Expect::isTrue([@vm.direct-call.metadata=dart.core::_IntegerImplementation.isOdd??] [@vm.inferred-type.metadata=dart.core::bool] x.{core::int::isOdd}{core::bool*});
 }
 class C extends self::A implements self::B {
   synthetic constructor •() → self::C*
     : super self::A::•()
     ;
 }
-[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* alwaysFalse = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1").{core::num::==}(2);
+[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* alwaysFalse = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 2;
 static method main() → dynamic {
   final math::Random* r = [@vm.inferred-type.metadata=dart.math::_Random] math::Random::•();
   if([@vm.inferred-type.metadata=dart.core::bool?] self::alwaysFalse) {
-    [@vm.direct-call.metadata=#lib::A.bar] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::bar}([@vm.direct-call.metadata=dart.math::_Random.nextInt] [@vm.inferred-type.metadata=int (skip check)] r.{math::Random::nextInt}(10));
-    [@vm.direct-call.metadata=#lib::B.bar] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•().{self::B::bar}([@vm.direct-call.metadata=dart.math::_Random.nextInt] [@vm.inferred-type.metadata=int (skip check)] r.{math::Random::nextInt}(10));
-    [@vm.direct-call.metadata=#lib::B.bar] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•().{self::B::bar}(null);
+    [@vm.direct-call.metadata=#lib::A.bar] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::bar}([@vm.direct-call.metadata=dart.math::_Random.nextInt] [@vm.inferred-type.metadata=int (skip check)] r.{math::Random::nextInt}(10){(core::int*) →* core::int*}){(core::int*) →* void};
+    [@vm.direct-call.metadata=#lib::B.bar] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•().{self::B::bar}([@vm.direct-call.metadata=dart.math::_Random.nextInt] [@vm.inferred-type.metadata=int (skip check)] r.{math::Random::nextInt}(10){(core::int*) →* core::int*}){(core::int*) →* void};
+    [@vm.direct-call.metadata=#lib::B.bar] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•().{self::B::bar}(null){(core::int*) →* void};
   }
   final core::List<self::B*>* l = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::B*>] core::_GrowableList::_literal2<self::B*>(new self::B::•(), new self::C::•());
   {
@@ -42,7 +42,7 @@
     for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       self::B* b = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current};
       {
-        b.{self::B::bar}(13);
+        b.{self::B::bar}(13){(core::int*) →* void};
       }
     }
   }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_45324.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_45324.dart.expect
index 403c1c2..f097822 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_45324.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_45324.dart.expect
@@ -14,7 +14,7 @@
 }
 [@vm.inferred-type.metadata=#lib::X?]static field self::A* a = new self::X::•();
 static method main() → void {
-  core::print([@vm.direct-call.metadata=#lib::X.targetPlatform??] [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] [@vm.inferred-type.metadata=#lib::X?] self::a.{self::A::targetPlatform});
+  core::print([@vm.direct-call.metadata=#lib::X.targetPlatform??] [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] [@vm.inferred-type.metadata=#lib::X?] self::a.{self::A::targetPlatform}{core::int*});
   core::print(#C2);
 }
 constants  {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_45324_2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_45324_2.dart.expect
index 2ef7c98..2fe2be5 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_45324_2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_45324_2.dart.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method doTest([@vm.inferred-type.metadata=#lib::X] self::Z a) → void {
-    core::print([@vm.direct-call.metadata=#lib::Base.appName] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "x")] a.{self::Z::appName});
+    core::print([@vm.direct-call.metadata=#lib::Base.appName] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "x")] a.{self::Z::appName}{core::String?});
   }
 }
 class Z extends core::Object {
@@ -30,5 +30,5 @@
 }
 static method main() → void {
   new self::Z::•();
-  [@vm.direct-call.metadata=#lib::A.doTest] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::doTest}(new self::X::•());
+  [@vm.direct-call.metadata=#lib::A.doTest] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::doTest}(new self::X::•()){(self::Z) → void};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
index 92701b8..c812ae8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
@@ -52,14 +52,14 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:17]  get aa2() → dynamic
-    return [@vm.direct-call.metadata=#lib::B2Base._aa] [@vm.inferred-type.metadata=#lib::A2] this.{self::B2Base::_aa};
+    return [@vm.direct-call.metadata=#lib::B2Base._aa] [@vm.inferred-type.metadata=#lib::A2] this.{self::B2Base::_aa}{dynamic};
 }
 class B2 extends self::B2Base {
   synthetic constructor •() → self::B2*
     : super self::B2Base::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:18,getterSelectorId:19]  method doSuperCall() → void {
-    [@vm.call-site-attributes.metadata=receiverType:dynamic] [@vm.direct-call.metadata=#lib::A2.call] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.inferred-type.metadata=#lib::A2] super.{self::B2Base::aa2}.call(1, 2, 3, 4, 5, new self::T2::•());
+    [@vm.direct-call.metadata=#lib::A2.call] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.inferred-type.metadata=#lib::A2] super.{self::B2Base::aa2}{dynamic}.call(1, 2, 3, 4, 5, new self::T2::•());
   }
 }
 class T3 extends core::Object {
@@ -108,7 +108,7 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=hasThisUses:false,hasTearOffUses:false,getterSelectorId:36]  get aa4() → dynamic
-    return [@vm.direct-call.metadata=#lib::B4._aa] [@vm.inferred-type.metadata=#lib::A4] this.{self::B4::_aa};
+    return [@vm.direct-call.metadata=#lib::B4._aa] [@vm.inferred-type.metadata=#lib::A4] this.{self::B4::_aa}{dynamic};
 }
 [@vm.inferred-type.metadata=dart.core::bool?]static field core::bool* ok;
 [@vm.inferred-type.metadata=#lib::B3?]static field dynamic bb3 = new self::B3::•();
@@ -117,32 +117,32 @@
 [@vm.inferred-type.metadata=dart.core::_Closure?]static field core::Function* unknown4 = () → dynamic => self::bb4;
 static method test1() → void {
   self::B1* bb = new self::B1::•();
-  let final self::B1* #t1 = bb in let final core::int* #t2 = 1 in let final core::int* #t3 = 2 in let final core::int* #t4 = 3 in let final core::int* #t5 = 4 in let final self::T1* #t6 = new self::T1::•() in [@vm.call-site-attributes.metadata=receiverType:#lib::A1*] [@vm.direct-call.metadata=#lib::A1.call] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::B1.aa1] [@vm.inferred-type.metadata=#lib::A1] #t1.{self::B1::aa1}.{self::A1::call}(#t2, #t3, #t4, #t5, #t6);
+  let final self::B1* #t1 = bb in let final core::int* #t2 = 1 in let final core::int* #t3 = 2 in let final core::int* #t4 = 3 in let final core::int* #t5 = 4 in let final self::T1* #t6 = new self::T1::•() in [@vm.direct-call.metadata=#lib::A1.call] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::B1.aa1] [@vm.inferred-type.metadata=#lib::A1] #t1.{self::B1::aa1}{self::A1*}.{self::A1::call}(#t2, #t3, #t4, #t5, #t6){([dynamic, dynamic, dynamic, dynamic, dynamic]) →* void};
   self::ok = false;
-  [@vm.direct-call.metadata=#lib::T1.doTest1??] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::A1.foo] [@vm.inferred-type.metadata=#lib::T1?] [@vm.direct-call.metadata=#lib::B1.aa1] [@vm.inferred-type.metadata=#lib::A1] bb.{self::B1::aa1}.{self::A1::foo}.{self::T1::doTest1}();
+  [@vm.direct-call.metadata=#lib::T1.doTest1??] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::A1.foo] [@vm.inferred-type.metadata=#lib::T1?] [@vm.direct-call.metadata=#lib::B1.aa1] [@vm.inferred-type.metadata=#lib::A1] bb.{self::B1::aa1}{self::A1*}.{self::A1::foo}{self::T1*}.{self::T1::doTest1}(){() →* void};
   exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
 }
 static method test2() → void {
   self::B2* bb = new self::B2::•();
-  [@vm.direct-call.metadata=#lib::B2.doSuperCall] [@vm.inferred-type.metadata=!? (skip check)] bb.{self::B2::doSuperCall}();
+  [@vm.direct-call.metadata=#lib::B2.doSuperCall] [@vm.inferred-type.metadata=!? (skip check)] bb.{self::B2::doSuperCall}(){() →* void};
   self::ok = false;
-  [@vm.direct-call.metadata=#lib::T2.doTest2??] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.direct-call.metadata=#lib::A2.foo] [@vm.inferred-type.metadata=#lib::T2? (receiver not int)] [@vm.direct-call.metadata=#lib::B2Base.aa2] [@vm.inferred-type.metadata=#lib::A2] bb.{self::B2Base::aa2}.foo.doTest2();
+  [@vm.direct-call.metadata=#lib::T2.doTest2??] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.direct-call.metadata=#lib::A2.foo] [@vm.inferred-type.metadata=#lib::T2? (receiver not int)] [@vm.direct-call.metadata=#lib::B2Base.aa2] [@vm.inferred-type.metadata=#lib::A2] bb.{self::B2Base::aa2}{dynamic}{dynamic}.foo{dynamic}.doTest2();
   exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
 }
 static method getDynamic3() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown3.call();
+  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown3();
 static method test3() → void {
-  self::getDynamic3().aa3(1, 2, 3, 4, 5, 6, new self::T3::•());
+  self::getDynamic3(){dynamic}.aa3(1, 2, 3, 4, 5, 6, new self::T3::•());
   self::ok = false;
-  [@vm.direct-call.metadata=#lib::T3.doTest3??] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.direct-call.metadata=#lib::A3.foo] [@vm.inferred-type.metadata=#lib::T3? (receiver not int)] [@vm.direct-call.metadata=#lib::B3.aa3??] [@vm.inferred-type.metadata=#lib::A3 (receiver not int)] [@vm.inferred-type.metadata=#lib::B3?] self::bb3.aa3.foo.doTest3();
+  [@vm.direct-call.metadata=#lib::T3.doTest3??] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.direct-call.metadata=#lib::A3.foo] [@vm.inferred-type.metadata=#lib::T3? (receiver not int)] [@vm.direct-call.metadata=#lib::B3.aa3??] [@vm.inferred-type.metadata=#lib::A3 (receiver not int)] [@vm.inferred-type.metadata=#lib::B3?] self::bb3{dynamic}.aa3{dynamic}.foo{dynamic}.doTest3();
   exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
 }
 static method getDynamic4() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown4.call();
+  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown4();
 static method test4() → void {
-  self::getDynamic4().aa4(1, 2, 3, 4, 5, 6, 7, new self::T4::•());
+  self::getDynamic4(){dynamic}.aa4(1, 2, 3, 4, 5, 6, 7, new self::T4::•());
   self::ok = false;
-  [@vm.direct-call.metadata=#lib::T4.doTest4??] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.direct-call.metadata=#lib::A4.foo] [@vm.inferred-type.metadata=#lib::T4? (receiver not int)] [@vm.inferred-type.metadata=#lib::A4] self::getDynamic4().aa4.foo.doTest4();
+  [@vm.direct-call.metadata=#lib::T4.doTest4??] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.direct-call.metadata=#lib::A4.foo] [@vm.inferred-type.metadata=#lib::T4? (receiver not int)] [@vm.inferred-type.metadata=#lib::A4] self::getDynamic4(){dynamic}.aa4{dynamic}.foo{dynamic}.doTest4();
   exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
 }
 static method main() → void {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect
index 74535fc..a63904b 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect
@@ -17,11 +17,11 @@
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method noSuchMethod(core::Invocation* i) → dynamic
     return throw "Not implemented";
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  no-such-method-forwarder method then<R extends core::Object* = dynamic>((self::B::T*) →* FutureOr<self::B::then::R*>* onValue, {core::Function* onError = #C1}) → asy::Future<self::B::then::R*>*
-    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, core::List::unmodifiable<core::Type*>([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::Type*>] core::_GrowableList::_literal1<core::Type*>(self::B::then::R*)), core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onValue)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C3: onError}))) as{TypeError,ForDynamic} asy::Future<self::B::then::R*>*;
+    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, core::List::unmodifiable<core::Type*>([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::Type*>] core::_GrowableList::_literal1<core::Type*>(self::B::then::R*)), core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onValue)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C3: onError}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::B::then::R*>*;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  no-such-method-forwarder method catchError(core::Function* onError, {[@vm.inferred-type.metadata=dart.core::Null? (value: null)] (core::Object*) →* core::bool* test = #C1}) → asy::Future<self::B::T*>*
-    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 0, #C5, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onError)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: test}))) as{TypeError,ForDynamic} asy::Future<self::B::T*>*;
+    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 0, #C5, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onError)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::B::T*>*;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::B::T*>*
-    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C5, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(action)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C9))) as{TypeError,ForDynamic} asy::Future<self::B::T*>*;
+    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C5, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(action)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C9))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::B::T*>*;
 }
 static method createB<T extends core::Object* = dynamic>() → self::B<dynamic>*
   return new self::B::•<self::createB::T*>();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/selector_id_assignments.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/selector_id_assignments.dart.expect
index 53f54b7..6528201 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/selector_id_assignments.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/selector_id_assignments.dart.expect
@@ -106,7 +106,7 @@
     core::Iterator<self::A1*>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::A1*>] x1.{core::Iterable::iterator};
     for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       self::A1* o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current};
-      o.{self::A1::foo}();
+      o.{self::A1::foo}(){() →* void};
     }
   }
   core::List<self::A2*>* x2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A2*>] core::_GrowableList::_literal2<self::A2*>(new self::A2::•(), new self::B2::•());
@@ -114,7 +114,7 @@
     core::Iterator<self::A2*>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::A2*>] x2.{core::Iterable::iterator};
     for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       self::A2* o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current};
-      o.{self::A2::foo}();
+      o.{self::A2::foo}(){() →* void};
     }
   }
   core::List<self::A3*>* x3 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A3*>] core::_GrowableList::_literal2<self::A3*>(new self::B3::•(), new self::C3::•());
@@ -122,7 +122,7 @@
     core::Iterator<self::A3*>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::A3*>] x3.{core::Iterable::iterator};
     for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       self::A3* o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current};
-      o.{self::A3::foo}();
+      o.{self::A3::foo}(){() →* void};
     }
   }
   core::List<self::A4*>* x4 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A4*>] core::_GrowableList::_literal2<self::A4*>(new self::A4::•(), new self::D4::•());
@@ -130,7 +130,7 @@
     core::Iterator<self::A4*>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::A4*>] x4.{core::Iterable::iterator};
     for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       self::A4* o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current};
-      o.{self::A4::foo}();
+      o.{self::A4::foo}(){() →* void};
     }
   }
   core::List<self::B4*>* y4 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::B4*>] core::_GrowableList::_literal3<self::B4*>(new self::B4::•(), new self::D4::•(), new self::E4::•());
@@ -138,7 +138,7 @@
     core::Iterator<self::B4*>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::B4*>] y4.{core::Iterable::iterator};
     for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       self::B4* o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current};
-      o.{self::B4::foo}();
+      o.{self::B4::foo}(){() →* void};
     }
   }
   core::List<self::C4*>* z4 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::C4*>] core::_GrowableList::_literal2<self::C4*>(new self::C4::•(), new self::E4::•());
@@ -146,7 +146,7 @@
     core::Iterator<self::C4*>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::C4*>] z4.{core::Iterable::iterator};
     for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       self::C4* o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current};
-      [@vm.direct-call.metadata=#lib::C4.foo??] [@vm.inferred-type.metadata=!? (skip check)] o.{self::C4::foo}();
+      [@vm.direct-call.metadata=#lib::C4.foo??] [@vm.inferred-type.metadata=!? (skip check)] o.{self::C4::foo}(){() →* void};
     }
   }
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/set_map_constructor_concrete.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/set_map_constructor_concrete.dart.expect
index 45e7b9f..76714d7 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/set_map_constructor_concrete.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/set_map_constructor_concrete.dart.expect
@@ -10,14 +10,14 @@
 [@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashSet?<dynamic>]static field core::Set<dynamic>* identitySet = [@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashSet<dynamic>] col::LinkedHashSet::identity<dynamic>();
 [@vm.inferred-type.metadata=dart.collection::_CompactLinkedHashSet?<dart.core::String*>]static field core::Set<core::String*>* linkedSet = new col::_CompactLinkedHashSet::•<core::String*>();
 static field core::Set<core::String*>* linkedIdentitySet = [@vm.inferred-type.metadata=!] col::LinkedHashSet::•<core::String*>(#C1, #C2);
-static field core::Set<core::String*>* linkedCustomSet = let final (core::String*, core::String*) →* core::bool* #t1 = (core::String* a, core::String* b) → core::bool* => a.{core::String::==}(b) in let final (core::String*) →* core::int* #t2 = (core::String* o) → core::int* => o.{core::String::hashCode} in let final (dynamic) →* core::bool* #t3 = (dynamic o) → core::bool* => true in [@vm.inferred-type.metadata=!] col::LinkedHashSet::•<core::String*>(#t1, #t2, isValidKey: #t3);
+static field core::Set<core::String*>* linkedCustomSet = let final (core::String*, core::String*) →* core::bool* #t1 = (core::String* a, core::String* b) → core::bool* => [@vm.inferred-type.metadata=!? (receiver not int)] a =={core::String::==}{(core::Object*) →* core::bool*} b in let final (core::String*) →* core::int* #t2 = (core::String* o) → core::int* => o.{core::String::hashCode}{core::int*} in let final (dynamic) →* core::bool* #t3 = (dynamic o) → core::bool* => true in [@vm.inferred-type.metadata=!] col::LinkedHashSet::•<core::String*>(#t1, #t2, isValidKey: #t3);
 [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dynamic, dynamic>]static field core::Map<dynamic, dynamic>* globalMap = [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<dynamic, dynamic>] core::Map::•<dynamic, dynamic>();
 [@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashMap?<dynamic, dynamic>]static field core::Map<dynamic, dynamic>* identityMap = [@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashMap<dynamic, dynamic>] col::LinkedHashMap::identity<dynamic, dynamic>();
 [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView?<dynamic, dynamic>]static field core::Map<dynamic, dynamic>* unmodifiableMap = [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dynamic, dynamic>] core::Map::unmodifiable<dynamic, dynamic>([@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashMap?<dynamic, dynamic>] self::identityMap);
 [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dynamic, dynamic>]static field core::Map<dynamic, dynamic>* globalMapLiteral = <dynamic, dynamic>{};
 [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dart.core::String*, dart.core::String*>]static field core::Map<core::String*, core::String*>* linkedMap = new col::_InternalLinkedHashMap::•<core::String*, core::String*>();
 static field core::Map<core::String*, core::String*>* linkedIdentityMap = [@vm.inferred-type.metadata=!] col::LinkedHashMap::•<core::String*, core::String*>(#C1, #C2);
-static field core::Map<core::String*, core::String*>* linkedCustomMap = let final (core::String*, core::String*) →* core::bool* #t4 = (core::String* a, core::String* b) → core::bool* => a.{core::String::==}(b) in let final (core::String*) →* core::int* #t5 = (core::String* o) → core::int* => o.{core::String::hashCode} in let final (dynamic) →* core::bool* #t6 = (dynamic o) → core::bool* => true in [@vm.inferred-type.metadata=!] col::LinkedHashMap::•<core::String*, core::String*>(#t4, #t5, isValidKey: #t6);
+static field core::Map<core::String*, core::String*>* linkedCustomMap = let final (core::String*, core::String*) →* core::bool* #t4 = (core::String* a, core::String* b) → core::bool* => [@vm.inferred-type.metadata=!? (receiver not int)] a =={core::String::==}{(core::Object*) →* core::bool*} b in let final (core::String*) →* core::int* #t5 = (core::String* o) → core::int* => o.{core::String::hashCode}{core::int*} in let final (dynamic) →* core::bool* #t6 = (dynamic o) → core::bool* => true in [@vm.inferred-type.metadata=!] col::LinkedHashMap::•<core::String*, core::String*>(#t4, #t5, isValidKey: #t6);
 static method main() → dynamic {
   core::print([@vm.inferred-type.metadata=dart.collection::_CompactLinkedHashSet?<dynamic>] self::globalSet);
   core::print([@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashSet?<dynamic>] self::identitySet);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
index b9d738c..a3f1c3a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
@@ -12,18 +12,18 @@
     : super self::A::•()
     ;
 [@vm.procedure-attributes.metadata=hasThisUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i]  method foo() → core::int*
-    return [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=! (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
+    return [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=! (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult(){dynamic}.foo() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
 }
 class TearOffDynamicMethod extends core::Object {
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  field dynamic bazz;
   constructor •(dynamic arg) → self::TearOffDynamicMethod*
-    : self::TearOffDynamicMethod::bazz = arg.foo, super core::Object::•() {
-    [@vm.call-site-attributes.metadata=receiverType:dynamic] [@vm.direct-call.metadata=#lib::TearOffDynamicMethod.bazz] this.{self::TearOffDynamicMethod::bazz}.call();
+    : self::TearOffDynamicMethod::bazz = arg{dynamic}.foo, super core::Object::•() {
+    [@vm.direct-call.metadata=#lib::TearOffDynamicMethod.bazz] this.{self::TearOffDynamicMethod::bazz}{dynamic}{dynamic}.call();
   }
 }
 static method knownResult() → dynamic
   return new self::B::•();
 static method main(core::List<core::String*>* args) → dynamic {
   core::Function* closure = () → self::B* => new self::B::•();
-  new self::TearOffDynamicMethod::•([@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] closure.call());
+  new self::TearOffDynamicMethod::•([@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] closure());
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
index 8558915..578e8fb 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
@@ -14,18 +14,18 @@
     : super self::A::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i]  method foo() → core::int*
-    return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=#lib::B.bar] [@vm.inferred-type.metadata=dart.core::_Smi (value: 3) (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().bar())));
+    return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=#lib::B.bar] [@vm.inferred-type.metadata=dart.core::_Smi (value: 3) (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult(){dynamic}.bar())){(core::num*) →* core::num*});
 [@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] [@vm.unboxing-info.metadata=()->i]  method bar() → core::int*
     return 3;
 }
 class TearOffInterfaceMethod extends core::Object {
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  field dynamic bazz;
   constructor •([@vm.inferred-type.metadata=#lib::B] self::A* arg) → self::TearOffInterfaceMethod*
-    : self::TearOffInterfaceMethod::bazz = arg.{self::A::foo}, super core::Object::•()
+    : self::TearOffInterfaceMethod::bazz = arg.{self::A::foo}{() →* core::int*}, super core::Object::•()
     ;
 }
 static method knownResult() → dynamic
   return new self::B::•();
 static method main(core::List<core::String*>* args) → dynamic {
-  [@vm.call-site-attributes.metadata=receiverType:dynamic] [@vm.direct-call.metadata=#lib::TearOffInterfaceMethod.bazz] new self::TearOffInterfaceMethod::•(new self::B::•()).{self::TearOffInterfaceMethod::bazz}.call();
+  [@vm.direct-call.metadata=#lib::TearOffInterfaceMethod.bazz] new self::TearOffInterfaceMethod::•(new self::B::•()).{self::TearOffInterfaceMethod::bazz}{dynamic}{dynamic}.call();
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
index 2b87ac1..bc69294 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
@@ -14,28 +14,28 @@
     : super self::A::•()
     ;
 [@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i]  method foo() → core::int*
-    return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=int? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo())));
+    return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=int? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult(){dynamic}.foo())){(core::num*) →* core::num*});
 }
 abstract class Base extends core::Object {
   synthetic constructor •() → self::Base*
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] [@vm.unboxing-info.metadata=()->i]  method foo() → core::int*
-    return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] 3.{core::num::+}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=int? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo())));
+    return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] 3.{core::num::+}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=int? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult(){dynamic}.foo())){(core::num*) →* core::num*});
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method doCall(dynamic x) → core::int*
-    return [@vm.call-site-attributes.metadata=receiverType:dynamic] x.call() as{TypeError,ForDynamic} core::int*;
+    return x{dynamic}.call() as{TypeError,ForDynamic} core::int*;
 }
 class TearOffSuperMethod extends self::Base {
   synthetic constructor •() → self::TearOffSuperMethod*
     : super self::Base::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  method bar() → core::int*
-    return [@vm.direct-call.metadata=#lib::Base.doCall] [@vm.inferred-type.metadata=int? (skip check)] this.{self::Base::doCall}(super.{self::Base::foo});
+    return [@vm.direct-call.metadata=#lib::Base.doCall] [@vm.inferred-type.metadata=int? (skip check)] this.{self::Base::doCall}(super.{self::Base::foo}){(dynamic) →* core::int*};
 }
 [@vm.inferred-type.metadata=#lib::B?]static field self::A* aa = new self::B::•();
 static method knownResult() → dynamic
   return new self::B::•();
 static method main(core::List<core::String*>* args) → dynamic {
-  [@vm.direct-call.metadata=#lib::TearOffSuperMethod.bar] [@vm.inferred-type.metadata=!? (skip check)] new self::TearOffSuperMethod::•().{self::TearOffSuperMethod::bar}();
-  [@vm.direct-call.metadata=#lib::B.foo??] [@vm.inferred-type.metadata=!? (skip check)] [@vm.inferred-type.metadata=#lib::B?] self::aa.{self::A::foo}();
+  [@vm.direct-call.metadata=#lib::TearOffSuperMethod.bar] [@vm.inferred-type.metadata=!? (skip check)] new self::TearOffSuperMethod::•().{self::TearOffSuperMethod::bar}(){() →* core::int*};
+  [@vm.direct-call.metadata=#lib::B.foo??] [@vm.inferred-type.metadata=!? (skip check)] [@vm.inferred-type.metadata=#lib::B?] self::aa.{self::A::foo}(){() →* core::int*};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination.dart.expect
index 2fbab9b..7f83b39 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination.dart.expect
@@ -49,10 +49,10 @@
   self::testAOfNum(new self::B::•<core::int*>());
   self::testAOfAOfB1(new self::A::•<self::A<self::B<dynamic>*>*>());
   self::testAOfAOfB2negative(new self::A::•<self::A<self::A<dynamic>*>*>());
-  [@vm.direct-call.metadata=#lib::B.testT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int*>().{self::B::testT1}();
-  [@vm.direct-call.metadata=#lib::B.testT2negative] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<self::A<core::int*>*>().{self::B::testT2negative}(new self::A::•<core::String*>());
-  [@vm.direct-call.metadata=#lib::B.testAOfT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<self::A<core::int*>*>().{self::B::testAOfT1}(new self::A::•<self::A<core::int*>*>());
-  [@vm.direct-call.metadata=#lib::B.testAOfT2negative] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<self::A<core::int*>*>().{self::B::testAOfT2negative}(new self::A::•<self::A<core::num*>*>());
+  [@vm.direct-call.metadata=#lib::B.testT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int*>().{self::B::testT1}(){(dynamic) →* dynamic};
+  [@vm.direct-call.metadata=#lib::B.testT2negative] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<self::A<core::int*>*>().{self::B::testT2negative}(new self::A::•<core::String*>()){(dynamic) →* dynamic};
+  [@vm.direct-call.metadata=#lib::B.testAOfT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<self::A<core::int*>*>().{self::B::testAOfT1}(new self::A::•<self::A<core::int*>*>()){(dynamic) →* dynamic};
+  [@vm.direct-call.metadata=#lib::B.testAOfT2negative] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<self::A<core::int*>*>().{self::B::testAOfT2negative}(new self::A::•<self::A<core::num*>*>()){(dynamic) →* dynamic};
 }
 constants  {
   #C1 = 42
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination_nnbd.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination_nnbd.dart.expect
index 3181ae3..8b32663 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination_nnbd.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination_nnbd.dart.expect
@@ -63,11 +63,11 @@
   self::testAOfNullableNum(new self::B::•<core::int?>());
   self::testNullableAOfNum();
   self::testNullableAOfNullableNum(new self::B::•<core::int?>());
-  [@vm.direct-call.metadata=#lib::B.testT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testT1}();
-  [@vm.direct-call.metadata=#lib::B.testT2] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testT2}();
-  [@vm.direct-call.metadata=#lib::B.testT3] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int?>().{self::B::testT3}();
-  [@vm.direct-call.metadata=#lib::B.testNullableT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testNullableT1}();
-  [@vm.direct-call.metadata=#lib::B.testNullableT2] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testNullableT2}();
+  [@vm.direct-call.metadata=#lib::B.testT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testT1}(){(dynamic) → dynamic};
+  [@vm.direct-call.metadata=#lib::B.testT2] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testT2}(){(dynamic) → dynamic};
+  [@vm.direct-call.metadata=#lib::B.testT3] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int?>().{self::B::testT3}(){(dynamic) → dynamic};
+  [@vm.direct-call.metadata=#lib::B.testNullableT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testNullableT1}(){(dynamic) → dynamic};
+  [@vm.direct-call.metadata=#lib::B.testNullableT2] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testNullableT2}(){(dynamic) → dynamic};
 }
 constants  {
   #C1 = 42
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination_nnbd_strong.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination_nnbd_strong.dart.expect
index ba26553..9f7ad71 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination_nnbd_strong.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination_nnbd_strong.dart.expect
@@ -66,11 +66,11 @@
   self::testNullableAOfNum();
   self::testNullableAOfNumNegative(new self::B::•<core::int?>());
   self::testNullableAOfNullableNum(new self::B::•<core::int?>());
-  [@vm.direct-call.metadata=#lib::B.testT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testT1}();
-  [@vm.direct-call.metadata=#lib::B.testT2negative] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testT2negative}();
-  [@vm.direct-call.metadata=#lib::B.testT3] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int?>().{self::B::testT3}();
-  [@vm.direct-call.metadata=#lib::B.testNullableT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testNullableT1}();
-  [@vm.direct-call.metadata=#lib::B.testNullableT2] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testNullableT2}();
+  [@vm.direct-call.metadata=#lib::B.testT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testT1}(){(dynamic) → dynamic};
+  [@vm.direct-call.metadata=#lib::B.testT2negative] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testT2negative}(){(dynamic) → dynamic};
+  [@vm.direct-call.metadata=#lib::B.testT3] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int?>().{self::B::testT3}(){(dynamic) → dynamic};
+  [@vm.direct-call.metadata=#lib::B.testNullableT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testNullableT1}(){(dynamic) → dynamic};
+  [@vm.direct-call.metadata=#lib::B.testNullableT2] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testNullableT2}(){(dynamic) → dynamic};
 }
 constants  {
   #C1 = 42
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_getters.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_getters.dart.expect
index 240a1a0..542466c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_getters.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_getters.dart.expect
@@ -68,29 +68,29 @@
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5] [@vm.unboxing-info.metadata=()->i]  get value() → core::int*
     return [@vm.inferred-type.metadata=int] self::smiOrMint;
 }
-[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kTrue = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1").{core::num::==}(1) ?{core::bool*} true : false;
+[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kTrue = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 1 ?{core::bool*} true : false;
 [@vm.inferred-type.metadata=int?]static field dynamic usedObject;
 [@vm.unboxing-info.metadata=()->i]static get mint() → core::int*
   return -6144092014192636707;
 [@vm.unboxing-info.metadata=()->i]static get smiOrMint() → core::int*
   return [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} 1 : [@vm.inferred-type.metadata=int] self::mint;
 static method use([@vm.inferred-type.metadata=int?] dynamic object) → void {
-  [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.inferred-type.metadata=int?] self::usedObject.{core::Object::==}(null) ?{dynamic} self::usedObject = object : null;
+  [@vm.inferred-type.metadata=int?] self::usedObject == null ?{dynamic} self::usedObject = object : null;
 }
 static method main() → dynamic {
   final self::BI1A* bi1a = new self::BI1A::•([@vm.inferred-type.metadata=int] self::smiOrMint);
   final self::BI1B* bi1b = new self::BI1B::•();
-  self::use([@vm.inferred-type.metadata=int?]([@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::BI1*} bi1a : bi1b).{self::BI1::value});
+  self::use([@vm.inferred-type.metadata=int?]([@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::BI1*} bi1a : bi1b).{self::BI1::value}{core::int*});
   final self::BI2A* bi2a = new self::BI2A::•();
   final self::BI2B* bi2b = new self::BI2B::•();
-  self::use([@vm.inferred-type.metadata=int?]([@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::BI2*} bi2a : bi2b).{self::BI2::value});
+  self::use([@vm.inferred-type.metadata=int?]([@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::BI2*} bi2a : bi2b).{self::BI2::value}{core::int*});
   final self::BI3A* bi3a = new self::BI3A::•([@vm.inferred-type.metadata=int] self::smiOrMint);
   final self::BI3B* bi3b = new self::BI3B::•();
   ([@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::BI3*} bi3a : bi3b).{self::BI3::value} = null;
-  self::use([@vm.inferred-type.metadata=int?]([@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::BI3*} bi3a : bi3b).{self::BI3::value});
+  self::use([@vm.inferred-type.metadata=int?]([@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::BI3*} bi3a : bi3b).{self::BI3::value}{core::int*});
   final self::UBIA* ubia = new self::UBIA::•([@vm.inferred-type.metadata=int] self::smiOrMint);
   final self::UBIB* ubib = new self::UBIB::•();
-  self::use([@vm.inferred-type.metadata=int]([@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::UBI*} ubia : ubib).{self::UBI::value});
+  self::use([@vm.inferred-type.metadata=int]([@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::UBI*} ubia : ubib).{self::UBI::value}{core::int*});
 }
 constants  {
   #C1 = null
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_fields.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_fields.dart.expect
index 408fc55..a3d1769b 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_fields.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_fields.dart.expect
@@ -21,15 +21,15 @@
     : self::A::unboxedSmi = unboxedSmi, self::A::unboxedInt = unboxedInt, self::A::unboxedDouble = unboxedDouble, self::A::boxedNullableInt = boxedNullableInt, self::A::boxedNullableDouble = boxedNullableDouble, self::A::boxedNonNullableIntOrDouble = boxedNonNullableIntOrDouble, self::A::boxedNullableIntOrDouble = boxedNullableIntOrDouble, self::A::boxedNullableX = boxedNullableX, self::A::boxedX = boxedX, super core::Object::•()
     ;
 }
-[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kTrue = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1").{core::num::==}(1) ?{core::bool*} true : false;
-[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kFalse = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1").{core::num::==}(2) ?{core::bool*} true : false;
+[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kTrue = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 1 ?{core::bool*} true : false;
+[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kFalse = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::bool*} true : false;
 static field dynamic usedObject;
 [@vm.unboxing-info.metadata=()->i]static get mint() → core::int*
   return -6144092014192636707;
 [@vm.unboxing-info.metadata=()->i]static get smiOrMint() → core::int*
   return [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} 1 : [@vm.inferred-type.metadata=int] self::mint;
 static method use(dynamic object) → void {
-  [@vm.inferred-type.metadata=!? (receiver not int)] self::usedObject.{core::Object::==}(null) ?{dynamic} self::usedObject = object : null;
+  self::usedObject == null ?{dynamic} self::usedObject = object : null;
 }
 static method main() → dynamic {
   final self::A* a = new self::A::•([@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} 1 : 2, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} [@vm.inferred-type.metadata=int] self::smiOrMint : 2, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::double*} 1.1 : 2.2, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} [@vm.inferred-type.metadata=int] self::smiOrMint : null, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::double*} 1.1 : null, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::num*} [@vm.inferred-type.metadata=int] self::smiOrMint : 1.1, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::num*} [@vm.inferred-type.metadata=dart.core::bool?] self::kFalse ?{core::num*} [@vm.inferred-type.metadata=int] self::smiOrMint : 1.1 : null, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::X*} new self::X::•() : null, new self::X::•());
@@ -42,13 +42,13 @@
   [@vm.direct-call.metadata=#lib::A.boxedNullableIntOrDouble] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedNullableIntOrDouble} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::num*} [@vm.inferred-type.metadata=dart.core::bool?] self::kFalse ?{core::num*} [@vm.inferred-type.metadata=int] self::smiOrMint : 1.1 : null;
   [@vm.direct-call.metadata=#lib::A.boxedNullableX] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedNullableX} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::X*} new self::X::•() : null;
   [@vm.direct-call.metadata=#lib::A.boxedX] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedX} = new self::X::•();
-  self::use([@vm.direct-call.metadata=#lib::A.unboxedSmi] [@vm.inferred-type.metadata=dart.core::_Smi] a.{self::A::unboxedSmi});
-  self::use([@vm.direct-call.metadata=#lib::A.unboxedInt] [@vm.inferred-type.metadata=int] a.{self::A::unboxedInt});
-  self::use([@vm.direct-call.metadata=#lib::A.unboxedDouble] [@vm.inferred-type.metadata=dart.core::_Double] a.{self::A::unboxedDouble});
-  self::use([@vm.direct-call.metadata=#lib::A.boxedNullableInt] [@vm.inferred-type.metadata=int?] a.{self::A::boxedNullableInt});
-  self::use([@vm.direct-call.metadata=#lib::A.boxedNullableDouble] [@vm.inferred-type.metadata=dart.core::_Double?] a.{self::A::boxedNullableDouble});
-  self::use([@vm.direct-call.metadata=#lib::A.boxedNonNullableIntOrDouble] [@vm.inferred-type.metadata=!] a.{self::A::boxedNonNullableIntOrDouble});
-  self::use([@vm.direct-call.metadata=#lib::A.boxedNullableIntOrDouble] a.{self::A::boxedNullableIntOrDouble});
-  self::use([@vm.direct-call.metadata=#lib::A.boxedNullableX] [@vm.inferred-type.metadata=#lib::X?] a.{self::A::boxedNullableX});
-  self::use([@vm.direct-call.metadata=#lib::A.boxedX] [@vm.inferred-type.metadata=#lib::X] a.{self::A::boxedX});
+  self::use([@vm.direct-call.metadata=#lib::A.unboxedSmi] [@vm.inferred-type.metadata=dart.core::_Smi] a.{self::A::unboxedSmi}{dynamic});
+  self::use([@vm.direct-call.metadata=#lib::A.unboxedInt] [@vm.inferred-type.metadata=int] a.{self::A::unboxedInt}{dynamic});
+  self::use([@vm.direct-call.metadata=#lib::A.unboxedDouble] [@vm.inferred-type.metadata=dart.core::_Double] a.{self::A::unboxedDouble}{dynamic});
+  self::use([@vm.direct-call.metadata=#lib::A.boxedNullableInt] [@vm.inferred-type.metadata=int?] a.{self::A::boxedNullableInt}{dynamic});
+  self::use([@vm.direct-call.metadata=#lib::A.boxedNullableDouble] [@vm.inferred-type.metadata=dart.core::_Double?] a.{self::A::boxedNullableDouble}{dynamic});
+  self::use([@vm.direct-call.metadata=#lib::A.boxedNonNullableIntOrDouble] [@vm.inferred-type.metadata=!] a.{self::A::boxedNonNullableIntOrDouble}{dynamic});
+  self::use([@vm.direct-call.metadata=#lib::A.boxedNullableIntOrDouble] a.{self::A::boxedNullableIntOrDouble}{dynamic});
+  self::use([@vm.direct-call.metadata=#lib::A.boxedNullableX] [@vm.inferred-type.metadata=#lib::X?] a.{self::A::boxedNullableX}{dynamic});
+  self::use([@vm.direct-call.metadata=#lib::A.boxedX] [@vm.inferred-type.metadata=#lib::X] a.{self::A::boxedX}{dynamic});
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method.dart.expect
index 4660ab5..0811f05 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method.dart.expect
@@ -122,52 +122,52 @@
 [@vm.unboxing-info.metadata=()->i]static get mint() → core::int*
   return -6144092014192636707;
 static method use(dynamic object) → void {
-  [@vm.inferred-type.metadata=!? (receiver not int)] self::usedObject.{core::Object::==}(null) ?{dynamic} self::usedObject = object : null;
+  self::usedObject == null ?{dynamic} self::usedObject = object : null;
 }
 static method main() → dynamic {
   final core::List<core::Object*>* values = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::Object*>] core::_GrowableList::_literal3<core::Object*>(new self::Impl1::•(), new self::BaseImpl2::•(), new self::SubImpl3::•());
-  final self::Impl1* a = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("0")) as self::Impl1*;
-  final self::BaseImpl2* b = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("1")) as self::BaseImpl2*;
-  final self::SubImpl3* c = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("2")) as self::SubImpl3*;
-  final self::Interface* d = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("2")) as self::Interface*;
-  [@vm.direct-call.metadata=#lib::Impl1.takePositional??] [@vm.inferred-type.metadata=!? (skip check)] a.{self::Impl1::takePositional}(1, 1.1, null, null, 1, null, null, new self::X::•());
-  b.{self::BaseImpl2::takePositional}(2, 2.2, 2, 2.2, 2.2, 2, new self::X::•(), new self::X::•());
-  [@vm.direct-call.metadata=#lib::SubImpl3.takePositional??] [@vm.inferred-type.metadata=!? (skip check)] c.{self::SubImpl3::takePositional}([@vm.inferred-type.metadata=int] self::mint, 3.3, [@vm.inferred-type.metadata=int] self::mint, 3.3, 3.3, 3.3, new self::X::•(), new self::X::•());
-  d.{self::Interface::takePositional}([@vm.inferred-type.metadata=int] self::mint, 3.3, [@vm.inferred-type.metadata=int] self::mint, 3.3, 3.3, 3.3, new self::X::•(), new self::X::•());
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnUnboxedSmi] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 1)] a.{self::Impl1::returnUnboxedSmi}());
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnUnboxedInt] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 1)] a.{self::Impl1::returnUnboxedInt}());
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnUnboxedDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 1.1)] a.{self::Impl1::returnUnboxedDouble}());
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableInt] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableInt}());
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableDouble] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableDouble}());
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedIntOrDouble] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 1)] a.{self::Impl1::returnBoxedIntOrDouble}());
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableIntOrDouble] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableIntOrDouble}());
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableX] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableX}());
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedX] [@vm.inferred-type.metadata=#lib::X (skip check)] a.{self::Impl1::returnBoxedX}());
-  self::use([@vm.inferred-type.metadata=dart.core::_Smi] b.{self::BaseImpl2::returnUnboxedSmi}());
-  self::use([@vm.inferred-type.metadata=int] b.{self::BaseImpl2::returnUnboxedInt}());
-  self::use([@vm.inferred-type.metadata=dart.core::_Double] b.{self::BaseImpl2::returnUnboxedDouble}());
-  self::use([@vm.inferred-type.metadata=int] b.{self::BaseImpl2::returnBoxedNullableInt}());
-  self::use([@vm.inferred-type.metadata=dart.core::_Double] b.{self::BaseImpl2::returnBoxedNullableDouble}());
-  self::use([@vm.inferred-type.metadata=dart.core::_Double] b.{self::BaseImpl2::returnBoxedIntOrDouble}());
-  self::use([@vm.inferred-type.metadata=!] b.{self::BaseImpl2::returnBoxedNullableIntOrDouble}());
-  self::use([@vm.inferred-type.metadata=#lib::X] b.{self::BaseImpl2::returnBoxedNullableX}());
-  self::use([@vm.inferred-type.metadata=#lib::X] b.{self::BaseImpl2::returnBoxedX}());
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnUnboxedSmi] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 3)] c.{self::SubImpl3::returnUnboxedSmi}());
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnUnboxedInt] [@vm.inferred-type.metadata=int (skip check)] c.{self::SubImpl3::returnUnboxedInt}());
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnUnboxedDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnUnboxedDouble}());
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableInt] [@vm.inferred-type.metadata=int (skip check)] c.{self::SubImpl3::returnBoxedNullableInt}());
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnBoxedNullableDouble}());
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedIntOrDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnBoxedIntOrDouble}());
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableIntOrDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnBoxedNullableIntOrDouble}());
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableX] [@vm.inferred-type.metadata=#lib::X (skip check)] c.{self::SubImpl3::returnBoxedNullableX}());
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedX] [@vm.inferred-type.metadata=#lib::X (skip check)] c.{self::SubImpl3::returnBoxedX}());
-  self::use([@vm.inferred-type.metadata=dart.core::_Smi] d.{self::Interface::returnUnboxedSmi}());
-  self::use([@vm.inferred-type.metadata=int] d.{self::Interface::returnUnboxedInt}());
-  self::use([@vm.inferred-type.metadata=dart.core::_Double] d.{self::Interface::returnUnboxedDouble}());
-  self::use([@vm.inferred-type.metadata=int?] d.{self::Interface::returnBoxedNullableInt}());
-  self::use([@vm.inferred-type.metadata=dart.core::_Double?] d.{self::Interface::returnBoxedNullableDouble}());
-  self::use([@vm.inferred-type.metadata=!] d.{self::Interface::returnBoxedIntOrDouble}());
-  self::use([@vm.inferred-type.metadata=dart.core::_Double?] d.{self::Interface::returnBoxedNullableIntOrDouble}());
-  self::use([@vm.inferred-type.metadata=#lib::X?] d.{self::Interface::returnBoxedNullableX}());
-  self::use([@vm.inferred-type.metadata=#lib::X] d.{self::Interface::returnBoxedX}());
+  final self::Impl1* a = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("0")){(core::int*) →* core::Object*} as self::Impl1*;
+  final self::BaseImpl2* b = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("1")){(core::int*) →* core::Object*} as self::BaseImpl2*;
+  final self::SubImpl3* c = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("2")){(core::int*) →* core::Object*} as self::SubImpl3*;
+  final self::Interface* d = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("2")){(core::int*) →* core::Object*} as self::Interface*;
+  [@vm.direct-call.metadata=#lib::Impl1.takePositional??] [@vm.inferred-type.metadata=!? (skip check)] a.{self::Impl1::takePositional}(1, 1.1, null, null, 1, null, null, new self::X::•()){(core::int*, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic) →* void};
+  b.{self::BaseImpl2::takePositional}(2, 2.2, 2, 2.2, 2.2, 2, new self::X::•(), new self::X::•()){(core::int*, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic) →* void};
+  [@vm.direct-call.metadata=#lib::SubImpl3.takePositional??] [@vm.inferred-type.metadata=!? (skip check)] c.{self::SubImpl3::takePositional}([@vm.inferred-type.metadata=int] self::mint, 3.3, [@vm.inferred-type.metadata=int] self::mint, 3.3, 3.3, 3.3, new self::X::•(), new self::X::•()){(core::int*, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic) →* void};
+  d.{self::Interface::takePositional}([@vm.inferred-type.metadata=int] self::mint, 3.3, [@vm.inferred-type.metadata=int] self::mint, 3.3, 3.3, 3.3, new self::X::•(), new self::X::•()){(core::int*, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic) →* void};
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnUnboxedSmi] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 1)] a.{self::Impl1::returnUnboxedSmi}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnUnboxedInt] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 1)] a.{self::Impl1::returnUnboxedInt}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnUnboxedDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 1.1)] a.{self::Impl1::returnUnboxedDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableInt] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableInt}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableDouble] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedIntOrDouble] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 1)] a.{self::Impl1::returnBoxedIntOrDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableIntOrDouble] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableIntOrDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableX] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableX}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedX] [@vm.inferred-type.metadata=#lib::X (skip check)] a.{self::Impl1::returnBoxedX}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Smi] b.{self::BaseImpl2::returnUnboxedSmi}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=int] b.{self::BaseImpl2::returnUnboxedInt}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Double] b.{self::BaseImpl2::returnUnboxedDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=int] b.{self::BaseImpl2::returnBoxedNullableInt}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Double] b.{self::BaseImpl2::returnBoxedNullableDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Double] b.{self::BaseImpl2::returnBoxedIntOrDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=!] b.{self::BaseImpl2::returnBoxedNullableIntOrDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=#lib::X] b.{self::BaseImpl2::returnBoxedNullableX}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=#lib::X] b.{self::BaseImpl2::returnBoxedX}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnUnboxedSmi] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 3)] c.{self::SubImpl3::returnUnboxedSmi}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnUnboxedInt] [@vm.inferred-type.metadata=int (skip check)] c.{self::SubImpl3::returnUnboxedInt}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnUnboxedDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnUnboxedDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableInt] [@vm.inferred-type.metadata=int (skip check)] c.{self::SubImpl3::returnBoxedNullableInt}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnBoxedNullableDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedIntOrDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnBoxedIntOrDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableIntOrDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnBoxedNullableIntOrDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableX] [@vm.inferred-type.metadata=#lib::X (skip check)] c.{self::SubImpl3::returnBoxedNullableX}(){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedX] [@vm.inferred-type.metadata=#lib::X (skip check)] c.{self::SubImpl3::returnBoxedX}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Smi] d.{self::Interface::returnUnboxedSmi}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=int] d.{self::Interface::returnUnboxedInt}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Double] d.{self::Interface::returnUnboxedDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=int?] d.{self::Interface::returnBoxedNullableInt}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Double?] d.{self::Interface::returnBoxedNullableDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=!] d.{self::Interface::returnBoxedIntOrDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Double?] d.{self::Interface::returnBoxedNullableIntOrDouble}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=#lib::X?] d.{self::Interface::returnBoxedNullableX}(){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=#lib::X] d.{self::Interface::returnBoxedX}(){(self::X*) →* dynamic});
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method_tearoff.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method_tearoff.dart.expect
index f5662a4f..d22492c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method_tearoff.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method_tearoff.dart.expect
@@ -122,62 +122,62 @@
 [@vm.unboxing-info.metadata=()->i]static get mint() → core::int*
   return -6144092014192636707;
 static method use(dynamic object) → void {
-  [@vm.inferred-type.metadata=!? (receiver not int)] self::usedObject.{core::Object::==}(null) ?{dynamic} self::usedObject = object : null;
+  self::usedObject == null ?{dynamic} self::usedObject = object : null;
 }
 static method main() → dynamic {
   final core::List<core::Object*>* values = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::Object*>] core::_GrowableList::_literal3<core::Object*>(new self::Impl1::•(), new self::BaseImpl2::•(), new self::SubImpl3::•());
-  final self::Impl1* a = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("0")) as self::Impl1*;
-  final self::BaseImpl2* b = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("1")) as self::BaseImpl2*;
-  final self::SubImpl3* c = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("2")) as self::SubImpl3*;
-  final self::Interface* d = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("2")) as self::Interface*;
-  [@vm.direct-call.metadata=#lib::Impl1.takePositional??] [@vm.inferred-type.metadata=!? (skip check)] a.{self::Impl1::takePositional}(1, 1, 1.1, null, null, 1, null, null, new self::X::•());
-  b.{self::BaseImpl2::takePositional}(2, 2, 2.2, 2, 2.2, 2.2, 2, new self::X::•(), new self::X::•());
-  [@vm.direct-call.metadata=#lib::SubImpl3.takePositional??] [@vm.inferred-type.metadata=!? (skip check)] c.{self::SubImpl3::takePositional}(3, [@vm.inferred-type.metadata=int] self::mint, 3.3, [@vm.inferred-type.metadata=int] self::mint, 3.3, 3.3, 3.3, new self::X::•(), new self::X::•());
-  d.{self::Interface::takePositional}(3, [@vm.inferred-type.metadata=int] self::mint, 3.3, [@vm.inferred-type.metadata=int] self::mint, 3.3, 3.3, 3.3, new self::X::•(), new self::X::•());
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnUnboxedSmi] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 1)] a.{self::Impl1::returnUnboxedSmi}(null));
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnUnboxedInt] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 1)] a.{self::Impl1::returnUnboxedInt}(null));
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnUnboxedDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 1.1)] a.{self::Impl1::returnUnboxedDouble}(null));
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableInt] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableInt}(null));
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableDouble] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableDouble}(null));
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedIntOrDouble] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 1)] a.{self::Impl1::returnBoxedIntOrDouble}(null));
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableIntOrDouble] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableIntOrDouble}(null));
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableX] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableX}(null));
-  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedX] [@vm.inferred-type.metadata=#lib::X (skip check)] a.{self::Impl1::returnBoxedX}(null));
-  self::use([@vm.inferred-type.metadata=dart.core::_Smi] b.{self::BaseImpl2::returnUnboxedSmi}(null));
-  self::use([@vm.inferred-type.metadata=int] b.{self::BaseImpl2::returnUnboxedInt}(null));
-  self::use([@vm.inferred-type.metadata=dart.core::_Double] b.{self::BaseImpl2::returnUnboxedDouble}(null));
-  self::use([@vm.inferred-type.metadata=int] b.{self::BaseImpl2::returnBoxedNullableInt}(null));
-  self::use([@vm.inferred-type.metadata=dart.core::_Double] b.{self::BaseImpl2::returnBoxedNullableDouble}(null));
-  self::use([@vm.inferred-type.metadata=dart.core::_Double] b.{self::BaseImpl2::returnBoxedIntOrDouble}(null));
-  self::use([@vm.inferred-type.metadata=!] b.{self::BaseImpl2::returnBoxedNullableIntOrDouble}(null));
-  self::use([@vm.inferred-type.metadata=#lib::X] b.{self::BaseImpl2::returnBoxedNullableX}(null));
-  self::use([@vm.inferred-type.metadata=#lib::X] b.{self::BaseImpl2::returnBoxedX}(null));
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnUnboxedSmi] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 3)] c.{self::SubImpl3::returnUnboxedSmi}(null));
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnUnboxedInt] [@vm.inferred-type.metadata=int (skip check)] c.{self::SubImpl3::returnUnboxedInt}(null));
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnUnboxedDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnUnboxedDouble}(null));
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableInt] [@vm.inferred-type.metadata=int (skip check)] c.{self::SubImpl3::returnBoxedNullableInt}(null));
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnBoxedNullableDouble}(null));
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedIntOrDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnBoxedIntOrDouble}(null));
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableIntOrDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnBoxedNullableIntOrDouble}(null));
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableX] [@vm.inferred-type.metadata=#lib::X (skip check)] c.{self::SubImpl3::returnBoxedNullableX}(null));
-  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedX] [@vm.inferred-type.metadata=#lib::X (skip check)] c.{self::SubImpl3::returnBoxedX}(null));
-  self::use([@vm.inferred-type.metadata=dart.core::_Smi] d.{self::Interface::returnUnboxedSmi}(null));
-  self::use([@vm.inferred-type.metadata=int] d.{self::Interface::returnUnboxedInt}(null));
-  self::use([@vm.inferred-type.metadata=dart.core::_Double] d.{self::Interface::returnUnboxedDouble}(null));
-  self::use([@vm.inferred-type.metadata=int?] d.{self::Interface::returnBoxedNullableInt}(null));
-  self::use([@vm.inferred-type.metadata=dart.core::_Double?] d.{self::Interface::returnBoxedNullableDouble}(null));
-  self::use([@vm.inferred-type.metadata=!] d.{self::Interface::returnBoxedIntOrDouble}(null));
-  self::use([@vm.inferred-type.metadata=dart.core::_Double?] d.{self::Interface::returnBoxedNullableIntOrDouble}(null));
-  self::use([@vm.inferred-type.metadata=#lib::X?] d.{self::Interface::returnBoxedNullableX}(null));
-  self::use([@vm.inferred-type.metadata=#lib::X] d.{self::Interface::returnBoxedX}(null));
-  self::use(d.{self::Interface::takePositional});
-  self::use(d.{self::Interface::returnUnboxedSmi});
-  self::use(d.{self::Interface::returnUnboxedInt});
-  self::use(d.{self::Interface::returnUnboxedDouble});
-  self::use(d.{self::Interface::returnBoxedNullableInt});
-  self::use(d.{self::Interface::returnBoxedNullableDouble});
-  self::use(d.{self::Interface::returnBoxedIntOrDouble});
-  self::use(d.{self::Interface::returnBoxedNullableIntOrDouble});
-  self::use(d.{self::Interface::returnBoxedNullableX});
-  self::use(d.{self::Interface::returnBoxedX});
+  final self::Impl1* a = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("0")){(core::int*) →* core::Object*} as self::Impl1*;
+  final self::BaseImpl2* b = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("1")){(core::int*) →* core::Object*} as self::BaseImpl2*;
+  final self::SubImpl3* c = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("2")){(core::int*) →* core::Object*} as self::SubImpl3*;
+  final self::Interface* d = [@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=!? (skip check)] values.{core::List::[]}([@vm.inferred-type.metadata=int?] core::int::parse("2")){(core::int*) →* core::Object*} as self::Interface*;
+  [@vm.direct-call.metadata=#lib::Impl1.takePositional??] [@vm.inferred-type.metadata=!? (skip check)] a.{self::Impl1::takePositional}(1, 1, 1.1, null, null, 1, null, null, new self::X::•()){(core::int*, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic) →* void};
+  b.{self::BaseImpl2::takePositional}(2, 2, 2.2, 2, 2.2, 2.2, 2, new self::X::•(), new self::X::•()){(core::int*, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic) →* void};
+  [@vm.direct-call.metadata=#lib::SubImpl3.takePositional??] [@vm.inferred-type.metadata=!? (skip check)] c.{self::SubImpl3::takePositional}(3, [@vm.inferred-type.metadata=int] self::mint, 3.3, [@vm.inferred-type.metadata=int] self::mint, 3.3, 3.3, 3.3, new self::X::•(), new self::X::•()){(core::int*, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic) →* void};
+  d.{self::Interface::takePositional}(3, [@vm.inferred-type.metadata=int] self::mint, 3.3, [@vm.inferred-type.metadata=int] self::mint, 3.3, 3.3, 3.3, new self::X::•(), new self::X::•()){(core::int*, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic) →* void};
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnUnboxedSmi] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 1)] a.{self::Impl1::returnUnboxedSmi}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnUnboxedInt] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 1)] a.{self::Impl1::returnUnboxedInt}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnUnboxedDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 1.1)] a.{self::Impl1::returnUnboxedDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableInt] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableInt}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableDouble] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedIntOrDouble] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 1)] a.{self::Impl1::returnBoxedIntOrDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableIntOrDouble] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableIntOrDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedNullableX] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] a.{self::Impl1::returnBoxedNullableX}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::Impl1.returnBoxedX] [@vm.inferred-type.metadata=#lib::X (skip check)] a.{self::Impl1::returnBoxedX}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Smi] b.{self::BaseImpl2::returnUnboxedSmi}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=int] b.{self::BaseImpl2::returnUnboxedInt}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Double] b.{self::BaseImpl2::returnUnboxedDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=int] b.{self::BaseImpl2::returnBoxedNullableInt}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Double] b.{self::BaseImpl2::returnBoxedNullableDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Double] b.{self::BaseImpl2::returnBoxedIntOrDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=!] b.{self::BaseImpl2::returnBoxedNullableIntOrDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=#lib::X] b.{self::BaseImpl2::returnBoxedNullableX}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=#lib::X] b.{self::BaseImpl2::returnBoxedX}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnUnboxedSmi] [@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 3)] c.{self::SubImpl3::returnUnboxedSmi}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnUnboxedInt] [@vm.inferred-type.metadata=int (skip check)] c.{self::SubImpl3::returnUnboxedInt}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnUnboxedDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnUnboxedDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableInt] [@vm.inferred-type.metadata=int (skip check)] c.{self::SubImpl3::returnBoxedNullableInt}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnBoxedNullableDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedIntOrDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnBoxedIntOrDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableIntOrDouble] [@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.3)] c.{self::SubImpl3::returnBoxedNullableIntOrDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedNullableX] [@vm.inferred-type.metadata=#lib::X (skip check)] c.{self::SubImpl3::returnBoxedNullableX}(null){(self::X*) →* dynamic});
+  self::use([@vm.direct-call.metadata=#lib::SubImpl3.returnBoxedX] [@vm.inferred-type.metadata=#lib::X (skip check)] c.{self::SubImpl3::returnBoxedX}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Smi] d.{self::Interface::returnUnboxedSmi}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=int] d.{self::Interface::returnUnboxedInt}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Double] d.{self::Interface::returnUnboxedDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=int?] d.{self::Interface::returnBoxedNullableInt}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Double?] d.{self::Interface::returnBoxedNullableDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=!] d.{self::Interface::returnBoxedIntOrDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=dart.core::_Double?] d.{self::Interface::returnBoxedNullableIntOrDouble}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=#lib::X?] d.{self::Interface::returnBoxedNullableX}(null){(self::X*) →* dynamic});
+  self::use([@vm.inferred-type.metadata=#lib::X] d.{self::Interface::returnBoxedX}(null){(self::X*) →* dynamic});
+  self::use(d.{self::Interface::takePositional}{(core::int*, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic) →* void});
+  self::use(d.{self::Interface::returnUnboxedSmi}{(self::X*) →* dynamic});
+  self::use(d.{self::Interface::returnUnboxedInt}{(self::X*) →* dynamic});
+  self::use(d.{self::Interface::returnUnboxedDouble}{(self::X*) →* dynamic});
+  self::use(d.{self::Interface::returnBoxedNullableInt}{(self::X*) →* dynamic});
+  self::use(d.{self::Interface::returnBoxedNullableDouble}{(self::X*) →* dynamic});
+  self::use(d.{self::Interface::returnBoxedIntOrDouble}{(self::X*) →* dynamic});
+  self::use(d.{self::Interface::returnBoxedNullableIntOrDouble}{(self::X*) →* dynamic});
+  self::use(d.{self::Interface::returnBoxedNullableX}{(self::X*) →* dynamic});
+  self::use(d.{self::Interface::returnBoxedX}{(self::X*) →* dynamic});
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method.dart.expect
index 63b4505..2577681 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method.dart.expect
@@ -7,15 +7,15 @@
     : super core::Object::•()
     ;
 }
-[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kTrue = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1").{core::num::==}(1) ?{core::bool*} true : false;
-[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kFalse = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1").{core::num::==}(2) ?{core::bool*} true : false;
+[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kTrue = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 1 ?{core::bool*} true : false;
+[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kFalse = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::bool*} true : false;
 static field dynamic usedObject;
 [@vm.unboxing-info.metadata=()->i]static get mint() → core::int*
   return -6144092014192636707;
 [@vm.unboxing-info.metadata=()->i]static get smiOrMint() → core::int*
   return [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} 1 : [@vm.inferred-type.metadata=int] self::mint;
 static method use(dynamic object) → void {
-  [@vm.inferred-type.metadata=!? (receiver not int)] self::usedObject.{core::Object::==}(null) ?{dynamic} self::usedObject = object : null;
+  self::usedObject == null ?{dynamic} self::usedObject = object : null;
 }
 [@vm.unboxing-info.metadata=(i,d,b,b,b,b,b,b)->b]static method takePositional([@vm.inferred-type.metadata=int] dynamic unboxedInt, [@vm.inferred-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-type.metadata=int?] dynamic boxedNullableInt, [@vm.inferred-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-type.metadata=!] dynamic boxedIntOrDouble, dynamic boxedNullableIntOrDouble, [@vm.inferred-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-type.metadata=#lib::X] dynamic boxedX) → void {
   self::use(unboxedInt);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method_tearoff.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method_tearoff.dart.expect
index 3152a8a..8296cf3 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method_tearoff.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method_tearoff.dart.expect
@@ -7,15 +7,15 @@
     : super core::Object::•()
     ;
 }
-[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kTrue = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1").{core::num::==}(1) ?{core::bool*} true : false;
-[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kFalse = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1").{core::num::==}(2) ?{core::bool*} true : false;
+[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kTrue = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 1 ?{core::bool*} true : false;
+[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kFalse = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::bool*} true : false;
 static field dynamic usedObject;
 [@vm.unboxing-info.metadata=()->i]static get mint() → core::int*
   return -6144092014192636707;
 [@vm.unboxing-info.metadata=()->i]static get smiOrMint() → core::int*
   return [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} 1 : [@vm.inferred-type.metadata=int] self::mint;
 static method use(dynamic object) → void {
-  [@vm.inferred-type.metadata=!? (receiver not int)] self::usedObject.{core::Object::==}(null) ?{dynamic} self::usedObject = object : null;
+  self::usedObject == null ?{dynamic} self::usedObject = object : null;
 }
 static method takePositional(core::int* unboxedSmi, dynamic unboxedInt, dynamic unboxedDouble, dynamic boxedNullableInt, dynamic boxedNullableDouble, dynamic boxedIntOrDouble, dynamic boxedNullableIntOrDouble, dynamic boxedNullableX, dynamic boxedX) → void {
   self::use(unboxedInt);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart.expect
index 6a4e564..9fe5d89 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart.expect
@@ -61,9 +61,9 @@
     [@vm.call-site-attributes.metadata=receiverType:#lib::C<dart.core::num*>*] [@vm.direct-call.metadata=#lib::D.bar] c.{self::C::bar} = 3.14;
   });
   self::E* e = new self::F::•();
-  let final core::int* #t2 = [@vm.direct-call.metadata=#lib::F.bar] [@vm.inferred-type.metadata=dart.core::_Smi (value: 42)] e.{self::E::bar} in exp::Expect::equals();
+  let final core::int* #t2 = [@vm.direct-call.metadata=#lib::F.bar] [@vm.inferred-type.metadata=dart.core::_Smi (value: 42)] e.{self::E::bar}{core::int*} in exp::Expect::equals();
   exp::Expect::isTrue(![@vm.inferred-type.metadata=dart.core::bool] core::identical(#C2, #C4));
-  [@vm.direct-call.metadata=#lib::I.foo] [@vm.inferred-type.metadata=!? (skip check)] new self::I::•().{self::I::foo}();
+  [@vm.direct-call.metadata=#lib::I.foo] [@vm.inferred-type.metadata=!? (skip check)] new self::I::•().{self::I::foo}(){() →* dynamic};
   5;
 }
 constants  {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field3_nnbd.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field3_nnbd.dart.expect
index 1431eb6..359a3f8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field3_nnbd.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field3_nnbd.dart.expect
@@ -22,8 +22,8 @@
 }
 [@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] [@vm.unboxing-info.metadata=(i)->i]late static final [setter] field core::int staticLateB;
 static method main() → void {
-  [@vm.direct-call.metadata=#lib::A.use] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::use}();
-  [@vm.direct-call.metadata=#lib::B.use] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•().{self::B::use}();
+  [@vm.direct-call.metadata=#lib::A.use] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::use}(){() → dynamic};
+  [@vm.direct-call.metadata=#lib::B.use] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•().{self::B::use}(){() → dynamic};
   4;
   self::staticLateB = 4;
 }
diff --git a/runtime/observatory/tests/service/next_through_function_expression_test.dart b/runtime/observatory/tests/service/next_through_function_expression_test.dart
index ef33331..082da72 100644
--- a/runtime/observatory/tests/service/next_through_function_expression_test.dart
+++ b/runtime/observatory/tests/service/next_through_function_expression_test.dart
@@ -22,10 +22,10 @@
 
 List<String> stops = [];
 List<String> expected = [
-  "$file:${LINE_A+0}:13", // on 'i' in 'codeXYZ(int i)'
-  "$file:${LINE_A+1}:3", // on 'innerOne'
-  "$file:${LINE_A+5}:18", // on '(', i.e. after 'innerOne' call
-  "$file:${LINE_A+5}:3" // on 'return'
+  "$file:${LINE_A + 0}:13", // on 'i' in 'codeXYZ(int i)'
+  "$file:${LINE_A + 1}:3", // on 'innerOne'
+  "$file:${LINE_A + 5}:10", // on 'innerOne()' call
+  "$file:${LINE_A + 5}:3" // on 'return'
 ];
 
 var tests = <IsolateTest>[
diff --git a/runtime/observatory_2/tests/service_2/next_through_function_expression_test.dart b/runtime/observatory_2/tests/service_2/next_through_function_expression_test.dart
index ef33331..082da72 100644
--- a/runtime/observatory_2/tests/service_2/next_through_function_expression_test.dart
+++ b/runtime/observatory_2/tests/service_2/next_through_function_expression_test.dart
@@ -22,10 +22,10 @@
 
 List<String> stops = [];
 List<String> expected = [
-  "$file:${LINE_A+0}:13", // on 'i' in 'codeXYZ(int i)'
-  "$file:${LINE_A+1}:3", // on 'innerOne'
-  "$file:${LINE_A+5}:18", // on '(', i.e. after 'innerOne' call
-  "$file:${LINE_A+5}:3" // on 'return'
+  "$file:${LINE_A + 0}:13", // on 'i' in 'codeXYZ(int i)'
+  "$file:${LINE_A + 1}:3", // on 'innerOne'
+  "$file:${LINE_A + 5}:10", // on 'innerOne()' call
+  "$file:${LINE_A + 5}:3" // on 'return'
 ];
 
 var tests = <IsolateTest>[
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 016356d..62d0044 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -566,10 +566,6 @@
         DropFunctions();
         DropFields();
         TraceTypesFromRetainedClasses();
-        DropTypes();
-        DropFunctionTypes();
-        DropTypeParameters();
-        DropTypeArguments();
 
         // Clear these before dropping classes as they may hold onto otherwise
         // dead instances of classes we will remove or otherwise unused symbols.
@@ -2275,163 +2271,6 @@
          StubCode::TopTypeTypeTest().EntryPoint());
 }
 
-void Precompiler::DropTypes() {
-  ObjectStore* object_store = IG->object_store();
-  GrowableObjectArray& retained_types =
-      GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
-  Array& types_array = Array::Handle(Z);
-  Type& type = Type::Handle(Z);
-  // First drop all the types that are not referenced.
-  {
-    CanonicalTypeSet types_table(Z, object_store->canonical_types());
-    types_array = HashTables::ToArray(types_table, false);
-    for (intptr_t i = 0; i < types_array.Length(); i++) {
-      type ^= types_array.At(i);
-      bool retain = types_to_retain_.HasKey(&type);
-      if (retain) {
-        retained_types.Add(type);
-      } else {
-        type.ClearCanonical();
-        dropped_type_count_++;
-      }
-    }
-    types_table.Release();
-  }
-
-  // Now construct a new type table and save in the object store.
-  const intptr_t dict_size =
-      Utils::RoundUpToPowerOfTwo(retained_types.Length() * 4 / 3);
-  types_array = HashTables::New<CanonicalTypeSet>(dict_size, Heap::kOld);
-  CanonicalTypeSet types_table(Z, types_array.ptr());
-  bool present;
-  for (intptr_t i = 0; i < retained_types.Length(); i++) {
-    type ^= retained_types.At(i);
-    present = types_table.Insert(type);
-    ASSERT(!present);
-  }
-  object_store->set_canonical_types(types_table.Release());
-}
-
-void Precompiler::DropFunctionTypes() {
-  ObjectStore* object_store = IG->object_store();
-  GrowableObjectArray& retained_types =
-      GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
-  Array& types_array = Array::Handle(Z);
-  FunctionType& type = FunctionType::Handle(Z);
-  // First drop all the function types that are not referenced.
-  {
-    CanonicalFunctionTypeSet types_table(
-        Z, object_store->canonical_function_types());
-    types_array = HashTables::ToArray(types_table, false);
-    for (intptr_t i = 0; i < types_array.Length(); i++) {
-      type ^= types_array.At(i);
-      bool retain = functiontypes_to_retain_.HasKey(&type);
-      if (retain) {
-        retained_types.Add(type);
-      } else {
-        type.ClearCanonical();
-        dropped_functiontype_count_++;
-      }
-    }
-    types_table.Release();
-  }
-
-  // Now construct a new function type table and save in the object store.
-  const intptr_t dict_size =
-      Utils::RoundUpToPowerOfTwo(retained_types.Length() * 4 / 3);
-  types_array =
-      HashTables::New<CanonicalFunctionTypeSet>(dict_size, Heap::kOld);
-  CanonicalFunctionTypeSet types_table(Z, types_array.ptr());
-  bool present;
-  for (intptr_t i = 0; i < retained_types.Length(); i++) {
-    type ^= retained_types.At(i);
-    present = types_table.Insert(type);
-    ASSERT(!present);
-  }
-  object_store->set_canonical_function_types(types_table.Release());
-}
-
-void Precompiler::DropTypeParameters() {
-  ObjectStore* object_store = IG->object_store();
-  GrowableObjectArray& retained_typeparams =
-      GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
-  Array& typeparams_array = Array::Handle(Z);
-  TypeParameter& typeparam = TypeParameter::Handle(Z);
-  // First drop all the type parameters that are not referenced.
-  // Note that we only visit 'free-floating' type parameters and not
-  // declarations of type parameters contained in the 'type_parameters'
-  // array in generic classes and functions.
-  {
-    CanonicalTypeParameterSet typeparams_table(
-        Z, object_store->canonical_type_parameters());
-    typeparams_array = HashTables::ToArray(typeparams_table, false);
-    for (intptr_t i = 0; i < typeparams_array.Length(); i++) {
-      typeparam ^= typeparams_array.At(i);
-      bool retain = typeparams_to_retain_.HasKey(&typeparam);
-      if (retain) {
-        retained_typeparams.Add(typeparam);
-      } else {
-        typeparam.ClearCanonical();
-        dropped_typeparam_count_++;
-      }
-    }
-    typeparams_table.Release();
-  }
-
-  // Now construct a new type parameter table and save in the object store.
-  const intptr_t dict_size =
-      Utils::RoundUpToPowerOfTwo(retained_typeparams.Length() * 4 / 3);
-  typeparams_array =
-      HashTables::New<CanonicalTypeParameterSet>(dict_size, Heap::kOld);
-  CanonicalTypeParameterSet typeparams_table(Z, typeparams_array.ptr());
-  bool present;
-  for (intptr_t i = 0; i < retained_typeparams.Length(); i++) {
-    typeparam ^= retained_typeparams.At(i);
-    present = typeparams_table.Insert(typeparam);
-    ASSERT(!present);
-  }
-  object_store->set_canonical_type_parameters(typeparams_table.Release());
-}
-
-void Precompiler::DropTypeArguments() {
-  ObjectStore* object_store = IG->object_store();
-  Array& typeargs_array = Array::Handle(Z);
-  GrowableObjectArray& retained_typeargs =
-      GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
-  TypeArguments& typeargs = TypeArguments::Handle(Z);
-  // First drop all the type arguments that are not referenced.
-  {
-    CanonicalTypeArgumentsSet typeargs_table(
-        Z, object_store->canonical_type_arguments());
-    typeargs_array = HashTables::ToArray(typeargs_table, false);
-    for (intptr_t i = 0; i < typeargs_array.Length(); i++) {
-      typeargs ^= typeargs_array.At(i);
-      bool retain = typeargs_to_retain_.HasKey(&typeargs);
-      if (retain) {
-        retained_typeargs.Add(typeargs);
-      } else {
-        typeargs.ClearCanonical();
-        dropped_typearg_count_++;
-      }
-    }
-    typeargs_table.Release();
-  }
-
-  // Now construct a new type arguments table and save in the object store.
-  const intptr_t dict_size =
-      Utils::RoundUpToPowerOfTwo(retained_typeargs.Length() * 4 / 3);
-  typeargs_array =
-      HashTables::New<CanonicalTypeArgumentsSet>(dict_size, Heap::kOld);
-  CanonicalTypeArgumentsSet typeargs_table(Z, typeargs_array.ptr());
-  bool present;
-  for (intptr_t i = 0; i < retained_typeargs.Length(); i++) {
-    typeargs ^= retained_typeargs.At(i);
-    present = typeargs_table.Insert(typeargs);
-    ASSERT(!present);
-  }
-  object_store->set_canonical_type_arguments(typeargs_table.Release());
-}
-
 void Precompiler::TraceTypesFromRetainedClasses() {
   auto& lib = Library::Handle(Z);
   auto& cls = Class::Handle(Z);
diff --git a/runtime/vm/compiler/aot/precompiler.h b/runtime/vm/compiler/aot/precompiler.h
index c5d14fc..049a12a 100644
--- a/runtime/vm/compiler/aot/precompiler.h
+++ b/runtime/vm/compiler/aot/precompiler.h
@@ -334,10 +334,6 @@
   void DropFunctions();
   void DropFields();
   void TraceTypesFromRetainedClasses();
-  void DropTypes();
-  void DropFunctionTypes();
-  void DropTypeParameters();
-  void DropTypeArguments();
   void DropMetadata();
   void DropLibraryEntries();
   void DropClasses();
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 228018f..a36b5d4 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -17,8 +17,8 @@
   V(Object, Object., ObjectConstructor, 0xab6d6cfa)                            \
   V(List, ., ListFactory, 0xbc820cf9)                                          \
   V(_List, ., ObjectArrayAllocate, 0xd693eee6)                                 \
-  V(_List, []=, ObjectArraySetIndexed, 0xac001598)                             \
-  V(_GrowableList, []=, GrowableArraySetIndexed, 0xac001598)                   \
+  V(_List, []=, ObjectArraySetIndexed, 0xd7b48abc)                             \
+  V(_GrowableList, []=, GrowableArraySetIndexed, 0xd7b48abc)                   \
   V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x1623dc34)                    \
   V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x177ffe2a)                  \
   V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0x2e40964f)                  \
@@ -43,7 +43,7 @@
   V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x2359f8d2)              \
   V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x38c6295a)          \
   V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0x5ce9025b)              \
-  V(ByteData, ., ByteDataFactory, 0xd12ef748)                                  \
+  V(ByteData, ., ByteDataFactory, 0x8a8b07a8)                                  \
   V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0x60cef22c)   \
   V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0xb9d15ffa)          \
   V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0x60cef22c) \
@@ -78,19 +78,19 @@
   V(Float32x4List, ., TypedData_Float32x4Array_factory, 0x0a7d7b88)            \
   V(Int32x4List, ., TypedData_Int32x4Array_factory, 0x5a17b46e)                \
   V(Float64x2List, ., TypedData_Float64x2Array_factory, 0xeccaff6a)            \
-  V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x6f65a4d0)                 \
+  V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x00fc4650)                 \
   V(::, copyRangeFromUint8ListToOneByteString,                                 \
-    CopyRangeFromUint8ListToOneByteString, 0x8302f9d9)                         \
-  V(_StringBase, _interpolate, StringBaseInterpolate, 0xec019c89)              \
+    CopyRangeFromUint8ListToOneByteString, 0x0df019c5)                         \
+  V(_StringBase, _interpolate, StringBaseInterpolate, 0xea1eac09)              \
   V(_IntegerImplementation, toDouble, IntegerToDouble, 0x97728b46)             \
   V(_Double, _add, DoubleAdd, 0xea666327)                                      \
   V(_Double, _sub, DoubleSub, 0x28474c2e)                                      \
   V(_Double, _mul, DoubleMul, 0x1f98c76c)                                      \
   V(_Double, _div, DoubleDiv, 0x287d3791)                                      \
-  V(::, min, MathMin, 0x1cee3d43)                                              \
-  V(::, max, MathMax, 0xbf7a293e)                                              \
-  V(::, _doublePow, MathDoublePow, 0x701a00c4)                                 \
-  V(::, _intPow, MathIntPow, 0x9e2bb83a)                                       \
+  V(::, min, MathMin, 0x504a28df)                                              \
+  V(::, max, MathMax, 0xead7161a)                                              \
+  V(::, _doublePow, MathDoublePow, 0x989f3334)                                 \
+  V(::, _intPow, MathIntPow, 0x68b6021e)                                       \
   V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x1845792b)        \
   V(Float32x4, Float32x4.zero, Float32x4Zero, 0xd3b64002)                      \
   V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x13a552c3)                    \
@@ -162,7 +162,7 @@
   V(_WeakProperty, set:key, WeakProperty_setKey, 0x963a095f)                   \
   V(_WeakProperty, get:value, WeakProperty_getValue, 0xd2f28aae)               \
   V(_WeakProperty, set:value, WeakProperty_setValue, 0x8b2bafab)               \
-  V(::, _classRangeCheck, ClassRangeCheck, 0x5fd51e68)                         \
+  V(::, _classRangeCheck, ClassRangeCheck, 0x00269620)                         \
   V(::, _abi, FfiAbi, 0x7c4ab775)                                              \
   V(::, _asFunctionInternal, FfiAsFunctionInternal, 0xbbcb235a)                \
   V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0x3ff5ae9c)        \
@@ -198,41 +198,41 @@
   V(::, _fromAddress, FfiFromAddress, 0xfd8cb1cc)                              \
   V(Pointer, get:address, FfiGetAddress, 0x7cde87be)                           \
   V(::, reachabilityFence, ReachabilityFence, 0x619235c1)                      \
-  V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x4983e111)                          \
-  V(_Future, timeout, FutureTimeout, 0xc83eaf79)                               \
-  V(Future, wait, FutureWait, 0xc71e731d)                                      \
-  V(_RootZone, runUnary, RootZoneRunUnary, 0x966a802c)                         \
-  V(_FutureListener, handleValue, FutureListenerHandleValue, 0x165b47c4)       \
+  V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x1dcaf73d)                          \
+  V(_Future, timeout, FutureTimeout, 0x73041520)                               \
+  V(Future, wait, FutureWait, 0xf0ce45c3)                                      \
+  V(_RootZone, runUnary, RootZoneRunUnary, 0xa22248b6)                         \
+  V(_FutureListener, handleValue, FutureListenerHandleValue, 0x438115a8)       \
   V(::, has63BitSmis, Has63BitSmis, 0xf61b5ab2)                                \
 
 // List of intrinsics:
 // (class-name, function-name, intrinsification method, fingerprint).
 #define CORE_LIB_INTRINSIC_LIST(V)                                             \
   V(_Smi, get:bitLength, Smi_bitLength, 0x7ab50ceb)                            \
-  V(_BigIntImpl, _lsh, Bigint_lsh, 0x3f8b105e)                                 \
-  V(_BigIntImpl, _rsh, Bigint_rsh, 0x117ed3f3)                                 \
-  V(_BigIntImpl, _absAdd, Bigint_absAdd, 0xd55235d1)                           \
-  V(_BigIntImpl, _absSub, Bigint_absSub, 0xe4a9dacf)                           \
-  V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0x6dab2009)                           \
-  V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0x4ea2b411)                           \
+  V(_BigIntImpl, _lsh, Bigint_lsh, 0x5de6ab16)                                 \
+  V(_BigIntImpl, _rsh, Bigint_rsh, 0xa8090d4f)                                 \
+  V(_BigIntImpl, _absAdd, Bigint_absAdd, 0xdc2a8a75)                           \
+  V(_BigIntImpl, _absSub, Bigint_absSub, 0x23653a4f)                           \
+  V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0x08fc5919)                           \
+  V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0xd1b6bf41)                           \
   V(_BigIntImpl, _estimateQuotientDigit, Bigint_estimateQuotientDigit,         \
-    0x898ea14c)                                                                \
-  V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x0d038dd0)        \
-  V(_Double, >, Double_greaterThan, 0xe450adaf)                                \
-  V(_Double, >=, Double_greaterEqualThan, 0xbc280c13)                          \
-  V(_Double, <, Double_lessThan, 0x39643178)                                   \
-  V(_Double, <=, Double_lessEqualThan, 0x73d2a9f5)                             \
-  V(_Double, ==, Double_equal, 0xaca03d47)                                     \
-  V(_Double, +, Double_add, 0x11250707)                                        \
-  V(_Double, -, Double_sub, 0x04121358)                                        \
-  V(_Double, *, Double_mul, 0x45991d55)                                        \
-  V(_Double, /, Double_div, 0x3bc7ab91)                                        \
+    0x3b2a5ba4)                                                                \
+  V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0xc1c66bf4)        \
+  V(_Double, >, Double_greaterThan, 0x9872cc67)                                \
+  V(_Double, >=, Double_greaterEqualThan, 0xfecba6b3)                          \
+  V(_Double, <, Double_lessThan, 0xf07a87d4)                                   \
+  V(_Double, <=, Double_lessEqualThan, 0xb6764495)                             \
+  V(_Double, ==, Double_equal, 0xa91c918f)                                     \
+  V(_Double, +, Double_add, 0xc54725bf)                                        \
+  V(_Double, -, Double_sub, 0xb8343210)                                        \
+  V(_Double, *, Double_mul, 0xf9bb3c0d)                                        \
+  V(_Double, /, Double_div, 0xefe9ca49)                                        \
   V(_Double, get:hashCode, Double_hashCode, 0x75e0d093)                        \
   V(_Double, get:_identityHashCode, Double_identityHash, 0x47a56551)           \
   V(_Double, get:isNaN, Double_getIsNaN, 0xd4890713)                           \
   V(_Double, get:isInfinite, Double_getIsInfinite, 0xc4facbd2)                 \
   V(_Double, get:isNegative, Double_getIsNegative, 0xd4715091)                 \
-  V(_Double, _mulFromInteger, Double_mulFromInteger, 0xf9e516ab)               \
+  V(_Double, _mulFromInteger, Double_mulFromInteger, 0x0a50d2cf)               \
   V(_Double, .fromInteger, DoubleFromInteger, 0x7d0fd999)                      \
   V(_GrowableList, ._withData, GrowableArray_Allocate, 0xa32d060b)             \
   V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0x9911d549)                   \
@@ -242,8 +242,8 @@
   V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xce4e6295)       \
   V(_StringBase, get:hashCode, String_getHashCode, 0x75e0d454)                 \
   V(_StringBase, get:_identityHashCode, String_identityHash, 0x47a56912)       \
-  V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0x9ce63f77)                   \
-  V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0x03fdc6ce)    \
+  V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0xfecd3cf3)                   \
+  V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0x87094a2a)    \
   V(_StringBase, [], StringBaseCharAt, 0xd06fc6bf)                             \
   V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0x75e0d454)       \
   V(_OneByteString, _substringUncheckedNative,                                 \
@@ -258,66 +258,66 @@
   V(::, _setHashIfNotSetYet, Object_setHashIfNotSetYet, 0x4e17c2f5)            \
 
 #define CORE_INTEGER_LIB_INTRINSIC_LIST(V)                                     \
-  V(_IntegerImplementation, >, Integer_greaterThan, 0x402b12df)                \
-  V(_IntegerImplementation, ==, Integer_equal, 0x509c9146)                     \
+  V(_IntegerImplementation, >, Integer_greaterThan, 0xf741693b)                \
+  V(_IntegerImplementation, ==, Integer_equal, 0xa8aba26a)                     \
   V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger,           \
     0x710f18c2)                                                                \
-  V(_IntegerImplementation, <, Integer_lessThan, 0x39643178)                   \
-  V(_IntegerImplementation, <=, Integer_lessEqualThan, 0x73d2a9f5)             \
-  V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0xbc280c13)          \
-  V(_IntegerImplementation, <<, Integer_shl, 0x766f04a6)                       \
+  V(_IntegerImplementation, <, Integer_lessThan, 0xf07a87d4)                   \
+  V(_IntegerImplementation, <=, Integer_lessEqualThan, 0xb6764495)             \
+  V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0xfecba6b3)          \
+  V(_IntegerImplementation, <<, Integer_shl, 0x2d855b02)                       \
   V(_Double, toInt, DoubleToInteger, 0x676f1ce8)                               \
 
 #define MATH_LIB_INTRINSIC_LIST(V)                                             \
-  V(::, sqrt, MathSqrt, 0x58c2a87e)                                            \
+  V(::, sqrt, MathSqrt, 0x1c9a16a2)                                            \
   V(_Random, _nextState, Random_nextState, 0x7207677d)                         \
 
 #define GRAPH_MATH_LIB_INTRINSIC_LIST(V)                                       \
-  V(::, sin, MathSin, 0xf3c67be5)                                              \
-  V(::, cos, MathCos, 0xbdcdaf99)                                              \
-  V(::, tan, MathTan, 0xa0e4e2cf)                                              \
-  V(::, asin, MathAsin, 0xb94f82b0)                                            \
-  V(::, acos, MathAcos, 0xffb03167)                                            \
-  V(::, atan, MathAtan, 0xf1ecb41a)                                            \
-  V(::, atan2, MathAtan2, 0xff585505)                                          \
-  V(::, exp, MathExp, 0xbb87ac43)                                              \
-  V(::, log, MathLog, 0x27ec861f)                                              \
+  V(::, sin, MathSin, 0xb79dea09)                                              \
+  V(::, cos, MathCos, 0x81a51dbd)                                              \
+  V(::, tan, MathTan, 0x64bc50f3)                                              \
+  V(::, asin, MathAsin, 0x7d26f0d4)                                            \
+  V(::, acos, MathAcos, 0xc3879f8b)                                            \
+  V(::, atan, MathAtan, 0xb5c4223e)                                            \
+  V(::, atan2, MathAtan2, 0xc03b8b85)                                          \
+  V(::, exp, MathExp, 0x7f5f1a67)                                              \
+  V(::, log, MathLog, 0xebc3f443)                                              \
 
 #define GRAPH_TYPED_DATA_INTRINSICS_LIST(V)                                    \
-  V(_Int8List, [], Int8ArrayGetIndexed, 0x281e2e42)                            \
-  V(_Int8List, []=, Int8ArraySetIndexed, 0x7eb45f63)                           \
-  V(_Uint8List, [], Uint8ArrayGetIndexed, 0x8d96b202)                          \
-  V(_Uint8List, []=, Uint8ArraySetIndexed, 0xcb436b27)                         \
-  V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0x8d96b202)         \
-  V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0xcb436b27)        \
-  V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0x8d96b202)            \
-  V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0xc14320c7)           \
+  V(_Int8List, [], Int8ArrayGetIndexed, 0x35f3fab6)                            \
+  V(_Int8List, []=, Int8ArraySetIndexed, 0x6e4fdaa7)                           \
+  V(_Uint8List, [], Uint8ArrayGetIndexed, 0x9b6c7e76)                          \
+  V(_Uint8List, []=, Uint8ArraySetIndexed, 0xbadee66b)                         \
+  V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0x9b6c7e76)         \
+  V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0xbadee66b)        \
+  V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0x9b6c7e76)            \
+  V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0xb0de9c0b)           \
   V(_ExternalUint8ClampedArray, [], ExternalUint8ClampedArrayGetIndexed,       \
-    0x8d96b202)                                                                \
+    0x9b6c7e76)                                                                \
   V(_ExternalUint8ClampedArray, []=, ExternalUint8ClampedArraySetIndexed,      \
-    0xc14320c7)                                                                \
-  V(_Int16List, [], Int16ArrayGetIndexed, 0x081c8da2)                          \
-  V(_Int16List, []=, Int16ArraySetIndexed, 0x0f3422ee)                         \
-  V(_Uint16List, [], Uint16ArrayGetIndexed, 0xebf569a2)                        \
-  V(_Uint16List, []=, Uint16ArraySetIndexed, 0xf776ca65)                       \
-  V(_Int32List, [], Int32ArrayGetIndexed, 0x09ba3341)                          \
-  V(_Int32List, []=, Int32ArraySetIndexed, 0xed689f8d)                         \
-  V(_Uint32List, [], Uint32ArrayGetIndexed, 0x590c98e1)                        \
-  V(_Uint32List, []=, Uint32ArraySetIndexed, 0xd90c140d)                       \
-  V(_Int64List, [], Int64ArrayGetIndexed, 0x42828d81)                          \
-  V(_Int64List, []=, Int64ArraySetIndexed, 0xd7ba387b)                         \
-  V(_Uint64List, [], Uint64ArrayGetIndexed, 0x7f46f301)                        \
-  V(_Uint64List, []=, Uint64ArraySetIndexed, 0xa31ba9b3)                       \
-  V(_Float64List, [], Float64ArrayGetIndexed, 0x5fa1c248)                      \
-  V(_Float64List, []=, Float64ArraySetIndexed, 0x6ad3ba59)                     \
-  V(_Float32List, [], Float32ArrayGetIndexed, 0x359fc368)                      \
-  V(_Float32List, []=, Float32ArraySetIndexed, 0xc6221787)                     \
-  V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xdf87c0c1)                  \
-  V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0x889551f4)                 \
-  V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0x75703b39)                      \
-  V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x952ee084)                     \
-  V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0xdc2fab6b)                  \
-  V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x0884bf1c)                 \
+    0xb0de9c0b)                                                                \
+  V(_Int16List, [], Int16ArrayGetIndexed, 0x15f25a16)                          \
+  V(_Int16List, []=, Int16ArraySetIndexed, 0xfecf9e32)                         \
+  V(_Uint16List, [], Uint16ArrayGetIndexed, 0xf9cb3616)                        \
+  V(_Uint16List, []=, Uint16ArraySetIndexed, 0xe71245a9)                       \
+  V(_Int32List, [], Int32ArrayGetIndexed, 0x178fffb5)                          \
+  V(_Int32List, []=, Int32ArraySetIndexed, 0xdd041ad1)                         \
+  V(_Uint32List, [], Uint32ArrayGetIndexed, 0x66e26555)                        \
+  V(_Uint32List, []=, Uint32ArraySetIndexed, 0xc8a78f51)                       \
+  V(_Int64List, [], Int64ArrayGetIndexed, 0x505859f5)                          \
+  V(_Int64List, []=, Int64ArraySetIndexed, 0x5a2e23b7)                         \
+  V(_Uint64List, [], Uint64ArrayGetIndexed, 0x8d1cbf75)                        \
+  V(_Uint64List, []=, Uint64ArraySetIndexed, 0x258f94ef)                       \
+  V(_Float64List, [], Float64ArrayGetIndexed, 0x6d778ebc)                      \
+  V(_Float64List, []=, Float64ArraySetIndexed, 0xed47a595)                     \
+  V(_Float32List, [], Float32ArrayGetIndexed, 0x43758fdc)                      \
+  V(_Float32List, []=, Float32ArraySetIndexed, 0x489602c3)                     \
+  V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xed5d8d35)                  \
+  V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0x0b093d30)                 \
+  V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0x834607ad)                      \
+  V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x17a2cbc0)                     \
+  V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0xea0577df)                  \
+  V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x8af8aa58)                 \
   V(_TypedList, get:length, TypedListLength, 0x5850f06b)                       \
   V(_TypedListView, get:length, TypedListViewLength, 0x5850f06b)               \
   V(_ByteDataView, get:length, ByteDataViewLength, 0x5850f06b)                 \
@@ -354,17 +354,17 @@
   V(_ExternalTwoByteString, codeUnitAt, ExternalTwoByteStringCodeUnitAt,       \
     0x17f90910)                                                                \
   V(_Smi, ~, Smi_bitNegate, 0x8254f8dc)                                        \
-  V(_IntegerImplementation, +, Integer_add, 0xd5610450)                        \
-  V(_IntegerImplementation, -, Integer_sub, 0xc96a1341)                        \
-  V(_IntegerImplementation, *, Integer_mul, 0xacd967de)                        \
-  V(_IntegerImplementation, %, Integer_mod, 0xfcf7cfd4)                        \
-  V(_IntegerImplementation, ~/, Integer_truncDivide, 0xdda4a240)               \
-  V(_IntegerImplementation, unary-, Integer_negate, 0xf7a9aa57)                \
-  V(_IntegerImplementation, &, Integer_bitAnd, 0x8b9d7ff4)                     \
-  V(_IntegerImplementation, |, Integer_bitOr, 0x8f47f9ac)                      \
-  V(_IntegerImplementation, ^, Integer_bitXor, 0xd838c2b3)                     \
-  V(_IntegerImplementation, >>, Integer_sar, 0x931fbf4b)                       \
-  V(_IntegerImplementation, >>>, Integer_shr, 0x7495fbad)                      \
+  V(_IntegerImplementation, +, Integer_add, 0x8c775aac)                        \
+  V(_IntegerImplementation, -, Integer_sub, 0x8080699d)                        \
+  V(_IntegerImplementation, *, Integer_mul, 0x63efbe3a)                        \
+  V(_IntegerImplementation, %, Integer_mod, 0x93a8d914)                        \
+  V(_IntegerImplementation, ~/, Integer_truncDivide, 0x4c5b2b80)               \
+  V(_IntegerImplementation, unary-, Integer_negate, 0xaec000b3)                \
+  V(_IntegerImplementation, &, Integer_bitAnd, 0x42b3d650)                     \
+  V(_IntegerImplementation, |, Integer_bitOr, 0x465e5008)                      \
+  V(_IntegerImplementation, ^, Integer_bitXor, 0x8f4f190f)                     \
+  V(_IntegerImplementation, >>, Integer_sar, 0x4a3615a7)                       \
+  V(_IntegerImplementation, >>>, Integer_shr, 0x2bac5209)                      \
   V(_Double, unary-, DoubleFlipSignBit, 0x3d39082b)                            \
   V(_Double, truncateToDouble, DoubleTruncate, 0x62d48298)                     \
   V(_Double, roundToDouble, DoubleRound, 0x5649c63f)                           \
@@ -438,14 +438,14 @@
 //  result-cid, fingerprint).
 #define RECOGNIZED_LIST_FACTORY_LIST(V)                                        \
   V(_ListFactory, _List, ., kArrayCid, 0xd693eee6)                             \
-  V(_ListFilledFactory, _List, .filled, kArrayCid, 0x4c76526a)                 \
-  V(_ListGenerateFactory, _List, .generate, kArrayCid, 0x4f848337)             \
+  V(_ListFilledFactory, _List, .filled, kArrayCid, 0x7f29060d)                 \
+  V(_ListGenerateFactory, _List, .generate, kArrayCid, 0xa1e6b785)             \
   V(_GrowableListFactory, _GrowableList, ., kGrowableObjectArrayCid,           \
-    0x434de9b9)                                                                \
+    0xc1b55e71)                                                                \
   V(_GrowableListFilledFactory, _GrowableList, .filled,                        \
-    kGrowableObjectArrayCid, 0x261b3cc2)                                       \
+    kGrowableObjectArrayCid, 0x37d0dc65)                                       \
   V(_GrowableListGenerateFactory, _GrowableList, .generate,                    \
-    kGrowableObjectArrayCid, 0x0c7be78f)                                       \
+    kGrowableObjectArrayCid, 0xc0c5682d)                                       \
   V(_GrowableListWithData, _GrowableList, ._withData, kGrowableObjectArrayCid, \
     0xa32d060b)                                                                \
   V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x660dd888)        \
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 5417f6d..324a031 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -3545,7 +3545,7 @@
            "#3      _bar (%1$s:16:3)\n"
            "#4      MyClass.field (%1$s:25:5)\n"
            "#5      MyClass.foo.fooHelper (%1$s:30:7)\n"
-           "#6      MyClass.foo (%1$s:32:14)\n"
+           "#6      MyClass.foo (%1$s:32:5)\n"
            "#7      new MyClass.<anonymous closure> (%1$s:21:12)\n"
            "#8      new MyClass (%1$s:21:18)\n"
            "#9      main.<anonymous closure> (%1$s:37:14)\n"
diff --git a/runtime/vm/source_report_test.cc b/runtime/vm/source_report_test.cc
index 44ae5e1..9bc1aac 100644
--- a/runtime/vm/source_report_test.cc
+++ b/runtime/vm/source_report_test.cc
@@ -311,7 +311,7 @@
 
       // One range compiled with one hit (helper0).
       "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":73,\"compiled\":true,"
-      "\"coverage\":{\"hits\":[0,69],\"misses\":[]}},"
+      "\"coverage\":{\"hits\":[0],\"misses\":[]}},"
 
       // One range not compiled (helper1).
       "{\"scriptIndex\":0,\"startPos\":75,\"endPos\":86,\"compiled\":false},"
@@ -370,7 +370,7 @@
 
       // One range compiled with one hit (helper0).
       "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":73,\"compiled\":true,"
-      "\"coverage\":{\"hits\":[0,69],\"misses\":[]}},"
+      "\"coverage\":{\"hits\":[0],\"misses\":[]}},"
 
       // Nested range compiled (nestedHelper0).
       "{\"scriptIndex\":0,\"startPos\":14,\"endPos\":31,\"compiled\":true,"
diff --git a/tests/language/async/congruence_local_test.dart b/tests/language/async/congruence_local_test.dart
index 15e27a2..e3ba8e8 100644
--- a/tests/language/async/congruence_local_test.dart
+++ b/tests/language/async/congruence_local_test.dart
@@ -101,7 +101,7 @@
     Future<int> v2 = f_inferred_futureObject();
     //               ^^^^^^^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
-    //                                      ^
+    //               ^
     // [cfe] A value of type 'Future<Object>' can't be assigned to a variable of type 'Future<int>'.
 
     // Check that f_inferred_A's static return type is `Future<A>`, by verifying
@@ -111,7 +111,7 @@
     Future<B> v4 = f_inferred_A();
     //             ^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
-    //                         ^
+    //             ^
     // [cfe] A value of type 'Future<A>' can't be assigned to a variable of type 'Future<B>'.
   }
 
diff --git a/tests/language/const_functions/const_functions_closures_error_test.dart b/tests/language/const_functions/const_functions_closures_error_test.dart
index 1383983..d09eb06 100644
--- a/tests/language/const_functions/const_functions_closures_error_test.dart
+++ b/tests/language/const_functions/const_functions_closures_error_test.dart
@@ -76,6 +76,6 @@
   const z = a();
   //        ^^^
   // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
-  //         ^
+  //        ^
   // [cfe] Constant evaluation error:
 }
diff --git a/tests/language_2/async/congruence_local_test.dart b/tests/language_2/async/congruence_local_test.dart
index 7a9d30c..1ae9dfa 100644
--- a/tests/language_2/async/congruence_local_test.dart
+++ b/tests/language_2/async/congruence_local_test.dart
@@ -105,7 +105,7 @@
     int v2 = f_inferred_futureObject();
     //       ^^^^^^^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
-    //                              ^
+    //       ^
     // [cfe] A value of type 'Future<Object>' can't be assigned to a variable of type 'int'.
 
     // Check that f_inferred_A's static return type is `Future<A>`, by verifying
@@ -115,7 +115,7 @@
     Future<int> v4 = f_inferred_A();
     //               ^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
-    //                           ^
+    //               ^
     // [cfe] A value of type 'Future<A>' can't be assigned to a variable of type 'Future<int>'.
   }
 
diff --git a/tools/VERSION b/tools/VERSION
index 41a77e2..b260b95 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 133
+PRERELEASE 134
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/generate_package_config.dart b/tools/generate_package_config.dart
index f8791cd..071782f 100644
--- a/tools/generate_package_config.dart
+++ b/tools/generate_package_config.dart
@@ -60,6 +60,7 @@
     packageDirectory('third_party/devtools/devtools_server'),
     packageDirectory('third_party/devtools/devtools_shared'),
     packageDirectory('third_party/pkg/protobuf/protobuf'),
+    packageDirectory('third_party/pkg/webdev/frontend_server_client'),
     packageDirectory('tools/package_deps'),
   ];